Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Програмирование. Структурное програмирование, подпрограммы, строки. Учебное пособие
.pdf
Раздел операторов функции
Раздел операторов функции содержит операторы, которые выполняются при вызове функции. Он строится по тем же правилам, что и
раздел операторов программы.
Раздел операторов функции должен содержать, по крайней мере,
один оператор присваивания, в котором идентификатору функции или
переменной result присваивается значение.
Пример 4. Формат описания функции
var
Z: Extended;
I: Integer;
begin
Z := 1.0;
I := Y;
while I > 0 do
begin
if Odd(I) then Z := Z * X;
I := I div 2;
X := Sqr(X);
end;
Power := Z;
end;
Вызов функции
Вызвать функцию – это значит передать управление первому оператору раздела операторов функции. После этого функция начинает
выполнять описанные в ней действия. Вызов (активация) функции
осуществляется с помощью конструкции, называемой «вызов функции».
Вся информация, необходимая для записи вызова функции, содержится в заголовке описания функции: имя, количество, тип и
вид фор-
мальных параметров, тип возвращаемого результата.
Конструкция «вызов функции» – это простейшее выражение, результатом вычисления которого является возвращаемое функцией значение.
Вызов функции допустимо помещать в тексте программы там, где
допустимо помещать выражение.
11

Вызов функции содержит имя функции и фактические параметры
(заключенные в скобки), если в заголовке описания функции содержа-
лись формальные параметры.
Количество фактических параметров при вызове функции и формальных параметров в описании функции должно совпадать.
Порядок следования фактических параметров при вызове функции
и формальных параметров в объявлении функции должен совпадать
.
При подстановке фактических параметров при вызове функции
необходимо следить за совместимостью типов фактических и формальных параметров в ее описании.
Для функции, описанной без формальных параметров, вызов функции осуществляется с помощью помещения ее идентификатора в место, где необходимо выполнить описанные в функции действия.
При активации функции выполняются операторы,
описанные в
разделе операторов описания функции. Они выполняют операции с
фактическими параметрами, переданными в функцию при вызове, если
описание функции имеет формальные параметры.
Пример 5. Вызов функции
program PExmpl5;
{$APPTYPE CONSOLE}
uses
SysUtils;
function max(a, b: integer): integer;
{ Возвращает максимальное из двух значений a,b. a,b –
формальные параметры-значения}
begin
if a>b then result:= a
else result:= b;
end;
function Even(n: longint): Boolean;
{ Возвращает TRUE для ЧЕТНЫХ и FALSE - для нечетных значений n. n – формальный параметр-значение.}
begin
if n mod 2 = 0 then result:= True
12

else result:= False;
end;
var a, b, c: integer; f: Boolean;
begin
a:= 15; b:= 6;
f:= Even(a);
writeln(f); // f = FALSE
f:= Even(max(a, b));
writeln(f); // f = FALSE
if Even(max(a, b)) then c:= 0 else c:= 1;
writeln(c);// c = 1
if not Even(max(a, b)) then c:= 0 else c:= 1;
writeln(c);// c = 0
readln;
end.
ПРОЦЕДУРА
Процедура – это одна из двух форм организации подпрограмм в
программе на Object Pascal. Процедура в отличие от функции не обязана оставлять результат в месте ее вызова после своего завершения.
Описание процедуры осуществляется в разделе описания процедур
и функций.
Вызов (активация) процедуры осуществляется с помощью оператора процедуры.
Если в разделе операторов
процедуры используется оператор процедуры с идентификатором объявляемой процедуры, то процедура будет выполняться рекурсивно (будет при выполнении обращаться сама
к себе).
Передача исходных данных из программы (подпрограммы) в вызываемую процедуру и передача результатов работы процедуры в вызвавшую ее программу (подпрограмму) осуществляются через механизм фактических параметров либо
через глобальные переменные.
Процедура может не возвращать в вызвавшую ее программу или
подпрограмму результаты своей работы (например, процедура очистки
экрана монитора).
При описании процедуры можно использовать имена объектов,
описанных в программе (подпрограмме), в которой процедура описана,
13

