cs_Gimli
Messages postés21Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention 5 janvier 2008
-
21 mai 2005 à 20:59
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 2006
-
6 juin 2005 à 14:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 6 juin 2005 à 14:25
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.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 22 mai 2005 à 22:31
Remarques, réponses et justifications en message privé.
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.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 21 mai 2005 à 21: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
Oui exact, j'ai pas fait attention. C'est corrigé merci.
cs_Gimli
Messages postés21Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention 5 janvier 2008 21 mai 2005 à 20:59
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).
@+
6 juin 2005 à 14:25
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.
22 mai 2005 à 22:31
21 mai 2005 à 23:35
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.
21 mai 2005 à 21:27
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.
21 mai 2005 à 21:14
21 mai 2005 à 20:59
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).
@+