Salut. Je suis en première année d'école d'ingénieur et en cours on me demande d'évaluer une expression complètement paranthésée grâce aux piles.
Par exemple (4*(5-2)). On utilise deux piles, une pour les nombres et une autre pour les opérandes.
1. Lorsque l'on rencontre une paranthèse ouvrante, on l'ignore.
2. Lorsque l'on rencontre une valeur numérique, on l'empile dans la pile de réels.
3. Lorsque l'on rencontre un opérateur, on l'empile dans la pile de caractères.
4. Lorsqu'on rencontre une paranthèse fermante, on dépile un opérateur, on dépile deux valeurs numérique, on effectue le calcul et on empile le nouveau résultat dans la pile de réel.
5. Une fois toute l'expression parcourue, le résultat se trouve au sommet de la pile.
Pouvez vous me dire ce qui cloche, parce que sur le papier, mon code à l'air de marcher et ça fait plusieur jour que je m'acharne dessus.
Merci beaucoup d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<locale.h>
 
void main()
{
	char tabc[4];
	float tabi[4];
	int i,j,k;
	char expression[20];
	printf("Programme-TP3 LAMOUROUX Damien (C) 3iL-A1\n");
	printf("-----------------------------------------\n\n");
	printf("Exemple: (4.5 + (-5 * 9.2))\n");
	printf("Entrez votre expression completement parenthesee:");	
	scanf("%s",&expression);
	fflush(stdin);
	i=0;
	j=0;
	k=0;
 
//-----------------------Parcours de la chaine et génération des piles-----------------
	do
	{		
			do
			{
				if((expression[i]=='0')||(expression[i]=='1')||(expression[i]=='2')||(expression[i]=='3')||(expression[i]=='4')||(expression[i]=='5')||(expression[i]=='6')||(expression[i]=='7')||(expression[i]=='8')||(expression[i]=='9'))
				{
					tabi[j]=(expression[i]-'0');
					j++;
				}
				else if(expression[i]=='+')
				{
					tabc[k]=expression[i];
					k++;
				}
				else if(expression[i]=='-')
				{
					tabc[k]=expression[i];
					k++;
				}
				else if(expression[i]=='*')
				{
					tabc[k]=expression[i];
					k++;
				}
				else if(expression[i]=='/')
				{
					tabc[k]=expression[i];
					k++;
				}
 
				i++;
 
			}while(expression[i]!=')');
 
 
//-------------------------------Calcul----------------------------------------
 
 
			if(tabc[i-1]='+')
			{
				tabi[i-2]=tabi[i-2]+tabi[i-1];
				k=k-1;;
				j=j-2;
			}
			else if(tabc[i-1]='-')
			{
				tabi[i-2]=tabi[i-2]-tabi[i-1];
				k=k-1;;
				j=j-2;
			}
			else if(tabc[i-1]='*')
			{
				tabi[i-2]=tabi[i-2]*tabi[i-1];
				k=k-1;;
				j=j-2;
			}
			else if(tabc[i-1]='/')
			{
				tabi[i-2]=tabi[i-2]/tabi[i-1];
				k=k-1;;
				j=j-2;
			}
			printf("%f\n",tabi[j]);
	}while(expression[i]!='\0');
 
 
 
//---------------------------------Affichage du résultat--------------------------
	printf("Le resultat est:%f",tabi[j]);
 
}