а также имена объектов, описанных в библиотечных модулях, подключаемых через предложение uses (например, SysUtils) и библиотеки
времени выполнения System.
Пример 6. Процедура
program PExmpl5;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
l = 'Square length: ';//Глобальная константа
procedure SqSD(a: real; var s, d: real);{ Описание
процедуры }
{ Процедура возвращает площадь s и диагональ квадрата d
с длиной стороны а }
begin{Раздел операторов.}
s:= Sqr(a); d:= a * Sqrt(2)
end;
Procedure Result(a, s, d: real);{ Описание процедуры }
{ Процедура выводит результаты на экран монитора: площадь s и диагональ квадрата d с длиной стороны а }
const
line = '-------------------------------';{локальная
константа}
m = ' Square area: ';//локальная константа
m1 = ' Square diagonal: ';//локальная константа
begin{Раздел операторов.}
writeln(line);{
writeln(l,a:6:2);{ Вызов стандартной процедуры }
writeln(m, s:6:2, m1, d:6:2);{ Вызов стандартной процедуры }
writeln(line);{ Вызов стандартной процедуры }
end;
var a,s,d:real;{Глобальные переменные}
Вызов стандартной процедуры }
14

begin{Раздел операторов.}
write(l);readln(a);
SqSD(a,s,d);{ SqSD(a,s,d) - вызов процедуры }
Result(a,s,d);{ Result(a,s,d) - вызов процедуры }
readln;
end.
Вызов процедуры
Вызов (активация) процедуры осуществляется с помощью оператора процедуры.
Вся информация, необходимая для записи оператора процедуры,
содержится в заголовке описания процедуры: имя, количество, тип и
вид формальных параметров.
Оператор процедуры содержит имя процедуры и фактические параметры (заключенные в круглые скобки), если в заголовке объявления
процедуры содержались формальные параметры
.
Количество фактических параметров при вызове процедуры и
формальных параметров в описании процедуры должно совпадать.
Порядок следования фактических параметров при вызове проце-
дуры и формальных параметров в описании процедуры должен совпадать.
При подстановке фактических параметров при вызове процеду-
ры необходимо следить за совместимостью типов фактических и
формальных
параметров в описании.
Для процедур, описанных без формальных параметров, запуск
процедуры осуществляется с помощью оператора процедуры, в котором содержится только имя процедуры.
При активации процедуры выполняются операторы, описанные в
разделе операторов описания процедуры. Они выполняют операции с
фактическими параметрами, переданными в процедуру при вызове,
если описание процедуры имеет формальные параметры
.
Пример 7. Вызов процедуры
program PExmpl7;
{$APPTYPE CONSOLE}
uses
SysUtils;
15

{ Описание процедуры }
р
procedure Trng(r: real; var s, a: real);{Заголовок
процедуры.}
{ Процедура возвращает площадь s и длину стороны a
равностороннего треугольника, вписанного в окружность
радиуса r }
begin{Раздел операторов.}
a:= r * Sqrt(3);
s:= 3 * Sqr(r)/4
end;
var r, s, a: real;
begin{Раздел операторов.}
r:= 1;
Trng(r, s, a);
{ Trng(r, s, a) - вызов процедуры пользователя }
writeln('s = ',s:6:2,' a = ',a:6:2);
{ writeln('s = ',s:6:2,' a = ',a:6:2) - вызов
стандартной процедуры }
readln;
end.
Формат описания процедуры
<Заголовок процедуры>
Раздел
описаний
Блок
Операторы
<Раздел описания меток>
<Раздел описания констант>
<Раздел описания типов>
<Раздел описания подпрограмм>
<Раздел описания пе
<Раздел операторов>
; <Точка с запятой>
еменных>
Описание процедуры позволяет связать имя процедуры с блоком
процедуры.
Каждое описание процедуры содержит заголовок, за которым следует блок.
16

Внутри блока процедуры могут быть описаны: свои метки, константы, типы данных, переменные и свои процедуры и функции.
Но все эти элементы могут быть использованы только в той процедуре,
где они объявлены. Они невидимы в головной программе, т. е. являются локальными по отношению к процедуре.
Операторы, которые должны выполняться
при запуске процедуры,
размещаются в разделе операторов блока процедуры.
Имеются три основных различия в описаниях программ и процедур:
заголовок описания процедуры начинается со слова procedure, а
заголовок описания программы – со слова program;
в процедуре недопустимо предложение uses;
описание процедуры заканчиваются точкой с запятой (;), а про-
граммы – точкой (.).
Процедуры позволяют включать
в основной программный блок
дополнительные блоки операторов.
Заголовок процедуры
Заголовок процедуры может быть представлен в одной из следующих форм:
procedure <имя > (<формальные параметры>);
или
procedure <имя >;
В заголовке описания процедуры указывается имя процедуры и
описывается список формальных параметров (если он присутствует).
Заголовок – обязательный раздел в описании
процедуры.
Примеры заголовков процедуры:
procedure Test;{Процедура без параметров}
procedure Test(a,b:Real; var c: Boolean);{Процедура с параметрами a,b,c}
Пример 8. Формат описания процедуры
program PExmpl7;
{$APPTYPE CONSOLE}
uses
17

