- •Кафедра прикладной математики
- •Тема: «подпрограммы в языке pascal»
- •1. Основные понятия.
- •2. Процедуры.
- •3. Функции.
- •4. Механизм передачи параметров.
- •4.1. Параметры-значения.
- •4.2. Параметры-переменные.
- •4.3. Параметры-процедуры и параметры-функции.
- •5. Область действия параметров.
- •6. Рекурсии.
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лекция № 17 по курсу «информатика»
3. Функции.
Функция, определяемая пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function, идентификатор (имя) функции, заключенный в круглые скобки, необязательный список формальных параметров и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре аналогичный программе:
function <имя> [(<список формальных параметров>)]:<тип результата>;
<описательная часть>
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.