Как процедуры, так и функции могут не иметь входных параметров. Если параметры отсутствуют то либо информация в процедуру не передается, либо передается через глобальные переменные.
При использовании глобальных переменных, обрабатывается информация, заданная в разделе “Var”, основной программы. В этом случае, процедура или функция используются всегда для обработки одних и тех же массивов. Обратиться к процедуре для обработки других массивов нельзя.
Пример, использования процедуру без параметров.
Представленная процедура обеспечивает выдачу справочной информации по кафедре «Математического обеспечения и технологий программирования».
Program PrjProcSprav;
{$APPTYPE CONSOLE}
Uses
SysUtils;
Procedure SpraV;
Begin
Writeln ('**************');
Writeln ('* KAFEDRA *');
Writeln ('* MO & TP *');
Writeln ('* Komnata *');
Writeln ('* 348 *');
Writeln ('* Telefon *');
Writeln ('* 442-80-98 *');
Writeln ('**************');
Readln;
End;
Begin
Sprav;
End.
Пример использования функции без параметров.
Имеется документ, содержащий информацию о реализованной продукции. Документ содержит следующие реквизиты.
Во-первых, «Шифр плательщика». Реквизит представлен в виде символьной строки длиной 10 символов;
Во-вторых, «Наименование изделия». Реквизит представлен в виде символьной строки длиной 20 символов;
В-третьих, «Дата оплаты». Реквизит представлен в виде символьной строки длиной 8 символов (два символа определяют день, два символа определяют месяц, четыре символа определяют год);
В-четвертых, "Количество оплаченных изделий". Реквизит представлен в виде числа, не имеющего дробной части;
В-пятых, "Цена изделия". Реквизит представлен в виде числа, имеющего дробную часть;
В-шестых, "Сумма оплаты". Реквизит представлен в виде числа, имеющего дробную часть.
Программный код, включает функцию, которая обеспечивает тестирование введенного документа на корректность занесения значения суммы. Значение суммы сравнивается на совпадение с произведением количества на цену. Функция не имеет входных параметров.
Program PrjFuncTest;
{$APPTYPE CONSOLE}
Uses
SysUtils;
Type
TRealiz = Record
ShPlat:String[10];
NIzd:String[20];
Date:String[8];
Quant:Integer;
Price:Real;
Sum:Real;
End;
TARealiz = Array [1..40] Of TRealiz;
Var
Realiz:TARealiz;
I,N:Integer;
Function Test:Boolean;
Var
I:Integer;
Begin
Test:=True;
For I:= 1 To N Do
If Realiz[I].Sum <> Realiz[I].Quant*Realiz[I].Price Then
Test:=False;
End; {Function}
Begin
Writeln('Vvedite chislo zapisei');
Readln(N);
For I:= 1 To N Do
Begin
Writeln ('Shifr platelshika');
Readln(Realiz[I].SHPlat);
Writeln ('Nazvanie izdelia');
Readln(Realiz[I].Nizd);
Writeln ('Data');
Readln (Realiz[I].Date);
Writeln ('Kolichestvo');
Readln(Realiz[I].Quant);
Writeln ('Cena izdelia');
Readln(Realiz[I].Price);
Writeln ('Symma oplati');
Readln(Realiz[I].Sum);
End;
If Test = False Then Writeln ('Document ne veren')
Else writeln ('Document veren');
Readln;
End.
Процедура является более универсальной конструкцией, чем функция. Любая функция может быть преобразована в процедуру. Однако, процедура может быть преобразована в функцию, исключительно в том случае, если имеет единственный результатный параметр.