/* TP3 24/10/02 http://www.Software-DS.com Attention, la procedure 'traiter' est differente de celle du prof pour les parametres En effet, la procedure du prof ne fonctionne pas, la mienne fonctionne :-) */ #include <stdio.h> #include "pile.h" pile opd,opt; /* Declaration globale, ainsi on a plus besoin de transmettre ces variables par la procedure traiter :-))) */ int evaluer(int y,int x,int op); void horner(char E[100],int *x,int *i); void traiter(char E[100],int *i); /* pile opd,pile opt); */ pile creer_pile(pile p) { p.hauteur=0; return(p); } pile empiler(pile p,elt x) { p.hauteur++; p.val[p.hauteur]=x; return(p); } pile depiler(pile p) { p.hauteur--; return(p); } elt sommet(pile p) { return(p.val[p.hauteur]); } int pile_vide(pile p) { if (p.hauteur==0) return(1); else return(0); } int evaluer(int y,int x,int operat) { switch(operat) { case 1 : return(x+y); break; case 2 : return(x-y); break; case 3 : return(x*y); break; case 4 : if (x==0){ printf("Fatal Error, division par zero impossible !\n"); return(0); } else return(x/y); default: /* Facultatif */ printf("Operateur inconnu"); return(0); } } void horner(char E[100],int *x,int *i) { *x=0; while (((E[*i])<='9') && ((E[*i])>='0')) { (*x)*=10; (*x)+=E[*i]-'0'; (*i)++; } (*i)--; } void traiter(char E[100],int *i){ /* pile opd,pile opt) { */ int x,y; switch(E[*i]){ case '(' : break; case ' ' : break; case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : horner(E,&x,i); opd=empiler(opd,x); break; case '+' : opt=empiler(opt,1); break; case '-' : opt=empiler(opt,2); break; case '*' : opt=empiler(opt,3); break; case '/' : opt=empiler(opt,4); break; case ')' : x=sommet(opd); opd=depiler(opd); y=sommet(opd); opd=depiler(opd); opd=empiler(opd,evaluer(x,y,sommet(opt))); opt=depiler(opt); break; default : printf("Caractere non gerer ! Probleme ! ERRROR !\n"); } } /* MAIN */ int main(void) { char E[100]; int i=0; /* INITIALISATION */ opd=creer_pile(opd); opt=creer_pile(opt); /* SAISIE */ printf("saisirl'expression\n"); scanf("%s",&E); /* BOUCLE PRINCIPALE */ while (E[i]!='=') { traiter(E,&i); /* opd,opt);*/ i++; } printf("\nResultat = %d\n",sommet(opd)); printf("\n©2002 All Rights Reserved to http://www.Software-DS.com\n\n"); return(0); /* ©2002 All Rights Reserved to Didier STRAUS http://www.Software-DS.com */ } |
Haut de la page - Page générée en 0.00245 sec.
|