Bonjour;
Alors voila j'ai un projet a fere qui est la creation d une mini calculette avec un arbre bianaire, ce ki permet de prendre en compte les parenthese.
Donc g créé l arbre binaire et il tien en compte de tout, c a dire lorsque je l affiche il sort parfaitement avec tous les caractere.
Mon probleme provien de ma fonction de calcule qui est une fonction recursive (enfin je pense). Car lorsque je melange 2 operateurs differents, il ne tien en compte que le premier operateur. Par exemple je pose ce calcul : ( ( 2 + 3 ) * ( 4 + 6 ) )
normalement c egal a 50, maisle resulta afficher est 15.
Donc si quelqu un aurait une solution qui me le dise.
Merci d 'avance
voici le code de ma fonction :
void calcul (arbre *a, double *R )
{
if (a->op != NULL)
{
opp = *(a->op);
calcul(a->g, R);
calcul(a->d, R);
}
else
{
if ( opp == '+' )
{
*R = *R + a->val ;
}
if ( opp == '-' )
{
*R = -*R - a->val ;
}
if ( opp == '*' )
{
if (*R == 0)
{
*R = 1;
}
*R = *R * a->val;
}
if ( opp == '/' )
{
if (*R == 0)
{
*R = 1;
}
2/ je pense que tu n'as pas compris le principe des arbres et de la récurrence.
Ce n'est pas, si on a a+b , de faire R 0+a puis R R+b
Mais c'est plutot :
Si tu as A+B :
tu calcule R1=calcul(A)
R2 = calcul(B)
puis enfin : R = R1+R2
J'espere que tu comprend ce que je veux dire.
Pour te donner un exemple, dans ton code, au lieu d'avoir
opp = *(a->op);
calcul(a->g, R);
calcul(a->d, R);
Tu dois faire :
R1 = calcul(a->g);
R2 = calcul(
a->d);
R = R1+R2;
Allez, avec ca, tu devrais t'en sortir .
Réfléchis bien aux variables, si tu garde des pointeurs, tu vas écraser
des valeurs au cours des itérations, donc ne renvoie pas de double*
mais des double.
et si op = NULL, alors tu renvoie simplement la variable.