SysUtils;
{ Описание процедуры }
procedure Crat(a, b:integer; var z:boolean);{Заголовок}
{Процедура возвращает z = True, если a кратно b,False -
в противном случае.}
begin{Раздел операторов.}
if a mod b = 0 then z:= True else z:= False
end;
{ Описание процедуры без параметров }
Procedure Result;{Заголовок процедуры.}
const
line = '**********************';
bp = 'RESULT';
begin{Раздел операторов.}
writeln(line);{ Вызов стандартной процедуры }
writeln(line, bp, line);{Вызов стандартной процедуры}
end;
var a, b: integer; d: boolean;
begin
a:= -8;b:= -3;
Result;{ Result - вызов процедуры }
Crat(a, b, d);{ Crat(a) - вызов процедуры }
writeln(d);
readln;
end.
ПАРАМЕТРЫ ПОДПРОГРАММ
Обмен данными между подпрограммой и вызвавшей ее программой или подпрограммой осуществляется через параметры.
Механизм формальных и фактических параметров обеспечивает:
передачу в подпрограмму при ее вызове исходных данных;
возвращение результатов работы подпрограммы в вызвавшую ее
программу (или подпрограмму) по ее завершении.
Формальные параметры – это параметры, которые описаны в заго
ловке описания подпрограммы. Существует три вида формальных параметров:
параметр-значение;
параметр-переменная;
нетипированный параметр-переменная.
18
-

Фактические параметры – это параметры, которые подставляют
рогр
на место формальных параметров при вызове подпрограммы. В качестве фактических параметров могут использоваться выражения и переменные.
a, b - формальные
параметры-значения –
локальные переменные
процедуры
z - формальный
параметр-переменная –
локальная переменная
процедуры
var x, y: integer; d: boolean;
procedure Crat(a, b: integer; var z: boolean);
{ процедура возвращает z = True, если a
кратно b, False - в противном случае }
begin
if a mod b = 0 then z:= True
else z:= False
end;
begin
x:= 8; y:= 3;
Crat(x, y, d);
writeln(d);
end.
x, y - фактические
параметрызначения
d - фактический параметрпеременная
Параметры подпрограмм
Глобальные
переменные
Заголовок
описания
процедуры
Оператор
процедуры
позволяет вызвать
процедуру в нужном
месте п
аммы
Формальные параметры
Формальные параметры – это параметры, которые описаны в заголовке описания процедуры или функции.
Через имена формальных параметров в разделе операторов вы описываете те действия, которые подпрограмма будет выполнять при ее
вызове.
Каждый параметр, описанный в списке формальных параметров,
является локальной переменной по отношению к описанной процедуре
19

или функции. Его можно использовать в разделе операторов подпрограммы так же, как другие переменные, которые описаны в разделе
описания переменных подпрограммы.
Отличие формального параметра от других локальных переменных, описанных в подпрограмме, состоит в следующем. При вызове
подпрограммы ему либо будет присвоено значение фактического параметра (параметр-значение), либо
вместо него в подпрограмму будет
подставлен фактический параметр (параметр-переменная).
Приведенные выше виды формальных параметров отличаются по
механизму передачи данных, который они обеспечивают при вызове
подпрограммы.
Пример 9. Формальные параметры
procedure Fog(a: real; b: integer);{Заголовок описания
процедуры; a,b – формальные параметры-значения. Могут
быть использованы только для передачи исходных данных
при вызове подпрограммы.}
procedure Swap(var a, b: real);{Заголовок описания процедуры; a,b – формальные параметры-переменные. Могут
быть использованы как для передачи исходных данных при
вызове подпрограммы, так и для возвращения результатов
ее работы.}
function tag(var a: integer; b: real):Char; );{заголовок
описания функции; a – формальный параметр-переменная
b - формальный параметр-значение }
,
Параметр-значение
Список формальных параметров-значений в описании подпрограммы – это группа параметров без предшествующего ключевого
слова var и со следующим за ней типом.
Список может содержать единственный параметр-значение.
Ниже приведены заголовки объявления процедуры и функции с
формальными параметрами-значениями:
procedure Ptest(a, b: Integer; c: Real);
function Ftest(a,
b: Real): Real;
Формальный параметр-значение действует как переменная, локальная по отношению к процедуре или функции за исключением того,
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
