Bonjour moi c'est dydy. J'suis nouveau! Je voudrai juste savoir comment coder une calculatrice pouvant calculer au moin 5 nombre à la fois(un peut comme une calculatrice complexe quoi)! Merci de me m'aider!
Bonjour moi c'est dydy. J'suis nouveau! Je voudrai juste savoir comment coder une calculatrice pouvant calculer au moin 5 nombre à la fois(un peut comme une calculatrice complexe quoi)! Merci de me m'aider!
tu veux une calculatrice comment![]()
mais voici une simple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <isotream> using namespace std; int TMP1; int TMP2; void main(){ cout <<"calculatrice + basique" <<endl; cin << TMP1; cout <<TMP1<<"+"; cin << TMP2; int TMP3 = TMP1+TMP2; cout <<" = "<<TMP3<<"\nfin"; }
Le point sensible c'est l'analyse lexicale/ syntaxique d'une expression mathématique
En gros, tu vas avoir l'analyse lexicale qui va détecter les nombres (entiers ou flottants), les opérations (+, -, *, /), les parenthèses/ crochets et éventuellement les fonctions (cos, sin, tan, exp, log, ...)
L'analyse lexicale a surtout comme rôle de détecter si ton expression mathématique est valide.
Il y a bien sûr plus de lexèmes si tu veux pousser ta calculatrice: les puissances (entières, négatives, réelles), les racines (racine carrée, racine cubique, ...), les symboles (e, pi, ...), les intégrales, les nombres imaginaires, ...
Et ensuite, il y a l'analyse syntaxique (qui prend en entrée les lexèmes de l'analyse lexicale). Ce qui se fait en général, c'est de transformer ton expression en arbre binaire, où les feuilles contiennent les nombres et les nœuds les opérations (ou les fonctions).
quel bazar![]()
Bonjour,
La réponse avec analyse lexicale/syntaxique est effectivement indispensable pour une calculatrice formelle qui accepterait par exemple "2*X^3 - 3* sin(X)" avant traitement.
Mais la plupart des calculatrices travaillent avec des touches dédiées qui évitent en grande partie l'analyse lexicale et intègrent directement l'analyse syntaxique à la création de l'arborescence.
Dans ce cas sin(X) n'est pas [s] [i] [n] [(] [X] [)] mais [sin(] [X] [)], les crochets [] représentent une touche. A chaque appui de touche, le programme enrichit un arbre qui tient compte entre autre des priorités et vérifie que les valeurs entrées soient bien formées et conformes à ce que la feuille de l'arbre attend (par exemple -1 comme argument de racine carrée est bien formé mais non conforme).
C'est plus simple que traiter des expressions formelles sans être simple pour autant.
Ceci étant, créer une calculatrice formelle avec, par exemple, un outil comme ANTLR qui sur la base d'une grammaire (il y en a beaucoup de disponibles sur internet) générera en Java, entre autres langages, les analyseurs attendus, est un bon moyen pour apprendre ce type de technique. Mais l'objectif n'est plus le même
Salutations.
donc faire un projet de 700 lignes ou plus juste pour une calculette![]()
Et encore d'autres utilisent la notation polonaise inverse (<- lien wikipédia en français) :
"a + b" devient "a b +"
"((1 + 2) × 4) + 3" devient "1 2 + 4 x 3 +"
Salut,
700 lignes, c'est peanuts par rapport à la plupart des programmes un tant soit peu utiles!
La plupart des programmes sont composés de plusieurs dizaines ou centaines de milliers de lignes de code, quand on ne les compte pas carrément en millions.
Ce qui importe, c'est d'organiser correctement ton programme en fichiers distincts, de manière à ce que les différentes fonctionnalités soient fournies de manière cohérente et que tu aies facile à t'y retrouver au fil du temps.
Une fois que tu as cette "bonne" organisation, tu te rend compte que le nombre de lignes de code n'as plus beaucoup d'importance![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Bonjour,
En fait,c'est la calculatrice la plus simple à programmer : j'empile les valeurs et quand je trouve un opérateur (+, -, fonction etc.) je dépile le(s) derniers éléments de la pile nécessaires et les remplace par le résultat. Cela m'a toujours réjoui de voir les irréductibles de la RPN se complaire à faire le travail d'un programmeur paresseux (mais astucieux). Je dois avoir un mauvais fond
Salutations
Partager