Студопедия

Главная страница Случайная страница

Разделы сайта

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






Процедуры и функции, определенные пользователем






Процедура и функция пользователяначинаются с заголовков вида, соответственно:

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< имя модуля>; // заголовок модуля






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.