Формальные параметры – переменные

Перед ними ставится слово Var.

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

Пример 1:

:

Procedure Xxx(Var A,B,C:Integer; Var D:Real);{A,B,C,D – формальные параметры – переменные; }

:

Xxx(M,N,X,Y);{M,N,X,Y – переменные}

Рассмотрим на примере принцип работы параметров-переменных:

Пример 2:

Program Pr1;

Var A,B:Integer;

Procedure Zamena(Var Y,X:Integer);

Begin

X:=X+1;Y:=Y+10;

End;

Begin

A:=0;B:=0;

Zamena(A,B);

Writeln(A,B);

End.

Результат: 1,10 {Результат работы процедуры передается в программу – переменные А и В изменили свое значение}

Задача.

Составить программу вычисления максимального из 4-х чисел, используя процедуру вычисления максимального из 2-х чисел.

Решение:

Program Pr3;

Var A,B,C,D,M1,M2,M3:Integer;

Procedure Max(Var X,Y,M:Integer);

Begin

If X>Y Then M:=X Else M:=Y;

End;

Begin

Readln(A,B,C,D);

Max(A,B,M1);

Max(C,D,M2);

Max(M1,M2,M3);

Writeln(’Max=’,M3);

End.

Задачи:

1. Правильно ли описана процедура и обращение к ней (если есть ошибки, то исправить):

Procedure Str(Var (A,B,C): Real;)

C:=A+B+C;

:

Str(X,Y,Z,S);

:

2. В чем отличие процедур:

а)Procedure Str1;

Begin

P:=(A+B+C)/2;

S:=sqrt(P*(P-A)*(P-B)*(P-C));

End;

в)Procedure Str1(Var A,B,C,S:Real);

Begin

P:=(A+B+C)/2;

S:=sqrt(P*(P-A)*(P-B)*(P-C));

End;

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

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

а)Procedure M(Var X,Y,M:Real);

Begin M:=X+Y; End;

б)Procedure M1(Var X,Y,Z,T:Real);

Begin Z:=X+Y; T:=X*Y; End;

в)Procedure M2(Var X,Y,R:Real; Var P:Integer);

Begin If sqr(X)+sqr(Y)<=sqr(R) Then P:=1 Else P:=0; End;

4. Процедура описана следующим образом: Procedure M2(Var X,Y:Integer); Допустимо ли обращение к процедуре, имеющее вид М2(A,B-1);

5. Даны числа X,Y,Z. Используя процедуру нахождения максимального из двух чисел, вычислить U=(Max(X,Y)+Max(X,Z))/(Max(Y,Z));

6. Одинаковы ли последствия обращения к процедурам:

а) Procedure P;

Begin X:=X+Y; Y:=X-Y; End;

б) Procedure P;

Begin Y:=X-Y; X:=X+Y; End;

Формальные параметры – значения

Слово Var не ставится.

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

Пример:

:

Procedure Xxx(A,B,C:Integer; Var D:Real);{A,B,C – формальные параметры – значения; D – формальный параметр – переменная; }

:

Xxx(M,N,X,Y);{M,N,X – могут быть выражениями; Y – только переменная}

Рассмотрим на примерах различия при использовании параметров-значений и параметров-переменных :

Пример1.

Program A1;

Var X:Integer;

Procedure Zamena(Y:Integer);

Begin

Y:=1;

End;

Begin

X:=0; Zamena(X);

Writeln(’X=’,X);

End.

Результат: X=0

Пример2.

Program Pr2;

Var X:Integer;

Procedure Zamena(Var Y:Integer);

Begin

Y:=1;

End;

Begin

X:=0; Zamena(X);

Writeln(’X=’,X);

End.

Результат: X=1

Задача:

Составить программу обращения к процедуре вычисления натуральной степени числа A (Z=Ak)

Program Proc2;

Var A,K,Z:Integer;

Procedure Nstep(X:Real;N:Integer;Var Y:Real);{Y=Xn}

Var I:Integer;

Begin

Y:=1;

For I:=1 to N do

Y:=Y*X;

End;

Begin

Readln(A,K);

Nstep(A,K,Z);

Writeln(’Z=’,Z);

End.

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

Задачи

1. В программе описана процедура Р с формальными параметрами X,Y и процедура Q с формальными параметрами S,T. Среди операторов программы встречаются операторы процедуры P(1,A) и Q(B,D+F). Какие из формальных параметров процедур P и Q заведомо являются параметрами-значениями?

2. Даны числа A, B, C, D. Найти значение выражения K=M*N+K, где M=Max(A,B); N=Max(B,C,D); K=Max(A,B,C,D);. Использовать процедуру нахождения максимального из 2-х чисел.

3. Даны натуральные числа A, B, C, D, X. Найти значение выражения M=(X*A)A+BC*(D*X)C. Использовать процедуру вычисления натуральной степени числа.

4. Составить программу обращения к процедуре вычисления целой степени числа А (Z=Ak) (К-целое число)

5. Даны натуральные числа K, M. Требуется вывести на экран рамку из звездочек высота которой – K строк, ширина – M знаковых позиций. Описать процедуру Zvezda(S,N), обращение к которой дает вывод данной рамки.

Описание функций

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

Функция состоит из заголовка и блока:

Заголовок функции:

Function Xxx(P1:T1;P2:T2;…Pn:Tm):Q;

Xxx - имя функции (любой идентификатор);

P1,P2,…,Pn - формальные параметры;

T1,T2,…,Tm – типы формальных параметров;

Q – тип значений, которые способна принимать функция в результате ее выполнения;

Особенности раздела операторов функции:

Раздел операторов функции должен содержать оператор присваивания, в котором слева помещено имя функции.

Обращение к функции:

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

Z:=Xxx[(B1,B2,…,Bn)];

Задача.

Составить программу вычисления максимального из 4-х чисел, используя функцию вычисления максимального из 2-х чисел.

Program func1;

Var A,B,C,D,M1,M2,M3:Integer;

Function Max(X,Y:Integer):Integer;

Begin

If X>Y Then Max:=X Else Max:=Y;

End;

Begin

Readln(A,B,C,B);

m1:=Max(A,B);

m2:=Max(C,D);

m3:=Max(M1,M2);

Writeln(’Max=’,M3);

End.

Задачи:

Из параграфа 9.4 решить задачи №№ 2,3,4,5, используя обращение к функции.

Стандартные модули

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

Модуль System

Модуль автоматически подключается к любой программе

В модуль System входят следующие подпрограммы:

- арифметические функции; {рассмотрены в параграфе 3.3}

- функции для величин порядкового типа;

- функции преобразования типов;

- процедуры и функции работы со строками;

- процедуры и функции работы с файлами;

Наши рекомендации