К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 28
Текст из файла (страница 28)
За.оловок процедуры = "йгоседоге' Имя (Список формольнык параметров). Идентификация процвдурьг = "йгоседиге* Имя процедуры. Имя процедуры = Имя. Употребление имени процедуры в операторе процедуры внутри блока ее собственного описания предполагает рекурсивное использование этой процедуры. Пример раздела описания процедур и функций, содержаи(ик процедуры: ргоседчге йеад(пСейег (чаг Е: ТехС; чаг Х: 1пСейег); чаг 3: йаСпга1; Ьейгп иЬг|е Е1 <> ' ' до ОеС(Е); 3:= 0; иЫ1е Е1 1п ('О'..'9') до Ьейгп 3 := 10 " 3 + (огд(Е!) — егд('0')); ОеС(Е) епд; Х:= 3 епд ( йеад(пСейег ); ргеседпге В1зесС((ипсС1оп Е(Х: йеа1): йеа1; Л, В: йеа1; чаг Е: йеа1); чаг Еп йеа1; !Я Лроцеауры и функции !9З Ьей(п ( пусть Е(А) < 0 и Е(В) > О ) ыЬ(1е аЬе(Я-И) > 1е-10 < аЬа(А) 6о Ьей(п М := (А + В) / 2.0; 11 Е(И) < 0 Ьиеп А := И е1ае В := М еп6; 2:= И еп6 ( Вьаесо ); ргосеоаге ВСО(И, И: 1пСейег; чаг Х, У, 2.
1поейег); (Наибольший общий делитель Х дпн АА и Н, причем И>=0 и И>0 ( Улучшенный алгоритм Эвклида. ) чаг А1, Я2, В1, В2, С, Р, О, К: 1пСейег; Ьей1п А1:=0; А2:=1; В1:=1; В2:=0; С:=И; 0:=И; ыий1е 0 <> 0 6о Ьей1п (А1<и + Б1'И = О, А2<И + В2'И = С, ап6 ВСО(С,О) = ВСО(И,И)) О:= С 61ч К; К:= С ао6 0; А2: = А2 — О'А1; В2: = В2 — 0~01; С:= 0; 0:= К; К:= А1; А1:= А2; А2 := К; К:= В1; 01 := В2; В2 := К еп6; Х:= С; У := А2; 2 := В2 ( Х = ВСЦИ,И) = У<И + 2'И ) ' еп6 ( ССО ); Н.2. ОПИСАНИЯ ФУНКЦИЙ Описание функции предназначено для введения имени функции, сопоставления с этим именем типа результата, блока и, возможно, списка формальных параметров. Заголовок функции из описания функции вводит имя функции, тип результата и список формальных параметров. Функция может быть описана с помощью одного-единственного описания функции, состоящего из заголовка функции и блока.
Это наиболее распространенный способ. Однако есть и другой способ — функцию можно описывать и с помощью «опережающего описания»: первое описание состоит из заголовка функции и директивы (огччагб, а второе описание Тут Описание язьиса в том же самом разделе описания процедур и функций содержит наименование функции и блок. Имя функции в идентификации функции должно быть тем же, что и введешюе в первом описании. Заметим, что список формальных параметров, если он есть, и тип результата во втором описании не указываются. Описание функции = Заголовок функции ";" Блок ) Заголовок функции ";" Директива! Идентификация функции ";" Блок.
Заголовок функции = "[опсипп" Имя [Список формальныя параметров[ ":" Тип рвзультати. Тип результата = Илья ординсльного типа[Имя вещественного типа[ Имя осино<ного типи. идгнтц)уикация Функции = "юпспоп" имя Функции. Имя функции = Имя. Блок любого описания функции должен содержать по крайней мере один оператор присваивания, присваиваюсций [значение) имени функции. Использование имени функции в обозначении функции'внутри блока ее описания предполагает рекурсивное выполнение этой функции.
Прилсер раздела описания процедур и функций, содержащего Функцию: [опсс!оп зцгС(Х: Кеа1): Кеа1; [ Метод Ньютона ) наг ХО, Х1: Кеа1; Ьеа[п Х1 = Х; [ Х > 1, метод Ньютона ) гереаС ХО := Х1; Х1:= (ХО + Х/ХО)'О.5 ипС[1 аЬз(Х1 — ХО) < Ерз ' Х1; загс := ХО еп6 [ зцгС ); [опсС1оп Иах(Я: Чессог; и: 1псекег): Кеа1; [ Максимальное значение из А[ц я[И] оаг Х: Кеа1; 1: 1псеаег; Ьеатп Х:= А[1]; тог 1:= 2 Со П до ЬеКьп [ Х = Иах( А[1], ..., А[1-1] ) ) Н Х < Я[1] СЬеп Х := АьЦ еп6; !!. !!роцвдуры и функции !Уд ( Х = Ивх( А[1], ..., А[И] ) ! Иах := Х еп6 ( Мех ), (ипсс[оп СС0(М, й: йаеига1): йасвгв1; Ьей[п 11 И = 0 сьев СС0 := М е1зе СС0 := СС0(И, М во6 И) еп6; (ипс11оп Роиег(Х: Кев1; У: йвсогв1): йев1; иег И, 2: йев1; 1: йесига1; Ьеу[п ' И:= Х; 7:= 1; 1:= У; иь(1е 1 > 0 6о Ьей[п (т (И-1) =Х-У) 11 о66(1) Ьйеп 2:= 2 ь И; 1:= 1 6[в 2; и := зцг(и) еп6; (2=Хиту) Гоиег := 2 еп6 ( Роиег ); 11.З. ПАРАМЕТРЫ Параметры позволяют при каждой активации процедуры или функции работать с объектами (значениями, переменными, процедурами и функциями).
задаваемыми в точке активации (см. равд. 10.3), через список фактических параметров. Список формальных параметров в заголовке процедуры или функции определяет имена, под которыми зти объекты известны в блоке процедуры или функции, а также природу и тип требуемых фактических параметров. Фактические параметры для предописанных процедур и функций не всегда следуют (соп[оггп) правилам для обычных процедур и функций (см.
равд. 11.4; 11.5 и 12). 11.3.1. Списки формальных параметров Список формальных париметров= ( Секция формальнмх пирометров 1";" Свкция фирлт.и явил аиримвхтов)" !". Ськцив фьрьал нььт пара ввтрив =- Стив!пушка~!ив ииримгтров-.имввнии 1 Сьгц~~фикацил ° ара,ив!ров-вврвмвнньььх) Спвцификицин процвдурального параметра [ Спецификация функционального паримвтра. Параметры, перечисленные в одной секции формальных пари метров, представляют собой либо параметры-значения, либо пара- lув Описание языка метры-переменные, либо параметры-процедуры, либо параметры- функции. 1!.3.!.!.
Формальные параметры-значении и параметры-переменные. Спецификация параметров-значений и параметров-переменных в своем списке имен задает имена, рассматриваемые как имена переменных. Если указывается имя типа, то это значит, что к этому типу относится каждое из имен этих переменных. Если встречается схема совмещаемого массива, то каждое из имен переменных называется совмещаемым массивом-параметром, причем его тип зависит от типа фактического параметра. Внутри данной активации все формальные параметры, оиределенные в одной секции формальных параметров, относятся к одному типу. Заме(ание. Не обязательно все реализации Паскаля будут поддерживать схемы совмещаемых массивов. В частности, реализации уровня 0 их не поддерживают, а уровня ! — поддерживают. Спецификация пирометров-значений = Список имен ":" (Имя сила) Схема совмещаемого массива).
СпециФикация параметра-переменной = "чат" Список имен ":" (Имя типа )Схеми совмещаемого массива). Схема соемещаемого массива = Схема упакованного совмещаемого массива) Схема неупаковинного совмесцаемого массива. Схема упакованного совмещаемого массива = *'раскед" "аттау" "[" Спецификация типа индекса"1" "ог' Имн тини.
Схема неупаковинного совмещаемого массива = "аттау'* "["Спецификация типа икдекса ( ";" СпециФикация типа индекса!" )" "оу (Илщ гила! Схгми совмещиемого миссиви). СпециФикация типа индекса = Имя ".." Имя* ":" Имя ординаяьнлго типа. Имя границы = Имя. Спсцификцция типа индекса вводит в качестве имен границ два имени, относящиеся к типу, обозначаемому именем ордииального типа.
Схема совмещаемого массива аггау [[.отч! .. Н!йп[: Т[; [.отч2 .. Н!дЬ2: Т2( о1 Т представляет собой просто сокращенную запись для аггау [[.очч! .. Н!йЫ: Т!) о1 аггау [[.очч2 .. Н!ц[)2: Т2( о1 Т Пример описания (уднкции, иллюстрирующий совмещоемый массив-параметр: ( Этот пример получен из Функции Мах в 11.2 ) (ипс(!оп Нах (Я: аггау [С .Н: 1п!айаг) о( Яеа1; Я: 1птеуег): Яеа1; ( яяаксимапьное значение нз я[ц .....Я[Я). ) чаг К: Яеа!; 1: 1пуекег; * Это, очевидно, неточность.
Здесь дояжао стоять Имя границы. — Примеч. лер. ПП Процедуры и функции !97 Ьехтп Х: А[[]; (от 1:= аисс([) Ьв М до Ьей(п [ Х = Мах( А[Ц,...,А[1-1] ) ) 1( Х < А[1] ЬЬеп Х := А[1] епд; [ Х = Мах( А[Ц,...,А[М] ) ] Мах := Х епд [ Мах [; 11Л.1.2. Формальные процедуральные параметры и функциональные параметры. Спецификация процедурального параметра вводит имя процедуры с каким-либо связанным с ним списком формальных параметров, определяемых заголовком процедуры. Спецификация процедурального параметра = Заго совок процедурьи Спецификация параметра-функции вводит имя функции с типом результата и каким-либо связанным с именем списком формальных параметров, определяемых заголовком функции. Спецификация функционального параметра = Заголовок функции.
11.3.2. Списки фактических параметров. Список фактических параметров в точке активации, т. е. в операторе процедуры или обозначении функции, определяет фактические параметры, которые при этой активации должны быть подставлены в процедуре или функции вместо формальных параметров. Если у процедуры или функции нет списка формальных параметров, то не должно быть и списка фактических параметрОв. Соответствие между фактическими параметрами и формальными устанавливается путем позиционного сопоставления параметров из соответствующих списков.
Порядок подстановки фактических параметров из списка зависит от реализации. Список фактических параметров = *'("Фактический параметр [ "," Фактический параметр)")". Фактический параметр = Выражение ! Переменная) Имя процедуры ) Имп функции. Все фактические параметры из данной точки активации, соответствующие формальным совмещаемым массивам-параметрам которые определены в некоторой секции формальных параметров, должны относиться к типу, допускающему совмещение [см.