unit Primzahlen_Generator;
interface
uses ExtCtrls, Math, SysUtils, Classes;
type
TPrimzahlen_Generator =
class
private
A_Zahlen :
Array of Integer;
Zahlengrenze : Integer;
private
procedure Filtern (Panel: TPanel; Grenze : Integer);
virtual;
procedure Loeschen_Aufruecken (Pos: Integer);
virtual;
procedure Speichern (Speicherort:
String);
virtual;
procedure Werte_Uebernehmen (Grenze: Integer);
virtual;
public
procedure Ausfuehren (Grenze: Integer; Speicherort:
String; Anzeigepanel: TPanel);
virtual;
end;
implementation
procedure TPrimzahlen_Generator.Filtern (Panel: TPanel;Grenze : Integer);
var i, j : Integer;
begin
for j := 2
to round(power(Grenze+1,1/2))
do
begin
for i := Length(A_Zahlen)-1
downto j-1
do
begin
if (A_Zahlen[i]
mod j = 0)
and (A_Zahlen[i] <> j)
then Loeschen_Aufruecken(i);
if i
mod 100 = 0
then
begin
Panel.Caption := '
Noch: '+inttostr(round(power(Length(A_Zahlen)-1,1/2)+1)-j);
Panel.Update;
end;
end;
end;
Panel.Caption := '
Fertig!';
end;
procedure TPrimzahlen_Generator.Loeschen_Aufruecken (Pos: Integer);
var i : Integer;
begin
for i := pos
to length(A_Zahlen)-2
do
begin
A_Zahlen[i] := A_Zahlen[i+1];
end;
setlength(A_Zahlen,length(A_Zahlen)-1);
end;
procedure TPrimzahlen_Generator.Speichern (Speicherort:
String);
var
Datei: TextFile;
i : Integer;
begin
AssignFile(Datei, Speicherort + '
Primzahlen von 2 bis '+inttostr(Zahlengrenze)+'
.txt');
Rewrite(Datei);
try
WriteLn(Datei,inttostr(Length(A_Zahlen)));
for i := 0
to Length(A_Zahlen)-1
do
begin
WriteLn(Datei,inttostr(i)+'
- '+inttostr(A_Zahlen[i]) );
end;
finally
CloseFile(Datei);
end;
end;
procedure TPrimzahlen_Generator.Werte_Uebernehmen (Grenze: Integer);
var i : Integer;
begin
setlength(A_Zahlen,Grenze-1);
for i := 2
to length(A_Zahlen)-1
do
begin
A_Zahlen[i-2] := i;
end;
Zahlengrenze := Grenze;
end;
procedure TPrimzahlen_Generator.Ausfuehren (Grenze: Integer; Speicherort:
String; Anzeigepanel: TPanel);
begin
Werte_Uebernehmen(Grenze);
Filtern(Anzeigepanel,Grenze);
Speichern(Speicherort);
end;
end.