АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Процедуры и функции. Описания процедур и функций должны располагаться в программе после описания переменных перед секцией основного кода

Читайте также:
  1. II. Выполнение процедуры
  2. II. Основные задачи и функции
  3. III. Завершение процедуры
  4. III. Завершение процедуры
  5. III. Окончание процедуры
  6. III. Предмет, метод и функции философии.
  7. XVIII. ПРОЦЕДУРЫ И ФУНКЦИИ
  8. А) ПЕРЕДАЧА НА РУССКОМ ЯЗЫКЕ ФУНКЦИИ АРТИКЛЯ
  9. А. Средняя квадратическая погрешность функции измеренных величин.
  10. Абстрактные классы и чистые виртуальные функции. Виртуальные деструкторы. Дружественные функции. Дружественные классы.
  11. Адаптивные функции
  12. Администраторы судов, их функции

Описания процедур и функций должны располагаться в программе после описания переменных перед секцией основного кода, который находится между последними операторами begin и end программы и управляет логикой программы.

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

Описание процедуры

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

<Описание процедуры> ::= <заголовок процедуры><тело процедуры>;

Заголовок именует идентификатор процедуры и задает список формальных параметров (если они имеются):

<заголовок процедуры> :: =procedure <идентификатор>;|

procedure <идентификатор> (список формальных параметров);

<тело процедуры> ::= <раздел описаний> begin <операторы> end;|

begin <операторы> end;

Операторы, которые выполняют назначение процедуры, содержатся в операторной части модуля процедуры между begin и end.

В качестве примера рассмотрим описание процедуры, выполняющей ввод с контролем ошибок ввода переменной вещественного типа.

Идентификатор процедуры read_real. Входные параметры процедуры: X – адресвводимой переменной и два значения X1 и X2, определяющие границы допустимых значений переменной X.

Описание процедуры имеет вид

 

Procedure read_real(var x:real; x1,x2:real);{ Заголовок процедуры }

Var { раздел описаний}

Iocode:integer; { локальных }

Fl:boolean; { переменных }

Begin

{ Раздел операторов процедуры }

Repeat

Write(' Введите число в интервале от ', x1, ' до ',x2);

{$I-} readln(x);

{$I+} iocode:=ioresult;

fl:= (iocode=0) and(x>=x1) and(x2<=x2);

if not fl then writeln(' Неверное значение! Повторите ввод');

until fl;

end; { конец описания процедуры read_real }

 

В начале работы процедуры отменяется автоматическая проверка ошибок ввода-вывода с помощью директивы компилятора {$I-}. Для ввода данного используется цикл repeat ... until до тех пор, пока не будет введено правильное значение Х.

Процедура активизируется с помощью оператора процедуры, в котором содержатся имя процедуры и необходимые параметры. Для ввода переменной z, значение которой лежит в интервале от -5.5 и 9, нужно записать вызов процедуры следующего вида:



 

read_real(z,-5.5,9).

Директивы near и far

Для некоторых специальных целей может потребоваться использовать модель с дальним типом вызова. Чтобы переопределить автоматический выбор модели вызова компилятором, можно использовать директиву компилятора {$F+}. Процедуры и функции, компилируемые в состоянии {$F+}, всегда будут иметь дальний тип вызова far. По умолчанию используется директива {$F-}.

Директива forward

Описание процедуры, содержащее вместо блока операторов директиву forward, называется опережающим описанием.

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

Опережающее описание и определяющее описание представляют собой полное описание процедуры.

Пример программы с опережающим описанием процедуры:

 

Program example;

procedure two(m,n : integer); forward;

procedure one(x,y : real);

begin

two(int(x),int(y));

end;

procedure two;

begin

writeln(m,n);

end;

begin

one(-3.7, 10);

. . .

end.

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

Описание функции похоже на описание процедуры, но имеются три различия:

1. Заголовок модуля-функции начинается с ключевого слова function и в отличие от процедуры заканчивается указанием типа возвращаемого результата.

 

function <идентификатор>(список формальных параметров):< тип>;

 

Функция не может возвращать структурный тип (массив, запись или файл).

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

‡агрузка...

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

Пример. Составить описание функции, находящей наибольший общий делитель двух натуральных чисел m и n. Имя функции будет Nod, на входе два числа m и n, меньшие 215 -1. Возвращаемое значение будет того же типа, что и входные данные.

Function Nod(m,n:word):word;

{ Алгоритм Евклида }

Var

d : word; { рабочая локальная переменная }

Begin

Repeat

d:=m mod v;

m:=n;

n:=d;

Until n=0;

Nod:=m; { оператор присвоения идентификатору }

{ функции возвращаемого результата }

end;

 

Аналогично процедурам функции могут описываться как с ближним типом вызова (near), так и с дальним (far) и как опережающие (forward).


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |


Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.)