Hallo ich bins nochmal.
Ich hab aber das Script noch mal ganz neu und anderst geschrieben, aber es will einfach nicht funktionieren. Wenn mehr als 2 Faktoren vorhanden sind läuft sich die while Schleife zu Tode...
Ich hab mal wieder keine Ahnung wieso und hoffe, dass ihr mir helfen könnt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function Primzahl(zahl : cardinal): boolean; var flag : boolean; teiler : cardinal; begin flag := false; for teiler := 2 to round(sqrt(zahl))do if(zahl mod teiler = 0) then begin flag := true; break end; if(flag)then result := false else result := true; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function Faktoren(zahl : cardinal): cardinal; var teiler : cardinal;
begin for teiler := 2 to zahl do begin if(zahl mod teiler = 0)then begin result := round(zahl / teiler); break; end; end; end; |
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: 29: 30: 31: 32: 33:
| function check(zahl : cardinal) : string; var ergebnis : string; produkt, faktor, rest : cardinal; checkRest : boolean;
begin if(Primzahl(zahl) = true)then result := ' ist eine Primzahl' else begin checkRest := false; produkt := 1; ergebnis := ' ist keine Primzahl: 1'; while(produkt <> zahl)do begin if(checkRest = true)then rest := Faktoren(rest) else rest := Faktoren(zahl); faktor := round(zahl / rest);
if(Primzahl(rest) = true)then begin ergebnis := ergebnis + ' * ' + IntToStr(faktor) + ' * ' + IntToStr(rest); produkt := produkt * faktor * rest; end else begin ergebnis := ergebnis + ' * ' + IntToStr(faktor); produkt := produkt * faktor; checkRest := true; end; end; result := ergebnis; end; end; |
Das ist das alte Script:
Hallo
Ich habe eine kleine Funktion geschrieben die mir alle Primfaktoren zurückgibt. Leider gibt es bei Zahlen bei denen ein Faktor mehrmals vorkommt Fehlausgaben heraus, die ich mir nicht erklären kann. Ich hoffe ihr habt eine Idee woran das liegen könnte.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function Faktoren(zahl : cardinal): string; var teiler, intNeu : cardinal; neu : real; ausgabe : string; begin for teiler := 2 to zahl do begin if(zahl mod teiler = 0)then begin if(zahl = teiler)then break else begin neu := zahl / teiler; ausgabe := ausgabe + ' * ' + IntToStr(teiler); intNeu := round(neu); Faktoren(intNeu) end; end; end; result := ausgabe; end; |
Beispielausgaben:
Der Anfang der Ausgabe ist übrigens außerhalb der Funktion.
10 = 1 * 2 * 5
So sollte es ja bei allen sein, aber sobald ein Faktor mehrmals vorkommt wird z.B. so etw. ausgegeben:
50 = 1 * 2 * 5 * 10 * 25
44 = 1 * 2 * 4 * 11 * 22
Ich hoffe ihr könnt mir helfen
Gruß Peter