![]() |
Primzahlenfinder
Hallo,
im Rahmen eines Schulprojektes haben wir die Aufgabe gehabt einen Primzahlenfinder zu programmieren, dass habe ich auch schon geschafft (also ich versuche nicht mir hier meine Hausaufgaben machen zu lassen!!!), allerdings habe ich jetzt rein hobbymäßig überlegt, diesen Primzahlenfinder so zu programmieren, dass er schneller zum Ergebnis kommt, daher ein paar Modifikationen, allerdings schmeisst er mir jetzt nicht mehr das gewünschte Ergebnis aus. Unten mal den kommentierten Code, ich hoffe ihr könnt den Fehler finden. Vielen Dank schon mal im Vorraus. EDIT: hab im Code noch nen bisschen was geändert.. der macht allerdings noch Fehler der erste ist die ausgegebene "25"...
Delphi-Quellcode:
procedure TForm1.BstartClick(Sender: TObject);
var primzahl: array of integer; arrlength,a,zahl,rest,anzahl:integer; prim: boolean; begin stop:=false; LBprimzahlen.Items.Clear; setlength(primzahl,10000); arrlength:=9999; anzahl:=0; primzahl[0]:=1; primzahl[1]:=2; a:=-1; zahl:=2; repeat a:=-1; repeat a:=a+1; prim:=true; showmessage('a:'+InttoStr(a)+' primzahl[a]:'+InttoStr(primzahl[a])+' zahl:'+Inttostr(zahl)); {diese zeile ist nur zum Fehlerfinden wichtig, beim endgültigen Programm soll sie auskommentiert werden} if (zahl=primzahl[a]) or (zahl<primzahl[a]) or (primzahl[a]=1) then begin showmessage('zahl ist gleich primzahl[a] oder zahl ist kleiner primzahl[a]'); //auch diese Zeile nur zum Fehlerfinden end else begin rest:=zahl MOD primzahl[a]; if rest=0 then //wenn der rest=0 ist handelt es sich nicht um eine Primzahl begin prim:=false; break; end; end; {bis hier muss sich die Schleife mit allen gepspeicherten Primzahlen wiederholen, nur wenn der Rest nie 0 ist handelt es sich um eine Primzahl} until primzahl[a]>=sqrt(zahl); {wenn die höchste getestete Zahl kleiner als die Wurzel der getesteten Zahl ist kann die Abfrage abgebrochen werden} if prim=true then //wenn es eine Primzahl ist.. begin LBprimzahlen.Items.add(InttoStr(zahl)); //.. die Zahl der Liste zuweisen anzahl:=anzahl+1; //.. den Counter der Primzahlenanzahl erhöhen Lamount.Caption:=InttoStr(anzahl); //.. die Primzahlenanzahl ausgeben if arrlength=anzahl+1 then begin arrlength:=arrlength+10000; SetLength(primzahl,arrlength); end; //.. die Primzahl dem Array der Primzahlen zuweisen primzahl[a+1]:=zahl; end; if zahl>2 then //falls Zahl höher als zwei nur noch bei ungeraden Zahlen testen begin zahl:=zahl+2; end else if zahl=2 then begin zahl:=zahl+1; end; application.processmessages; //Zugriff eines anderen Buttons ermöglichen welcher Stop auf True setzt until stop=true; end; |
Re: Primzahlenfinder
Guten Abend,
vergleiche einmal Dein Array PrimZahlen mit der Ausgabe in der Listbox. In dem Primzahlenarray sind nicht alle Primzahlen vorhanden. Grüße Klaus |
Re: Primzahlenfinder
Ah VIelen Dank
ich hab den Fehler gefuden ich muss einfach diese Zeile:
Delphi-Quellcode:
durch
primzahl[a+1]:=zahl;
Delphi-Quellcode:
dann noch anzahl noch nen bisschen anpassen. Vielen Dank jetzt läuft es.
primzahl[anzahl]:=zahl;
mgf KahPee |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz