Bonjour à tous!
Je suis actuellement en train de me lancer dans le dévellopement d'une calculatrice "évoluée", bon elle fait rien de spécial mais en fait j'ai recherché pas mal d'aide sur le net sur les calculatrices et je tombait à chaque fois sur une calculatrice toute simple du genre 4 + 5 = 9
En revanche, je souhaiterais pouvoir dévelloper une calculatrice permettant de calculer des expressions un peux plus complexe du genre: (4+2/2)*5
Mon problème:
J'ai un algorithme mais je n'arrive pas à le mettre en oeuvre :(
Je vous le propose et si vous pouviez me dire ce que vous en pensez, ou voir me donner des conseils ou dire que c'est de la daube je suis preneur :p
Algo:
création de 3 tableaux pour stocker parenthèses, signe, et valeure:
création de 4 variables désignant les caractères de la chaine:Code:
1
2
3
4 int elem_simples[500]; int nombres[500]; int operateur[500];
Ce qui nous donnerait:Code:
1
2
3
4
5 int parenthese_ouvrante = 0; int parenthese_fermante = 1; int operateur = 2; int nb = 3;
( 2 + 3 ) * 5
elem_simples=>parenthese_ouvrante,nb,operateur,nb,parenthese_fermante,operateur,nb
nombres =>0,2,0,3,0,0,5
operateurs=>0,0,'+',0,0,'*',0
Le soucis maintenant est d'implémenter cet algorithme qui de plus permet juste de détecter de quoi est constituée l'expression donnée (qui sera donnée dans une chaine ASCII).
J'ai une esquisse de code, mais qui ne reprend pas cet algorithme:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #include <stdio.h> #include <stdlib.h> int numbers[10] = {0,1,2,3,4,5,6,7,8,9}; int main(void) { int elem_simples[500]; int nb_elem_simples; int nombres[500]; int i; char operateurs[500]; char parenthese_ouvrante, parenthese_fermante,operateur; int nb; char expression[128]; gets(expression); parenthese_ouvrante = strchr(expression,'('); parenthese_fermante = strchr(expression,')'); if(parenthese_ouvrante != NULL) { printf("Parenthese_ouvrante "); for(i=0;i<10;i++) { nb = strchr(expression,numbers[i]); if( nb != NULL) { printf("Chiffre "); } } if(parenthese_fermante != NULL) { printf("Parenthese fermante "); } } return 0; }
Avec ce code, j'obtient un résultat du genre:
pour une expression du type (5+2)Code:
1
2 Parenthèse ouvrante Chiffre operateur Chiffre Parenthese fermante
Bien sûr mes tableaux implémentés dans mon code ne servent à rien mais j'avais la flemme de les enlever car je ne trouve pas comment implémenter mon algorithme, si toutefois il est correct.
Merci d'avoir eu la patience de me lire ;)
Bonne journée et si vous avez des conseils n'hésitez pas :)
Fabien