Entwickler-Ecke
Algorithmen, Optimierung und Assembler - ggT > was ist da dran falsch`?
codex2001 - Do 23.06.05 17:31
Titel: ggT > was ist da dran falsch`?
hallo! also schaut euch zuerst mal den quelltext hier an:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Button8Click(Sender: TObject); var a,b,c,d,e : integer; begin a := StrToInt(Edit1.Text); b := StrToInt(Edit2.Text); if a < b then begin for c := b downto 0 do if (c mod a = 0) and (c mod b = 0) then begin Label1.Caption := IntToStr(c); break; end else if a > b then begin for d := b downto 1 do if (d mod a = 0) and (d mod b = 0) then begin Label1.Caption := IntToStr (d); break; end end end; |
das programm lässt sich ganz normal starten, also er bringt keine fehlermeldung, aber er rechnet mit den ggT zweier zahlen einfach nicht aus! wisst ihr, was hier falsch ist?
bye
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.
JayK - Do 23.06.05 19:17
gkT, kgT???
Kenn ich nicht :nixweiss:
Ich kenne nur kgV und ggT ;)
codex2001 - Do 23.06.05 19:56
JayK hat folgendes geschrieben: |
gkT, kgT???
Kenn ich nicht :nixweiss:
Ich kenne nur kgV und ggT ;) |
ja .... ich weiß auch nicht was ich wieder gedacht habe als ich das geschrieben hab :shock: !
ich meine natürlich ggT!
Zitat: |
Moin und im Forum!
Ich weiß zwar nicht so wirklich, was du da machen willst , aber falls das ein ggT-Algorithmus werden soll (größter gemeinsamer Teiler), dann schau dir doch mal das hier an.
cu
Narses
|
ok thx... hab ich eben auch schon gelesen, aber ich würde gerne den fehler in meinem prog. wissen! das prog. ist ja etwas anders aufgebaut
Narses - Do 23.06.05 23:21
Moin!
Wenn du´s so machst, geht´s: :wink:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c: Integer; begin a := StrToInt(Edit1.Text); b := StrToInt(Edit2.Text); if (b < a) then begin c := a; a := b; b := c; end; c := b; while (((a mod c) <> 0) or ((b mod c) <> 0)) do Dec(c); Label1.Caption := IntToStr(c); end; |
Was hast du "falsch" gemacht:
- zu umständlich progammiert :wink:
- du hast die
mod-Argumente vertauscht
- du hast eine begin-end-Klammer zuviel in der äußeren if-Anweisung
cu
Narses
LigH - Mo 01.08.05 22:20
Auch wenn's ein Delphi-Forum ist - so was hab ich mal in Assembler gemacht: :wink:
Delphi-Quelltext
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:
| {$APPTYPE CONSOLE} program TestGCD;
function GCD(a, b: LongWord): LongWord; assembler; asm MOV EAX, a MOV EBX, b CMP EBX, EAX JB @@Again XCHG EAX, EBX @@Again: OR EBX, EBX JZ @@OK XOR EDX, EDX DIV EBX MOV EAX, EBX MOV EBX, EDX JMP @@Again @@OK: PUSH EAX POP AX POP DX end;
begin WriteLn(GCD(1836311903, 1134903170)) end. |
Mal so als "Begrüßungs-Contribution". 8) Die SWAG kennt ja heute kaum noch jemand.
BenBE - Mi 03.08.05 13:27
1. Das EBX-Register ist unter Delphi tabu.
2. Du vermischst 16-bit und 32-bit-Assembler.
3. Das Result (DWORD) wird vollständig über EAX zurückgegeben.
Die Register-Reihenfolge ist EAX, EDX, ECX, Stack. A (EAX) und B (EDX) sind bereits in den Registern enthalten.
LigH - Mi 03.08.05 13:36
Sorry - war damals für Turbo-Pascal. Schon sicher >10 Jahre alt...
BenBE hat folgendes geschrieben: |
1. Das EBX-Register ist unter Delphi tabu. |
Okay, dann PUSH/POP - sollte reichen, oder?
BenBE hat folgendes geschrieben: |
2. Du vermischst 16-bit und 32-bit-Assembler. |
Dazu wären weitere Details nett.
BenBE hat folgendes geschrieben: |
3. Das Result (DWORD) wird vollständig über EAX zurückgegeben.
...
A (EAX) und B (EDX) sind bereits in den Registern enthalten. |
:oops: Siehe oben. Seit Delphi 2 sollte das wohl so klappen, richtig?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!