Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Primzahl (https://www.delphipraxis.net/160525-primzahl.html)

infofa1 17. Mai 2011 18:35

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???

infofa1 17. Mai 2011 18:42

AW: Primzahl
 
ich habe jetzt die ausgabe aus der schleife genommen
geht trotzdem noch nicht

Jumpy 17. Mai 2011 18:55

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

infofa1 17. Mai 2011 19:03

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
????

infofa1 17. Mai 2011 19:21

AW: Primzahl
 
Zitat:

Zitat von Jumpy (Beitrag 1101413)
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

habe es jetzt so wie unten ohne teiler:=1

Luckie 17. Mai 2011 19:22

AW: Primzahl
 
Liest du eigentlich auch unsere Antworten? Guck doch mal, wo dein Listbox.Items.Add steht und wo die Primzahlen ermittelt werden.

Aphton 17. Mai 2011 19:24

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:
  teiler:=zahl;
  {..}
  if zahl mod teiler=0 then
    prim := false;
  teiler := teiler + 1;
Ist dir eigentlich aufgefallen, dass die Abfrage immer True sein wird?
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!

infofa1 17. Mai 2011 20:24

AW: Primzahl
 
Danke für eure Hilfe habs rausbekommen^^ :)

infofa1 17. Mai 2011 20:28

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

DeddyH 18. Mai 2011 07:09

AW: Primzahl
 
Abgesehen von der kreativen Einrückung solltest Du
Zitat:

Delphi-Quellcode:
if prim = True then

noch abändern in
Delphi-Quellcode:
if prim then
Sonst baust Du Dir nur unnötige Fehlerquellen ein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.
Seite 2 von 3     12 3      

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