Delphi Pascal 5 中的 Eratosthenes 筛法
Sieve of Eratosthenes in Delphi Pascal 5
我对编程很陌生,尤其是 Delphi Pascal。现在我必须把埃拉托色尼筛法作为学校作业来做。虽然我确实尝试学习基础知识,但如果我只是在为一个简单的问题而苦苦挣扎,请原谅我,因为不幸的是我没有时间学习所有内容。
我确实已经有了一些代码,但是虽然它没有显示错误,但它什么也没做?我知道我需要写一些东西才能展示产品,但我也不确定该怎么做。
非常感谢您的帮助。
type
TForm1 = class(TForm)
Berechnen: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Memo1: TMemo;
procedure BerechnenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BerechnenClick(Sender: TObject);
const
n = 200;
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
v := 2*p;
while v <= n do
begin
zahl[v] := false;
v := v+p;
end;
p := p+1;
if p <= n then weiter := true;
while weiter do
if (p<=n) and (zahl[p] = false)
then
p := p+1
else
weiter := false;
end;
end;
end.
您的程序确实在 zahl
数组中正确标记素数,但您必须输出结果才能看到它。添加此代码:
for i := 2 to n do
if zahl[i] then
memo1.Lines.Add(IntToStr(i));
旁注:
简单的教育程序通常不需要复杂的界面 - 您可以使用 readln
/writeln
等创建控制台应用程序
值得创建一个function/procedure来将工作代码与接口任务(input/output、数据组织)分开。
Delphi 5 可以使用动态数组(array of ...
和 SetLength
),因此您可以使用 n
限制扩展筛选函数由用户“即时”定义:
var
n: integer;
zahl: array of Boolean;
...
n := StrToInt(Edit1.Text);
SetLength(zahl, n+1); //indexed from 0, filled by False
我对编程很陌生,尤其是 Delphi Pascal。现在我必须把埃拉托色尼筛法作为学校作业来做。虽然我确实尝试学习基础知识,但如果我只是在为一个简单的问题而苦苦挣扎,请原谅我,因为不幸的是我没有时间学习所有内容。 我确实已经有了一些代码,但是虽然它没有显示错误,但它什么也没做?我知道我需要写一些东西才能展示产品,但我也不确定该怎么做。 非常感谢您的帮助。
type
TForm1 = class(TForm)
Berechnen: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Memo1: TMemo;
procedure BerechnenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BerechnenClick(Sender: TObject);
const
n = 200;
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
v := 2*p;
while v <= n do
begin
zahl[v] := false;
v := v+p;
end;
p := p+1;
if p <= n then weiter := true;
while weiter do
if (p<=n) and (zahl[p] = false)
then
p := p+1
else
weiter := false;
end;
end;
end.
您的程序确实在 zahl
数组中正确标记素数,但您必须输出结果才能看到它。添加此代码:
for i := 2 to n do
if zahl[i] then
memo1.Lines.Add(IntToStr(i));
旁注:
简单的教育程序通常不需要复杂的界面 - 您可以使用
readln
/writeln
等创建控制台应用程序值得创建一个function/procedure来将工作代码与接口任务(input/output、数据组织)分开。
Delphi 5 可以使用动态数组(
array of ...
和SetLength
),因此您可以使用n
限制扩展筛选函数由用户“即时”定义:var n: integer; zahl: array of Boolean; ... n := StrToInt(Edit1.Text); SetLength(zahl, n+1); //indexed from 0, filled by False