Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
30.04.2013
Размер:
80.38 Кб
Скачать

11.2. Способы передачи параметров

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

Существуют два варианта обмена информацией между вызывающей программой и вызываемой подпрограмой:

  1. с помощью механизма формальныых - фактических параметров;

  2. с использованием глобальных переменных .

Вначале коснемся способа передачи, основанного на использвании глобальных переменных. Напомним, что глобальные переменные – это переменные, описанные в вызыващей и доступные в вызываемой подпрограмме, и поэтому в передаче данных нет никакой необходимости: изменения их значений в процессе работы подпрограммы, после ее завершения могут без всяких дополнительных действий быть использованы и в вызывающей подпрограмме.

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

Следствием сказанного становится невозможность применения в чистом виде технологии нисходящего проектирования, а это усложненяет процедурыу и увеличенивает время разработки программы.

Теперь рассмотрим способ, основанный на передаче параметров.

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

Параметры, которые содержат исходные данные для работы подпрограммы, называются входными. Их значение обязательно должно быть определено к моменту вызова подпрограммы. Параметры, в которых подпрограмма формирует результаты работы, возвращаемые в вызывающую программу, называются выходными. Значения выходных параметров могут быть не определены (не инициализированы) при вызове подпрограммы, но обязательно получат значения в процессе ее выполнения.

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

Формальные параметры обемпечивают возможность задать формальные функциональные связи между входными и выходными параметрами.

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

При передаче параметров необходимо обеспечить выполнение следующих требований:

  • число формальных и фактических парамеров должно совпадать;

  • порядок перечисления формальных и фактических параметров должны совпадать;

  • каждый фактический параметр должен соответствовать по типу своему формальному параметру.

Сфера действия имен параметров такая же, как и локальных данных.

По способу передачи параметры различаются:

  1. По взаимодействию вызывающей и вызываемой подпрограммы:

  • только входной параметр;

  • только выходной параметр;

  • как входной, так и выходной параметр (входной-выходной).

  1. По механизму передачи:

  • передача по значению;

  • передача по наименованию (по ссылке)

Суть передачи по значению заключается в следующем: в момент вызова значение фактического параметра, присваивается переменной, являющейся формальным параметром, а при возврате из подпрограммы, значения формального параметра, наоборот, присваиватся соответствующему фактическому параметру.

При передаче по наименованию присваивания значений не происходит, а вместо этого, адрес в памяти формального параметра замещается адресом фактического параметра (ссылкой на фактический параметр).

В Турбо Паскале реализованы следующие способы передачи:

  • если входной параметр скалярный – он может передаваться как по значению, так и по ссылке;

  • если входной параметр не скалярный (например, массив) – он может передаваться только по ссылке;

  • выходной или входной-выходной параметры могут передаваться только по ссылке.

При описании параметра в заголовке подпрограммы необходимо придерживаться следующих правил:

  • е

    <идентификатор> : <тип>

    сли параметр передается по значению, его описание в заголовке имеет вид

  • е

    var <идентификатор> : <тип>

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

Требования к способу представления фактического параметра:

  • если параметр подпрограммы входной и передается по значению, фактическим параметром может быть любое выражение (константа или переменная – это частный случай выражения), имеющее тип, совместимый по присваиванию с типом формального параметра;

  • если параметр подпрограммы передается по ссылке, фактическим параметром может быть только идентификатор переменной, совместимый по присваиванию с типом формального параметра.

Соседние файлы в папке лекции