Песни о Паскале - страница 46

Шрифт
Интервал

стр.

Впрочем, добиться нужного результата несложно: достаточно вставить в объявление параметра ключевое слово VAR.


>procedure Scan(var arg : string);


Это мелкое изменение влечет важное следствие: теперь arg – не локальная переменная, а ссылка на другую переменную. Это значит, что в момент вызова процедуры данные не будут копироваться, но параметр arg на время исполнения процедуры станет дублером фактического параметра S. Теперь, изменяя параметр arg, мы тем самым будем изменять и переменную S – наш фактический параметр.

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

Передавая же параметр по ссылке, вызывающая программа «говорит» иначе: «нужные тебе данные находятся в такой-то глобальной переменной, и ты вправе поступать с нею как угодно».

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

Вернемся к программе. Если она остановилась в пошаговом режиме, прервите её комбинацией Ctrl+F2. Затем исправьте заголовок процедуры указанным выше манером, откомпилируйте программу и вновь пройдите по шагам. Находясь внутри процедуры Scan, вы заметите, что переменные arg и S теперь изменяются синхронно (рис. 53). Это то, что нам нужно, стало быть, проблема решена!



Рис. 53 – Синхронное изменение формального и фактического параметров

Далее можете «толкнуть» программу в непрерывном режиме, нажав комбинацию Ctrl+F9.

Итоги

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

• При объявлении параметра без ключевого слова VAR, данные передаются только внутрь процедуры (по значению). Такой параметр используют как локальную переменную.

• Для передачи данных как внутрь процедуры, так и обратно, параметр объявляют с ключевым словом VAR. Тогда он служит ссылкой на другую переменную и меняется синхронно с нею.

А слабо?

А) Комбинация клавиш Ctrl+F8 устанавливает так называемые точки останова на исполняемых операторах. Эта же комбинацией отменяет их. Точка останова – это строка, на которой отладчик задерживает выполнение программы и ждет команды на её продолжение в непрерывном или пошаговом режиме..

Установите точку останова на выходе из процедуры Scan (на строке END) и запустите программу в непрерывном режиме (Ctrl+F9). Что произойдет? Чем, по-вашему, удобны точки останова?

Б) Перед запуском программы установите курсор внутри процедуры Scan и испытайте действие команды Run –> Go to cursor (клавиша F4).

Глава 22

О передаче параметров



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

Процедура обмена

Рассмотрим процедуру с несколькими параметрами. Пусть надо обменять значения в переменных A и B, это можно сделать так:


>      T:= A;       { временно запомнить A }

>      A:= B;

>      B:= T;       { поместить в B то, что раньше было в A }


Здесь T – переменная для временного хранения данных. Поручим эту простенькую работу процедуре, которую назовем Swap (обмен). Создавать процедуру начнем, как водится, с заголовка. Поскольку в обмене участвуют два числа, оба их надо передать через параметры. Для разделения формальных параметров используют точку с запятой. Если заголовок процедуры будет таким:


>procedure Swap (x: integer; y: integer);


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


>procedure Swap (var x: integer; var y: integer);


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


стр.

Похожие книги