《德尔斐·帕斯卡》中埃拉托斯梯尼的筛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等创建控制台应用程序。

  • 值得创建一个函数/过程,将工作代码与接口任务(输入/输出、数据组织(分离。

  • 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
    

最新更新