PGCD - ALGORITHME D'EUCLIDE

cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013 - 23 janv. 2006 à 09:01
cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013 - 23 janv. 2006 à 09:01
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/35589-pgcd-algorithme-d-euclide

cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013
23 janv. 2006 à 09:01
Alors, a part le fait que le PGCD se calcul entre autre avec Euclide, et que cette formule, on l'apprend tous à l'école... Et que chaque année à la même periode, fleurissent ici ou sur d'autres site une quantité industrielle de calcul du PGCD, PPCM et autres racines d'une équation du seconde degrée, je commenterai quand même ta source.
1 - les deux procedure
procedure ENB2KeyPress(Sender: TObject; var Key: Char);
procedure ENB1KeyPress(Sender: TObject; var Key: Char);
Sont les mêmes... Tu en fais qu'une seule et dans l'inspecteur d'objets, tu fais pointer OnKeypress vers la première que tu as faite...

2 - dans la procedure BCalculerClick... Beaucoup de chose mais rien de bien utile...
Quand tu testes si les valeurs sont Ok, sorte tout de suite si elle sont pas bonnes... Ca évite des If...Then et la déclaration de variables Booléans...
Voir même, dans l'événement OnExit des TEdit, tu places un test :

If TEdit(sender).text='' then TEdit(sender).text:='0';

Comme ça, si rien c'est saisie, la valeur 0 et automatiquement mise.


En gros, ça donne ça :
procedure TForm1.BCalculerClick(Sender: TObject);
var
NB1, NB2, TMP: LONGINT;
begin

val(ENB1.Text,NB1,TMP);
val(ENB2.Text,NB2,TMP);

//Test pour savoir si le TEdit est remplie
if (NB1=0) or (NB2=0) then
begin
MessageBoxA(0,Pchar('Pas de PGCD pour 2 nombres nuls!'),Pchar('Attention...'),0 + MB_ICONEXCLAMATION + 0);
exit;
end;

//Le fameux algorithme d'Euclide
while not (NB2=0) do
begin
TMP:=NB1;
NB1:=NB2;
NB2:=TMP mod NB2;
end;

EPGCD.Text:= 'pgcd('+ENB1.Text+';'+ENB2.Text+')='+IntToStr(NB1) ;
end;

Bon, allez, j'arrête, je suis un peu tatillon...

Barbichette
Rejoignez-nous