КАТЕГОРИИ: Архитектура-(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) |
Функции в языке PascalПроцедуры без параметров в языке Pascal. Параметры-процедуры и параметры-функции. Параметры-константы.
Так как аргументы, передаваемые в процедуру или функцию, размещаются в стеке, то в случае передачи значением массива большого размера, может произойти переполнение стека. В языке Турбо Паскаль 7.0 введен описатель CONST, который может задаваться для формальных параметров подпрограмм. Аргумент, соответствующий такому параметру, передается по ссылке, подобно параметру с описателем Var, но в самой процедуре(функции) запрещается присваивать этому аргументу новое значение.
PROCEDURE <имя процедуры> (CONST <имя константы>: <тип>;...);
FUNCTION <имя функции> (CONST <имя константы>: <тип>;...): <тип результата>;
Параметр-константу нельзя передавать в качестве параметра в другую подпрограмму.
Для объявления процедурного типа используется заголовок подпрограммы, в котором опускается имя процедуры(функции).
Например:TYPE TPR1= PROCEDURE(X,Y: REAL; VAR Z: REAL); TPR2= PROCEDURE; TF1= FUNCTION: STRING; TF2=FUNCTION (VAR S: STRING): REAL; Ниже приведен пример использования функции FF в качестве параметра другой функции RR. USES CRT; TYPE FUN=FUNCTION (X,Y: REAL): REAL; VAR... FUNCTION FF (X,Y: REAL): REAL; FAR; ... BEGIN ... END; FUNCTION RR (X,Y: REAL; F: FUN): REAL; FAR; ... BEGIN ... END; PROCEDURE TP (VAR Z: REAL; X,Y: REAL; CONST R: INTEGER); ... BEGIN ... END; BEGIN ... Z:=RR(3, 1, FF); TP (Z,X,Y,R); ... END. В этом примере используются: X,Y - параметры-значения; Z- параметр-переменная; F- параметр-функция; R- параметр-константа.
В случае использования процедур и функций без параметров связь данных осуществляется через глобальные переменные.
Подпрограммы должны быть, по возможности, независимы от основной программы, поэтому все переменные, нужные только в пределах подпрограммы, должны описываться как локальные. Связь основной программы с процедурой или функцией должна осуществляться, как правило, через список параметров, что придает подпрограммам необходимую гибкость. Вместе с тем, слишком большое число параметров замедляет работу программы, поэтому переменные заведомо общие в основной программе и подпрограммах целесообразно использовать как глобальные.
Пример 1. Процедура без параметров, которая печатает строку из 60 звездочек. procedure pr; var i: integer; begin for i:=1 to 60 do write (‘ * '); writeln; end.
Функция - это подпрограмма, возвращающая одно значение в вызывающую программу. Функцию можно использовать в качестве операнда в выражениях. Поэтому, если в вызывающую программу необходимо возвратить одно значение, то рекомендуется оформить подпрограмму как функцию.
Описание функции
Любая используемая в программе функция должна быть предварительно описана в разделе описаний.
Функции в разделе описаний, так же как и процедуры, определяют после раздела описания переменных (после раздела Var) и до начала раздела операторов (до слова Begin).
Заголовок функции начинается с ключевого слова Function, за которым следует имя функции и необязательный, заключенный в круглые скобки, список формальных параметров с указанием типа каждого параметра. После чего через двоеточие записывается тип возвращаемого значения.
Операторы функции внутри операторных скобок begin/end называются телом этой функции.
В теле функции обязательно должен быть оператор присвоения, где в левой части стоит имя функции, а в правой - её значение. Иначе, значение функции не будет определено.
Таким образом, общий вид функции в языке Паскаль такой:function <имя функции>[<список формальных параметров>]:<тип возвращаемого значения>; <раздел описаний> begin <операторы> <имя функции>:= <возвращаемое значение>; еnd;
В языке Pascal ABC вместо имени функции для возврата значений в вызывающую программу можно использовать другую специальную переменную с именем Result.
Раздел описаний функции устроен так же, как раздел описаний основной программы. Здесь описываются так называемые локальные переменные и константы, типы, а также вложенные процедуры и функции. Все такие локальные объекты доступны лишь внутри данной функции и не видны извне. Вызов функции
Вызовом функции является записанное в вызывающей программе имя функции со списком фактических параметров в круглых скобках. В отличие от вызова процедуры вызов функции возвращает одно значение (скалярную величину), следовательно, вызывающая программа должна с ним что-нибудь сделать (сохранить в переменной, вывести на экран и т.д.).
Вызов функции с присвоением возвращаемого значения некоторой переменной имеет следующий вид:<имя переменной>:= <имя функции> [(<список фактических параметров>)];
Фактические параметры - это значения, передаваемые в функцию при её вызове.
Пример 1. Оформить в виде функции алгоритм вычисления степени y = xn с натуральным показателем n.function degree(x,y:integer): longint; var i:integer; begin st:=1; For i:=1 to y do st:= st * x; degree:= st; end;
Функция имеет два параметра: первый параметр - основание степени, второй - показатель степени.
Вся программа для нашей задачи имеет следующий вид:program primer1; var a, n: integer; s:longint; function degree(x,y:integer): longint; var i:integer; begin st:=1; For i:=1 to y do st:= st * x; degree:= st;end; begin {main} writeln('Введите два числа'); readln(a, n); s:= degree(a,n); {Вызов функции} writeln('Результат: ', s); {Вывод результата} end.
Функция вызывается по имени в левой части оператора присваивания, вычиcленное значение присваивается переменной s. В нашем примере, фактические параметры а, n передают свои значения соответствующим формальным параметрам x, y.
Дата добавления: 2015-07-13; Просмотров: 487; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |