#include #include #define TAILLE_PILE 100 void imprime(const int *pile, int niveau) { int index; for (index= 0; index < niveau; index++) printf("%d ", pile[index]); putchar('\n'); } int calcule(int *pile, int niveau, const char *chaine) { int nombre; if (sscanf(chaine, "%d", &nombre) == 1) { if (niveau < TAILLE_PILE) { pile[niveau]= nombre; return niveau + 1; } else { printf("Pas assez de place dans la pile\n"); return -1; } } else if (strcmp(chaine, "p") == 0) { imprime(pile, niveau); return niveau; } else if (niveau > 1) { if (strcmp(chaine, "+") == 0) pile[niveau - 2]= pile[niveau - 2] + pile[niveau - 1]; else if (strcmp(chaine, "-") == 0) pile[niveau - 2]= pile[niveau - 2] - pile[niveau - 1]; else if (strcmp(chaine, "x") == 0) pile[niveau - 2]= pile[niveau - 2] * pile[niveau - 1]; else if (strcmp(chaine, "/") == 0) pile[niveau - 2]= pile[niveau - 2] / pile[niveau - 1]; else { printf("Operation inconnue: %s\n", chaine); return -1; } return niveau - 1; } else return -1; } int main(int argc, char **argv) { int pile[TAILLE_PILE]; int niveau= 0; argc--; argv++; while (argc > 0 && niveau != -1) { niveau= calcule(pile, niveau, *argv); argv++; argc--; } if (niveau != -1) { imprime(pile, niveau); return EXIT_SUCCESS; } else return EXIT_FAILURE; }