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