检查是否填充了预定义大小的数组 - Pascal

时间:2013-04-11 12:09:10

标签: arrays size conditional pascal procedure

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

1)PopulateArray(数据)
2)ShowNumbersInList(数据)
3)PlotBars(数据)
4)排序(数据)

这些步骤都是对额外程序的过程调用。但是,如果我像这样编码,则每次调用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;

这让我发疯,因为我无法弄明白。有人可以帮忙吗?感谢。

2 个答案:

答案 0 :(得分: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;  

答案 1 :(得分:-1)

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

由于它是作业,我不会给你完整的答案,但下面的链接应该让你开始走上一条好路。

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

祝你好运,希望你能回复细节。