Подпрограммы: процедуры и функции в паскаль abc.net
- Подпрограммы используются в первую очередь для того, чтобы избежать дублирования одного и того же фрагмента кода:
- Второй функцией подпрограмм является их необходимость для структурирования кода.
- Функции возвращают значение (например, функция
min
возвращает найденное минимальное значение). - Процедуры не возвращают значение, но самостоятельно выводят какие-то значения, либо считывают значения (
write
,read
).
например, если в программе вам необходимо несколько раз искать минимальный элементы массива, то, чтобы не копировать один и тот же фрагмент кода дважды или трижды, следует оформить его в виде подпрограммы.
✍ Решение:
-
Процедура:
procedure minInt(x, y: integer); begin if x < y then writeln(x); else writeln(y); end; |
Функция:
function minInt(x, y: integer): integer; begin if x < y then result := x else result := y; end; |
Параметры подпрограмм
- входные или параметры, передаваемые по значению;
- входно-выходные или параметры, передаваемые по ссылке;
- выходные, тоже передаются по ссылке.
Входные параметры только используются подпрограммой. В процессе работы подпрограммы они не изменяются.
Входно-выходные параметры используются в подпрограмме и изменяются.
Входно-выходные параметры описываются с ключевым словом var
.
Выходные параметры отличаются от входно-выходных только тем, что их начальное значение не важно. Описываются они точно так же, — с ключевым словом var
.
Пример входного параметра (по значению):
procedure inc(x: integer); begin x := x + 1; end; // вызов процедуры в основной программе begin var y := 5; inc(y); // Значение 5 будет скопировано, и внутри процедуры переменная x будет равна 5. writeln(y); // 5. Значение переменной y не меняется! end. |
Пример входно-выходного параметра (передача параметра по ссылке):
procedure inc(var x: integer); begin x := x + 1; end; // вызов процедуры в основной программе begin var y := 5; writeln(y); // 5 inc(y); // процедура будет работать не с копией x, а с оригиналом, самим x writeln(y); // 6. Значение изменилось! end. |