Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





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

Среди стандартных процедур Паскаля мойсно найти и такие, которые изменяют само значение параметра — например, inc(). Как самому создать такую процедуру?

Пример 11.3.
Процедуры, изменяющие значения параметров

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

Фактически вместо этого имени используется имя переменной, подставленное при вызове подпрограммы.

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

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

Один и тот же вспомогательный алгоритм может получать параметры обоими способами — часть по адресу, остальные — по значению.

 

СОВЕТ

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

 

Задание 11.1.
Написать процедуру, которая получает целочисленную переменную и «разворачивает» ее цифры в обратном порядке — например, число 1234 преобразует в число 4321.

Задание 11.2.
Написать процедуру, которая получает две вещественные переменные и возвращает вместо каждой из них отклонение от среднего арифметического. Например, числа 5 и 8 должны превратиться в -1,5 и 1,5, а числа 3,2 и 0,8 — в 1,2 и -1,2.

 

Выводы

1. Существует возможность создавать свои собственные процедуры и функции с параметрами.
2. Их использование повышает наглядность программы и добавляет ей универсальности.
3. Передаваемые параметры перечисляются в скобках после имени подпрограммы с указанием типа данных.
4. Для изменения значений передаваемых параметров используется передача по адресу.
5. Для указания того, что передача параметров происходит по адресу, используется служебное слово var.
6. Используя передачу параметров по адресу, будьте особенно внимательны!

 

Контрольные вопросы

1. Приведите пример, когда использование процедуры с параметрами сокращает текст программы втрое.
2. Какой из способов передачи параметров расходует больше памяти?
3. Можно ли передавать в качестве параметра произведение двух переменных при передаче параметров по значению? Где окажется значение произведения? Почему этого нельзя сделать при передаче по адресу?
4. Рассмотрим следующую процедуру:

procedure Maxim(var х.у:integer);
begin if x>y then у:=x
else x:=y
end;

Тело программы выглядит так:

х:=2; у:=3;
Maxim(y,x);

Каковы будут значения переменных х и у?

5. Рассмотрим следующую процедуру:

procedure Mult(var x:integer;y:integer);
begin
x:=y*2 end;

Тело программы выглядит так:

х:=2;
Mu1t(x,2*x);

Каково будет значение переменной х?




 

Комментарии:


Добавить свой комментарий:


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru