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;
lblFehler3: TLabel;
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);
var
a: integer;
zahl :
array[2..10001]
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 > 10001)
then begin ShowMessage('
Die Zahl muss kleiner gleich 10001 sein!');
end;
if (a < 2)
then begin lblFehler2.Visible:= true
end
else
lblFehler2.Visible:= false;
end;
for i := 2
to a
do zahl[i] := true;
p := 2;
while p <= a
do
begin
// es werden die Vielfachen von p getrichen
v := 2*p;
// v ist das 'Vielfache'
while v <= a
do
begin
zahl[v] := false;
v := v+p;
end;
// es wird die nächste nicht gestrichene Zahl gesucht
p := p+1;
if p <= a
then weiter := true;
// 'weiter' ist ein logischer Schalter
while weiter
do
if (p<=a)
and (zahl[p] = false)
then
p := p+1
else
weiter := false;
end;
for i := 2
to a
do if zahl[i]
then mAusgabe.lines.add(IntToStr(i))
end;
// Hier wird dann gesagt das 'weiter' nicht initialisiert wurde
procedure TForm1.btSchliessenClick(Sender: TObject);
begin
Close();
end;
procedure TForm1.btResetClick(Sender: TObject);
begin
edtZahl.Clear;
mAusgabe.Clear;
end;
end.