Операторы цикла с параметром — КиберПедия 

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Операторы цикла с параметром

2023-01-02 22
Операторы цикла с параметром 0.00 из 5.00 0 оценок
Заказать работу

Различают два вида записи оператора:

            FOR i:= m1 TO m2 DO <тело цикла>;

            FOR i:= m1 DOWNTO m2 DO <тело цикла>;

i – параметр цикла целого типа, управляющий работой цикла;

m1, m2 – выражения целого типа, определяющие начальное и конечное значения параметра цикла.

Тело цикла состоит из одного оператора. В случае выполнения в цикле нескольких операторов надо воспользоваться операторными скобками BEGIN … END.

Работа оператора цикла FOR … TO

Тело цикла выполняется для каждого значения параметра i, начиная от m1 до конечного значения m2. После каждого шага выполнения цикла значение параметра i автоматически увеличивается на 1.

Графическая интерпретация оператора цикла FOR … TO

В блок-схемах оператору цикла FOR соответствует структура ЦИКЛ-ПОКА.

Замечание 1. Оператор цикла FOR … DOWNTO отличается от оператора FOR … TО лишь тем, что , и значение параметра i на каждом шаге вычислений автоматически уменьшается на 1.

Правила использования оператора цикла FOR

1. Параметр цикла , а также значения  и , должны быть целого типа.

2. Значение параметра  увеличивается (или уменьшается) на 1 автоматически. Поэтому шаг изменения параметра  не указывается в заголовке цикла.

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

4. Тело цикла может не выполниться ни разу, если  для цикла FOR … TO, или  для цикла FOR … DOWNTO.

Замечание 2. Оператор цикла WHILE наиболее универсальный из трех операторов цикла, используемых в Турбо Паскале. Однако конструкция оператора цикла FOR является наиболее простой. Поэтому рекомендуется там, где возможно, использовать оператор FOR.

Базовые алгоритмы

Для реализации циклических вычислительных процессов в большинстве случаев используются следующие базовые алгоритмы:

- табулирование функций;

- организация счетчика;

- накопление суммы или произведения;

- поиск минимального или максимального члена последовательности.

Ниже приводятся примеры программирования задач на основе базовых алгоритмов.

Задача 1. Алгоритм организации счетчика.

Дана последовательность:

           .

Определить количество положительных членов последовательности.

                                 Решени е

Представим последовательность в общем виде:

         , где .

Для организации счетчика в памяти компьютера выделяется ячейка, содержимое которой увеличивается на 1 каждый раз, когда встречается положительный член последовательности. В программе ячейке (счетчику) соответствует переменная целого типа, например, переменная L. Работа счетчика реализуется с помощью оператора присваивания L:= L + 1;. В начальный момент содержимое ячейки должно быть равно нулю. С этой целью предварительно осуществляется очистка ячейки оператором L:= 0;.

                            Программа

                  Program Z_1;

                  Var

                   a: real;

                   n, L: integer;

                 Begin

                   L:= 0;

                   for n:= 1 to 50 do

                    begin

                       a:= cos(2 * n - 1);

                       if a>0 then L:= L + 1;

                    end;

                   writeln(‘L=’, L);

                 End.

Задача 2. Алгоритм накопления суммы.

Дана последовательность:

     ,

где  - заданное вещественное число.

Вычислить сумму членов последовательности, которые по модулю больше 0.3.

Решение

Общий член последовательности имеет вид:

                , где .

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

                            Программа

                      Program Z_2;

                      Var

                        a, x, S: real;

                          n: integer;

                      Begin

                        writeln(‘Введите число x’);

                         read (x);

                         S:=0;

                         for n:= 1 to 8 do

                         begin

                            a:= sin(2 * n * x);

                            if abs(a) > 0.3 then S:= S + a;

                        end;

                         writeln(‘S=’, S:6:2);

                       End.

Задача 3. Алгоритм накопления произведения.

Дана последовательность:

  .

Вычислить значение: , где - произведение отрицательных членов последовательности.

 

                               Решение

