![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Процедуры и функции, определенные пользователем
Процедура и функция пользователяначинаются с заголовков вида, соответственно: Procedure < имя процедуры> [(< параметры>)]; Function < имя функции> [(< параметры>)]: < тип результата>; Возвращаемое значение формируется одной из равнозначных команд: < имя функции >: = < значение> или Result: = < значение>. Предопределенная переменная Result может быть использована в качестве операнда (Result: =X+Y; Result: =Result*C). Для выхода из подпрограммы используется команда Exit. Параметры в заголовке указываются в виде списка объявлений переменных через запятую, и они могут быть структурированы (массивами, записями, множествами). Передача параметров производится по значению, по ссылке, в виде константы или как выходной параметр. Параметры, переданные по значению (параметры‑ значения), не могут быть изменены процедурой, функцией, а параметры, переданные по ссылке, называются параметрами‑ переменными и могут изменить свое значение в подпрограмме. Они описываются в заголовке процедуры, функции после слова Var. Параметры-константы описываются после слова Const. При попытке изменить значение аргумента в подпрограмме будет выдано компилятором сообщение об ошибке. Выходной параметр описывается после слова Out. Он похож на параметр‑ переменную, но не требует исходного значения от аргумента, при этом память, занимаемая аргументом, очищается. Подпрограмма формирует значение этого аргумента. Не типизированный параметр не содержит указание типа, что означает возможность обработки подпрограммой аргумента любого типа. В этом случае в подпрограмме должны применяться операции приведения (преобразования) типов (п.1.2.9). Пример. Procedure P(Var X); Begin Real (X): =Real (X)+2.1; End; Для не типизированного параметра нельзя передавать в качестве аргумента число или не типизированную числовую константу. Обращение к процедуре или к функции имеет вид: < имя процедуры или функции > [(< список аргументов через запятую>)] Параметр с умалчиваемым значением задает значение, которое принимается при отсутствии аргумента в команде вызова подпрограммы. После объявления такого параметра в заголовке подпрограммы указывается знак равенства и константное выражение. Такие параметры должны быть последними в списке параметров, и, если один аргумент не указан, то не указываются и все оставшиеся. Пример: Fuction Nalog (X: Double, Nds: Double=0.2, Imuh: Double=0.01): Double; ... N: =Nalog(V); //вызов функции с указанием только 1 аргумента вместо 3. // Ошибочным будет вызов функции вида: N: =Nalog(V,, 0.02). Перегрузка подпрограмм. Если определить несколько одноименных подпрограмм с различным числом или типами параметров и в конце заголовков указать слово Overload, то компилятор автоматически вызовет ту подпрограмму, которая соответствует данным аргументам. Пример двух функции с различными типами параметров: Function Add (X, Y: Real): Real; Overload; Begin Result: =X+Y; End; Function Add (X, Y: Integer): Integer; Overload; Begin Result: =X+Y; End; A=Add (1.3, 2.1); //вызов первой функции с вещественными параметрами A=Add (1, 2); //вызов второй функции с целочисленными параметрами Правила использования параметров и аргументов: 1. Количество неумалчиваемых параметров и аргументов совпадает. 2. Длины строк могут не совпадать, если указана директива {$V‑ }. 3. Если типы параметров и аргументов не совпадают, то обязательно указать типы параметров в заголовке. 4. В заголовке можно использовать и указатели. 5. Параметрами могут быть открытые массивы (п.1.1.4.1). 6. Параметры типов массивов, строк и записей должны быть предварительно определены через типы пользователя, например: Type Atype=Array [1..10] Of Real; //объявление типа массив из 10 вещ.чис. Intype=String[15]; Outtype=String[30]; //объявление типов строк Procedure S (A: Atype); //заголовок процедуры с параметром типа массив Function St (S: Intype): OutType; //строковая функция с параметром строки Пример программы возведения числа в степень: Program Demo; //заголовок основной программы Var Z: Integer; K: Real; //объявление переменных Function Step (F: Real, Exp: Integer): Real; //заголовок функции Step Var C: Integer; T: Real; //объявление переменных функции Begin T: =F; For C: =2 To Abs(Exp) Do T: =T*F; //цикл умножения If Exp< 0 Then Result: =1/T Else Result: =T; //формирование результата End; //окончание тела функции Begin Writeln (Step (2, 3), Step(5, 4)) End. //операторы основной программы Рекурсивные программы в ходе выполнения обращаются сами к себе. Пример рекурсивной функции Factor вычисления факториала: Procedure TForm1.Button1Click(Sender: TObject); //основная процедура Function Factor (A: Integer): Integer; //заголовок функции Factor Begin If A=1 Then Result: =1 Else Result: =A*Factor(A‑ 1)End; //функция Begin Label1.Caption: =IntToStr(Factor(10))end; //основная функция‑ вывод10! Предварительное описание программы. Допускается описание процедуры или функции в конце основной программы. В этом случае перед разделом операторов основной программы указывается: < заголовок процедуры>; Forward; Сама процедура будет описана позже без указания параметров. Модули Модуль ‑ это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции, классы, операторы). Модуль имеет структуру: Unit< имя модуля>; // заголовок модуля
|