Evaluation d'une chaine de calcul

magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010 - 4 oct. 2002 à 18:40
munstef Messages postés 6 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 20 décembre 2004 - 20 déc. 2004 à 14:52
Quelqun connait il une fonction ( ou une unité plutot) qui permettrai de faire un truc du genre function evaluation(chaine:string):integer et qui reverrai le résultat de la chaine exemple
evaluation("3+5*2") renvoie 13.
Merci d'avance

8 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
4 oct. 2002 à 21:49
Je pense que tu peux essayer de le faire tout seul partant du principe que tout ce qui est entre deux signes arithmétiques (j'entends par là + - * /) est forcément un chiffre... Tu peux donc essayer d'utiliser un pos(...) en testant la présence des opérateurs dans la chaine, puis récupérer les nombres puis enfin effectuer les opérations en respectant les priorités !

Bonne prog' !
Bestiol.
0
magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010
5 oct. 2002 à 10:34
J'y avias bien pensé, mais j'aurais aimé une routine qui faisait aussi COS, SIN, LN...en plus, il y a le problème des nombres negatifs...C'est faisable, mais si ca existait deja, ce serait pas mal de temps de gagne pour mon projet :)
Merci
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
5 oct. 2002 à 14:10
Evidemment, si c'est aussi poussé !!! Je te comprend très bien ! je vais voir si j'arrive à trouver quelque chose, mais tu peux, pour ta part, chercher sur delphi300.com ou torry.net, par exemple...

Bonne prog' !
Bestiol.
PS: D'ailleurs, j'en profite pour te retourner une question : A quoi correspond l'opération LN ?? Je ne l'ai jamais utilisée mais déjà rencontrée, et j'aimerais savoir à quoi elle sert... Merci !
0
magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010
5 oct. 2002 à 15:00
Sympas, merci, e vais regarder aussi de mon cote.
J'ai mis ln ^pour la fonction logarythme népérien. Voila (si tu ne connais pas cette fonction dis le moi)
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
5 oct. 2002 à 16:38
Justement... Je connais pas cette fonction !!!
Je viens de passer en 1ère S et jamais en cours on en a parlé !! C'est certainement normal, mais si tu avais la gentillesse de m'expliquer ce que c'est, ou sinon où je peux avoir des infos, ce serait sympa !

Sinon, pour ta question (!!) :
Je suis allé voir sur delphi super page, et j'ai peut-être trouvé ce que tu cherches... Il s'agit apparemment d'une suite de 8 composants juste pour des maths, et y en a un qui a l'air de faire ce qu tu veux ! (j'ai pas essayé, mais d'après ce que j'ai compris de la description en Anglais c'est ça !)

Voici un lien direct sur le fichier : delphi.icm.edu.pl/ftp/d30free/exbldr131.zip

Voilà !! Bonne prog' !
Bestiol.
0
magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010
6 oct. 2002 à 19:25
-------------------------------
Réponse au message :
-------------------------------

Justement... Je connais pas cette fonction !!!
Je viens de passer en 1ère S et jamais en cours on en a parlé !! C'est certainement normal, mais si tu avais la gentillesse de m'expliquer ce que c'est, ou sinon où je peux avoir des infos, ce serait sympa !

Sinon, pour ta question (!!) :
Je suis allé voir sur delphi super page, et j'ai peut-être trouvé ce que tu cherches... Il s'agit apparemment d'une suite de 8 composants juste pour des maths, et y en a un qui a l'air de faire ce qu tu veux ! (j'ai pas essayé, mais d'après ce que j'ai compris de la description en Anglais c'est ça !)

Voici un lien direct sur le fichier : delphi.icm.edu.pl/ftp/d30free/exbldr131.zip

Voilà !! Bonne prog' !
Bestiol.

Merci beaucoup, je vais y jetter coup d'oeil . Pour la fonction ln, c'est normal, c'est le programme de Terminale S :) . (Je suis prof de Math). Cette fonction a plein de proporiétes interessantes en particulier ln(a^n)=nln(a). (Utile pour resoudre par exemple 2^n>500). Voila

A+
Magicvinni
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
6 oct. 2002 à 20:30
Ah bon ?? Bah si tu le dis, c'est que ça doit être vrai !!! :big)

lol

Bestiol.
0
munstef Messages postés 6 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 20 décembre 2004
20 déc. 2004 à 14:52
tu peux commencer ainsi :

type
Tsymbole = (plus, moins, mult, divi, opp, abs, ln, exp , sin, ...,arcTan, reel);
PFonction = ^TFonction;
TFonction = record
case symbole : TSymbole of
plus .. puis : (gauche, droite : PFonction);
opp .. arcTan : (argument : PFonction);
reel : (valeur : Real);
end;


pour "compiler" l'expression :

function LireExpression : PFonction;

function LireTerme : PFonction;

function LireFacteur : PFonction;
begin
if LireCar = '(' then begin
LireExpression;
if LireCar <> ')' then Error;
end
else begin
new (result);
result.Symbole := LireSymbole;
if result.symbole = reel then
result.valeur := Lirevaleur;
end;
end;

begin {-- LireTerme --}
result := LireFacteur;
while lirecar in ['*', '/'] do begin
new (temp);if carlu '*' then temp.symbole mult else temp.symbole :=divi;
temp.gauche := result;
temp.droite := LireFacteur;
result := temp;
end;
end;

begin {-- LireExpression --}
{-- même principe avec '+' et '-' et LireTerme--}
end;

enfin pour l'évaluation des expressions ainsi formées :

function evaluation (f :Pfunction) : Real;
begin
case f^.symbole of
reel : result := f^.valeur;
opp : result := - evaluation (f^.argument);
....
plus : result := evaluation (f^.gauche) + evaluation (f^.droite);
...
end
end;

je te laisse le soin de finir cette source en complétant les fonctions et
définir les fonctions telle que lirecar, liresymbole ...

normalement avec ça, tu peux interpréter des expressions :
sin abs -4 en tant que sin (abs (-4))
4 * tan (3/2)
...

En ajoutant "unknown" dans TSymbole tu pourrais lire des fonctions avec inconnue(s)
et de les dériver ...

Je sais, c'est un peu long, si quelqu'un à plus simple
0
Rejoignez-nous