Составляя программу часто выгодно описывать и использовать небольшие подпрограммы, каждая из которых решает свою логически завершенную задачу, либо с целью сократить объем исходного кода за счет уменьшения дублирования.
В Pascal есть два вида подпрограмм – процедуры и функции. Разница между этими двумя видами в том, что функции по окончании своей работы должны вернуть одно значение, а процедуры – нет.
В следующем примере приведен пример программы, в которой добавление элемента в список вынесено в отдельную подпрограмму – процедура add_elem.
Листинг 4. Использование процедуры добавления элемента списка
program listing_4;
uses crt; (* подключаем библиотеку *)
type
list = ^rec; {тип - указатель на элемент списка}
rec = record {тип – элемент списка}
x: Integer;
next: list; {указатель на следующий}
end;
var
head {голова списка}, tmp: list;
procedure add_elem(x: integer); { процедура добавления }
var tmp: list;
begin
new(tmp);
tmp^.x := x;
if head = nil then begin {создаем первый}
head := tmp;
head^.next := nil
end else begin {новый элемент добавляем в голову}
tmp^.next := head; { новый становится первым }
head := tmp {меняем голову}
end
end;
begin
clrscr; (* очистка экрана *)
head := nil;
add_elem(12); {добавляем 3й элемент}
add_elem(11); {добавляем 2й элемент}
add_elem(10); {добавляем 1й элемент}
tmp := head;
while not(tmp = nil) do begin
writeln(tmp^.x); {печать значения}
tmp:=tmp^.next; {переход к следующему элементу}
dispose(head); {освобождение памяти}
head:=tmp
end;
end.
Результат работы программы в листинге 4 полностью идентичен результату программы из листинга 3. Однако очевидно, что использование процедуры позволит многократно вызывать подпрограмму добавления элемента в голову линейного списка (т.е. указатель на первый элемент) в любом участке программы.
В листинге 5 приведен пример функции, подсчета суммы двух целых чисел.
Листинг 5. Использование функций
program listing_5;
uses crt; (* подключаем библиотеку *)
function trivial_sum(x,y: integer):integer;
begin
trivial_sum := x + y {возвращаемое значение}
end;
begin
clrscr; (* очистка экрана *)
writeln(trivial_sum(2,3))
end.
Результатом работы программы будет вывод числа 5. Обратите внимание, что в теле функции доступна переменная, которая называется также как и функция. Эту переменную необходимо использовать для возвращения значения при выходе из функции.