КАТЕГОРИИ: Архитектура-(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) |
Вопросы для проверки знаний. Описание и вызов процедур и функций
End. End. Begin Begin Описание и вызов процедур и функций Вопросы для проверки знаний. 1. В чем заключается основное назначение модулей (подпрограмм) в программировании? 2. Какие подпрограммы называют стандартными, а какие - определенные пользователем? Каков порядок их использования в Паскале? 3. Что такое заголовок подпрограммы и какова его структура? 4. Что такое вызов подпрограммы и какова его структура? 5. В чем главное назначение параметров подпрограмм? 6. Что означают входные и выходные параметры подпрограмм? 7. Что означают формальные и фактические параметры подпрограмм? 8. Каков смысл параметров-значений и параметров-переменных? 9. Могут ли константы передаваться: а) по значению, б) по ссылке? 10. В чем отличие в передаче выходных параметров у процедур и функций? Структура описания процедур и функций в Паскале во многом повторяет структуру программы: в нее входит заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит в составном операторе тело подпрограммы. Формат описания процедуры имеет вид: procedure имя процедуры (список формальных параметров); раздел описаний процедуры исполняемая часть процедуры end; Формат описания функции: function имя функции (список формальных параметров): тип результата; раздел описаний функции исполняемая часть функции end; Основное различие между функциями и процедурами состоит в количестве возвращаемых ими значений: любая функция, завершив свою работу, должна вернуть в вызывающий блок программы ровно одно значение, причем его тип нужно явным образом указать уже в описании функции (в конце его заголовка). Для возвращения этого результата используется специальная "переменная", имеющая имя, совпадающее с именем самой функции. Обязательным требованием к описанию функции является то, что оператор присваивания значения этой "переменной" должен встречаться в теле функции хотя бы один раз. Отсюда следует, что среди формальных параметров процедуры могут быть и входные и выходные, а среди формальных параметров функции – только входные. Список формальных параметров может отсутствовать. Синтаксис списка формальных параметров в заголовке процедуры в общем виде можно представить как: [ список входных параметров; ] [var список выходных параметров ] где: - отдельные элементы списка отделяются друг от друга точкой с запятой; - если параметры однотипны, то их имена можно перечислять в списке через запятую, указывая общее для них имя типа в конце списка; - квадратные скобки означают, что данный элемент заголовка может отсутствовать; - описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type. Вызов процедуры в Паскале всегда выполняется отдельным оператором программы, который имеет следующий синтаксис: имя процедуры [(список фактических параметров)]; Список фактических параметров представляет собой простое перечисление параметров через запятую (без описания типов, как в заголовке процедуры). При вызове процедуры передача входных параметров происходит следующим образом: фактические входные параметры, указанные в операторе вызова процедуры, подставляются вместо формальных, стоящих на тех же местах в ее заголовке. Передача выходных параметров происходит непосредственно после их определения во время работы тела процедуры – получаемые значения заносятся в те фактические переменные, которые указаны в операторе вызова. После завершения выполнения процедуры происходит возврат (передача управления) в вызывающий блок, в его следующий после вызова оператор. Примеры описаний и вызовов процедур даны в примерах 1 и 3 п.7.1. Синтаксис списка формальных параметров в заголовке функции в общем виде можно представить как: [ список входных параметров ] Правила оформления списка входных параметров те же, что и для списка входных параметров процедур. Особенностью тела функции является то, что перед возвратом в вызывающий блок обязательно должен стоять хотя бы один оператор присваивания следующего вида: имя функции:= результат; где результат - любое допустимое выражение языка Паскаль, совпадающее по типу с типом описываемой функции. Вызов функции в Паскале может производиться, как и для процедуры, при помощи отдельного оператора. Кроме этого можно осуществить вызов внутри какого-либо другого оператора, в котором этот вызов играет роль обычного выражения. Чаще всего вызов функций ставят в правой части оператора присваивания, в разделе условий оператора if и т.д., например: 1) Y:=sin(x)+b*cos(x); {вызов ф-ций sin и cos языка Паскаль в правой части оператора присваивания} 2) if proof(a,b) then x:=a else x:=b; {функция proof имеет логический тип и используется в качестве логического выражения в операторе IF} Общие правила, обязательные при вызове процедур и функций: 1) количество фактических параметров равно количеству формальных; 2) соответствующие фактические и формальные параметры должны совпадать как по порядку их в соответствующих списках, так и по типу. В заголовках и вызовах подпрограмм имена соответствующих формальных и фактических параметров могут совпадать. Однако это не создает проблем в расчетах, поскольку реальные данные для этих параметров в любом случае будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее. Рассмотрим пример простейшей программы, включающей в себя описание и обращения к подпрограмме с именем order, в которой определяется упорядоченность пары вещественных чисел x и y (они составляют множество входных параметров подпрограммы order). Выходной параметр у подпрограммы один и имеет логический тип. Он равен True при x ≤ y и False при x > y. Пример 1 программы, упорядочивающей по возрастанию вводимые в нее три вещественных числа x,y,z, в которой подпрограмма сравнения двух чисел order оформлена в виде процедуры с выходным логическим параметром ord_val. Для передачи его значения из процедуры в программу в последней используем вспомогательную величину ord_value. var x,y,z,c: real; ord_value: boolean; {описание переменных основной программы} procedure order (x,y: real; var ord_val: boolean); {заголовок процедуры} begin {открытие тела процедуры } if x<=y then ord_val:=true else ord_val:=false; {тело процедуры } end; {закрытие тела процедуры } begin {открытие тела основной программы} write('Vvedite x,y,z'); {приглашение на ввод параметров x,y,z' } readln(x,y,z); { ввод параметров x,y,z' } order(x,y,ord_value); {вызов процедуры для параметров x,y } if not(ord_value) then begin c:=x;x:=y;y:=c end; {перестановка параметров x,y } order(x,z,ord_value); {вызов процедуры для параметров x,z } if not(ord_value) then begin c:=x;x:=z;z:=c end; {перестановка параметров x,z } order(y,z,ord_value); {вызов процедуры для параметров y,z } if not(ord_value) then begin c:=y;y:=z;z:=c end; {перестановка параметров y,z } writeln('Rezult:x=',x:8, ' y=',y:8, ' z=',z:8); {вывод результатов расчета} Пример 2 программы, аналогичной программе примера 1, в которой подпрограмма сравнения двух чисел order оформлена в виде функции. var x,y,z,c: real; {описание переменных основной программы} function order (x,y: real): boolean; {заголовок функции} begin {открытие тела функции } if x<=y then order:=true else order:=false; {тело функции } end; {закрытие тела функции } begin {открытие тела основной программы} write('Vvedite x,y,z'); {приглашение на ввод параметров x,y,z' } readln(x,y,z); { ввод параметров x,y,z' } if not(order(x,y))then begin c:=x;x:=y;y:=c end; { коррекция параметров x,y } if not(order(x,z))then begin c:=x;x:=z;z:=c end; { коррекция параметров x,z } if not(order(y,z))then begin c:=y;y:=z;z:=c end; { коррекция параметров y,z } writeln('Rezult:x=',x:8,' y=',y:8,' z=',z:8); {вывод результатов расчета} 1. В чем заключается различие между функциями и процедурами по возвращаемым ими значениям? 2. В чем отличие оформления списков параметров в заголовке подпрограммы и в ее вызове? 3. При каком числе выходных параметров возможно оформление подпрограммы как в виде процедуры, так и виде функции? Практическое задание. 1. Исправить текст программы из примера 1 п.7.2 таким образом, чтобы она выполняла сортировку переменных x,y,z по возрастанию их величин.
Дата добавления: 2014-01-06; Просмотров: 357; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |