КАТЕГОРИИ: Архитектура-(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; Просмотров: 842; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |