Главная страница
Содержание
 
 

Процедуры и функции.

Составляя программу часто выгодно описывать и использовать небольшие подпрограммы, каждая из которых решает свою логически завершенную задачу, либо с целью сократить объем исходного кода за счет уменьшения дублирования.

В 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. Обратите внимание, что в теле функции доступна переменная, которая называется также как и функция. Эту переменную необходимо использовать для возвращения значения при выходе из функции.