Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kitkat_otvety.doc
Скачиваний:
3
Добавлен:
01.08.2019
Размер:
3.29 Mб
Скачать

Билет 18

  1. Объявление и использование нестандартных (пользовательских) функций. Локальные и глобальные переменные. Рекурсивные функции. Опережающие описания.

  2. Идентификаторы объектов в Паскале.

1) Использование функций позволяет: 1) упростить логику программ; 2) уменьшить общий объем программы; 3) подпрограммы могут быть использованы повторно при решении других задач. Функции объявляются в разделе процедур и функций. Описание функции подобно описанию процедуры, однако имеются некоторые отли­чия. Важнейшее из них заключается в том, что результатом работы функции является одно значение произвольного типа. Тип результата задается в заголовке функции, общий вид которого:

function < имя функции > (< список формальных параметров >): < тип результата >; Тело функций в Паскале в точности повторяет структуру главной программы. В нем могут присутствовать разделы описания меток (label), констант (const), типов данных (type), переменных (var) и других процедур и функций, входящих в состав данной функций. Наличие вложенных процедур и функций отличает Паскаль и от Си, и от Бейсика. Собственно вычислительная часть тела функции начинается со служебного слова begin и заканчивается соответствующим end, после которого в отличие от главной программы следует не точка, а точка с запятой.

Переменные, описанные в основной программе, являются гло­бальными по отношению к внутренним процедурам и функциям. Это означает, что они доступны в подпрограммах, описанных внутри основной программы. Переменные, опи­санные внутри процедур и функций, называются локальными. Они порождаются при каж­дом входе в подпрограмму и уничтожаются при выходе из этой подпрограммы, т.е. ло­кальные переменные существуют только при выполнении подпрограммы и недоступны в основной программе.

Если имя локальной переменной совпадает с именем глобальной пере­менной, то при выполнении подпрограммы такая глобальная переменная становится не­доступной, т.е. «закрывается» локальной переменной. В программе на Паскале все переменные главной программы являются глобальными. К таковым же относятся и все переменные, объявленные в модулях, подключаемых к программе с помощью директивы Uses. Переменные любого блока могут выступать в качестве глобальных по отношению ко всем вложенным блокам.

Среди входящих в функцию операторов должен обязательно присутствовать хотя бы один оператор присваивания, в левой части которого стоит имя стандартной переменной result и которая трактуется как результат, возвращаемый функцией либо имя_функции:=выражение;Этот оператор и оп­ределяет значение, вырабатываемое функцией. Фрагмент программы от заголовка процедуры до завершающей операторной скобки end принято называть блоком. Для Паскаля характерна возможность использования вложенных блоков и с каждым из них можно связать натуральное число, соответствующее уровню вложения. Так, например, в блок A могут быть вложены два последовательных блока первого уровня - блоки B и C. Если же блок C вложен в блок B, входящий, в свою очередь в блок A, то блок C уже имеет уровень два по отношению к блоку A. В теле любого блока могут содержаться обращения к вложенным блокам своего первого уровня или к последовательным блокам такого же уровня. Блок не имеет права напрямую обратиться к своим процедурам второго или более высокого уровня вложенности. Если процедура A обращается к процедуре B, то описание процедуры B должно предшествовать описанию процедуры A. Рекурсия – это способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих её операторов обращается сама к себе. Рекурсивный алгоритм может вызвать переполнение стека. Если программа включает рекурсивную цепочку из двух или более функций, одна из них должна объявляться (но не описываться) первой с добавкой forward. Соответствующее объявление носит название опережающего. function <имя процедуры>(<параметры>):< тип результата >; forward;

Описание опережающей функций располагается после других процедур рекурсивной цепочки, но в ее заголовке список параметров может уже не указываться.

Вызов и выполнение функции производятся при вычислении значения указателя функ­ции .....

< имя функции > (< список фактических параметров >),

который входит в некоторое выражение в вызывающей программе. При вызове функции передача фактических параметров происходит так же, как и при вызове процедуры.

В Object Pascal имеется возможность использовать подпрограммы с одинаковыми именами, но отличающиеся количеством и типом параметров. В заголовках таких под­программ должно быть указано зарезервированное слово overload. При вызове таких подпрограмм компилятор анализирует количество и тип фактических параметров и вы­зывает соответствующую им подпрограмму.

2) Идентификаторы (имена) используются для обозначения констант, типов, перемен­ных, процедур, функций, классов, модулей, программ и т.д. Идентификаторы состоят из букв и цифр и должны начинаться с буквы. Длина идентификатора может быть произволь­ной, но значащими являются только первые 64 символа. Поскольку знак подчеркивания «_» относится к буквам, он может входить в идентификатор. Специальные символы и не­используемые символы не могут входить в состав идентификаторов. В частности, заре­зервированные слова (program, begin, end и т.д.) нельзя использовать в качестве иден­тификаторов. Кроме зарезервированных слов в Object Pascal имеются так называемые стандартные имена. К ним относятся имена стандартных функций, например: sin, cos, exp. In и т.д. Стандартными именами являются также имена стандартных директив, которые исполь­зуются для объявлений в программа например: override, virtual, private, protected и т.д. В отличие от зарезервированных слов стандартное имя можно переопре­делить, правда, при некоторых ограничениях. Возможность эта скорее теоретическая, и на практике рекомендуется использовать свои оригинальные имена.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]