Begin
<тело процедуры>
<имя>:=<значение>;
end;
Функции предназначены для того, чтобы вычислять только одно значение, поэтому ее первое отличие в том, что процедура может иметь новые значения у нескольких параметров, а функция только одно (оно и будет ее результатом).
Второе отличие заключается в заголовке функции. Он состоит из слова function, за которым идет имя функции, затем в круглых скобках идет список формальных параметров, после чего через двоеточие записывается тип результата функции. Остальное – как в процедуре. Кроме того: в теле функции должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции, а в правой – ее значение. Иначе, значение не будет определено. В точку вызова возвращается результат присваивания.
Обращение к функции осуществляется по имени с необязательным указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам, указанным в заголовке, и иметь тот же тип.
Пример 3: Составить программу, подсчитывающую число сочетаний без повторения из n элементов по k элементов. Число сочетаний без повторения вычисляется по формуле:
.
Решение:
program pr3;
var n,k:integer;
a1,a2,a3,c:integer;
function f(n:integer);integer;
var i:integer;
rez:integer;
begin
rez:=1;
for i:=1 to n do rez:=rez*i;
f:=rez
end;
begin
writeln(‘Введите n и k для подсчета числа :’);
readln(n,k);
a1:=f(n);
a2:=f(k);
a3:=f(n-k);
c:=a1 div (a2*a3);
writeln(‘=’,c:4)
end.
Пример 4: Написать подпрограмму, подсчитывающую количество цифр числа. Используя ее, определить, в каком из двух данных чисел больше цифр.
Решение:
program pr4;
var n1,n2:integer;
k1,k2:integer;
function qun(x:integer):integer;
var k:integer;
begin
k:=0;
while x<>0 do
begin
k:=k+1;
x:=x div 10
end;
qun:=k
end;
begin
writeln(‘Ввести два числа’);
readln(n1,n2);
k1:=qun(n1);
k2:=qun(n2);
if k1=k2 then writeln(‘Одинаковое количество цифр’)
else if k1>k2 then writeln(‘В первом числе цифр
больше’)
else writeln(‘Во втором числе цифр
больше’);
readln
end.
Пример 5: Дан массив действительных чисел {}, где i=1,2,3, …, m. Вычислить сумму элементов с 1-го по 12-й и сумму элементов с 8-го по 15-й:
Найти произведение этих сумм.
Решение:
program pr5;
const m=20;
var a:array[1..m] of real;
j:integer;
p,s1,s2:real;
function sum(n,k:integer):real;
var i:integer;
s:real;
begin
s:=0;
for i:=n to k do s:=s+a[i];
sum:=s
end;
begin
for j:=1 to m do
begin
writeln(‘a[‘,j:2,’]=’);
readln(a[j])
end;
s1:=sum(1,12);
s2:=sum(8,15);
p:=s1*s2;
writeln(‘S1=’,s1:8:2,’ S2=’,s2:8:2,’ P=’,p:8:2)
end.
В заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения (выражений) и имен. Этот список указывается после имени подпрограммы и заключается в круглые скобки.
Список формальных параметров, указываемых в заголовке подпрограммы, может включать в себя:
- параметры-значения;
- параметры-переменные, перед которыми должно стоять служебное слово var и за которыми указывается их тип;
- параметры-процедуры, перед которыми должно стоять служебное слово procedure;
- параметры-функции, перед которыми должно стоять служебное слово function и после которых указывается тип значения, возвращаемого функцией в основную программу;
- нетипизированные параметры, перед которыми должно стоять служебное слово var и отсутствует указание типа.
В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга – точкой с запятой. Имена параметров одного типа можно объединить в подсписки, в которых имена отделяются друг от друга запятой.
Между формальными и фактическими параметрами должно быть полное соответствие:
- формальных и фактических параметров должно быть одинаковое количество;
- порядок следования фактических и формальных параметров должен быть один и тот же;
- тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.