Pgcd ppcm

Description

Il calcule le pgcd ou le ppcm de 2 nombres.
J'ai vu qu'il en existait un autre sur le site mais trop complexe et j'aime pas les while ^^, donc celui la il est fait avec repeat...until.

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, ComCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    XPManifest2: TXPManifest;
    ProgressBar1: TProgressBar;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var A, B, C, D, E:integer;                                  //cinq variables
procedure TForm1.Button1Click(Sender: TObject);            //kan on click sur le bouton1
begin                               //debut
Memo1.lines.clear;                  //efface les lignes du memo si kk1 sait comment on fait pour le faire avt merci d'avance
A:=StrToInt(Edit1.Text);            //les donnees de Edit1 sont transformees en INT
B:=StrToInt(Edit2.Text);            //et stockees ds A pareil pour Edit2 mais ds B cette fois
progressbar1.max:=A;                //une barre de progression pour le fun (on peut la supprimer ss pb)
repeat           //on va executer cette boucle jusqu'a ce que ....
C:=A mod B;      //C prend la valeur du reste de A/B (modulo)
D:=A div B;      // cette ligne sert seulement pour le memo (suppression ss pb)
progressbar1.position:=A;  //fun fun fun c la barre qui avance en fonction de A (suppr ss pb)
Memo1.Lines.add(IntToStr(A)+' / '+IntToStr(B)+' = '+IntToStr(D)+' reste '+IntToStr(C));  //ca se corse on ecrit ds le memo les donnees + du texte pour la comprehension (supp si vs enlevez D:=....)
A:=B;  //on changes les affectations B devient A
B:=C;  // C devient B
until (C=0) or (C=1);     //...C soit egal a 0 OU 1
progressbar1.position:=StrToInt(Edit1.Text);  //barre de progr pour arriver jusqu'au bout c de la bidouille ^^(suppr ss pb)
if (C=0) then       //si C = 0 ALORS on affiche le texte suivant
ShowMessage('Le PGCD de '+(Edit1.Text)+' et de '+(Edit2.Text)+' est de '+IntToStr(A))
else                //sinon on affiche celui la
ShowMessage('Le PGCD de '+(Edit1.Text)+' et de '+(Edit2.Text)+' est de 1');
end;
procedure TForm1.Button2Click(Sender: TObject);           //kan on click sur le bouton 2
begin                                        //kif kif le PGCD
Memo1.lines.clear;
A:=StrToInt(Edit1.Text);
B:=StrToInt(Edit2.Text);
progressbar1.max:=A;
repeat
C:=A mod B;
D:=A div B;
progressbar1.position:=A;
A:=B;
B:=C;
until (C=0) or (C=1);
E:=(StrToInt(Edit1.Text)*StrToInt(Edit2.Text)) div A;  //operation qui permet de trouver le ppcm A*B/c
memo1.Lines.add('PPCM: '+IntToStr(E));   //txt ds le memo
progressbar1.Position:=E;      //progress bar
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);       //ca permet de pas entrer de txt ds les Edit
begin                                                                 //merci a je sais plus qui pour la source ^^
if not (key in ['0'..'9', Char(VK_TAB), char(VK_RETURN)]) then        //mais merci kan meme :D
key := #0;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9', Char(VK_TAB), char(VK_RETURN)]) then
key := #0;
end;

end.       //c fini !!

Conclusion :


J'avais pensé mettre le code du PGCD ds une dll mais ct trop long a faire (et en plus je sais pas comment on le fait).
Donc pour le PPCM, c tres simple bcp d'entre vous passe par une methode longue et fastidueuse alors qu'il existe THE formule : le produit des 2 nombres DIVISé par leur PGCD c pas top ca ?
enfin bref vous avez la source assez longue vu que y'a bcp de chose en trop mais ca s'explique bien de soi-meme.
Bon PGCD et PPCM !!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.