МЕХАНИЗМ ПЕРЕДАЧИ ПАРАМЕТРОВ.

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 и отсутствует указание типа.

В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга – точкой с запятой. Имена параметров одного типа можно объединить в подсписки, в которых имена отделяются друг от друга запятой.

Между формальными и фактическими параметрами должно быть полное соответствие:

- формальных и фактических параметров должно быть одинаковое количество;

- порядок следования фактических и формальных параметров должен быть один и тот же;

- тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.