Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Топ:
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2017-12-22 | 177 |
5.00
из
|
Заказать работу |
|
|
Как было сказано ранее, процедуры с параметрами-значениями требуют входных данных. Где они записываются и как задаются? На этот вопрос может ответить общая форма заголовка процедуры этой процедуры:
PROCEDURE <Имя процедуры> (<Параметры-аргументы>: тип);
Здесь под параметром понимают имя переменной, которая является «входной» для процедуры (формальный параметр-аргумент). Этот параметр с синтаксической точки зрения является параметром-значением, при его описании в заголовке процедуры не требуется писать слово VAR. Параметры-значения при вызове процедуры принимают из основной программы свои конкретные значения. Заметим также, что в самой процедуре значения параметров-значений не меняются в ходе работы процедуры.
При обращении к процедуре с параметрами-значениями в основной программе фактическими параметрами могут служить как имена переменных (которые описаны и определены выше), так и конкретные значения (константы) и выражения. При обращении необходимо следить за соответствием списка параметров при обращении и описании. Кроме того, следует строго соблюдать соответствие типов параметров.
Рассмотрим работу процедур такого типа на примерах.
П р и м е р 1. Нарисовать квадрат с произвольной длиной стороны в левом верхнем углу (длина стороны задается с клавиатуры).
В этой программе также надо оформить рисование квадрата в виде процедуры, но уже с входным параметром-значением – длиной стороны квадрата.
program RISUNOK_2;
var I: integer;
procedure KVADRAT (N: integer);
var J, K: integer;
begin
for J:= 1 to N do write ('*'); writeln;
for J:= 1 to N - 2 do
begin
write ('*'); for K:= 1 to N - 2 do write (' ');
writeln ('*');
end;
for J:= 1 to N do write ('*');
end;
begin { Основная программа }
write ('Введите длину стороны – ');
|
readln (I); clrscr; KVADRAT (I);
end.
П р и м е р 2. Вычислить площадь четырехугольника с применением процедуры с параметрами-значениями.
program PLOCHAD_2;
var AB, BC, CD, AD, AC, S1, S: real;
procedure GERON_2 (a, b, c: real);
var P: real;
begin
P:= (a + b + c)/2; S:= sqrt (P*(P - a)*(P - b)*(P - c));
end;
begin {*ОСНОВНАЯПРОГРАММА*}
read (AB, BC, CD, AD, AC); GERON_2(AB, BC, AC); S1:= S;
GERON_2 (AD, AC, CD); write ('S = ', S1 + S)
end.
В данной программе определена процедура GERON_2 с тремя параметрами-значениями и локальной переменной P. Значение же площади треугольника помещается в глобальную переменную S. При вызове этой процедуры формальные параметры a, b, c замещаются на фактические параметры AB, BC, AC при первом обращении и на AD, AC, CD – при втором.
Заметим также, что здесь фактические параметры представлены переменными, которые получают свое значение с помощью процедуры READ. Однако если известны длины сторон треугольника, например, 6, 7, 4, то можно вычислить площадь этого треугольника, вызвав процедуру GERON_2(6, 7, 4), и получить ответ в переменной S.
Процедуры с параметрами-переменными
В отличие от процедур с параметрами-значениями, процедуры с параметрами-переменными не имеют входных параметров, т. е. из основной программы не передаются значения переменных в процедуру, за исключением глобальных переменных. Отличие в описании и обращении к процедурам с параметрами-переменными заключается в специфическом написании заголовка процедуры. В остальном все процедуры схожи. Общий вид заголовка процедуры с параметрами-переменными выглядит так:
PROCEDURE <Имя процедуры> (VAR<Параметры-переменные>: тип);
При детальном ознакомлении с синтаксической диаграммой видно, что параметрам-переменным должно предшествовать служебное слово VAR, причем оно пишется столько раз, сколько различных типов представлено в выходных данных, например:
PROCEDURE PRIMER (VAR a, b, c: INTEGER; VAR m: CHAR; VAR i, j: REAL).
При обращении к процедурам с параметрами-переменными фактическими параметрами должны являться имена переменных, которые описаны в основной программе.
П р и м е р. Вычисление площади четырехугольника.
|
program PLOCHAD_3;
var AB, BC, CD, AD, AC, S1, S2, a, b, c: real;
procedure GERON_3 (var S: real);
var P: real;
begin
P:= (a + b + c)/2; S:= sqrt (P*(P - a)*(P - b)*(P - c));
end;
begin { Основная программа }
read (AB, BC, CD, AD, AC);
a:= AB; b:= BC; c:= AC; GERON_3 (S1);
a:= AD; b:= AC; c:= CD; GERON_3 (S2);
write ('S = ', S1 + S2)
end.
Комбинированные процедуры
Комбинированные процедуры включают в себя входные и выходные данные. В заголовке этой процедуры, как и ранее, выходные параметры предваряются словом VAR, входные параметры – без него. Порядок следования параметров может быть произвольным, например:
PROCEDUREPRIMER (VARa, b, c: INTEGER;
m: CHAR; VAR i, j: REAL);
Здесь a, b, c, i, j – параметры-результаты (переменные); m – параметр-аргумент (значение).
В качестве иллюстрации комбинированных процедур рассмотрим последний вариант вычисления площади четырехугольника:
program PLOCHAD_4;
var AB, BC, CD, AD, AC, S1, S2: real;
procedure GERON_4 (a, b, c: eal; var S: real);
var P: real;
begin
P:= (a + b + c)/2;
S:= sqrt (P*(P - a)*(P - b)*(P - c));
end;
begin {*ОСНОВНАЯПРОГРАММА*}
read (AB, BC, CD, AD, AC);
GERON_4 (AB, BC, AC, S1);
GERON_4 (AD, AC, CD, S2);
write ('S = ', S1 + S2)
end.
Примечание. Для более полного усвоения введенных ранее терминов перечислим на базе последнего примера все виды параметров и переменных:
1) глобальные переменные AB, BC, CD, AD, AC, S1, S2;
2) локальные переменные a, b, c, S, P;
3) формальные параметры a, b, c, S:
параметры-значения (аргументы) a, b, c;
параметр-переменная (результат) S;
4) фактические параметры AB, BC, CD, AD, AC, S1, S2:
параметры-значения (аргументы) AB, BC, CD, AD, AC;
параметры-переменные (результаты) S1, S2.
Заметим также, что термины «параметр-значение» и «аргумент», как и «параметр-переменная» и «результат», не всегда идентичны. Дело в том, что характеристика «значение (переменная)» отражает синтаксическую сущность параметра, а «аргумент (результат)» – его семантику (функциональную роль в процедуре). Иногда один и тот же параметр может быть аргументом и результатом одновременно, но описан в процедуре в виде параметра-переменной.
Попытка же описать выходной параметр в виде параметра-значения (без слова VAR в заголовке процедуры) приведет к тому, что результат работы процедуры не будет возвращен в основную программу. Это происходит потому, что характер «поведения» параметров-значений и параметров-переменных в процессе работы процедуры различен. Разница эта состоит в том, что преобразования, которые претерпевают формальные параметры-значения в процедуре, не вызывают изменения соответствующих им фактических параметров, в то время как изменения параметров-переменных могут изменять значения соответствующих фактических параметров.
|
Причиной этого феномена является неодинаковое распределение памяти под хранение параметров процедуры. Формальному параметру-значению отводится некоторая область (ячейка) памяти, куда заносится значение соответствующего фактического параметра, вычисленного на момент обращения к процедуре. На этом связь между ними обрывается. Действительно, если фактическим параметром является константа или выражение, то как изменения в формальном параметре-значении (а это есть всегда переменная) могут повлиять, например, на выражение?
Фактическим же параметром, соответствующим формальному параметру-переменной, является всегда переменная. На время выполнения процедуры эти параметры отождествляются, им соответствует одна и та же область памяти. Вполне понятно, что в этой ситуации изменения формального параметра влекут адекватные изменения фактического параметра, и после завершения процедуры его значение может отличаться от его первоначального значения.
Именно поэтому, объявив в процедуре параметр-результат как параметр-значение, этот результат так и останется в формальном параметре-переменной без его передачи в соответствующий фактический параметр (т. е нет возврата полученного процедурой значения) в основную программу.
|
|
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!