Programmieren - alles kontrollieren 4.938 Themen, 20.667 Beiträge

Von Delphi nach C++, kann das mal einer prüfen bitte

PaoloP / 12 Antworten / Flachansicht Nickles

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

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
mr.escape PaoloP „Von Delphi nach C++, kann das mal einer prüfen bitte“
Optionen

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

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen