Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_5_7.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
349.7 Кб
Скачать

6.5.1. Описание процедуры. Оператор процедуры

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

Структура описания процедуры

Procedure <имя> (<список формальных параметров>)<директива>;

Const ...;

Type ...;

Var ...;

{-------------------------Блок процедуры---------------------}

Begin

<операторы>

End;

<имя> - любой допустимый идентификатор, напр., Proc1.

<список формальных параметров> - последовательность идентификаторов (имен) формальных параметров и их типов, напр., Step:real, Mas: Type_mas,..., разделенных запятой.

Список формальных параметров может включать в себя параметры-значения, параметры-переменные (перед ними должно стоять ключевое слово Var), параметры процедуры (перед ними должно стоять ключевое слово Procedure) и параметры-функции (перед ними должно стоять ключевое слово Function), нетипизированные параметры, перед которыми должно стоять служебное слово Var и отсутствует указание типа.

<директива> - одна из директив: Interrupt, External, Assembler, Inline, Forward. При выполнении лабораторной работы может быть использована директива опережающего описания Forward. Опережающее описание заключается в том, что объявляется лишь заголовок процедуры, ее тело заменяется зарезервированным словом Forward, а само тело процедуры записывается в другом месте той же программы.

Вызов и выполнение процедуры осуществляется при помощи оператора процедуры:

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

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

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

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

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

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

Program DemoProc;

{Определение типа Mas (массива из 10 вещественных чисел)}

Type

Mas=Array[1..10] of real;

{Объявление фактических параметров}

Var

M1, M2 :Mas;

{Процедура ввода массива из 10 вещественных элементов с формальным параметром X}

Procedure MasInp (Var X:Mas);

Var

I: Byte; {I - локальная переменная для организации цикла}

Begin

For I:=1 to 10 do

Begin

Write('Введите ', i:3 , '-й элемент массива');

Readln(X[i])

End

End;

{Процедура вывода массива из 10 вещественных чисел с формальным параметром X}

Procedure MasOut (X:Mas);

Var

I: Byte;{i - локальная переменная для организации цикла}

Begin

For I:=1 to 10 do

Writeln(i:3 , '-й элемент массива ', X[i]:6:2)

End;

{Процедура возведения в квадрат значений элементов массива с формальными параметрами X и Y}

Procedure MasMult (X:Mas; var Y:Mas);

Var

i:Byte; {i - локальная переменная для организации цикла}

Begin

For i:=1 to 10 do

Y[i]:=X[i]*X[i]

End;

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

Begin

Writeln('Введите массив из 10 чисел ');

{Вызов процедуры MasInp для ввода значений элементов массива с передачей ей фактического параметра M1}

MasInp(M1);

Writeln('Введенный массив ');

{Вызов процедуры MasOut для вывода значений введенных элементов массива, с передачей ей фактического параметра M1}

MasOut(M1);

{Вызов процедуры MasMult для возведения значений элементов массива в квадрат с передачей ей фактических параметров: M1 (исходные данные) и M2 (результат)}

MasMult(M1,M2);

Writeln('Квадраты чисел: ');

{Вызов процедуры MasOut для вывода значений элементов массива, возведенных в квадрат с передачей ей фактического параметра M2}

MasOut(M2);

{Вызов процедуры MasMult для возведения значений элементов массива в четвертую степень с передачей ей фактических параметров: M2 (исходные данные) и M1 (результат)}

MasMult(M2,M1);

Writeln('Числа в четвертой степени: ');

{Вызов процедуры MasOut для вывода значений элементов массива, возведенных в четвертую степень с передачей ей фактического параметра M2}

MasOut(M1);

End.