Bonjour !
J'ais reussi a coder un programme qui est en fait une calculatrice (en C avec shuntant-yard algorithme):
Comment puis-je parses des expressions mathématiques comme sin, cos, tan, sqrt etc...
meri d'avance
Bonjour !
J'ais reussi a coder un programme qui est en fait une calculatrice (en C avec shuntant-yard algorithme):
Comment puis-je parses des expressions mathématiques comme sin, cos, tan, sqrt etc...
meri d'avance
Ta difficulté est d'analyser une fonction qui est unaire ? Alors que jusqu'à maintenant, tous tes opérateurs sont binaires ?
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
quelle est la priorité de les fonctions et est-ce qu'ils sont associatives à gauche ou à droite ?
On parle d'associativité pour un opérateur binaire.
L'associativité pour l'opérateur binaire "+" se définit ainsi :
(a + b) + c = a + (b + c)
Un opérateur unaire n'a pas de propriété d'associativité.
Par contre, tu vas tomber sur le problème de la priorité.
En effet, comment interpréter ça : S = sin a + b
Est-ce que c'est : S = (sin a) + b
ou : S = sin (a + b)
Bien sûr, c'est la première proposition. Mais tu doit prendre en compte la priorité de tous tes opérateurs dans ton code.
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
comme cet exemple : S = 4*8-6/5 * sin(90) + 5
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
salut j'ai terminer la fonction shunting-yard :
mais comment je peux evaluer la fonction "sin" par exemple ?
voilà la fonction Eval que j'utilisé pour évaluer les notation fixes :
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
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 double Eval(char** str, int size) { int i; pile p = creer_pile(); for(i=0;i<size;i++) { double operand1, operand2; double nbr; if(sscanf(str[i], "%lf", &nbr)==1) { empiler(p, nbr); } else if( is_operator_s(str[i]) ) { operand1 = sommet(p); depiler(p); operand2 = sommet(p); depiler(p); switch (str[i][0]) { case '+' : empiler(p, operand2+operand1); break; case '-' : empiler(p, operand2-operand1); break; case '*' : empiler(p, operand2*operand1); break; case '/' : empiler(p, operand2/operand1); break; case '^' : empiler(p, pow(operand2,operand1)); break; case 's' :/* s pour sin c pour cos et t pour tan ...*/ /* */ break; } } } return sommet(p); }
salut merci c'est resolut
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
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 double Eval(char** str, int size) { int i; pile p = creer_pile(); for(i=0;i<size;i++) { double operand1, operand2; double nbr; if(sscanf(str[i], "%lf", &nbr)==1) { empiler(p, nbr); } else if( is_operator_s(str[i]) ) { operand1 = sommet(p); depiler(p); operand2 = sommet(p); depiler(p); switch (str[i][0]) { case '+' : empiler(p, operand2+operand1); break; case '-' : empiler(p, operand2-operand1); break; case '*' : empiler(p, operand2*operand1); break; case '/' : empiler(p, operand2/operand1); break; case '^' : empiler(p, pow(operand2,operand1)); break; case 's' :/* s pour sin c pour cos et t pour tan ...*/ /* */ break; } } else if (is_function(str[i][0])) { operand1 = sommet(p); depiler(p); switch (str[i][0]) { /* s pour sin c pour cos et t pour tan ...*/ case 'c': empiler(p, cos(operand1)); break; case 's': empiler(p, sin(operand1)); break; case 't': empiler(p, tan(operand1)); break; } } } return sommet(p); }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager