• Как передать массив в процедуру?

    AnnTHony
    @AnnTHony
    Интроверт
    Установил Pascal ABC.net (версия 3.1, сборка 1179 от 29.02.2016)

    Как пишет справка:


    Передача статического массива в подпрограмму

    При передаче статического массива в подпрограмму по значению также производится копирование содержимого массива - фактического параметра в массив - формальный параметр:

    procedure p(a: Arr); // передавать статический массив по значению - плохо!
    ...
    p(a1);


    Это крайне расточительно, поэтому статические массивы рекомендуется передавать по ссылке. Если массив не меняется внутри подпрограммы, то его следует передавать как ссылку на константу (const), если меняется - как ссылку на переменную:

    type Arr = array [2..10] of integer;
    
    procedure Squares(var a: Arr);
    begin
      for var i:= Low(a) to High(a) do
        a[i] := Sqr(a[i]);
    end;
    
    procedure PrintArray(const a: Arr);
    begin
      for var i:= Low(a) to High(a) do
        Print(a[i])
    end;
    
    var a: Arr := (1,3,5,7,9,2,4,6,8); 
    
    begin
      Squares(a);
      PrintArray(a);
    end.


    Для доступа к нижней и верхней границам размерности одномерного массива используются функции Low и High.


    Вот рабочий код:

    Program arrays;
    type
      tArray = array [0..3] of integer;
    
    var
      a, b: tArray;
      i: integer;
    
    procedure FirstProcedure(a, b: tArray); 
    begin
      writeLn(a);
    end;
    
    begin
      for i := Low(a) to High(a) do
        begin
          writeLn('WHAT IS A' + i + '?');
          readLn(a[i]);
        end;
        
      for i := Low(b) to High(b) do
        begin
          writeLn('WHAT IS B' + i + '?');
          readLn(b[i]);
        end;
    
      FirstProcedure(a,b);
    end.
    Ответ написан
    8 комментариев