jfkca
Messages postés1Date d'inscriptionvendredi 26 décembre 2003StatutMembreDernière intervention26 décembre 2003 26 déc. 2003 à 11:03
Salut balgrim
En faisant des essais avec ton code j'ai fait les deux modifications suivant pour que si je calcul (1+1)(2+3) il renvoi 10 et non 7.
Remplacer "Result := AnsiReplaceStr(Result, '*(', '(');" par "Result := AnsiReplaceStr(Result, ')(', ')*(');" ainsi que
"for I:=1 to Length(Str) do //Debut de la boucle"
par "for I:=1 to Length(StringTemp) do //Debut de la boucle"
Dans l'initialisation des variable j'ai aussi fait une petite modification pour être certain de la variable ZPar soit bien initialisée
Remplacer "ZPar[0]:=0"
Par
For I:=0 To Niveau_Parentheses Do
Begin
zPar[I] := 0;
End;
La variable J n'est jamais utilisé on peut donc la supprimer
Il ne reste plus qu'a gérer la priorité.
Voilà bon coding pour la gestion des prioritées
balgrim
Messages postés52Date d'inscriptionvendredi 26 avril 2002StatutMembreDernière intervention28 octobre 2003 28 oct. 2003 à 14:18
A propos de l'autre source, je m'été renseigné, mais si tu faisait un petit peu plus attention, tu verrai qu'elle ne gere pas les nombre a virgules, mais seulement les integer.
En plus elle est beaucoup plus lente à l'execution, et ça aller pas pour ce que je voulais faire :)
Donc non tu casse pas la baraque, c'est meme deux sources complementaires...
yoghisan
Messages postés204Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention 2 juin 20051 27 oct. 2003 à 23:20
oups pas manchester mais balgrim
balgrim
Messages postés52Date d'inscriptionvendredi 26 avril 2002StatutMembreDernière intervention28 octobre 2003 27 oct. 2003 à 16:54
Oui j'avais pensé à la fin de ligne, mais le probleme est toujours le meme ;) 8+3*2+4 ==> on revien au meme pb... La meilleur solution c de gerée la multiplication et la division comme une parenthese, sa doit pas etre trop difficile :)
Sinon j'ai remarquer une erreur, si on dans la chaine ...)+... comme (2*5)+3 renvoi 7. c'est du au fait d'une erreur dans le code:
//-------------Le signe Plus-----------------
(...)
if not fstOp then if StringTemp[I-1]=')' then //Si le dernier caractere été un ')' alors...
LastOperande := loSub; <<--Modifier par loAdd
//---------------------------------------------
J'ameliore tout ça, et je v mettre un zip tout de meme, avec des jolie exemples :)
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 27 oct. 2003 à 13:41
Tu te complique la vie le plus simple pour analyser ce genre de calcul est de commancer par la fin de la ligne ...
26 déc. 2003 à 11:03
En faisant des essais avec ton code j'ai fait les deux modifications suivant pour que si je calcul (1+1)(2+3) il renvoi 10 et non 7.
Remplacer "Result := AnsiReplaceStr(Result, '*(', '(');" par "Result := AnsiReplaceStr(Result, ')(', ')*(');" ainsi que
"for I:=1 to Length(Str) do //Debut de la boucle"
par "for I:=1 to Length(StringTemp) do //Debut de la boucle"
Dans l'initialisation des variable j'ai aussi fait une petite modification pour être certain de la variable ZPar soit bien initialisée
Remplacer "ZPar[0]:=0"
Par
For I:=0 To Niveau_Parentheses Do
Begin
zPar[I] := 0;
End;
La variable J n'est jamais utilisé on peut donc la supprimer
Il ne reste plus qu'a gérer la priorité.
Voilà bon coding pour la gestion des prioritées
28 oct. 2003 à 14:18
En plus elle est beaucoup plus lente à l'execution, et ça aller pas pour ce que je voulais faire :)
Donc non tu casse pas la baraque, c'est meme deux sources complementaires...
27 oct. 2003 à 23:20
27 oct. 2003 à 16:54
Sinon j'ai remarquer une erreur, si on dans la chaine ...)+... comme (2*5)+3 renvoi 7. c'est du au fait d'une erreur dans le code:
//-------------Le signe Plus-----------------
(...)
if not fstOp then if StringTemp[I-1]=')' then //Si le dernier caractere été un ')' alors...
LastOperande := loSub; <<--Modifier par loAdd
//---------------------------------------------
J'ameliore tout ça, et je v mettre un zip tout de meme, avec des jolie exemples :)
27 oct. 2003 à 13:41
Exemple :
8+3*2 => 8+6 => 14 et hop...
Bon Coding...
ManChesTer.