а)
Рис. 1
В программе оператор процедуры использован дважды, и каждый раз он вызывает из описательной части программы процедуру STEP1. В теле процедуры произойдет замена формальных параметров N,X,Y на фактические M,A,Z первый раз и на M,1/A,Z второй раз. Затем выполняется совокупность действий, предусмотренных операторами процедуры, и в программу будет возвращен результат Z. Возврат осуществляется к оператору программы STEP4, следующему за оператором вызова процедуры. Очень важно понимать суть и механизм замены формальных параметров фактическими.
Формальные параметры – это переменные, фиктивно (формально) присутствующие в процедуре и определяющие тип и место подстановки фактических параметров.
Фактические параметры – это реальные объекты (программы, заменяющие в теле процедуры при ее вызове формальные параметры). Над этими объектами и производятся действия, предусмотренные операторами тела процедуры.
Имена формальных и фактических параметров целесообразно выбирать различными, что сделает программу более наглядной.
Обращение к функции осуществляется аналогично обращению к стандартным функциям (sin, cos, tan и т.д.) и является разновидностью операнда в выражениях в отличие от вызова процедуры, являющегося разновидностью оператора. В этом месте выражения, где это необходимо, записывается имя функции, вслед за которым в скобках перечисляются фактические параметры. Если вызывается функция без параметров, то указывается только ее имя.
Пример:
Составить программу вычисления
,используя функцию STEP3, описанную в п. 1.2., (A – действительное, n - целое).
{ Пример вычисления функции }
PROGRAM STEP6;
VAR M: INTEGER;
A, Z, R: REAL;
{ Функция вычисления степени }
FUNCTION STEP3(N: INTEGER; X: REAL): REAL;
VAR M: INTEGER;
Y: REAL;
BEGIN {STEP3}
Y:=1;
FOR I:=1 TO N DO
Y:=Y*N;
SYEP3:=Y
END; {STEP3}
BEGIN
READ (A,M);
WRITELN (‘A=’, A, ‘M=’, M);
Z:=STEP3(5,A)+STEP3(5, 1/A);
IF M=0 THEN R:=1
ELSE IF M>0 THEN R:=STEP3(M,A)
ELSE R:=STEP3(M,1/A);
Z:=Z/(2*R);
WRITELN(‘Z=’, Z)
END.
Функция STEP3 вызывается четыре раза для различных значений фактических параметров. Определение фактических и формальных параметров, локальных и глобальных переменных для функций и процедур совершенно идентично.
Процедуры могут работать не только с простыми переменными, но и с массивами. В качестве примера рассмотрим следующую задачу.
Даны два вектора: А, состоящий из трех элементов, и В, состоящий из четырех элементов. Возвести каждый элемент вектора в квадрат и найти сумму элементов. Действия над векторами оформить в виде процедуры.
PROGRAM SUMMA;
TYPE MAX=ARRAY[1..4] OF REAL;
VAR S1, S2: REAL;I: INTEGER;
A,B: MAX;
PROCEDURE PR(N: INTEGER;VAR S: REAL;VAR C: MAX );
VAR I: INTEGER;
BEGIN
S:=0;
FOR I:=1 TO N DO
BEGIN
C[I]:=SQR(C[I]);
S:=S+C[I]
END;
BEGIN
FOR I:=1 TO 3 DO
READLN(A[I]);
FOR I:=1 TO 4 DO
PR(3,S1,A);
PR(4,S2,B);
WRITELN(S1,S);
FOR I:=1 TO 3 DO
WRITE(A[I]);
FOR I:=1 TO 3 DO
WRITE(B[I]);
END.
2. Задание
2.1 Из таблицы 1. По номеру компьютера взять задание и составить программу,
иcпользуя подпрограмму- процедуру.
2.2 Из таблицы 2 по номеру компьютера взять задание и составить программу, ис
пользуя подпрограмму FUNCTION.
2.3 Из таблицы 3 по номеру компьютера взять задание и составить программу, ис
пользуя подпрограмму FUNCTION.
2.4 Из таблицы 4. По номеру компьютера взять задание и составить программу, ис
пользуя подпрограмму- процедуру
3. Содержание Отчёта
ОТЧЁТ ДОЛЖЕН СОДЕРЖАТЬ:
1) Задание к работе;
2) Программу;
3) Блок- схему алгоритма;
4) Результаты расчётов;
4. Контрольные вопросы:
1. Заголовок процедуры и функции.
2. Что входит в тело процедуры?
3. Отличия процедуры и функции.
4. Понятия локальной и глобальной переменной.
5. Обращение к подпрограммам.
6. Какие параметры являются фактическими, какие формальными?
7. Параметры процедур и функций.
8. Соответствие между формальными и фактическими параметрами.
5. Литература
1. Новичков В.С. ПАСКАЛЬ – В.С. Новичков, Н.И. Парфилов, А.Н. Пылькин - М.: Высш. школа, 1990г. 223 стр.
2. Савельев А.Я. ЯЗЫКИ ПРОГРАММИРОВАНИЯ (Паскаль, ПЛ/М). – М.:Высш. школа. 1987г. –143 стр.
3. Боон К. ПАСКАЛЬ ДЛЯ ВСЕХ. – М.- Энергоатомиздат, 1988г.- 190 стр.
Здесь использованы следующие процедуры:
GoToXY (X, Y:Byte) - перемещает курсор к элементу экрана с заданными координатами, учитывая, что размер экрана в текстовом режиме 25 строк по 80 символов.
TextBackGround (Color : Byte) – задает цвет фона.
TextColor (Color : Byte) – задает цвет символов.
uses crt;
var s1,s2,s3:string;
c1,c2,c3:byte;
procedure pr(s:string;x,y,c:byte);
begin
textcolor(c);
gotoxy(x,y);writeln(s);
end;
begin
writeln('введите оценку по математике');readln(s1);
writeln('введите оценку по физике');readln(s2);
writeln('введите оценку по истории');readln(s3);
clrscr;
pr('матемаитка'+s1,1,1,5);{на первом месте текст, столбец, строка, цвет печати}
pr('физика'+s2,40,10,8); {физика+ оценка, столбец 40, строка 10, цвет 8(серый)}
pr('история'+s3,70,23,12); {история+, столбец 70, строка 23, цвет 12(св крас)}
repeat until keypressed;
end.
Таблица 1
Таблица 2
Программа, содержащая описание функции выбора меньшего из двух аргументов.