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