Подпрограммы, формальные и фактические параметры — различия между версиями
Juliet (обсуждение | вклад) (→Подпрограммы) |
Juliet (обсуждение | вклад) (→Параметры подпрограмм) |
||
Строка 67: | Строка 67: | ||
6 | 6 | ||
</pre> | </pre> | ||
+ | |||
+ | То есть после вызова процедуры изменилось значение нашей переменной <tt>x</tt> из основной программы. <br /> | ||
+ | ''Входно-выходные'' параметры описываются с ключевым словом '''<tt>var</tt>'''. | ||
+ | |||
+ | В чем разница между «обычным» описанием параметра и описанием с ключевым словом '''<tt>var</tt>'''? Если мы просто описываем параметр подпрограммы: | ||
+ | <source lang="Pascal"> | ||
+ | procedure p(x: integer); | ||
+ | </source> | ||
+ | Это значит, что при вызове подпрограммы значение '''фактического''' параметра (то есть, например, значение <tt>5</tt> при вызове <tt>p(5)</tt>) будет скопировано «в формальный параметр». | ||
[[Категория:Основы программирования]] | [[Категория:Основы программирования]] |
Версия 20:33, 28 октября 2012
Подпрограммы
Подпрограммы используются для решения однотипных задач. В первую очередь, они позволяют избавиться от дублирования кода. Если вы поймали себя на том, что второй или даже третий раз делаете «копи/паст», значит пришло время написать подпрограмму.
На самом деле даже если сейчас некоторый код вам нужен лишь единожды, но он решает какую-то общую задачу (например, поиск минимума из трех чисел или сортировка массива), стоит выделить его в подпрограмму.
Подпрограммы имеют:
- имя;
- список параметров.
Процедуры и функции
В Pascal выделяют два типа подпрограмм: процедуры и функции. Они похожи, но функции имеют возвращаемое значение (например, функция min или cos), а процедуры — нет (write, read).
Пример процедуры. Печать на консоль пары значений: x, f(x).
procedure printArgFuncPair(x: real; fx: real);
begin
writelnFormat('x = {0,6:f4}; f(x) = {1,6:f4}',
x, fx);
end;
Пример функции. Минимум из двух целых чисел.
function MinInt(x, y: integer): integer;
begin
if x < y then
result := x
else
result := y;
end;
Параметры подпрограмм
Логически выделяют три типа параметров:
- входные;
- входно-выходные;
- выходные.
Как следует из названия, входные параметры только используются подпрограммой. В процессе работы подпрограммы они не изменяются. Например, функция cos(x) получает на вход значение угла в радианах и возвращает значение косинуса этого угла. Значение угла никак не модифицируется. То же можно сказать о параметрах подпрограмм из примеров выше.
Входно-выходные параметры используются в подпрограмме и модифицируются. То есть новое значение параметра важно для вызывающей стороны. Вспомним, например, процедуру инкремента:
procedure inc(var x: integer);
begin
x := x + 1;
end;
И рассмотрим вызов процедуры в основной программе:
begin
var x := 5;
writeln(x);
inc(x);
writeln(x);
end.
В результате работы получится следующий вывод:
5 6
То есть после вызова процедуры изменилось значение нашей переменной x из основной программы.
Входно-выходные параметры описываются с ключевым словом var.
В чем разница между «обычным» описанием параметра и описанием с ключевым словом var? Если мы просто описываем параметр подпрограммы:
procedure p(x: integer);
Это значит, что при вызове подпрограммы значение фактического параметра (то есть, например, значение 5 при вызове p(5)) будет скопировано «в формальный параметр».