0

我正在做一些家庭作业,它定义了应该如何制作程序,procedure DoSort.
该过程有一个局部变量,称为“数据”,它是一个由 25 个整数组成的数组。 data : array[0..24] of Integer;该程序有四个主要步骤:

1) PopulateArray(data)
2) ShowNumbersInList(data)
3) PlotBars(data)
4) Sort(data)

这些步骤都是对额外过程的过程调用。但是,如果我这样编码,每次调用DoSort. 我需要仅在初始调用时填充数组。我已经尝试了很多东西...

    if data[0] = data[1]
    if data[0] = nil
    if data[0].free
    if data.free
    if data = nil

等等。我需要在不创建另一个变量的情况下执行此操作,即firstRun : Boolean. 所以基本上,我需要做的是检查数组是否已被填充

    procedure DoSort();
    Var
      data : array[0..24] of Integer;
    begin
      if data[0] = data[1] then // DOESN'T WORK
      begin
        PopulateArray(data); 
      end
      else
      begin
        ShowNumbersInList(data);
        PlotBars(data);
        Sort(data);
      end;
    end;

这让我发疯,因为我无法弄清楚。任何人都可以帮忙吗?谢谢。

4

2 回答 2

0

您的data数组在您的过程中是本地的DoSort()。这意味着每次DoSort()调用时,都会使用一个未初始化的数组。(分配在堆栈上)。

要持久保存数据,请将其声明在您的过程范围之外并通过引用传递它,procedure DoSort(var data: array of integer);.

仅在第一次进入 DoSort 之前初始化您的数据。

例子:

procedure Main;
var
  data : array[0..24] of Integer;
begin
  PopulateData(data);

  while jobNotDone do
  begin
    DoSort(data);
    ...
  end;
end;  
于 2013-04-12T07:46:40.120 回答
-1

自从我写任何 Pascal 以来,已经有很多个月了。但是,在其他语言中,我会创建一个单例(Java、C++ 等),基本上可以将构造函数设为 PRIVATE,因此您只能通过调用创建单个实例。

由于这是家庭作业,我不会给你完整的答案,但下面的链接应该能让你走上一条好的道路。

http://wiki.freepascal.org/Singleton_Pattern#Simple_Singleton

祝你好运,希望你能详细回答。

于 2013-04-11T12:29:00.930 回答