Общий член последовательности имеет вид:

  где .

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

                         Программа

                     Program Z_3;

                     Var

                       x, y, P, PO: real;

                     Begin

                       PO:= 1;

                       x:= 0.1;

                       while x<=10 do

                         begin

                             y:= cos(x);

                             if y<0 then PO:= PO * y;

                             x:= x + 0.1;

                         end;

                       P:= abs(PO);

                       writeln(‘P=’, P:6:2);

                     End.

Задача 4. Алгоритм поиска минимального члена последовательности.

Дана последовательность:

         ;   .

Найти минимальный член последовательности.

                                 Решение

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

Замечание 1. Алгоритм поиска максимального члена последовательности отличается лишь тем, что в ячейке (ей можно дать имя MAX) запоминается больший из сравниваемых членов последовательности.

Замечание 2. В начальный момент в ячейку MIN можно занести число, которое было бы достаточно большим и превышало область определения сравниваемых чисел, например:

                            MIN:= +1E6;

Тогда при сравнении с содержимым ячейки MIN первое число обязательно окажется меньше и переписывается в ячейку MIN.

При поиске максимального члена последовательности в ячейку MAX в начальный момент заносится, наоборот, достаточно малое число, которое должно быть меньше всех сравниваемых чисел, например:

                             MAX:= -1E6;

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

                                   Программа

                     Program Z_4;

                     Var

                       a, min: real;

                       k: integer;

                     Begin

                       min:= +1E6;

                       for k:= 1 to 10 do

                       begin

                           a:= exp(k) * sin(2*k+1)/cos(2*k+1);

                           if a<min then min:= a;

                       end;

                        writeln(‘min=’, min:6:2);

                     End.

Кратные циклы

Тело цикла может содержать любой оператор, в том числе и оператор цикла. Структура цикла, содержащая вложенный цикл, называется кратным циклом. Число вложений может быть произвольным. Если цикл содержит один вложенный цикл, то он называется двойным циклом.

Цикл, который содержит вложенный цикл, называется внешним. В двойном цикле вложенный цикл называется внутренним. Переменная внутреннего цикла всегда меняется быстрее, чем внешнего. Это означает, что для каждого значения внешней переменной цикла меняются все значения внутренней переменной.

Внешний и внутренний циклы могут использовать любой вид операторов цикла Турбо Паскаля (WHILE, REPEAT, FOR).

Пример. Алгоритм табулирования функции с двумя переменными.

Вычислить значение функции:

              

при x, изменяющемся на интервале [-1, 1] с шагом  и , изменяющемся на интервале [0, 1] с шагом .

При организации двойного цикла примем:

x - внешняя переменная цикла;

y - внутренняя переменная цикла.

Тогда вид таблицы на экране будет следующим:

x y z(x,y)
-1.0 0.0 z(-1.0,0.0)
-1.0 0.1 z(-1.0,0.1)
-1.0 1.0 z(-1.0,1.0)
-0.8 0.0 z(-0.8,0.0)
-0.8 1.0 z(-0.8,1.0)

 

 

                      Программа

             Program TAB_2;

             Var

               x, y, z: real;

             Begin

       writeln(‘ x      y    z(x,y)’);

            ;

             while x<=1 do

begin

       y:= 0;

       while y<=1 do

  begin

                      ;

                       writeln(x:6:1, y:6:1, z:6:1);

                      ;

               end;

            x:= x + 0.2;

          end;

               End.

 

ГЛАВА 7. Массивы

Понятие массива

Массив представляет собой упорядоченное множество однотипных элементов. В Турбо Паскале массив описывается переменной сложной структуры. При описании необходимо указать:

-  способ объединения элементов в структуру;

-  число элементов;

-  тип элементов.

Общий вид описания массива:

<имя массива>: ARRAY [тип–диапазон индексов] OF <тип элементов массива>;

Доступ к каждому элементу массива осуществляется с помощью индексов. Тип – диапазон каждого индекса задается левой и правой границами изменения индекса. Число индексов определяют структуру массива: если используется один индекс, то такой массив называется одномерным, если два индекса – двумерным. В общем случае размерность массива может быть произвольной.

Одномерные массивы

В математике одномерному массиву соответствует мерный вектор, например:

                         , где

компонента (координата) вектора;

номер компоненты;

число компонент.

            Описание одномерного массива

В Турбо Паскале описание одномерного массива задается следующим образом:

<имя массива>: ARRAY [m1 ¼m2] OF < тип элементов>;

Индекс одномерного массива определяет порядковый номер элемента в массиве.

m1 ¼m2 – диапазон значений индекса.

Тип элементов в массиве может быть любым: простым (REAL, INTEGER, CHAR), структурным (ARRAY), строковым (STRING).

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

          Var

           X: array [1¼5] of real;

будет выделяться область из пяти последовательных ячеек для записи значений элементов вещественного типа.

                      Индексные переменные

Выбор отдельного элемента из массива осуществляется с помощью индексной переменной, которая задается следующим образом:

индексная переменная (элемент массива);

имя массива;

индекс (номер элемента массива).

В качестве индекса используются:

- целые константы, например, ;

- целые переменные, например, ;

- индексные выражения, например, .

Замечание. Индексными выражениями являются арифметические выражения целого типа.

 Индексная переменная, как и простая, может стаять в левой части оператора присваивания, например:

;

            Ввод-вывод одномерных массивов

Ввод-вывод массивов осуществляются поэлементно с помощью оператора цикла FOR, в котором в качестве параметра используется индекс.

Пример 1. Организовать ввод с клавиатуры массива:

.

В разделе описания переменных необходимо задать описание массива и индекса.

           Var

            A: array [1¼4] of real;

             i: integer;

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

          Begin {начало программы}

            writeln(‘Введите массив А’);

            for i:= 1 to 4 read(a[i]);

         ……………

На клавиатуре набирается:

               1.2 5 6.8 14 < Enter >.

Пример 2. Организовать вывод массива А на экран таким образом, чтобы все элементы располагались на одной строке экрана.

В программе надо записать следующие операторы:

               for i:= 1 to 4 do write(a[i]:5:1);

               writeln;

Вид выводимого массива на экране:

               1.2 5.0 -6.8 14.0

Оператор WRITELN без списка служит для перевода курсора к началу следующей строки.

            Обработка одномерных массивов

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

Задача 1. Организация счетчика.

Определить количество элементов заданного целочисленного массива , которые делятся на 3 без остатка.

 

                Program OM_1;

                Var   

                    B: array [1… 20] of integer;

                  i, L: integer;

                Begin

               writeln(‘Введите массив В’);

               for i:=1 to 20 do read(b[i]);

               L:= 0;

               for i:=1 to 20 do

              if (b[i] MOD 3) = 0 then L:= L+1;

               writeln(‘L =’, L);

                End.

Задача 2. Накопление суммы и произведения.

     Дано целое число  и массив вещественных чисел . Вычислить среднее арифметическое и среднее геометрическое чисел массива, используя формулы:

             ; .

         Program ОМ_2;

         Var

          Х: array [1… 100] of real;

          n, i: integer;

          S, P: real;

         Begin

        writeln(‘Введите размер массива n’);

        read(n);

        writeln(‘Введите массив Х’);

        for i:= 1 to n do read(x[i]);

        S:= 0;

        P:= 1;

        for i:= 1 to n do

                    begin

                  S:= S + x[i];

                  P:= P * x[i];

      end;

  S:= S/n;

  P:= exp(1/n * ln(P));

       writeln(‘S =’, S:6:2);

         writeln(‘P =’, P:10:2);

          End.

 

 

   Задача 3. Поиск минимального и максимального элементов массива.

Дан вещественный массив .

Поменять местами минимальный и максимальный элементы массива и вывести массив после обмена.

В этой задаче дополнительно надо знать местоположение минимального и максимального элементов, поэтому одновременно с поиском надо запоминать индексы.

Введем обозначения:

min – минимальный элемент;

imin – индекс минимального элемента;

max – максимальный элемент;

imax – индекс максимального элемента.

                 Program ОМ_3;

                 Var

                  T: array [1… 10] of real;

                   i, imin, imax: integer;

                   min, max: real;

                 Begin

                writeln(‘Введите массив T’);

                for i:= 1 to 10 do read(t[i]);

                min:= +1E6;

                max:= -1E6;

                for i:= 1 to 10 do

                     begin

                    if t[i]<min then

                    begin

              min:= t[i];

              imin:= i;

               end;

                    if t[i]>max then

               begin

                   max:= t[i];

                   imax:= i;

               end;

                     end;

                 t[imin]:= max;

                 t[imax]:= min;

                 for i:= 1 to 10 do write(t[i]:6:2);

              writeln;

                 End.

Двумерные массивы

Двумерные массивы в математике представляются матрицей:

или сокращенно можно записать:

, где

число строк;

число столбцов;

индексы (номера) текущих строки и столбца, на пересечении которых находится элемент .

Описание двумерного массива

Описание матрицы в разделе VAR задается структурным типом вида:

<имя массива>: ARRAY [m1..m2, n1..n2] OF <тип элементов>;

m1..m2 – диапазон значений индекса i, определяющий число строк;

 n1..n2 – диапазон значений индекса j, определяющий число столбцов.

По описанию матрицы во внутренней памяти компьютера выделяется область из () последовательных ячеек, в которые при работе программы записываются значения элементов матрицы. Например, по описанию:

              Var

                A: array [1..3, 1..5] of real;

в памяти компьютера выделяется область, состоящая из  последовательных ячеек, для записи элементов матрицы вещественного типа. Из описания видно, что матрица состоит из трех строк и пяти столбцов.

Обращение к отдельным элементам матрицы осуществляется с помощью переменной с двумя индексами, например:

             ;

             ;

             .

Ввод-вывод двумерного массива

Для поэлементного ввода и вывода матрицы используется двойной цикл FOR. Если задать индекс  как параметр внешнего цикла, а индекс  как параметр внутреннего цикла, то ввод-вывод матрицы осуществляется по строкам.

Пример 1. Организовать ввод целочисленной матрицы по строкам.

.

Описание матрицы вместе с текущими индексами имеет вид:

                          Var

                            M: array [1..2, 1..3] of integer;

                            i, j: integer;

Ввод в программе реализуется в форме диалога, т.е. сопровождается соответствующим сообщением:

                Begin {начало программы}

                  writeln(‘Введите матрицу М’);

                  for i:= 1 to 2 do

             for j:= 1 to 3 do read(m[i, j]);

      …………

На клавиатуре нагляднее всего набирать элементы матрицы по строкам.

                     1 2 3 <Enter>

                     4 5 6 <Enter>

Пример 2. Организовать вывод матрицы M на экран.

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

 

                    for i:= 1 to 2 do

                     begin

                  for j:= 1 to 3 do write(m[i, j]:3);

                  writeln

                        end;

Вид матрицы на экране будет следующим:

                      1 2 3

                      4 5 6

                      Обработка матриц

Базовыми алгоритмами обработки матриц являются те же алгоритмы, которые используются при обработке одномерных массивов. Однако реализацию этих алгоритмов можно условно рассматривать для двух типов задач.

1. Алгоритмы реализуются при обработке всех элементов матрицы.

2. Алгоритмы реализуются внутри каждой строки или каждого столбца матрицы.

Реализация алгоритмов для задач первого типа

Задача 1. Дана матрица вещественных чисел . Вычислить значение , где P1 и P2 – произведения положительных и отрицательных элементов матрицы соответственно.

               Program DМ_1;

               Var

                A: array [1..4, 1..6] of real;

                i, j: integer;

                P1, P2, Z: real;

               Begin

              writeln(‘Введите матрицу А’);

              for i:= 1 to 4 do

                 for j:= 1 to 6 do read(a[i,j]);

              P1:= 1;

              P2:= 1;

 

              for i:= 1 to 4 do

            for j:=1 to 6 do

           begin

          if a[i,j]>0 then P1:= P1 * a[i,j];

          if a[i,j]<0 then P2:= P2 * a[i,j];

      end;

Z:= P1/abs(P2);                                                                                                                             

writeln(‘Z=’, Z:10:2);

               End.

  Задача 2. В квадратной целочисленной матрице  вычислить модуль разности между числом нулевых элементов, стоящих ниже главной диагонали, и числом нулевых элементов, стоящих выше главной диагонали.

Введем обозначения:

L1 – число нулевых элементов ниже главной диагонали;

L2 – число нулевых элементов выше главной диагонали;

L= |L1-L2|.

 

       Program DМ1_2;

       Var

         B: array [1..5, 1..5] of integer;

          i, j, L1, L2, L: integer;

       Begin

       writeln(‘Введите матрицу B’);

       for i:= 1 to 5 do

       for j:= 1 to 5 do read(b[i,j]);

       L1:= 0;

       L2:= 0;

       for i:= 1 to 5 do

     for j:= 1 to 5 do

    if b[i,j]=0 then

     begin

       if i>j then L1:= L1+1;

       if i<j then L2:= L2 +1;

      end;

             L:= abs(L1 – L2);

writeln(‘L=’, L);

       End.

Реализация алгоритмов для задач второго типа

     Задача 1. В матрице  вещественных чисел первый элемент каждой строки поменять местами с минимальным элементом этой строки. Вывести матрицу Х после обмена.

                 Program DМ2_1;

                 Var

                   X: array [1..3,1..6] of real;

                   i, j, jmin: integer;

                   min: real;

                 Begin

                writeln(‘Введите матрицу X’);

                for i:= 1 to 3 do

                   for j:= 1 to 6 do read(x[i,j]);

               for i:=1 to 3 do

         begin

        min:=+1E6;

        for j:=1 to 6 do

            if x[i,j]<min then

               begin

             min:=x[i,j];

             jmin:=j;

               end;

         x[i,jmin]:=x[i,1];

         x[i,1]:=min;

         end;

     for i:=1 to 3 do

          begin

         for j:=1 to 6 do write (x[i,j]:6:1);

         writeln;

          end;

                  End.

  Задача 2. Дана матрица вещественных чисел . Вычислить среднее арифметическое каждого столбца. Результат оформить в виде одномерного массива .

                         Program DМ2_2;

                         Var

                          C: array [1..8, 1..4] of real;

                          S: array [1..4] of real;

                           i, j: integer;

                         Begin

                        writeln(‘Введите матрицу C’);

                        for i:= 1 to 8 do

                        for j:= 1 to 4 do read(c[i,j]);

                        for j:= 1 to 4 do

                       begin

                         s[ j ]:= 0;

                         for i:= 1 to 8 do s[ j ]:= s[ j ] + c[i,j];

                                              s[ j ]:= s[ j ]/8;

                       end;

                     for j:= 1 to 4 do write(s[ j ]:8:2)

                     writeln;

                        End.

В данной программе следует обратить внимание на то, что при вычислении каждого элемента s[j] организован двойной цикл, в котором индекс  является внешним параметром цикла, а индекс внутренним. Это обеспечивает обработку элементов матрицы по столбцам.

 

ГЛАВА 8. Подпрограммы

Структура сложной программы

Любая программа в Турбо Паскале может быть разбита на ряд самостоятельных программных единиц - подпрограмм. Такое разделение вызвано двумя причинами.

 

1. Экономия памяти.

Каждая подпрограмма записывается в программе один раз, в то время как обращаться к ней можно многократно из разных точек программы.

2. Структурирование программы.

Алгоритм решения задачи может быть достаточно сложным, поэтому целесообразно выделить самостоятельные смысловые части алгоритма и оформить их в виде подпрограмм. Любая подпрограмма в свою очередь может содержать подпрограммы низшего уровня. Такие структурированные программы легче понять, и они удобны в отладке.

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

