Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem beim Sieb des Eratostenes (https://www.delphipraxis.net/9970-problem-beim-sieb-des-eratostenes.html)

Nikolas 8. Okt 2003 18:26


Problem beim Sieb des Eratostenes
 
Hi
Ich soll mit einem Dyn. Array das Sieb des Eratostenes schreiben. Die Grundidee dafür ist nicht so schwer: Ich nehme die erste Zahl in meinem Array (das von 2 bis 1000 gefüllt ist) und streiche alle Vielfachen der Zahl raus. Dann nehme ich die nächste Zahl(die ungleich 0 ist) und so weiter. Alle Zahlen denen ich so begegne müssen dann prim sein. Die will ich dann in einem Stringgrid (sg1) ausgeben. Ich komme bei dem Code einfach nicht weiter. :gruebel: Vielleicht kann mir jemand helfen. :-D

Delphi-Quellcode:
lenght:=strtoint(egroesse.Text);
SetLength(Liste,lenght);

for index:=1 to lenght do
begin
Liste[index]:=index;
end;

index:=1;
abstand:=1;
zeile:=1;

while index<lenght do
begin
inc(abstand);
index:=abstand;

        if liste[index] > 0 then
        begin

            while index < lenght do
                 begin
                 index:=index+abstand;
                 liste[index]:=0;
                 end;
        end

        else

            begin
            sg1.RowCount:=sg1.RowCount+1;
            sg1.cells[0,zeile]:=inttostr(zeile);
            sg1.cells[1,zeile]:=inttostr(index);
            inc(zeile);
            end;
TXHbyTOX

Dani 8. Okt 2003 19:22

Re: Problem beim Sieb des Eratostenes
 
Hi,

Ich hab ein String Grid zwar ehrlich gesagt noch nie benutzt, aber tut's denn nicht auch eine Listview oder eine Listbox? :gruebel:

Grüße,
Dani :dance:

Delphianer 8. Okt 2003 19:24

Re: Problem beim Sieb des Eratostenes
 
Hallo,

ich habe Dir mal ein Beispiel aufgeschrieben:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Liste: array of Integer;
  Len, I, J: Integer;
begin
  Memo1.Lines.Clear;

  Len := StrToInt(EGroesse.Text);
  SetLength(Liste, Len + 1);

  for I := 1 to Len do
  begin
    Liste[I] := I;
  end;

  for I := 2 to Len div 2 do
  begin
    if Liste[I] <> 0 then begin
      for J := 2 to Len div I do
      begin
        Liste[I * J] := 0;
      end;
    end;
  end;

  for I := 1 to Len do
  begin
    if Liste[I] <> 0 then begin
      Memo1.Lines.Add(IntToStr(Liste[I]));
    end;
  end;

  Finalize(Liste);
end;
Da dynamische Arrays immer bei 0 beginnen, habe ich bewußt ein Element mehr angefordert, um Rechnerei zu sparen. Du solltest nochmal überlegen, ob meine Schleifenendwerte stimmen, da habe ich nicht viel Grips reingesteckt. Mein Memo kannst du wieder durch das Grid ersetzen.

Viele Grüße

Dagon 8. Okt 2003 19:37

Re: Problem beim Sieb des Eratostenes
 
An alle Primzahlenrechner: bitte beachtet, 1 ist keine Primzahl.

negaH 9. Okt 2003 14:55

Re: Problem beim Sieb des Eratostenes
 
Zitat:

An alle Primzahlenrechner: bitte beachtet, 1 ist keine Primzahl.
Warum denn nicht ? ;)

Gruß Hagen

sakura 9. Okt 2003 15:07

Re: Problem beim Sieb des Eratostenes
 
Weil eine Primzahl x durch genau zwei natürliche Zahlen teilbar sein muss - diese Zahlen seien eins (1) und die Primzahl (x) selbst.

Betonung liegt dabei auf genau zwei. ;-)

...:cat:...

negaH 16. Okt 2003 13:56

Re: Problem beim Sieb des Eratostenes
 
Zitat:

Weil eine Primzahl x durch genau zwei natürliche Zahlen teilbar sein muss - diese Zahlen seien eins (1) und die Primzahl (x) selbst
Warum soll ein Primzahl durch genau zwei Teiler teilbar sein ?

Gruß Hagen

Christian Seehase 16. Okt 2003 14:05

Re: Problem beim Sieb des Eratostenes
 
Moin Hagen,

die Definition, die ich mal dazu gelernt habe:

Eine Primzahl ist genau durch 1 und sich selber teilbar.

Keine Zahl mehr, keine weniger.

negaH 16. Okt 2003 14:15

Re: Problem beim Sieb des Eratostenes
 
Zitat:

die Definition, die ich mal dazu gelernt habe:
Eine Primzahl ist genau durch 1 und sich selber teilbar.
Keine Zahl mehr, keine weniger.
Ah, jetzt kommen wir der Sache aber näher, "Die Definition" ist das wichtige an der Sache. Denn es wurde von den Menschen einfach mal eben so definiert da ansonsten deren ganzes Zahlengebäude auseinander fällt.

Will man beweisen warum es so sein MUSS reicht eine solche Definition aber nicht aus.
Der eigentliche Beweis (erst viel später durchgeführt) warum 1 keine Primzahl ist führt zu der Bestätigung das 1 die EINHEIT in jedem System ist. Sie hat wichtigere Eigentschaften als alle anderen Zahlen. Man könnte die 1 als Primzahl bezeichnen was aber in der Begrifflichkeit der Mathematik alle Definitionen über den Haufen werfen würde. Das heist aber nicht das die 1 als solches nicht auch eine Primzahl sein könnte.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz