Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

I : Integer;

Begin

For i := 1 To n Do

Write(Sim);

End; { GorLine }

Begin { Основная программа }

Randomize;{Инициализация генератора случайных чисел}

For I :=1 To N Do { Заполнение массива }

Dan[I] := Random(75)+1; { случайными числами }

For I :=1 To N Do

Begin

K := Dan[i];

GorLine(K, ’*’);

WriteLn;

End;

WriteLn(’Нажмите ENTER’);

ReadLn;

End.

Здесь N — формальный параметр (в процедуре), K — фактический (в основной программе).

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

– количество передаваемых фактических параметров должно равняться количеству описанных в процедуре формальных параметров.

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

Например, пусть в программе описана процедура P1 так, как это показано ниже.

Procedure P1(X,Y,Z:Real;K:Integer);

. . . . . . .

Begin

{ Тело процедуры }

End;

. . . . . . .

Begin { Основная программа }

. . . . .

P1(A,B,C,N); { Вызов процедуры P1}

. . . . .

End.

При вызове процедуры P1 будет установлено следующее соответствие между фактическими и формальными параметрами:

Для обеспечения соответствия массивов и некоторых других типов данных (записей, файлов) стандарт языка Паскаль требует их описания в разделе Type. Типы, определяемые таким образом, имеют тот же статус, что и стандартные: Real, Integer и др. Описатель типов в программе располагается после описания констант и перед описанием переменных. В общем виде типы пользователя описываются так.

Параметры процедур делятся на 2 класса:

1) параметры–значения;

2) параметры–переменные.

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

Так, в процедуре GorLine параметры n, Sim, а в Р1 – все 4 параметра являются параметрами–значениями. При обращении к процедуре Р1 значения фактических параметров A, B, C, N присваиваются соответствующим формальным параметрам X, Y, Z, K. Поэтому, если в ней был, например, оператор Z:=Z+1, то изменится именно значение Z, а переменная A - нет. Другими словами, после завершения работы процедуры все переданные ей параметры–значения в главной программе не меняются.

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

GorLine (20,’+’);

GorLine (2*K-1, Pred(Simvol));

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

В заголовке параметру-переменной должен предшествовать описатель (слово) Var.

Например:

Procedure SumXY(X,Y:Real;Var Z,Q:Real);

Begin

Z:=X+Y;

If Z<0 Then

Q := -Z

Else

Q := Z;

End; { SumXY }

Описатель Var записывается столько раз, сколько разных типов параметров-переменных используется в процедуре. Параметр-переменная при вызове не может представляться выражением.

Пример 6.2 Применение процедур при работе с массивами.

Program pr;

type

mas: array [1…10] of integer;

var