Структура сложной программы

Раздел типов TYPE в основной программе может отсутствовать. Его назначение рассмотрим позднее.

Описания подпрограмм располагаются вслед за разделом описания переменных основной программы VAR. Число подпрограмм может быть произвольным.

 В Турбо Паскале различают два вида подпрограмм: процедуры и функции. В отдельных программах могут отсутствовать либо процедуры, либо функции.

Процедуры

Любая процедура состоит из заголовка и тела процедуры. Тело процедуры оформляется по тем же правилам, что и основная программа, т.е. состоит из раздела описания переменных и раздела операторов. Однако заканчивается тело процедуры символом ‘;’.

          Общий вид описания процедуры

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

В Турбо Паскале допускается запись заголовка процедуры без списка параметров:

                    PROCEDURE <имя>;

Обращение к процедуре

Описание процедуры само по себе никаких действий не вызывает. Чтобы выполнить процедуру, в нужной точке основной программы необходимо записать оператор вызова процедуры.

     Общий вид оператора вызова процедуры

<имя процедуры>(<список фактических параметров>);

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

 

Глобальные и локальные переменные

Переменные, описанные в основной программе, являются глобальными. Такие переменные можно использовать в любой точке программы, в том числе и в процедуре.

Локальные переменные определяются в разделе описания VAR внутри процедуры. Они имеют смысл только в процедуре и недоступны основной программе.

Пример программы с процедурой

Вычислить значение:

,

где заданное вещественное число.

Введем обозначения:

; .

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

          , где

 номер шага вычисления (умножения);

число шагов вычислений.

При описании процедуры надо с помощью списков параметров связать формальный параметр  с основанием степени, параметр с показателем, а результат выполнения процедуры - с фактическим результатом. Поскольку в задаче требуется вычислить три операции возведения в степень (), то в основной программе надо записать три оператора вызова процедуры.

                         Программа

        Program Primer_1;

        Var

             a, r1, r2, r3, z: real;

         Procedure ST (x: real; n: integer; var P: real);

             var

       i: integer;

     begin

       P:= 1;

       for i:= 1 to n do P:= P * x;

     end;

         Begin {начало основной программы}

        writeln(‘Введите число а’);

           read (a);

   ST(a, 5, r1);

   ST(1/a, 5, r2);

   ST(a, 7, r3);

   Z:= (r1 + r2) / (2 * r3);

   writeln(‘Z=’, Z:6:2);

         End.

В заголовке процедуры с именем ST указаны два входных формальных параметра (x, n) и один выходной (P ).

Выполнение программы всегда начинается с операторов основной программы. В данном случае после ввода заданного числа () последовательно вызывается три раза процедура ST. При каждом вызове происходит соответствующая замена формальных параметров (x, n ) на фактические, и вычисленный результат через формальный параметр Рприсваивается фактическим переменным r1, r2, r3 соответственно. Далее вычисляется значение Z, и результат выводится на экран.

Согласование параметров

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

 

 

Механизм замены параметров

В списке формальных параметров выделяется два вида параметров: параметры-значения и параметры-переменные. Механизм замены для каждого вида параметров различен.

Параметры-значения играют роль входных параметров. Фактическим параметром, соответствующим параметру-значению, может быть константа, переменная или выражение. Параметры-значения являются локальными переменными для процедуры. Для них в памяти компьютера временно выделяются ячейки, в которые передаются копии вычисленных значений фактических параметров. При выполнении процедуры параметры-значения могут изменяться, однако соответствующие им фактические параметры остаются без изменения.

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

Рассмотрим два примера, иллюстрирующих понятие параметра-значения и параметра-переменной.

   Пример 1.

                    Program P1;

                    Var

                      x: integer;

                     Procedure Z (y: integer);

                    begin

                    y:= 1;

                    end;

 

                       Begin


Поделиться с друзьями:

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.601 с.