A voir également:
- Besoin d'aide en langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Dev-Pascal - Télécharger - Édition & Programmation
2 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 avril 2007 à 12:53
15 avril 2007 à 12:53
Salut,
L’expression (5*3/(1+4))-(7*2) s’écrit en notation post-fixée : 53*14+/72*-
Je pense qu'il vaut mieux un séparateur (un espace par exemple) pour ne pas croire qu'il s'agit de 53 mais de 5 et 3 ( si tu as 534 on va choisir quoi? 5 et 34 ou 53 et 4? :-))
Voilà une aproche pour la 2ème partie de ton exo
Le code
Le résultat
L’expression (5*3/(1+4))-(7*2) s’écrit en notation post-fixée : 53*14+/72*-
Je pense qu'il vaut mieux un séparateur (un espace par exemple) pour ne pas croire qu'il s'agit de 53 mais de 5 et 3 ( si tu as 534 on va choisir quoi? 5 et 34 ou 53 et 4? :-))
Voilà une aproche pour la 2ème partie de ton exo
Le code
/*--------------------------------------------------*\ dim 15 avr 2007 calculatrice.c Sujet:L'expression (5*3/(1+4))-(7*2) s'écrit en notation post-fixée : 5 3 * 1 4 + / 7 2 * - \*--------------------------------------------------*/ #include<stdio.h> #include<stdlib.h> #define TAILLE 100 #define NUMERIQUE 0 int lire_op(char *); void empiler(double); double depiler(void); int main() { int nb; double op2; char s[TAILLE]; while((nb = lire_op(s)) != EOF){ switch(nb) { case NUMERIQUE: empiler(atof(s)); break; case '+': empiler(depiler() + depiler()); break; case '-': op2 = depiler(); empiler(depiler() - op2); break; case '*': empiler(depiler() * depiler()); break; case '/': op2 = depiler(); if (op2 != 0.0) empiler(depiler() / op2); else printf("erreur: division par zéro\n"); break; case '\n': printf("\nresultat = %.2f\n",depiler()); break; default: printf("erreur: commande inconnue\n"); break; } } return 0; } #define TAILLEPILE 100 int i = 0; char pile[TAILLEPILE]; void empiler(double p){ if (i < TAILLEPILE){ pile[i++] = p; printf("empiler %.2f ",p); }else printf("error: il n'y a plus de place dans la pile\n"); } double depiler(void){ if(i > 0){ printf("depiler %.2f ",(double) pile[--i]); return pile[i]; }else{ printf("erreur: la pile est vide\n"); return 0.0; } } #include <ctype.h> int lire_op(char *s){ int i=0,c; while((s[0] = c = getchar()) == ' ') ; s[1] = '\0'; if(!isdigit(c)) return c; if(isdigit(c)) while(isdigit(s[++i] = c = getchar())) ; s[i] = '\0'; return NUMERIQUE; }
Le résultat
langagec@debian:~/langagec_k_r$ ./calculatrice 5 3 * 1 4 + / 7 2 * - empiler 5.00 empiler 3.00 depiler 3.00 depiler 5.00 empiler 15.00 empiler 1.00 empiler 4.00 depiler 4.00 depiler 1.00 empiler 5.00 depiler 5.00 depiler 15.00 empiler 3.00 empiler 7.00 empiler 2.00 depiler 2.00 depiler 7.00 empiler 14.00 depiler 14.00 depiler 3.00 empiler -11.00 depiler -11.00 resultat = -11.00