Ich habe gerade keine Zeit, mir das genauer anzuschauen, aber zwei Dinge sind mir aufgefallen:
a) Ich würde aus Performancegründen (Du willst die Zeit messen, die das ganze dauert?) während des Algorithmus nicht immer auf die erste Zeile des Memos schreiben, sondern auf einen String, der dann zum Schluss ins Memo geschrieben wird.
b) Du hast die If-Anweisungen falsch übersetzt:
(z.B. im oberen Codebereich)
ute.h_80 hat folgendes geschrieben: |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ... while (temp % 2 == 0) { temp /= 2; if (notfirst) { out += " *"; } ^^^^^^^ else { notfirst = true; } out += " 2"; isPrime = false; } ... | |
Hier wird geschaut, ob notfirst TRUE ist, Du prüfst auf FALSE:
ute.h_80 hat folgendes geschrieben: |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| ... WHILE (temp mod 2) = 0 DO BEGIN temp := temp div 2; IF notfirst = false THEN ERATO_WEG.Lines[0]:= '' ^^^^^^^^^^^ ^^^^Hier löschst Du alles, es soll doch was angehängt werden... ELSE notfirst := true; ERATO_WEG.Lines[0] := '2'; isPrime := false; END; ... | |
Ich würde es so machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ... While (temp Mod 2)=0 Do Begin temp := temp Div 2; If NotFirst Then OutString := OutString+" *" Else NotFirst := True; OutString := OutString+" 2"; IsPrime := False; End; ... |
Wenn Du die If-Anweisungen nochmal checkst, sollte es eigentlich gehen, vorausgesetzt, der Algorithmus stimmt vom Prinzip...
Gruß, teebee