Ich habe einen kurzen demo-quelltext im internet gefunden. jedoch ist er in delphi und darin bin ich absoluter analphabet. ich habe den text sozugen manuell nach c++ portiert, bin mir aber nicht sicher ober stimmt. kann mir jemand sagen ob das so stimmt bzw. wenn nicht was falsch ist?
Delphi:
Function ggTerw(a,b: integer; var u,v: integer):integer;
var u0, v0:integer;
begin
if b = 0 then Begin
result := a;
u := 1;
v := 0;
End else Begin
result := ggTerw(b, a mod b, u0, v0);//rekursiv
u := v0;
v := u0 - (a div b)*v0;
End;
end;
C++:
int ggTerw( int a, int b, int u, int v)
{
int u0= 0; int v0=0;
if(b==0)
{
u = 1; v = 0;
return a;
}
else
{
u = v0;
div_t v = div(a,b); v = u0 - v.quot*v0;
return ggTerw(b, a % b, u0, v0); //rekursiv
}
}
Ich bedanke mich schon mal im vorraus ausserordentlich bei jedem helfenden, werde es aber sicher hinterher nochmal tun.
Vielen Dank
Mike
Programmieren - alles kontrollieren 4.938 Themen, 20.667 Beiträge
Grundsätzlich sehe ich eine möglichst genaue umsetzung als primäres ziel, daher meine anmerkungen.
Ja die beiden ersten Parameter als Referenz zu übergeben scheint nicht notendig ...
Laut originalcode sind die ersten zwei parameter "by value", die andere zwei "by reference".
Naja irgendwer hat mir mal eingeprügelt Variablen immer mit einem Startwert zu initialisieren in C++. Siehst Du hier etwa einen Fehler den ich nicht sehe?
Das ist zwar grundsätzlich nicht falsch, aber initialwerte sollten eine bedeutung haben, ansonsten sind sie fast genau so gut wie zufällige (ehemalige stack-) werte. Bei so kurzem quellcode bleibt hingegen die übersicht erhalten und man sieht gleich wie die variablen benutzt werden (ein guter compiler sollte bei verwendung nicht initialisierter werte warnen, das kann sogar semantische fehler aufzeigen).
Also ich bin davon ausgegangen das div in Delphi das Gegenstück zu Modulo ist also den "Rest" einer Modulo-Rechnung ausgibt. Stimmt das etwa nicht und es ist doch nur Division pur?
Auch wenn ich nicht darauf schwören wurde, aber div sollte in delphi eine integer division sein, rest egal und mod eben nur der rest der division. Das ist (bei int werten) mit "/" und "%" in c(++) erreicht. Umständlich konstrukte mit
div_t div(a,b)
sind darum nicht erforderlich.
mr.escape