Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Типы подпрограмм

Подпрограммы

Подпрограмма это именованная, логически законченная часть прог­раммы, предназначенная для выполнения определенных действий и вызываемая по ее имени. Команда вызова подпрограммы имеет вид:

<имя подпрограммы>[(<аргументы через запятую>)]; [<способ вызова>;]

<способ вызова> ‑ способы нестандартного вызова подпрограммы:

Delphi ‑ параметры помещаются в стек оперативной памяти;

Cdec ‑ подпрограмма написана на C++ (DLL ‑ библиотеки С++);

Stdcall ‑ в соответствии с соглашениями Windows;

Safecall используется при работе с компонентными технологиями.

Имеются два типа подпрограмм: процедуры и функции. Под­прог­рам­ма имеет структуру, аналогичную структуре программы, но заголовок у подпрограммы свой.

Раздел описаний подпрограммсодержит тексты процедур и функций. В разделе операторов (Begin) указываются операторы, которые собственно и составляют алгоритм. Раздел, а следовательно, и программа заканчиваются словом End. Допускается вложенность подпрограмм.

Текст подпрограммы пользователя обычно указывается перед раз­де­лом операторов основной программы.

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

Процедуры и функции делятся на стандартные и пользовательские.

Стандартные процедуры и функции имеются в самом Паскале и не требуют дополнительного описания.

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

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

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

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;

Сама процедура будет описана позже без указания параметров.




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 802; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.