Decouper un code recursif

Decouper un code recursif - C - Programmation

Marsh Posté le 06-04-2011 à 15:34:13    

Bonjour,
 
Je suis en ce moment en trian de coder une fonction capable d'evaluer une expression.
 
J'ai reussi a la coder. Je cherche a decouper mon code en une ou plusieurs fonctions mais je recontre quelques problemes.
 
J'ai code cette fonction en recursif et je ne sais pas s'il est possible de la decouper.
 
Voici mon code:
 

Code :
  1. #include <stdlib.h>
  2. #include "eval_expr.h"
  3. typedef         struct s_calc
  4. {
  5.   int           l;
  6.   int           r;
  7.   char          op;
  8.   char          next_op;
  9. } t_calc;
  10. int     calc_rec(char *cal, int *left_r, char *op_r, int prio_b, char **p_calc)
  11. {
  12.   t_calc calc;
  13.   if (left_r != NULL)
  14.     calc.l = *left_r;
  15.   else
  16.     {
  17.       if (*cal == '(')
  18.         calc.l = calc_rec(cal + 1, NULL, NULL, 0, &cal);
  19.       else
  20.         calc.l = my_strtod(cal, &cal);
  21.     }
  22.   if (op_r != NULL)
  23.     calc.op = *op_r;
  24.   else
  25.     {
  26.       calc.op = *cal;
  27.       cal += 1;
  28.     }
  29.   while (calc.op != '\0' && calc.op != ')' && priorite(calc.op) > prio_b)
  30.     {
  31.       if (*cal == '(')
  32.         calc.r = calc_rec_suite(cal + 1, NULL, NULL, 0, &cal);
  33.       else
  34.         calc.r = my_strtod(cal, &cal);
  35.       calc.next_op = *cal;
  36.       cal += 1;
  37.       if (est_oper(calc.next_op) && priorite(calc.next_op) > priorite(calc.op))
  38.         calc.r = calc_rec_suite(cal, &calc.r, &calc.next_op, priorite(calc.op), &cal);
  39.       calc.l = effectuer_oper(calc.l, calc.op, calc.r);
  40.       calc.op = calc.next_op;
  41.     }
  42.   if (op_r != NULL)
  43.     *op_r = calc.next_op;
  44.   if (p_calc != NULL)
  45.     *p_calc = cal;
  46.   return (calc.l);
  47. }


 
J'aurais besoin de vous pour apprendre a bien decouper mon code.
 
Merci d'avance pour votre aide  :jap:


Message édité par jjboy91 le 06-04-2011 à 19:36:57
Reply

Marsh Posté le 06-04-2011 à 15:34:13   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed