Смекни!
smekni.com

Процедуры и функции в языке Паскаль (стр. 2 из 3)




б)

нет да


а)

Рис. 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

N вар.

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

1.

Процедура запрашивает три фамилии и выводит текст в заданном месте экрана.(использовать модуль crt)

2.

Процедура запрашивает имена трёх человек и выводит их разным цветом.(использовать модуль crt) красный синий голубой)

3.

Процедура запрашивает оценки по трём предметам и цвет и выводит данным цветом.(использовать модуль crt)(красный синий голубой)

4.

Процедура запрашивает частоту обновления трёх марок мониторов и выводит их мерцающим цветом. (использовать модуль crt)

5.

Процедура запрашивает частоту трёх марок процессора и выводит их по главной диагонали. (использовать модуль crt)

6.

Процедура запрашивает три объёма памяти различных марок видео карт и выводит их по побочной диагонали. (использовать модуль crt)

7.

Процедура запрашивает частоты трёх марок материнских плат процессора и выводит их сверху, посередине, внизу средней части экрана. (использовать модуль crt)

8.

Процедура запрашивает скорость трёх марок машин и выводит их в центре экрана в начале в середине и в конце строки. (использовать модуль crt)

9.

Процедура запрашивает массу подъёмную трёх марок грузовых авто и выводит их в конце строки в на 1 , посередине, в конце строки. (использовать модуль crt)

10.

Процедура запрашивает количество мест трёх марок автобуса и выводит красным цветом в нижней строке экрана по очереди. (использовать модуль crt)

Таблица 2


N вар.

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

1.

при а=4,5; b=0,7; c=6,2; А x принимает значения 0,2; 0,56; 0,83

2.

, при a=0,8; b=0,16; c=0,4; a=0,6; b=0,4; c=1,2; a=0,47; b=0,1; c=0,5.

3

, при a=0,15; b=1,5; a=1,7; b=0,1.

4.

, при x=1,4; y=0,8; x=0,9; y=0,6; x=2,9; y=0,4; a d=5,3, при всех значениях x,y.

5.

, при x=0,4; y=1,2; x=0,25; y=1,3; a=0,54; b=1 при всех значениях x, y

6.

, при a=10,7; b=6,3; y=0,35; a x принимает значения 0,6; 0,51; 0,42.

7.

, при x=3; y=4; x=1,6; y=5,8; x=4,5; y=2,7; a=7,1; b=2,4 при всех значениях x, y

8.

, при x=0,1; y=0,7; x=0,4; y=0,6 x=0,5; y=0,2; a=2; b=0,1 при всех значениях x, y

9.

, при a=9,7; b=2,7, a x принимает значения 4,8; 9,6; 0,44.

10.

, при x=0,35; y=0,1; x=0,82; y=0,12; x=0,67; y=0,3, a=0,24; b=4,9 при всех значениях x, y.

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