|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Процедуры и функции. Описания процедур и функций должны располагаться в программе после описания переменных перед секцией основного кодаОписания процедур и функций должны располагаться в программе после описания переменных перед секцией основного кода, который находится между последними операторами 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). Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |