Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Програмирование. Структурное програмирование, подпрограммы, строки. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Раздел операторов функции
Раздел операторов функции содержит операторы, которые выпол­няются при вызове функции. Он строится по тем же правилам, что и раздел операторов программы.
Раздел операторов функции должен содержать, по крайней мере, один оператор присваивания, в котором идентификатору функции или переменной 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]