CALCULATRICE ECRITURE POLONAISE

Signaler
Messages postés
21
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
5 janvier 2008
-
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31532-calculatrice-ecriture-polonaise

Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
Hello,

C'est une très bonne source, en plus en mode console félicitation.
Elle est bien commentée et claire.

Juste une petite remarque à cette ligne dans la procedure Calcul :
'/': if c = 0 then Res := 0 else Res := d / c; //A vérifier !
Si c'est est égale à 0 tu dois dire qu'une division par 0 est impossible et non pas qu'elle est égale à 0.

Allez pour moi tu mérites un bon 9/10.

Bonne continuation,
JMP77.
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
27
Remarques, réponses et justifications en message privé.
Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
105
Je te remercie d'avoir jeter un coup d'oeil à ce code.
Toutefois il y a deux remarques que je n'ai pas compris.

1_"==> Une fonction appelée ne devrait jamais allouer de mémoire à un pointeur dans le tas.
Ne serait-ce pas plutôt le rôle de la fonction Verifier qui semble commencer dans cette direction"

Qu'aurais-ju dû marquer ?

2_"Suggestion un peu différente de celle de Gimli : au lieu d'une suite de If, il serait bien plus clair d'écrire :
if not (Tab^[I] in ['+','-','*','/']) then"

J'ai essayé mais ca ne marche pas. Le compilateur me met une erreur "Type incompatible Char et String"
Le code suivant n'a pas marché non plus "if not (Char(Tab^[I]) in ['+','-','*','/']) then", le compilateur me marque "transtypage incorrect".

Enfin, dans ta deuxieme remarque tu as parfaitement raison, je n'ai pas fait attention.
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
27
Quelques points à revoir :
function Ajouter(Tab:pTab;Element:string):pTab;
begin
If Tab=nil then // Si le tableau n'existait pas on le crée
begin
new(Tab);

> Une fonction appelée ne devrait jamais allouer de mémoire à un pointeur dans le tas.
Ne serait-ce pas plutôt le rôle de la fonction Verifier qui semble commencer dans cette direction ( If Tab<>nil then
begin) mais qui s'arrête aussi vite ?

Dans la fonction :
function Calcul(a,b,Operateur:string):string;
tu écris ensuite :
c:=StrToFloat(a);
d:=StrToFloat(b);
If Operateur='+' then Res:=c+d;
If Operateur='-' then Res:=c-d;
If Operateur='/' then Res:=c/d;
Et si b vaut zéro ? :-(

Suggestion un peu différente de celle de Gimli : au lieu d'une suite de If, il serait bien plus clair d'écrire :
if not (Tab^[I] in ['+','-','*','/']) then

Sinon, bon boulot.
Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
105
Oui exact, j'ai pas fait attention. C'est corrigé merci.
Messages postés
21
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
5 janvier 2008

salut,
j'ai remarqué 1 probleme dans ton code (qui marche sinon, bravo):
dans la fonction Verifier, lorsque tu verifie si le premier élément est bien 1 opérateur, il faut mettre des and et non des or, sinon ca ne marche pas (car le premier élément est forcement différent d'1 des 4 opérateur).
@+