Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Подпрограммы в языке Pascal



Определение процедуры имеет вид:

{Заголовок процедуры:}

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

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

<определение переменных процедуры>

Begin

Операторы процедуры

End;

Вызов процедуры имеет вид:

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

Примеры заголовков процедур:

Procedure F (X: Real; Var Z: Real); - процедура F от входного вещественного параметра X и выходного вещественного параметра Z;

Procedure Pfakt (k: Integer; Var f: Integer); - процедура Pfakt с входным целочисленным параметром k и выходным целочисленным параметром f.

Примеры вызова процедур F и Pfakt:

Var A, B: Real;

N, P: Integer;

….

A:=10.5; F (A, B);

N:=5; Pfakt (N, P);

Определение функции имеет вид:

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

Function < имя > (< перечень формальных параметров >): <тип результата>;

{Тело функции}

<определение переменных функции>

Begin

Операторы функции, один из которых

<имя функции >:= <выражение>

End;

Необходимо, чтобы в теле функции был оператор присваивания следующего вида:

<имя функции>:= <выражение>,

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

Вызов функции имеет вид:

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

Примеры заголовков функций:

Function F (X: Real): Real; - вещественная функция F от вещественного параметра X;

Function Pfakt (k: Integer): Integer; - целочисленная функция Pfakt с входным целочисленным параметром k.

Примеры вызова функций F и Pfakt:

Var A, B, C: Real;

N, P: Integer;

….

A:=10.5; B:=20.1; C:=F (A) *F(B);

N:=5; P:=Pfakt (N) + Pfakt(3);

Особенности передачи параметров. Если перечень параметров подпрограммы пустой, то он опускается вместе со скобками.

Для передачи параметра по ссылке в заголовке подпрограммы перед именем параметра необходимо ключевое слово Var.

В заголовке подпрограммы типы параметров можно обозначать только именами. Если параметром является массив, то необходимо дать имя типу массив предложением type:

TYPE <имя типа> = <определение типа>

Например, можно определить тип целочисленного массива на 10 элементов, а затем описать массив:

Type MASSIV = Array [1..10] Of Integer;

Var M: MASSIV; {массив М типа MASSIV}

Эквивалентное описание без предложения type:

Var M: Array [1..10] of Integer;

Пример заголовка функции:

Function F (М: MASSIV): Real; - вещественная функция F от параметра М типа MASSIV, т.е. целочисленного массива на 10 элементов.

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

Program <Заголовок программы>

<Блок программы>

. {Знак точка}

Блок программы состоит из описаний и определений констант, переменных, подпрограмм и исполняемых операторов.

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

Задача 6.17. Составить программу вычисления площади кольца, заданного радиусами R1 и R2, внешнего и внутреннего кругов соответственно. Для вычисления площади круга составить подпрограмму.

Решение 6.17а. Для вычисления площади круга составим процедуру с именем Krug (определение процедуры и ее вызов выделены).

Program P_617a;

Var R1, R2, {радиус внешнего и внутреннего кругов}

S1, S2: Real; {площадь внешнего и внутреннего кругов }

Procedure Krug (r: Real; Var pl: Real);

Begin

pl:= 3.14*r*r;

End;

Begin

Writeln(‘ Введите радиус внешнего круга’);

ReadLn (R1);

Writeln(‘ Введите радиус внутреннего круга’);

ReadLn (R2);

Krug(R1,S1); Krug(R2,S2);

Writeln(‘ Площадь кольца’, S1 – S2);

End.

Пояснения к программе:

1) Процедура с именем Krug имеет два параметра вещественного типа: параметр r – радиус круга, входной параметр передается по значению, pl – площадь круга заданного радиуса, выходной параметр передается по ссылке, поэтому в заголовке процедуры перед ним служебное слово Var:

Procedure Krug (r: float; Var pl: float);

В теле процедуры вычисляется площадь круга по формуле:

pl:= 3.14*r*r;

2) В основной программе вводятся значения двух радиусов R1 и R2. Для вычисления площади внешнего круга S1 служит оператор вызова процедуры Krug(R1,S1); площади внутреннего круга S2 – оператор Krug(R2,S2); Выводится площадь кольца равная S1 – S2.

Решение 6.17б. Составим функцию вычисления площади круга с именем Pl_Krug.

Program P_617б;

Var R1, R2: Real; {радиус внешнего и внутреннего кругов}

Function Pl_Krug (r: Real): Real;

Begin

Pl_Krug:= 3.14*r*r;

End;

Begin

Writeln(‘ Введите радиус внешнего круга’);

ReadLn (R1);

Writeln(‘ Введите радиус внутреннего круга’);

ReadLn (R2);

Writeln(‘ Площадь кольца’, Pl_Krug(R1) – Pl_Krug(R2));

End.

Пояснения к программе:

1) Функция с именем Pl_Krug имеет один параметр вещественного типа r – радиус круга и обладает значением вещественного типа, поэтому заголовок функции имеет вид:

Function Pl_Krug (r: Real): Real;

В теле функции один оператор, определяющий значение функции Pl_Krug, как площадь круга по формуле:

Pl_Krug:= 3.14*r*r;

2) В основной программе вводятся значения двух радиусов R1 и R2. Выводится площадь кольца, равная значению выражения

Pl_Krug(R1) – Pl_Krug(R2)

Вызов функции Pl_Krug(R1) возвращает значение площади внешнего круга, вызов Pl_Krug(R2) - значение площади внутреннего круга.

Для решения такой простой задачи нет необходимости в применении подпрограмм. Рассмотрен простой пример в учебных целях, для разбора двух типов подпрограмм – процедур и функций. Из приведенного примера видно, что, если результатом работы подпрограммы является одно значение, его удобнее оформить как значение функции (вариант решения задачи 6.17б проще, чем вариант 6.17а). Если результат содержит несколько значений, их обычно делают выходными параметрами.





Дата публикования: 2015-01-14; Прочитано: 1148 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...