![]() |
Primzahlen in einem bestimmten Bereich errechnen
Hallo Leute, ich habe ein kleines Problem ich soll ein Programm in Delphi schreiben, dass alle Primzahlen errechnet in einem Bereich, den man vorher in zwei Edit feldern festlegt und diese dann in einer Listbox ausgeben.
Hier ist mein bisheriger Quelltext! Könnte bitte mal jemand drüber gucken und mit weiter helfen? Bedanke mich schon einmal im vorraus.
Delphi-Quellcode:
[edit=Luckie]Delphi-Tags. Beim nächsten Mal bitte selber setzen. Mfg, Luckie[/edit]
procedure TForm1.btn_berechnenClick(Sender: TObject);
var a, b, x, y: integer; prim: boolean; begin x:= strtoint (edt_von.Text); y:= strtoint (edt_bis.Text); for a:= x to y do begin if a <= 100 then prim := true; end; //von begin for b:= 2 to a do begin if b <= a then if a mod b = 0 then prim := false; end; //von begin begin listbox_ausgabe.Items.Add (inttostr(b)); end; // von begin end; end. |
Re: Primzahlen in einem bestimmten Bereich errechnen
Kannst du in Worten beschreiben, was du mit dem Stück Code machen wolltest? Dann kann man besser sagen, was davon du falsch gemacht hast und wieso. :))
|
Re: Primzahlen in einem bestimmten Bereich errechnen
Ok ich verstehe das jetzt so:
Delphi-Quellcode:
Hier wird erstmal geschaut, ob die Zahl kleiner als 101 ist, äh wieso eigendlich?
For a:= x to y do
begin if a <= 100 then prim := true; end; //von begin Darf der Bereich maximal bis 100 gehen? Würde die Zeile mit dem if einfach weglassen.
Delphi-Quellcode:
Und hier wird dann geschaut, ob man irgendwann ohne Rest teilen kann und dann ist die Zahl keine Primzahl.
for b:= 2 to a do
begin if b <= a then if a mod b = 0 then prim := false; end; //von begin
Delphi-Quellcode:
Da fehlt meiner Meinung nach noch eine If-Abfrage, ob prim = True ist!
begin
listbox_ausgabe.Items.Add (inttostr(b)); end; // von begin Edit: Ich würde das so schreiben:
Delphi-Quellcode:
procedure TForm1.btn_berechnenClick(Sender: TObject);
var a, b, x, y: integer; prim: boolean; begin x:= strtoint (edt_von.Text); y:= strtoint (edt_bis.Text); for a:= x to y do begin //soweit ist alles ok prim := true; for b:= 2 to Round(a/2) do //man muss nur bis zur Hälfte gehen, da danach sowieso keine Reslosen Mengen mehr entstehen begin if a mod b = 0 then //Dann brauchst du hier auch keine weitere if-Schleife mehr prim := false; end; //von begin if prim = True then listbox_ausgabe.Items.Add (inttostr(b)); end; // von begin end; |
Re: Primzahlen in einem bestimmten Bereich errechnen
Hallo, vielen Dank für Deine schnelle Hilfe ich bin ein Stück weiter gekommen. Allerdings wird jetzt mein bereich nicht beachtet den ich vorher festgelegt habe! Es werden nur noch Primzahl bis 50 errchnet anstatt bis 100 die ich für y eingegeben hatte. Außderdem werden manche Zahlen doppelt ausgegeben. Hast Du noch eine Idee woran es liegen könnte ? Habe jetzt alles genauso gemacht wie Du es vorgeschlagen hattest.
Vielen Dank im vorraus. Korg PA 2x Pro |
Re: Primzahlen in einem bestimmten Bereich errechnen
Ich frage mich, ob ein anderer Algorithmus nicht geeigneter wäre für das Problem.
|
Re: Primzahlen in einem bestimmten Bereich errechnen
Sollte man nicht erst einmal alle geraden Zahlen außer der 2
von der Suche ausschließen? [Edit] Erste Suche hier im Forum liefert mir mit den Suchworten Primzahlen und Sieb 28 Hits [/Edit] |
Re: Primzahlen in einem bestimmten Bereich errechnen
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal mein altes Programm ausgegraben
Schau es dir einfach an, so hab ich das gemacht. Zusätzlich werden noch Primzahlzwillinge angezeigt |
Re: Primzahlen in einem bestimmten Bereich errechnen
Vielen Dank, hat mir sehr geholfen!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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 by Thomas Breitkreuz