1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| program PGCD3; // Calcul du PGCD et boucle pour obtenir des temps...
{$APPTYPE CONSOLE}
uses System.Diagnostics;
function fr (a,b: Integer): Integer; // Récursif
begin
// WriteLn('a=',a,' b=',b);
if b = 0 then // le reste vaut-il 0 ?
fr := a // si oui, on a le résultat
else // sinon
fr := fr (b, a mod b); // on réitère le calcul avec les valeurs b et le reste de a / b
end;
function fi (a,b: Integer): Integer; // Itératif
begin
while (a <> b) do // Tant que a & b diffèrent
begin
if (a > b) then // a supérieur à b ?
a := a - b // si oui, 'a' vaut maintenant 'a-b'
else // sinon
b := b - a; // 'b' vaut maintenant 'b-a'
end; // on retourne sur le 'while' pour retester
fi := a; // on renvoit la valeur
end;
const
LOOP = 100000;
var
a, b: Integer;
v : Integer;
r : Char;
i : Integer;
swr : TStopwatch;
swi : TStopwatch;
begin
repeat
Writeln('Valeur A ?');
Readln(a);
Writeln('Valeur B ?');
Readln(b);
Writeln('(r) PGCD de ', a, ' & ', b, ' : ', fr(a, b));
Writeln('(i) PGCD de ', a, ' & ', b, ' : ', fi(a, b));
Writeln('C''est fou, c''est identique ;o)');
swr := TStopwatch.StartNew;
for i := 1 to LOOP do
fr(a, b);
swr.Stop;
swi := TStopwatch.StartNew;
for i := 1 to LOOP do
fi(a, b);
swi.Stop;
Writeln('Vitesses : ');
Writeln('R : ', swr.ElapsedMilliseconds);
Writeln('I : ', swi.ElapsedMilliseconds);
Writeln;
Writeln('Voulez-vous recommencer ? (O/N)');
Readln(r);
Writeln;
until (r = 'n') or (r = 'N');
end. |
Partager