Сделай Сам Свою Работу на 5

Явная передача данных в подпрограммы





Алгоритмические языки и программирование

 

Работа с процедурами и функциями

 

Методические указания

к выполнению лабораторной работы №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 Все материалы защищены законодательством РФ.