![]() |
Sieb des Eratosthenes
Hallo,
Ich versuche, ein Programm zum Berechnen von Primzahlen zu schreiben, und hätte dazu ein Paar Fragen: Was das Programm können soll: Aus einer Menge an Zahlen von 2 bis n durch das ![]() Dazu habe ich folgenden Code im Internet gefunden:
Delphi-Quellcode:
Das funktioniert insofern, als dass das Programm keine Fehlermeldung angibt und das Programm erfolgreich kompiliert werden kann.
begin
// Eingabe // Verarbeitung for i := 2 to n do zahl[i] := true; p := 2; while p <= n do begin // es werden die Vielfachen von p getrichen v := 2*p; // v ist das 'Vielfache' while v <= n do begin zahl[v] := false; v := v+p; end; // es wird die nächste nicht gestrichene Zahl gesucht p := p+1; if p <= n then weiter := true; // 'weiter' ist ein logischer Schalter while weiter do if (p<=n) and (zahl[p] = false) then p := p+1 else weiter := false; end; Allerdings hat das Programm so noch keinen Nutzen. Meine Fragen wären daher: 1. Wie bringe ich es fertig, dass "n" im Sourcecode die Zahl ist, die man im Editfeld eingegeben hat? Ich habe versucht es unter var zu definieren, hab es aber nicht hingekriegt. 2. Wie kann ich erreichen, dass die berechneten Primzahlen am Ende im Memofeld ausgegeben werden? Gruß, Descole |
AW: Sieb des Eratosthenes
Zitat:
Delphi-Quellcode:
n := StrToInt(Edit1.Text);
Zitat:
Delphi-Quellcode:
for i := 2 to n do if zahl[i] then memo1.lines.add(IntToStr(zahl[i]));
|
AW: Sieb des Eratosthenes
Zitat:
Aber wo genau muss ich
Delphi-Quellcode:
hinschreiben? Unter const funktioniert es nicht, genauso wenig wie bei var.
n:= StrToInt(Edit1.Text)
Und gehört das mit den Memolines zu dem Knopf, wo ich die ganzeSchleife gelagert habe? |
AW: Sieb des Eratosthenes
Bevor Du in Deiner Schleife auf n zugreifst solltest Du es zuweisen / initialiseren. Normalerweise hast Du ein Edit zur Eingabe und einen Button zum Start einer Aktion z.b. Berechnung. In der Ereignisbehandlung des Buttons rufst machst Du dann die Berechnung oder rufst diese, in eine weitere Procedur ausgelagert von dort auf.
Beispiel:
Delphi-Quellcode:
procedure Tform1.ButtonBerechnenClick(Sender : TComponent);
begin // Ggf. vorher überprüfen ob Edit1.Text etwas sinnvolles enthält Siebdeseratosthenes(StrToInt(Edit1.text)); end; procedure TForm1.Siebdeseratosthenes(n : integer); begin .. Dein Code end; |
AW: Sieb des Eratosthenes
Ich glaube, Du solltest einen Anfängerkurs in Delphi absolvieren. Das ist ganz einfahch:
![]() oder ![]() (ist vom gleichen Autor) oder ![]() usw. Einfach mal googeln. |
AW: Sieb des Eratosthenes
Zitat:
|
AW: Sieb des Eratosthenes
Zitat:
Sorry dass ich so viel frage, aber ich bin noch ziemlicher Anfänger :/ |
AW: Sieb des Eratosthenes
Das ist eine von Dir erstellte Prozedur. Dort wo ich "Dein Code.." geschrieben habe solltest Du dann den von Dir aus der Wiki übernommenen Code einfügen. Du kannst diese Prozedure natürlich selber benennen wie Du magst.
|
AW: Sieb des Eratosthenes
Zitat:
|
AW: Sieb des Eratosthenes
Zitat:
So sieht es bei mir im Moment aus:
Delphi-Quellcode:
procedure TForm1.BerechnenClick(Sender: TObject);
begin // Ggf. vorher überprüfen ob Edit1.Text etwas sinnvolles enthält Siebdeseratosthenes(StrToInt(Edit1.text)); end; procedure TForm1.Siebdeseratosthenes(n : integer); var a: real; begin a:= StrtoFloat(Edit1.Text); end; const n=200 ; var zahl : array[2..n] of boolean; p,i,v : integer; weiter : boolean; begin // Eingabe // Verarbeitung for i := 2 to n do zahl[i] := true; p := 2; while p <= n do begin // es werden die Vielfachen von p getrichen v := 2*p; // v ist das 'Vielfache' while v <= n do begin zahl[v] := false; v := v+p; end; // es wird die nächste nicht gestrichene Zahl gesucht p := p+1; if p <= n then weiter := true; // 'weiter' ist ein logischer Schalter while weiter do if (p<=n) and (zahl[p] = false) then p := p+1 else weiter := false; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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