PROBLEME
Ecrivez un programme qui lit une expression mathématique simple, et affiche le résultat de son évaluation.
Une expression est une chaîne de caractères sans espaces, qui est soit un nombre entier (qui peut être négatif), soit une chaîne contenant une parenthèse ouvrante, une expression, un opérateur, une expression, puis une parenthèse fermante.
Cinq valeurs sont possibles pour le caractère opérateur :
- L'addition : '+'.
- La soustraction : '-'.
- La multiplication : '*'.
- La division entière : '/'.
- Le modulo : '%'.
Votre programme doit impérativement utiliser une fonction récursive, et non une boucle..
CONTRAINTES
On vous garantit que chaque manipulé, que ce soit une valeur fournie dans l'entrée, ou un résultat de l'évaluation d'une sous-expression, tient dans une variable de type int en C (entier 32 bits signé).
L'expression peut contenir jusqu'à 1 million de caractères, il n'est donc pas possible de la stocker entièrement en mémoire.
CODE SOURCE
Code: C++ #include <cstdio> int expression() { int nombreLu; char carLu; if (scanf_s("%d", &nombreLu)) return nombreLu; carLu = getchar(); if (carLu != '(') return -1; int a = expression(); scanf_s("%c", &carLu, 1); int b = expression(); if (getchar() != ')') return -1; switch (carLu) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; case '%': return a % b; default: return -2; } } int main(int argc, char* argv[]) { printf("%d\n", expression()); return 0; }
|