Вспомогательные алгоритмы организуются двумя способами в зависимости от использования:
1) ПРОЦЕДУРЫ:
Программа процедура предназначена для выполнения какой-то законченной последовательности действий. Любая процедура начинается с заголовка. В отличии от основной программы заголовок в процедуре обязателен. Он состоит из зарезервированного слова Procedure, за которым следует идентификатор имени процедуры, а далее в круглых скобках список формальных параметров:
За заголовком могут идти такие же разделы, что и в основной программе. В отличии от основной программы процедура завершается не точкой, а точкой с запятой.
Procedure < имя процедуры >[(< аргументы >: < тип аргументов>]; Var <значение>:< тип значения >] )];
Var < переменная 1>[,< переменная 2>,...]: тип;
Begin
< тело процедуры>;
End;
Для вызова процедуры из основной программы или другой подпрограммы следует записать оператор, состоящий из имени процедуры и списка фактических параметров, которые должны совпадать по количеству и типу с формальными параметрами процедуры.
2) ФУНКЦИИ:
Подпрограмма-функция предназначена для вычисления какого-либо параметра. У подпрограммы-функции два основных отличия от процедуры:
а) заголовок состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного строкового и символьного.
б) в теле функции хотя бы раз имени функции должно быть присвоено значение.
Function < имя функции >[(< аргументы >: < тип аргументов>):< тип значения функции>];
Var < переменная 1>[,< переменная 2>,...]: тип;
Begin
<тело функции>;
<имя функции>:=<выражение значение функции>;
End;
Примеры решений задач.
1. Пример функции для вычисления факториала.
FunctionFactorial(N:Byte):Longint;
Var
Fact:longint;
I:byte;
Begin
Fact:=n;
Fori:=n-1downto 2 do
Fact:=fact*i;
Factorial:=fact;
End;
Вариант 1. Использование процедуры без параметров.
ProgramSquare1;
Var АВ, ВС, СD, DA, DB, a, b, c, p, s, S1, S2: Real;
Proceduregeron;
Begin
p:= (a+b+c)/2; s:= sqrt(p*(p–a)*(p–b)*(p–a));
End;
Begin
WriteLn (‘Введите длины сторон АВ, ВС, СD, DA, DB’);
ReadLn (AB, ВС, СD, DA, DB);
a:= AB; b:=DB; c:=DA;
geron; S1:=s;
a:= BC; b:=CD; c:=DB;
geron; S2:=s;
WriteLn (‘Площадь равна:’, S1+S2)
End.
АВ, ВС, СD, DA, DB, a, b, c, p, s, S1, S2 – глобальные переменные;
Вариант 2. Использование процедуры без параметров.
ProgramSquare2;
Var АВ, ВС, СD, DA, DB, a, b, c, s, S1, S2: Real;
Proceduregeron;
Varp:Real;
Begin
p:= (a+b+c)/2; s:= sqrt(p*(p–a)*(p–b)*(p–a));
End;
Begin
WriteLn (‘Введите длины сторон АВ, ВС, СD, DA, DB’);
ReadLn (AB, ВС, СD, DA, DB);
a:= AB; b:=DB; c:=DA;
geron; S1:=s;
a:= BC; b:=CD; c:=DB;
geron; S2:=s;
WriteLn (‘Площадь равна:’, S1+S2)
End.
АВ, ВС, СD, DA, DB, a, b, c, s, S1, S2 – глобальные переменные;
p – локальная переменная.
Вариант 3. Использование процедуры с параметрами.
ProgramSquare3;
Var АВ, ВС, СD, DA, DB, s, S1, S2: Real;
Proceduregeron (a, b, c);
Varp:Real;
Begin
p:= (a+b+c)/2; s:= sqrt(p*(p–a)*(p–b)*(p–a));
End;
Begin
WriteLn (‘Введите длины сторон АВ, ВС, СD, DA, DB’);
ReadLn (AB, ВС, СD, DA, DB);
geron (AB, DB, DA); S1:=s;
geron (BC, CD, DB); S2:=s;
WriteLn (‘Площадь равна:’, S1+S2)
End.
АВ, ВС, СD, DA, DB – фактические параметры;
a, b, c – формальные параметры.
Вариант 4. Использование процедуры с возвращением значения.
ProgramSquare4;
Var АВ, ВС, СD, DA, DB, S1, S2: Real;
Proceduregeron (a, b, c; Var s:Real);
Varp:Real;
Begin
p:= (a+b+c)/2; s:= sqrt(p*(p–a)*(p–b)*(p–a));
End;
Begin
WriteLn (‘Введите длины сторон АВ, ВС, СD, DA, DB’);
ReadLn (AB, ВС, СD, DA, DB);
geron (AB, DB, DA, S1);
geron (BC, CD, DB, S2);
WriteLn (‘Площадь равна:’, S1+S2)
End.
Вариант 5. Использование процедуры-функции.
ProgramSquare5;
Var АВ, ВС, СD, DA, DB, S: Real;
Function geron (a, b, c: Real): Real;
Varp:Real;
Begin
p:= (a+b+c)/2; geron:= sqrt(p*(p–a)*(p–b)*(p–a));
End;
Begin
WriteLn (‘Введите длины сторон АВ, ВС, СD, DA, DB’);