русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ПЕРЕДАЧА ПАРАМЕТРОВ


Дата добавления: 2014-02-04; просмотров: 1044; Нарушение авторских прав


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

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

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

параметры-значения;

параметры-переменные;

параметры-константы.

Например, procedureMyProc (A: Real; var В: Real; const С: String);

здесь А - параметр-значение, в - параметр-переменная, С - пара­метр-константа.

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

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

Если параметр определен как параметр-значение, то перед вы­зовом подпрограммы это значение вычисляется, полученный ре­зультат копируется во временную память и передается подпро­грамме. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра.



Если параметр определен как параметр-переменная, то при вы­зове подпрограммы передается сама переменная, а не ее копия (фактически в этом случае подпрограмме передается адрес пере­менной). Изменение параметра-переменной приводит к изменению самого фактического параметра в вызывающей программе.

В случае параметра-константы в подпрограмму также передает­ся адрес области памяти, в которой располагается переменная или вы­численное значение. Однако компилятор блокирует любые присваи­вания параметру-константе нового значения в теле подпрограммы.

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

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

По той же причине не рекомендуется использовать параметры-переменные в заголовке функции. Если результатом работы функ­ции не может быть единственное значение, то логичнее использо­вать процедуру или нужным образом декомпозировать алгоритм на несколько подпрограмм.

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

Нетипизированные параметры. Одним из свойств языка Object Pascal является возможность использования нетипи­зированных параметров.

Параметр считается нетипизированным, если тип формального параметра-переменной в заголовке подпрограммы не указан, при этом соответствующий ему фактический параметр может быть пе­ременной любого типа. Нетипизированными могут быть только параметры-переменные: procedure MyProc(var aParametr);

Нетипизированные параметры обычно используются в случае, когда тип данных несуществен. Такие ситуации чаще всего возни­кают при разного рода копированиях одной области памяти в дру­гую, например, с помощью процедур BlockRead, BlockWrite, Move-Memory и т. п.

Процедурные типы. Основное назначение процедурных типов — дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к дру­гим процедурам и функциям. Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускает­ся ее имя, например:

type

Prod = procedure (a, b, с: Real; var d: Real);

РгосЗ == procedure;

Fund = function: String;

Func2 = function (var s: String): Real;

В программе могут быть объявлены переменные процедурных типов, например:

var

p1 : Proc1;

fl, f2: Func2;

ар: array [1. . N] of Prod;

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



<== предыдущая лекция | следующая лекция ==>
ПОДПРОГРАММЫ. ПРОЦЕДУРЫ И ФУНКЦИИ | РЕКУРСИЯ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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