![]() |
AW: Sieb des Eratosthenes
Zitat:
Delphi-Quellcode:
hat auch nicht geklappt!
n:=StrtoInt(Edit.Text)
Ich kann dir ja meinen Quellcode zeigen:
Delphi-Quellcode:
PS:Bitte schnell antworten! Ich brauche es bis morgen!
procedure TForm1.BerechnenClick(Sender: TObject);
var a: integer; begin if (edtZahl.Text='') then begin lblFehler.Visible:= true end else begin lblFehler.Visible:= false; a:= StrtoInt(edtZahl.Text); if (a < 2) then begin lblFehler2.Visible:= true end else lblFehler2.Visible:= false end; Siebdesratosthenes(StrtoInt(edtZahl.Text)); end; procedure TForm1.Siebdeseratosthenes(n : integer); var zahl : array[2..n] of boolean; p,i,v : integer; weiter : boolean; begin 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. |
AW: Sieb des Eratosthenes
-zu jedem "begin" gehört ein "end"
-wenn eine Methode verwendet wird muss sie in der Klasse auch deklariert sein -es gibt keine konstante Arrays mit variablen Größenangaben -der "arbeitende" Teil der Prozedur kann um die Hälfte gekürzt werden |
AW: Sieb des Eratosthenes
Zitat:
|
AW: Sieb des Eratosthenes
Zitat:
|
AW: Sieb des Eratosthenes
Ok, wenn ihr hier schon nach Hilfe schreit ("Bitte schnell antworten! Ich brauche es bis morgen!"), dann müsst ihr euch aber auch mal angewöhnen, nicht nur das linke Ohr vom Eisbären hier zu posten.
Also nur die Methoden aus dem
Delphi-Quellcode:
Teil sind zu wenig.
implementation
Das ist eine komplette Klassen-Definition, mit der wir etwas anfangen können:
Delphi-Quellcode:
Postet also die gesamte Unit und wir werden da mal drüber schauen
interface
type TFoo = class( TObject ) public procedure Bar; // wenn das fehlt, dann gibt es Fehler!!! end; implementation procedure TFoo.Bar; begin // Some code end; |
AW: Sieb des Eratosthenes
Zitat:
Hier ist der Code:
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TForm1 } TForm1 = class(TForm) Berechnen: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Image1: TImage; Image2: TImage; Label1: TLabel; Label2: TLabel; Memo1: TMemo; procedure BerechnenClick(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: char); procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Memo1Change(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin end; procedure TForm1.Image1Click(Sender: TObject); begin end; procedure TForm1.Image3Click(Sender: TObject); begin Showmessage ('http:us.123rf.com/400wm/400/400/speedfighter/speedfighter0907/speedfighter090700086/5179955-silhouette-der-schmetterlinge-fliegen-ber-field-of-flowers.jpg') end; procedure TForm1.Memo1Change(Sender: TObject); begin end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char); begin if not (Key in ['0'..'9',#08]) then key:= #0; end; procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Clear; //-> Die Zahlen im Textfeld werden gelöscht Edit1.Text:='200' //-> Im Label für das Ergebnis soll nach dem Löschen nun wieder "Ergebnis" stehen end; procedure TForm1.Button3Click(Sender: TObject); begin Close();//Wenn man auf "schließen" klickt, soll das ganze Programm geschlossen werden end; procedure TForm1.Edit1Change(Sender: TObject); begin end; procedure TForm1.BerechnenClick(Sender: TObject); 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. |
AW: Sieb des Eratosthenes
Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls; type TForm1 = class(TForm) Berechnen: TButton; mAusgabe: TMemo; edtZahl: TEdit; lblPrimzahl: TLabel; lblFehler: TLabel; lblUeberschrift: TLabel; Image1: TImage; Image2: TImage; btReset: TBitBtn; lblFehler2: TLabel; btSchliessen: TButton; procedure edtZahlKeyPress(Sender: TObject; var Key: Char); procedure BerechnenClick(Sender: TObject); procedure btSchliessenClick(Sender: TObject); procedure btResetClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.edtZahlKeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9',#08])then begin Key:=#0; Beep; end; end; procedure TForm1.BerechnenClick(Sender: TObject); const n=200 ; var a: integer; zahl : array[2..n] of boolean; p,i,v : integer; weiter : boolean; begin if (edtZahl.Text='') then begin lblFehler.Visible:= true end else begin lblFehler.Visible:= false; a:= StrtoInt(edtZahl.Text); if (a < 2) then begin lblFehler2.Visible:= true end else lblFehler2.Visible:= false end; 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; procedure TForm1.btSchliessenClick(Sender: TObject); begin Close(); end; procedure TForm1.btResetClick(Sender: TObject); begin edtZahl.Clear; mAusgabe.Clear; end; end. |
AW: Sieb des Eratosthenes
Zitat:
|
AW: Sieb des Eratosthenes
Zitat:
|
AW: Sieb des Eratosthenes
Also wo ist das Problem?
a) Das Form wird erstellt. b) es gibt einen Button auf den man klickt um die Berechnung zu starten c) es gibt eine Berechnungsroutine für das "SiebdesE" d) diese Routine muß vor ihrem Aufruf definiert sein. Als Erweiterung könnte man den berechneten Array in einem Tmemo oder sonst wo ausgeben. Man könnte für eine variable Obergrenze mit einem dyn. Array arbeiten. Man könnte eine Fortschrittsanzeige einbauen...... aber ohne a-d ist das alles nichts wert. Gruß K-H P.S. Würde mich sehr interessieren, ein gutes Sieb zu sehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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