Forum > C et C++ > Evaluer une expression parenthésée >

Evaluer une expression parenthésée

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Auteur Message
jeremya Posté le 21 avr 2009 16:30:53

Administrateur
Administrateur

Auteur
Auteur

Modérateur
Modérateur

Inscrit le : 08 nov 2008
Localisation : Nord-Pas-de-Calais
Emploi :
Loisirs :

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++
  1. #include <cstdio>
  2.  
  3. int expression()
  4. {
  5. int nombreLu;
  6. char carLu;
  7.  
  8. if (scanf_s("%d", &nombreLu))
  9. return nombreLu;
  10.  
  11. carLu = getchar();
  12.  
  13. if (carLu != '(')
  14. return -1;
  15.  
  16. int a = expression();
  17.  
  18. scanf_s("%c", &carLu, 1);
  19.  
  20. int b = expression();
  21.  
  22. if (getchar() != ')')
  23. return -1;
  24.  
  25. switch (carLu)
  26. {
  27. case '+':
  28. return a + b;
  29. case '-':
  30. return a - b;
  31. case '*':
  32. return a * b;
  33. case '/':
  34. return a / b;
  35. case '%':
  36. return a % b;
  37. default:
  38. return -2;
  39. }
  40. }
  41.  
  42. int main(int argc, char* argv[])
  43. {
  44. printf("%d\n", expression());
  45.  
  46. return 0;
  47. }
  48.  
Messages : 284 http://www.jeremya.ironie.org citer

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Forum > C et C++ > Evaluer une expression parenthésée >


Cette page a été générée le 18 mar 2010 21:31:34.
page d'accueil Jeremya's Web Site
jeremya.ironie.org

s'identifier

Nom d'utilisateur :
Mot de passe :

outils

qui est en ligne ?

3 visiteurs en ligne