![]() |
AW: Primzahl
habe jetzt folgendes:
var n, teiler, zahl :integer; wurzel :real; prim :boolean; begin ListBox1.clear; n:=strtoint(Edit1.text); ListBox1.items.Add('2'); zahl:=3; while zahl<=n do begin prim:=true; teiler:=zahl; wurzel:=sqrt(n); while (teiler <= wurzel) and (prim) do begin if zahl mod teiler=0 then prim := false; teiler:=teiler + 1 ; end; if prim = True then listbox1.Items.Add (inttostr(zahl)); zahl:=zahl+1; end; end; ------------------ anwendug läuft, zeigt mir jedoch in der listbox nur 2 und bei n z.b. 100 alle zahlen ab 11 bis 100 an komme hier jetzt nicht weiter??? |
AW: Primzahl
ich habe jetzt die ausgabe aus der schleife genommen
geht trotzdem noch nicht |
AW: Primzahl
Du könntest einmal die Delphi-Tags (Römerhelm) benutzen, dann ist der Code besser lesbar.
wurzel:=sqrt(n); würde ich vor die Schleife setzen, denn das muss nur einmal gesetzt werden (ist aber nicht das Problem). teiler:=zahl; muss teiler:=1; sein, da sonst in der Zeile mit mod immer direkt 0 rauskommt |
AW: Primzahl
while zahl<=n do
begin prim:=true; teiler:=zahl; wurzel:=sqrt(n); while (teiler <= wurzel) and (prim) do begin if zahl mod teiler=0 then prim := false; teiler:=teiler + 1 ; end; inc(zahl) end; if prim = True then listbox1.Items.Add (inttostr(zahl)); habe wieder was besserers^^ jetzt kommt in der listbox aber nur 2 und 101 wenn ich n=100 eingeb ???? |
AW: Primzahl
Zitat:
|
AW: Primzahl
Liest du eigentlich auch unsere Antworten? Guck doch mal, wo dein Listbox.Items.Add steht und wo die Primzahlen ermittelt werden.
|
AW: Primzahl
Komme dem zuerst bitte nach, was von dir verlangt wird - verpass deinem Code die schönen [delphi] Tags und rücke mal ordentlich ein!
Delphi-Quellcode:
Ist dir eigentlich aufgefallen, dass die Abfrage immer True sein wird?
teiler:=zahl;
{..} if zahl mod teiler=0 then prim := false; teiler := teiler + 1; teiler erhält den Wert zahl. Nichts wird zwischenzeitlich geändert und anschließend wird geprüft, ob zahl dividiert durch teiler einen Rest liefert. Eine Zahl durch sich selbst liefert niemals nen Rest! Deshalb ist bei dir prim immer false! |
AW: Primzahl
Danke für eure Hilfe habs rausbekommen^^ :)
|
AW: Primzahl
Delphi-Quellcode:
procedure TForm1.BRechnenClick(Sender: TObject);
var n, teiler, zahl :integer; wurzel :real; prim :boolean; begin ListBox1.clear; n:=strtoint(Edit1.text); ListBox1.items.Add('2'); zahl:=3; while zahl<=n do begin prim:=true; teiler:=2; wurzel:=sqrt(zahl); while (teiler <= wurzel) and (prim) do begin if zahl mod teiler=0 then prim := false; teiler:=teiler + 1 ; end; if prim = True then listbox1.Items.Add (inttostr(zahl)); zahl:=zahl+1; end; end; end. -> für die, dies noch interessiert |
AW: Primzahl
Abgesehen von der kreativen Einrückung solltest Du
Zitat:
Delphi-Quellcode:
Sonst baust Du Dir nur unnötige Fehlerquellen ein.
if prim then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 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