КАТЕГОРИИ: Архитектура-(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) |
Создание пользовательских функций. Передача аргументов
Очень часто процесс решения какой – либо задачи может быть мысленно представлен как последовательность решения более простых подзадач. Процедуры и функции по своей структуре подобны обычным программам и имеют общее название – подпрограммы. Применение подпрограмм дает возможность уменьшить общее число повторении одной и той же последовательности операторов, а так же конструировать программу, как набор отдельных подпрограмм. Для сложных задач это существенно упрощает процесс программирования. В программе описание процедур и функций обычно располагается между разделами переменных и операторов, но при этом необходимо помнить что любое имя в программе должно быть обязательно описано перед тем, как оно появится среди исполняемых операторов. Каждая процедура или функция определяется только один раз, но может использоваться многократно. В процедурах и функциях, как и в обычных программах, могут быть описаны собственные метки, константы, типы, собственные переменные и даже собственные процедуры и функции. Описание функции подобно описанию процедуры, однако имеются некоторые отличия. Важнейшее из них заключается в том, что результатом работы функции является одно значение произвольного типа. Тип результата задается в заголовке функции, общий вид которого: Function < имя функции > (< список формальных параметров >): < тип результата > Среди входящих в функцию операторов должен обязательно присутствовать хотя бы один оператор присваивания, в левой части которого стоит имя стандартной переменной result и которая трактуется как результат, возвращаемый функцией. Этот оператор и определяет значение, вырабатываемое функцией. Вызов и выполнение функции производятся при вычислении значения указателя функции который входит в некоторое выражение в вызывающей программе. При вызове функции передача фактических параметров происходит так же, как и при вызове процедуры. < имя функции > (< список фактических параметров >), Пример использования: Вычислить: . При решении данной задачи целесообразно использовать функцию для вычисления максимальногоиз двух чисел. Использование функции является обоснованным, так как результатом вычисления максимума будет одно значение простого типа.
program pl_32J var a,b,c,u:real; function max(x,y:real):real; begin if x>y then result:=x else result =у end; begin writeln('Enter a,b,c'); readln(a,b,c); u:=(max(a,a+b)+max(a,b+c))/(1+ma+b*c,a*c)); writeln('u=’,u:7:3); readln end. В данном примере указателями функции являются , и . Язык Delphi позволяет передавать параметры в функции либо по значению, либо по ссылке. Передаваемый параметр может иметь любой встроенный или пользовательский тип, либо являться открытым массивом. Параметр также может быть константой, если его значение в функции не изменяется. Передача параметров по значению (by value) – это стандартный режим передачи параметров. Когда параметр передается по значению, создается его локальная копия, которая и предоставляется для обработке в функцию. Пример использования: function Foo(I: Integer): Integer; При вызове процедуры Foo() будет создана копия передаваемой ей в качестве параметра целочисленной переменной I. Таким образом функция будет работать с локальной копией переменной I, а внесенные в нее изменения никак не повлияют на значение, переданное функции. Язык Delphi позволяет также передавать параметры в функции по ссылке (by reference) – такие параметры называются переменными параметрами (variable parameter). Передача параметра по ссылке означает, что функция сможет изменять значение полученных переменных. Для передачи параметров по ссылке используется ключевое слово var, помещаемое в список параметров функции. Пример использования: function ChangeMe(var x: longint): longint; begin x:= 2; //Теперь X изменится в вызываемой функции end;
Вместо создания копии переменной X ключевое слово var потребует передачи адреса самой переменной X, что позволит функции изменять ее начальное значение. Подобно параметрам, объявленным с ключевым словом var, параметры, объявленные с ключевым словом out, являются средством возвращения функцией значения вызывающей процедуре в виде параметра. Однако в отличие от параметров, объявленных с ключевым словом var, которые должны быть инициализированы допустимым значением до вызова функции, параметры, объявленные с ключевым словом out, не предполагают проверки правильности передаваемого значения. Для ссылочных типов это означает, что при вызове функции наличие ссылки не имеет никакого значения. Пример использования: function ReturnMe(out O: TObject); begin O:= SomeObject.Create; end;
Существует простое правило: параметры объявляются как var, если они подлежат приему и возвращению, и как out, если они подлежат только возвращению. Если необходимости изменять передаваемые функции данные нет, то параметр можно объявить как константу, использовав ключевое слово const. Параметр в виде открытого массива (open array) позволяет передавать в функцию различное количество аргументов. Передать можно открытый массив элементов одинакового типа или массив констант различного типа. Пример использования: function AddEmUp(A: array of Integer): Integer;
В приведенном примере объявлена функция, который должен быть передан открытый массив целых чисел. В открытом массиве можно передавать переменные, константы или выражения массива любого типа (динамического, статического или входящего открытого). Пример использования: var I, Rez: Integer; const J = 23; begin I:= 8; Rez:= AddEmUp([I, I + 50, J, 89]);
или
var A: array of integer; begin SetLength(A, 10); for i:= Low(A) to High(A) do A[i]:= i; Rez:= AddEmUpConst(A);
Область видимости (scope) – это определенный участок программы, на протяжении которого данная функция известна компилятору. Глобальные константы видимы в любой точке программы, в то время как локальные переменные видны только в той функции, где они объявлены. Пример использования: program Foo; const SomeConstant = 100; var SomeGlobal: Integer; Double; function SomeProc; var D, LocalD: Double; begin LocalD:= 10.0; D:= D - LocalD; end; begin SomeGlobal:= SomeConstant; D:= 4.593; SomeProc; end
Здесь переменные SomeConstant, SomeGlobal и D имеют глобальную область видимости, поэтому их значения видны компилятору в любой точке программы. Функция SomeProc() имеет две собственные локальные переменные D и LocalD. Любая попытка обратиться к переменной LocalD вне функции SomeProc() приведет к сообщению об ошибке. Обращение к переменной D внутри функции SomeProc() вернет значение ее локального экземпляра, тогда как обращение к переменной D вне функции вернет значение одноименной глобальной переменной.
Дата добавления: 2014-01-06; Просмотров: 281; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |