Система программирования Турбо паскаль 7.0

       

Параметры-массивы


Раздел типов

Если мы хотим передать в подпрограмму отдельный элемент

массива, то в качестве соответствующего ему формального параметра указывается переменная того же типа.

 Проблемы возникают, если в подпрограмму необходимо передать весь массив, так как структурный тип массива нельзя указывать в списке формальных параметров. В этом случае тип массива объявляется заранее с помощью раздела TYPE. Например, определим имена типов для вектора

 и матрицы
.

                               Type

                                    Vect = array[1..10] of real;

                                    Matr = array[1..5,1..8] of real;

В дальнейшем имена типов Vect и Matr можно использовать в разделе описания переменных, например:

                               Var

                               X: Vect;

                               A: Matr;

Объявленные типы указываются также в списке формальных параметров, например:

                               Function (X: Vect; A: Matr): real;



Если по условию задачи в подпрограмме требуется при разных обращениях обрабатывать массивы с разными размерами, то в разделе TYPE объявляется тип массива с наибольшим размером. Например, при передаче в подпрограмму массивов

 и
 в разделе TYPE надо записать:

                               Type

                                    Vect = array[1..15] of real;

Тогда по описанию

                               Var

                                     X, Y: Vect;

в памяти компьютера  выделяется максимальная область из 15 ячеек для каждого массива. При обработке массива с меньшим размером, часть выделенной памяти остается неиспользованной. В обращнии к подпрограмме в этом случае необходимо указать размер массива.

Примеры программирования задач с использованием подпрограмм

В приведенных ниже примерах для каждой задачи составим два варианта программы: с использованием процедуры и с использованием функции. На практике выбор того или иного варианта зависит от опыта программиста.

Задача 1

Даны два вектора:

 и
.


Вычислить значение:
, где
;  
;
максимальные компоненты векторов
 и
 соответственно;
средние значения компонент векторов
 и
 соответственно.
Вариант 1.
Использование процедуры.
           Program P1_P;
           Type
                 Vect = array[1..20) of real;
           Var
                  X, Y: Vect;
             i: integer;
             Dx, Dy, D: real;
           Procedure Mod_Otkl (A: Vect; n: integer; var Da: real);
          var
        ma, sa: real;
        i: integer;
 begin
   ma := -1E6;
   sa := 0;
   for i := 1 to n do
        begin
       if a[i]>ma then ma := a[i];
       sa := sa + a[i];
       end;
  sa := sa/n;
  Da := abs(ma - sa);
  end;
            Begin {начало основной программы}
           writeln(‘Введите массив X’);
           for i :=1 to 8 do read(x[i]);
           writeln(‘Введите массив Y’);
                for i := 1 to 20 do read(y[i]);
           Mod_Otkl(X, 8, Dx);
           Mod_Otkl(Y, 20, Dy);
           D := Dx / Dy;
           writeln(‘D=’,  D:6:2);
            End.
Вариант 2.
Использование функции.
           Program P1_F;
           Type
                 Vect = array[1..20) of real;
           Var
                 X, Y: Vect;
            i: integer;
           Dx, Dy, D:real;
           Function Mod_Otkl (A: Vect; n: integer): real;
          var
       ma, sa, Da: real;
       i: integer;
 begin
  ma := -1E6;
  sa:=0;
  for i :=1 to n do
      begin
     if a[i]>ma then ma := a[i];
     sa := sa +a i];
                      end;
   sa := sa / n;
   Da := abs(ma - sa);
   Mod_Otkl := Da;
 end;
           Begin {начало основной программы}
           writeln(‘Введите массив X’);
           for i := 1 to 8 do read(x[i]);
           writeln(‘Введите массив Y’);
                for i := 1 to 20 do read(y[i]);
           Dx := Mod_Otkl(X, 8);
           Dy := Mod_Otkl(Y, 20);
           D := Dx / Dy;
           writeln(‘D=’,  D:6:2);
           End.


                                           Задача 2
Даны две матрицы:
 и
.
Вычислить разность
,
 где
 и
 - количество положительных элементов в матрице  A и B соответственно.
Вариант 1.
Использование процедуры.
           Program P2_P;
           Type
                 Matr = array[1..5, 1..7) of real;
           Var
                 A, B: Matr;
            i, j, KA, KB, C: integer;
            Procedure CP(D: Matr; m, n: integer; Var KD: integer);
           var
       i, j: integer;
  begin
  KD := 0;
   for i := 1 to m do
      for j := 1 to n do
          if d[i,j]>0 then KD := KD + 1;
  end;
            Begin {начало основной программы}
            writeln(‘Введите матрицу A’);
            for i := 1 to 5 do
               for j := 1 to 6 do read(a[i,j]);
             writeln(‘Введите матрицу В’);
             for i := 1 to 4 do
                for j := 1 to 7 do read(b[i,j]);
             CP(A, 5, 6, KA);
             CP(B, 4, 7, KB);
             C := KA - KB;
             writeln(‘C=’,  C:6:2);
            End.  
Вариант 2.
Использование функции.
           Program P2_F;
           Type
                 Matr = array[1..5, 1..7) of real;
           Var
                 A, B: Matr;
            i, j, C: integer;
            Function CP(D: Matr; m, n: integer): integer;
           var
       i, j, KD: integer;
  begin
  KD := 0;
  for i := 1 to m do
     for j := 1 to n do
         if d[i,j]>0 then KD := KD + 1;
  CP := KD;
  end;
            Begin {начало основной программы}
             writeln(‘Введите матрицу A’);
             for i := 1 to 5 do
                for j := 1 to 6 do read(a[i,j]);
             writeln(‘Введите матрицу В’);
             for i := 1 to 4 do
                for j := 1 to 7 do read(b[i,j]);
             C := CP(A, 5, 6) - CP(B, 4, 7);
             writeln(‘C=’,  C);
            End.
ГЛАВА 9.  Текстовые данные
В Турбо Паскале текстовая информация может быть представлена двумя типами данных: символьный (CHAR) и строковый (STRING).

Содержание раздела