meryben7
Messages postés4Date d'inscriptionsamedi 24 décembre 2005StatutMembreDernière intervention28 décembre 2005
-
28 déc. 2005 à 01:11
neodelphi
Messages postés442Date d'inscriptionjeudi 4 avril 2002StatutMembreDernière intervention11 août 2008
-
1 janv. 2006 à 09:52
programme en c , c'est une sorte de calculatrice
En fait il faut empiler l'expression completement parenthésée dans une pile et le but du programme c'est de nous renvoyer le resultat.
exemple: (((2+4)+(4/2))*3 )devrait me renvoyer 24
Les opérations sont sur des entiers de 0 à 9 et les opérandes +,-, /, *
Au niveau de l'empilement il n'y a pas de soucis par contre je ne sais pas vraiment comment m'y prendre pour le calcul
et il faut que je rendre le projet dans une semaine
Si vous avez des tuyaux a me filer ca serait trop cool
neodelphi
Messages postés442Date d'inscriptionjeudi 4 avril 2002StatutMembreDernière intervention11 août 2008 28 déc. 2005 à 09:54
Tu peut essayer d'analyser le premier groupe de parenthèse: tu récupère le contenu, ce qui donne:
((2+4)+(4/2))*3
Tu extrait l'opérateur (qui ne doit pas être entre des parenthèses),
donc *, puis tu traite la partie gauche et droite. Si une opérande
n'est pas directement un chiffre, tu refait le traitement pour le
nouveau groupe de parenthèse, puis calcul le résultat.
opérande 2 :
3 (c'est terminé pour l'opérande 2)
opérande 1:
((2+4)+(4/2))
calcul de l'opérande 1:
(2+4)+(4/2)
opérateur: +
sous-opérande 1: (2+4)
sous-opérande 2: (4/2)
ainsi de suite...
A chaque fois qu'une opérande n'est pas un chiffre, tu descend d'un
niveau... Tu remonde les niveau en calculant les différentes étapes.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 29 déc. 2005 à 01:27
Pour ma part je pencherai plutot pour une reecriture de l'expression a calculer
Voici un algorythme possible
Debut
Faire
Obtenir un groupe minimal
faire le calcul
remplacer ce groupe dans l'expression par le resultat du calcul
Tant qu'il y a des operateurs dans l'expression
Fin
Les differentes etapes de l'execution de cet algorythme donnerai ceci :
1 : expression = ((2+4)+(4/2))*3
2 : expression = (6+(4/2))*3
3 : expression = (6+2)*3
4 : expression = 8*3
5 : expression = 24 <-plus d'operation a executer, on a donc le resultat
Je pense que cette solution est très simple à mettre en oeuvre et ne devrait te poser aucune difficultée
Le travail c'est la santé, ne rien faire c'est la préservé !!!
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 29 déc. 2005 à 03:12
Moi j'ai fais un truc comme ça mais en écriture préfixée, mais bon c'est quasi pareil
Donc pour ma part, je calculer le nombre de parenthèse, je me
positionner à la moitié et j'effectué le calcul, et je recommencer avec
2 parenthèses en moins ;)
Si ça t'intéresse c'est la source Dr Joky, va voir dans mes sources parce que j'ai pas le lien dans la tête :D
cs_Klephte
Messages postés22Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention 4 janvier 2022 29 déc. 2005 à 05:18
Voici ma réponse sous forme de fonction récursive de 40 lignes.
Je te laisse mettre les commentaires dans le code
Je précise que je ne fais pas de contrôle du séquencement des parenthèses et que je ne gère pas les priorités de calcul des opérateurs et j'espère pour toi que ton prof ne connais pas ce site ....
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 31 déc. 2005 à 11:04
Euh, non, pas forcément, la récursivitée n'est pas nécéssaire dans notre cas. L'algo que j'ai donné peut très bien se passer de recursivité.
un "Faire tant que" correspond a une boucle type while ou autre.
Le travail c'est la santé, ne rien faire c'est la préservé !!!
cs_Klephte
Messages postés22Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention 4 janvier 2022 31 déc. 2005 à 14:28
Je suis tout à fait d'accord
avec toi, il est possible de s'en sortir sans récursivité. Le code sera
d'ailleurs vraisemblablement plus long, mais aussi certainement plus
compréhensible.
neodelphi
Messages postés442Date d'inscriptionjeudi 4 avril 2002StatutMembreDernière intervention11 août 2008 1 janv. 2006 à 09:52
Oui... Après c'est une question de style. L'embriquement de parenthèse,
indicant l'existence d'une arborescence de groupes, me pousse
naturelement à traiter le problème de façon récursive.
Je pense qu'avec de l'expérience, la récursivité est plus facile dans ce genre de problème...