КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Механизм передачи параметров
Как было показано в приведенных выше примерах программ с использованием процедур и функций, в заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название "формальные" эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения (выражений) и имен. Этот список указывается после имени подпрограммы и заключается в круглые скобки. Список формальных параметров, указываемых в заголовке подпрограммы, может включать в себя: • параметры-значения; • параметры-переменные, перед которыми должно стоять служебное слово var
• параметры-процедуры, перед которыми должно стоять служебное слово • параметры-функции, перед которыми должно стоять служебное слово • нетипизированные параметры, перед которыми должно стоять служебное В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга — точкой с запятой. Имена параметров одного типа можно объединять в подсписки, в которых имена отделяются друг от друга запятой. Примеры заголовков: Между формальными и фактическими параметрами должно быть полное соответствие: • формальных и фактических параметров должно быть одинаковое количество; • порядок следования фактических и формальных параметров должен быть
• тип каждого фактического параметра должен совпадать с типом соответст Параметры-значения. Параметры-значения используются только для передачи исходных данных из основной программы в подпрограмму (процедуру или функцию), в списке формальных параметров они перечисляются через запятую с обязательным указанием их типов, как было, например, в выше приведенных примерах: procedure Abort(Msg: string); function Step(N: integer; X: real): real; Если формальный параметр объявлен как параметр-значение, то фактическим параметром может быть произвольное выражение. При вызове подпрограммы фактические параметры вычисляются и используются как начальные значения формальных параметров, т. е. осуществляется подстановка значений. Если формальный параметр определен как параметр-значение, то перед вызовом процедуры это значение вычисляется, полученный результат помещается во временную память и передается процедуре. Даже если фактический параметр — простейшее выражение в виде константы или переменной, все равно процедуре будет передана лишь копия этой константы (переменной). В процессе выполнения подпрограммы формальные параметры могут изменяться, но это никак не отразится на соответствующих фактических параметрах-переменных, которые сохранят те значения, которые имели до вызова подпрограммы, так как меняются не они, а их копия. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу. Пример программы с использованием передачи параметров по значению: При вызове процедуры Sum_Square с фактическими параметрами А, В значения этих параметров (один раз) копируются в соответствующие формальные параметры X, Y, и дальнейшие преобразования формальных параметров X,Y внутри процедуры Sum_Square уже никак не влияют на значения переменных А, В.
Упражнение 3. Запустите интегрированную среду программирования. Введите текст программы Par_Znach, запишите файл на диск под соответствующим именем, а затем откомпилируйте его. После того как компиляция выполнится успешно, задайте для просмотра в окне отладчика величины А, В, X, Y. Установите видимыми одновременно окно редактора с текстом программы и окно просмотра. Исполните программу в пошаговом режиме с заходом в процедуру и пронаблюдайте за изменениями значений переменных в основной программе и в процедуре, обратите внимание на передачу значений при вызове процедуры ее формальным параметрам, а также на то, что в процессе выполнения процедуры и по ее окончании значения переменных А, В не изменялись. Параметры-переменные. Параметры-переменные используются для определения результатов выполнения процедуры и в списке формальных параметров перечисляются после зарезервированного слова var с обязательным указанием типа. Каждому формальному параметру, объявленому как параметр-переменная, должен соответствовать фактический параметр в виде переменной соответствующего типа, например: Если формальный параметр определен как параметр-переменная, то при вызове процедуры ей передается сама переменная, а не ее копия,и изменение параметра-переменной приводит к изменению фактического параметра в вызывающей программе. Следовательно, исходные данные в процедуру из программы могут передаваться как через параметры-значения, так и через параметры-переменные, а результаты работы процедуры возвращаются в вызывающую программу только через параметры-переменные. Пример программы, использующей параметры-переменные: Упражнение 4. Запустите интегрированную среду программирования. Введите текст программы Sum_Sub_Square и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. После того как компиляция выполнится успешно, задайте для просмотра в окне отладчика величины А, В, Sum, Sub, SumAB, SubAB. Установите видимыми одновременно окна редактора с текстом программы и окно просмотра. Исполните программу в пошаговом режиме с заходом в процедуру и пронаблюдайте за изменениями значений переменных в основной программе и в процедуре, обратив внимание на передачу значений при вызове процедуры ее формальным параметрам, а также на то, что значения переменных SumAB и SubAB в основной программе изменялись в процессе выполнения процедуры.
Параметры-процедуры и параметры-функции. В качестве расширения стандартного Паскаля, Турбо Паскаль позволяет рассматривать процедуры и функции как объекты, которые можно присвоить переменным и которые могут выступать в качестве параметров; процедурные типы делают это возможным. Как только процедурный тип определен, можно объявлять переменные этого типа. Такие переменные называются процедурными переменными. Они могут быть использованы в качестве формальных параметров при вызове процедур и функций. Подобно тому, как целочисленной переменной можно присвоить целочисленное значение, процедурной переменной можно присвоить процедурное значение. Такое значение может, конечно, быть и другой процедурной переменной, но может также §ыть идентификатором процедуры или функции. В этой ситуации объявление процедуры или функции можно рассматривать как особый вид объявления константы, значением которой является процедура или функция. Как и во всех других операциях присваивания, переменная в левой части и переменная в правой части оператора присваивания должны быть совместимыми по присваиванию. Для того чтобы считаться совместимыми по присваиванию, процедурные типы должны иметь одинаковое число параметров, параметры в соответствующих позициях должны быть тождественных типов; наконец, типы результатов функций должны быть идентичны. Дополнительно к совместимости типов процедура или функция должны удовлетворять следующим требованиям, если они присваиваются процедурной переменной. • Они должны быть объявлены с директивой far (использование дальнего типа • Они не должны быть: стандартной процедурой или функцией; вложенной процедурой или функцией; inline процедурой или функцией; interrupt процедурой или функцией.
При использовании параметров-процедур или параметров-функций в списке ~еред соответствующими формальными параметрами указывается зарезервирован- ~*ое слово procedure или function, например: В списке формальных параметров процедуры Exampl: К, L — параметры-значения; М — параметр-переменная; Prob — параметр-процедура; Step — параметр-функция, результатом выполнения которой будет значение вещественного типа. При вызове подпрограммы на место формальных параметров-процедур и параметров-функций осуществляется подстановка имен соответствующих фактических процедур или функций. При этом, если процедуры и функции, фигурирующие в качестве фактических параметров, имеют, в свою очередь, параметры, они могут быть только параметрами-значениями. Параметры процедурного типа особенно полезны в ситуациях, когда над множеством процедур или функций'выполняются общие действия. Примером использования параметров-функций может служить программа, которая с помощью одной и той же процедуры печати таблицы выводит на экран три таблицы арифметических функций (сложения, умножения и произведения суммы на разность чисел), каждая из которых выполняется отдельной функцией. Примечание. {$F+} — указание (директива) компилятору Турбо Паскаль на использование дальнего (far) типа вызова для корректной обработки вызова процедуры Туре_ТаЫ с параметрами-функциями. В данной программе процедура Туре_ТаЫ представляет собой общее действие, выполняемое над параметрами-функциями Add, Mult, Funny. После запуска программы сначала вызывается процедура Туре_ТаЫ для фактических параметров 10, 10 и Add, в результате чего формальным параметрам X и Y присваиваются значения чисел 10 и 10, а формальному параметру Operation процедурного типа Func присваивается имя фактической функции Add. В результате этого на экран будет •введена таблица сложения от 1 до 10. Затем процедура Туре_ТаЫ вызывается к -слолнению для фактических параметров 10, 10 и параметра-функции Mult, в ре-:;-льтате чего на экран будет выведена таблица умножения от 1 до 10. Аналогично = ызов процедуры Туре_ТаЫ с параметрами 10, 10 и Funny даст в результате на эк- -~-не таблицу произведения суммы на разность чисел от 1 до 10. Упражнение 5. Запустите интегрированную среду программирования. Введите текст тгограммы Demo_Tabl и запишите файл на диск под соответствующим именем, а затем от-v змпилируйте его. После того как компиляция выполнится успешно, исполните программу: пошаговом режиме с заходом в процедуру и пронаблюдайте за вызовом функций вычисле- ' -:ия суммы, произведения двух чисел или произведения их суммы и разности. Обратите внимание на исполнение оператора Write(Operation(X,Y):5), как в зависимости от фактического значения параметра-функции Operation процедурного типа Func осуществляется вызов раз-~гчных функций Add, Mult или Funny. Попробуйте удалить строку с директивой компиля-т эру об использовании дальнего типа вызова или возьмите в фигурные скобки описание "гоцедурного типа Func и пронаблюдайте за результатом. В случае появления ошибок нажа-~!гм клавиши F1 получите справку о причинах ошибки и рекомендации на коррекцию.
Дата добавления: 2015-05-09; Просмотров: 1599; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |