Accueil     Soft. MacOSX     Soft. MacOS/PC     PHP     Python     ROMS GBA     TP d'info     DBZ-GT     Martingales     Galeries     Liens     @  

P.c

/*
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 précédente - Page générée en 0.02023 sec.
Recherche personnalisée
 

1843945 visiteurs.   ©2001-2023 All Rights Reserved to Software-DS.com
Made with a mac  
Confidentialité