Студопедия

КАТЕГОРИИ:


Архитектура-(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 при xy и 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; Просмотров: 336; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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