Convertisseur rpn algebrique

5/5 (15 avis)

Vue 7 910 fois - Téléchargée 479 fois

Description

C'est mon premier vrai projet en C++ alors soyez indulgent ^^
C'est un convertisseur d'écriture mathématique : Ecriture algébrique vers notation polonaise inversée et vice versa.
J'invite ceux qui ne savent pas ce qu'est la notation polonaire inversée à chercher sur Google, je suis un bien piètre pédagogue sur ce niveau-là...
Donc voilà, c'est tout :)

POUR CEUX QUI ONT LA FLEMME DE TELECHARGER LE ZIP ET QUI ONT PLUTOT SOIF DE .EXE, C'EST PAR LA :
http://www.chez.com/topila/rpnconvert.exe

Source / Exemple :


// Perso j'aime pas trop quand il y a beaucoup de lignes de codes sur une page, donc voyez le zip :)

Conclusion :


Il fonctionne en mode console. Le code est commenté.
Je me suis inspiré, pour le fonctionnement, de ma calculatrice (TI 92+, AMS 2.08 ou 9 je sais plus).
Je n'ai pas mis de protection contre les erreurs de syntaxe et le bêtises dans le genre et je vous préviens que le maniement des pointeurs dans le programme est loin d'être parafait... Faites attention à ce que vous ecrivez, quoi :)
Sinon, la transcription est entièrement fonctionnelle, elle gère les opération binaires '+', '-', '/', '*' et '^' ainsi que les fonctions étendues (ie de la forme "[nom]([arguments])"), et vous pouvez en rajouter autant que vous voulez (voyez le code, j'ai écrit une note pour).
Pour la conversion RPN vers écriture algébrique, écrivez toutes les fonction étendues avec f_ devant (ex f_cos, f_sum, etc).
La chaîne obtenue n'est pas simplifiée, vous pourrez par exemple avoir cos((1+2)) au lieu de cos(1+2).
Pour la conversion écriture algébrique vers RPN, faites l'impasse sur tout ce qui est implicite dans l'écriture, sauf le ^1 et le /1.
Par exemple, écrivez 4*x et non 4x, (a+b)*(c+d) et non (a+b)(c+d).
Encore une chose : j'ai fait ce programme un peu à la rache et il se peut que des petites (grosses ?) erreurs se soient glissées...
Merci de laisser un commentaire !

Et puis j'ai mis débutant parce que c'est une de mes premières sources, mais je ne sais pas trop ce que ça vaut...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
28 déc. 2004 à 22:13
Un grand merci à BruNews ainsi qu'à julienbj
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
29 déc. 2004 à 13:39
ta notation polonaise c'est la version postfix d'une expression infix c'est ça ?
sinon tu trouves ça beau de mettre tout ce beau code dans du .h ?
peut être que ça serait meilleur de découper ton code en plusieurs .cpp et .h tu trouves pas ? dans le .h tu mets uniquement les déclarations de struct , variables , fonctions
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
29 déc. 2004 à 14:40
Pour l'écriture postfixée et infixée, c'est çà (respectivement Reversed Polish Notation et écriture algébrique)
Pour l'organisation du projet, j'avais toujours l'habitude de donner à chaque .h une fonction (= un rôle) donnée dans le projet... Là c'est pour la conversion RPN-Alg et inversement, et je comptait me lancer dans un autre, qui lui s'occuperait de la manipulation d'une pile RPN, et un troisième qui s'occuperait de l'affichage d'une expression algébrique en 2D (ceux qui ont des TI connaissent le PrettyPrint).
En fait le truc c'est que je vais bien encapsuler les trois "modules" (appellons-les comme ça), sans pour autant en faire des classes car il n'y en aura qu'une seule instance.
J'avais essayé d'écrire tout dans des .cpp avec des .h adaptés, je n'y suis pas arrivé car les fonctions d'un fichier .cpp donné dans le projet n'étaient pas accessibles pour les autres .cpp... Je ne sais pas encore très bien comment on fait pour les rendre publiques : il faut écrire leurs prototypes dans le .h que l'on inclue dans les autres .cpp ?
Ca me semble assez flou...
Sinon voilà :)
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
29 déc. 2004 à 18:42
J'aime bien l'idee de la source (et la source en elle-meme bien-sur), c'est un idee originale.
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
29 déc. 2004 à 19:00
sauf erreur en déclarant les variables comme étant extern tu pourrais les rendre accessibles par tous les cpp du projet ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.