Ich hoffe der Lösungsweg ist einigermaßen verständlich.
Mag ja sein, aber leider ist er ziemlich falsch. Deine Funktion bietet noch nicht einmal die Symmetrie ggt(a,b)=ggt(b,a), wie man leicht an ggt(2,-2) = 0 und ggt(-2,2) = 2 sieht. Außerdem werden leider wieder einmal völlig falsche Werte für negative Zahlen geliefert, einerseits mit voller Absicht: ggt(a,b) = 0 für b <= 0! (Warum das ganze?). Andererseits (wohl) aus Unkenntnis der mod-Funktion: ggt(-5,2) = -1. Eine verbesserte Version könne so aussehen:
Delphi-Quellcode:
function ggt(zahl1,zahl2: integer): integer;
var
rest: integer;
begin
zahl1 := abs(zahl1);
zahl2 := abs(zahl2);
while zahl2>0 do begin
rest := zahl1 mod zahl2;
zahl1 := zahl2;
zahl2 := rest;
end;
ggt := zahl1;
end;