|
bonjour a tous !!!!! voila je suis nouvelle et j'ai vraiment besoin d'aide avant ce soir c'est tres tres tres tres urgent! je voudrai que quelqu'un me traduit ce programme du c en pascal (je suis encore' debutante donc je connais pas trop le langage c) ce programme traduit une expression arithmétique en 1 expression post-fixée
#define operande 1 #define operateur 0 typedef struct {int type; union {float op_r;char op_c;}val; }composante; void saisie(void) Données et Algorithmique − P.TRAU 7.3 utilisations 32 /* marche pour toute notation puisque ne vérifie rien */ { composante x; char txt[100],*deb; char rep; init_pile(); printf("entrez opérandes (nombres) et opérateurs (+,−,*,/,C (cos),S)\n"); printf("séparés par des blancs ou virgules\n"); fflush(stdin); gets(txt); /* on lit un texte qui sera traité par après */ deb=txt; /* deb pointe le début du texte non encore traité */ do { while(*deb==' '||*deb==',') deb++; if(*deb==0)break; if(isdigit(*deb)||*deb=='.'||(*deb=='−'&&isdigit(*(deb+1)))) { x.type=operande; sscanf(deb,"%f",&(x.val.op_r)); empiler(&x); while(isdigit(*deb)||*deb=='.') deb++; /*pointer la suite*/ } else /*cas d'un opérateur */ { x.val.op_c=toupper(*(deb++)); x.type=operateur; empiler(&x); } } while(1); } float eval_post(void) { float r1,r2; composante x; if(depiler(&x)!=0) {puts("expression non postfixée");return(0);} if(x.type==operande) return(x.val.op_r); /* else inutile car les autres cas se finissent par return */ /* on traite d'abord les opérateurs unaires */ if (x.val.op_c=='C') return(cos(eval_post())); if (x.val.op_c=='S') return(sin(eval_post())); /* les deuxaires maintenant */ r2=eval_post(); r1=eval_post(); switch (x.val.op_c) { case '+':return(r1+r2); case '−':return(r1−r2); case '*':return(r1*r2); case '/':return(r1/r2); } puts("erreur (code opératoire inconnu par exemple)"); return(0); } void main(void) { saisie(); printf("l'expression postfixée vaut %6.1f\n",eval_post()); }
merci d'avance |