Явная передача данных в подпрограммы
Алгоритмические языки и программирование
Работа с процедурами и функциями
Методические указания
к выполнению лабораторной работы №5
для студентов очной формы обучения
специальности 230201 – "Информационные системы
и технологии"
Брянск 2007
УДК 004.43
Алгоритмические языки и программирование. Работа с процедурами и функциями: методические указания к выполнению лабораторной работы №5 для студентов очной формы обучения специальности 230201 – "Информационные системы и технологии". – Брянск: БГТУ, 2007. - 12 с.
Разработал: Ю.А. Леонов, асс.
С.М. Рощин, к.т.н.
Научный редактор Ю.М. Казаков
Редактор издательства Л.И. Афонина
Компьютерный набор Ю.А. Леонов
Рекомендовано кафедрой «Компьютерные технологии и системы» БГТУ (протокол № от )
Темплан 2007г., п. 456
Подписано в печать Формат 60х84 1/16. Бумага офсетная.
Офсетная печать.
Усл. печ. л. 0,7 Уч. – изд. л. 0,7 Тираж 50 экз. Заказ Бесплатно
|
Издательство брянского государственного технического университета, 241035, Брянск, бульвар 50-летия Октября, 7, БГТУ. 58-82-49
Лаборатория оперативной полиграфии БГТУ, ул. Харьковская, 9
ЦЕЛЬ РАБОТЫ
Целью работы является изучение общей структуры процедур и функций, а также овладение практическими навыками грамотного составления процедур и функций.
Продолжительность работы – 4 ч.
Теоретическая часть
При создании программы для решения сложной задачи выполняется декомпозиция (разделение) этой задачи на подзадачи, подзадач – на еще меньшие подзадачи и так далее, до легко программируемых элементарных подзадач.
Язык Pascal имеет различные средства для деления программы на части. На верхнем уровне деления (больших задач) – это модули, на нижнем уровне (элементарных подзадач) – это чаще всего процедуры и функции. Процедуры и функции являются важным средством в большинстве языков программирования. С их помощью можно скомпоновать группу операторов для выполнения некоторой подзадачи. Процедуру/функцию можно вызвать из различных мест программы, она может возвращать вычисленные результаты и ей можно передавать информацию, которую она использует для выполнения вычислений. Для того чтобы процедура/функция начала работу, ее нужно вызвать (активизировать).
Структура описания процедуры имеет вид:
procedure Имя_Процедуры (Список Формальных Параметров);
label – раздел описания меток
const – раздел описания констант
type – раздел описания типов
var – раздел описания переменных
procedure – описание внутренних процедур
function – описание внутренних функций
Begin
тело процедуры
End;
Структура описания функции имеет вид:
function Имя_Функции (Список Формальных Параметров): Тип возвращаемого результата;
label – раздел описания меток
const – раздел описания констант
type – раздел описания типов
var – раздел описания переменных
procedure – описание внутренних процедур
function – описание внутренних функций
Begin
тело функции
Имя:=…
End;
Подпрограмма вызывается следующим образом:
с помощью процедуры:
Имя_Процедуры (Список Фактических Параметров);
с помощью функции:
Имя_Функции (Список Фактических Параметров);
Параметры, указываемые в заголовке процедуры/функции при ее описании, называются формальными параметрами.
Параметры, указываемые при вызове процедуры/функции, называются фактическими параметрами.
Список фактических параметров и список формальных параметров для одной и той же процедуры/функции должен быть идентичен, т.е. количество параметров и их типы должны совпадать.
Совпадение имен фактических и формальных параметров нежелательно, так как при входе в процедуру/функцию для каждого формального параметра выделяется «новая» память, следовательно, переменная, описанная глобально, и формальный параметр с тем же именем находятся в разных областях памяти. Из-за неправильного понимания работы глобальных и локальных переменных, их области видимости могут возникать нежелательные ошибки.
Область действия идентификаторов при использовании процедур и функций
Областью действия (сферой видимости) идентификатора называется часть программы, где он может быть использован. Область действия идентификаторов определяется местом их объявления. Если идентификаторы допускается использовать только в рамках одной процедуры или функции, то такие идентификаторы называются локальными. Если действие идентификаторов распространяется на несколько вложенных (не менее одной) процедур и/или функций, то такие идентификаторы называются глобальными.
Замечания:
1. Понятия «глобальные» и «локальные» следует понимать по отношению к конкретной процедуре или функции.
2. Локальные данные создаются при вызове процедуры/функции и существуют только во время ее выполнения. Выделение памяти для локальных данных происходит автоматически в начале выполнения процедуры/функции, а освобождение этой памяти – как только выполнение процедуры/функции заканчивается.
3. В процедуре/функции локальный идентификатор всегда перекрывает глобальный.
Передача данных в подпрограммы
Данные для обработки процедуры и функции могут получать из вызвавшей их основной программы или подпрограммы.
Из основной программы данные могут быть получены:
· неявно – с использованием глобальных констант и переменных;
· явно – через параметры.
Неявная передача данных в подпрограммы
Каждой подпрограмме доступны все ресурсы программного блока, в разделе описаний которого эта подпрограмма объявлена. Ресурсы же основной программы (глобальные) доступны в любой подпрограмме. В том случае, если в подпрограмме объявляется ресурс, имя которого совпадает с именем глобального ресурса, соответствующий глобальный ресурс в подпрограмме становится недоступным (перекрывается).
Для примера приведем код программы, описывающей видимость глобальных и локальных данных.
Var x, y, z: integer;
Procedure Proc(x: integer);
Var y: integer;
Begin
y:=8;
z:=7;
Writeln(x, ' ', y);
x:=10;
End;
BEGIN
x:=4; y:=3;
Writeln(x, ' ', y);
Proc(5);
Writeln(x, ' ', y);
Writeln(z);
END.
В данной программе объявлены переменные x, y в глобальной области видимости, а также переменные x, y в локальной области видимости. Как указывалось, такая ситуация возможна, при этом у каждого идентификатора имеется своя область действия. Когда мы изменяем значения переменных x, y в процедуре Proc, изменения не касаются переменных x, y, объявленных в глобальной области, так как действие локальных данных не распространяется на глобальную область. В процедуре Proc, т.е. в локальной области видимости, доступны все переменные, объявленные в глобальной области, кроме тех, у которых имена локальных и глобальных идентификаторов совпадают. Для приведенной программы изложенное означает, что обращаясь к переменным x, y, мы получаем доступ к локальным переменным, а обращаясь к переменной z, мы получаем доступ к глобальному данному.
Результатом работы приведенной программы будет вывод на экран значений переменных x, y, z:
4 3
5 8
4 3
Проанализируйте самостоятельно результаты данной программы, учитывая области видимости переменных.
Опыт программистов показывает, что неявная передача данных в подпрограммы обычно приводит к большому количеству ошибок, которые достаточно сложно искать, так как неизвестно, какая подпрограмма с какими глобальными ресурсами работает. Кроме того, подпрограммы, использующие глобальные данные, затруднительно перенастроить на работу с другими значениями, что сокращает возможности их применения. Поэтому желательно использовать явную передачу значений – через параметры.
Явная передача данных в подпрограммы
Для того чтобы локализовать взаимодействие подпрограммы от «внешнего мира», необходимо пользоваться механизмом явной передачи данных в подпрограммы. Осуществить явную передачу данных можно через фактические параметры, передаваемые при вызове подпрограммы. Фактические параметры при вызове соответствуют формальным параметрам при описании подпрограммы. Формальные параметры представляют собой набор переменных с описанием их типов в заголовке подпрограммы. Несоответствие типов и количества формальных и фактических параметров выявляется компилятором (или компоновщиком, если вызов подпрограммы происходит из другого модуля). Нарушение порядка следования фактических параметров, если это нарушение не связано с несовпадением количества параметров или их типов, приводит к нарушению логики работы программы и часто может быть обнаружено только при тестировании программы. В языке Pascal параметры в подпрограмму могут передаваться тремя способами:
· как значения – в подпрограмму передаются копии значений параметров, и никакие изменения этих копий не возвращаются в вызывающую программу;
· как переменные – в подпрограмму передаются адреса фактических параметров, соответственно все изменения этих параметров в подпрограмме происходят с переменными, переданными в качестве фактических параметров, из этого следует, что использовать константы в качестве фактических данных нельзя; такие параметры при описании помечаются служебным словом var;
· как неизменяемые переменные (именованные константы) – в подпрограмму, так же как и в предыдущем случае, передаются адреса фактических параметров, но при попытке изменить значение параметра компилятор выдает сообщение об ошибке; такие параметры при описании помечаются служебным словом const.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|