Function <имя_функции>(<параметры>) : <тип результата>;
Label <метки>;
Const <константы>; раздел объявления меток, констант, типов данных,
Type <типы данных>; переменных (может отсутствовать)
Var <переменные>;
Begin
<операторы, составляющие тело функции>;
End;
Для того, чтобы значение функции было определено и передано в основную программу, в теле функции обязательно должен быть хотя бы один оператор присваивания вида:
<имя_функции>:=<значение>.
Вызов функции, определенной пользователем, осуществляется так же, как и любой стандартной функции Паскаля.
Пример 1.
Создать функцию пользователя, вычисляющую х!
Решение:
Program pr1;
Var
x: integer; y: real;
Function Fact(x: integer): real;
Var
i: integer; f: real;
begin
f:=1;
for i:=1 to x do f:=f*i; {вычисляем произведение}
Fact:=f; {имени функции присваиваем полученное значение}
end;
begin {основная программа}
Write (‘x=’); Readln(x); {ввод значения х}
y:=Fact(x); {вызов функции с аргументом х }
Writeln(‘y=’, y:4:0); {вывод результата}
Readln;
end.
Результат:
x= 4
y= 24
Пример 2.
Создать функцию пользователя, вычисляющую гиперболический косинус
gc=
Решение:
Program pr2;
Var x: integer;
y: real;
Function gc(x:integer):real;
begin
gc:=(exp(x)+exp(-x))/2;
end;
begin {основная программа}
Write (‘x=’); Readln(x); {ввод значения х}
y:=gc(x); {вызов функции и присваивание ее значения переменной y}
Два треугольника длинами своих сторон. Определить, площадь какого из них больше (создать функцию для вычисления площади треугольника по длинам его сторон).
Для решения задачи используем формулу Герона , где x, y, z – стороны треугольника, p – полупериметр)
Решение:
Program pr3;
var
a1, b1, с1, s1, a2, b2, с2, s2: real;
{функция вычисления площади треугольника со сторонами x,y,z}
Function PlTr(x ,y, z: real): real;
Var
p: real;
Begin
p:= (x + y + z)/2; {полупериметр треугольника}
PlTr:=Sqrt(p*(p-x)*(p-y)*(p-z));
End;
BEGIN {основная программа}
{ввод исходных данных}
Write('Cтороны 1-го треугольника:'); Readln(a1, b1, c1);
Write('Cтороны 2-го треугольника:'); Readln(a2, b2, c2);
S1:=PlTr(a1, b1, c1);{вызов функции для нахождения площади 1-го треугольника}
S2:=PlTr(a2, b2, c2);{вызов функции для нахождения площади 2-го треугольника}
if S1>S2 then Writeln(‘S1>S2’)
else if S1<S2 then Writeln(‘S1<S2’)
else Writeln(‘S1=S2’);
Readln;
END.
Результат:
Cтороны 1-го треугольника:3 4 5
Cтороны 1-го треугольника:6 7 8
S1<S2
Пример 4.
Создать функцию нахождения максимального из двух чисел
write('stepen=',stepen(x,n):6:2); {вызов функции и вывод ее значения}
readln;
END.
Результат:
1 случай
x,n=2 3
stepen= 8.00
2 случай
x,n=-2 3
stepen= -8.00
3 случай
x,n=2 -2
stepen= 0.25
4 случай
x,n=-2 -2
stepen= 0.25
Пример 7.
Вычислить, используя функцию нахождения знаменателя:
(n слагаемых)
Решение:
Program pr7;
Var s: real;
i, n: integer;
Function Fakt(x: integer): real; {функция вычисления факториала}
Var
i: integer; f: real;
begin
f:=1;
for i:=1 to x do f:=f*i;
Fakt:=f;
end;
Begin
write('n= '); Readln(n); {вводим количество слагаемых суммы}
s:=0;
For i:=1 to n do {перебираем i от 1 до n}
s:=s+i/Fakt(i+1); {добавляем к сумме очередную дробь, вызывая}
{ функцию для вычисления знаменателя}
writeln('s=',s:6:4); {вывод результата}
Readln;
end.
Результат:
n=3
s=0.9583
Пример 8.
Вычислить, используя функцию нахождения знаменателя:
(n слагаемых)
Решение:
Program pr8;
Var s: real;
i, n: integer;
{ функция вычисления суммы первых m натуральных чисел}
Function Sum(m:integer ):integer;
Var
k, S: integer;
begin
S:=0;
for k:=1 to m do
S:=S+k;
Sum:=S;
end;
Begin
write('n= '); Readln(n); {вводим количество слагаемых суммы}
s:=0;
for i:=1 to n do {перебираем i от 1 до n}
s:=s+i*5/sum(i+1); {добавляем к сумме очередную дробь, вызывая}
{ функцию для вычисления знаменателя}
writeln('s=',s:6:4) {вывод результата}
end.
Результат:
n=3
s=4.8333
ЗАДАНИЯ
1. Найти минимальное из A, B, C, создав функцию выбора минимального из двух произвольных чисел.
2. Найти максимальное из чисел A, B, C, D, создав процедуру выбора максимального из 2-х произвольных чисел.
3. Сократить дробь вида a/b (a, b – вводимые натуральные числа), создав функцию для нахождения наибольшего общего делителя двух натуральных чисел.
4. Найти наибольший общий делитель чисел A, B, C, создав функцию для нахождения НОД двух натуральных чисел.
5. Два прямоугольных треугольника заданы своими катетами. Определить, у какого из них площадь больше (создать функцию для вычисления площади прямоугольного треугольника по его катетам).
6. Два прямоугольника заданы координатами вершин. Определить, площадь какого из них больше (использовать функцию нахождения площади прямоугольника).
7. Два прямоугольных треугольника заданы своими катетами. Определить, у какого из них периметр больше (создать функцию для вычисления периметра прямоугольного треугольника по его катетам).
8. Вводятся 2 натуральных числа. Найти среднее арифметическое цифр каждого из них (создать функцию для нахождения среднего арифметического цифр произвольного натурального числа).
9. Вводятся 3 натуральных числа. Найти сумму цифр каждого из них (создать функцию для нахождения суммы цифр произвольного натурального числа).
10. Вычислить 3-2 + 42 +5-2, создав функцию для вычисления степени.
11. Вычислить (-32 + 24 )/4-2, создав функцию для вычисления степени.
12. Найти (a! + b!)/(a+b)!, создав функцию для вычисления факториала произвольного натурального числа.
13. Найти m! + (m+n)!, создав функцию для вычисления факториала произвольного натурального числа.
14. Вычислить, используя функцию нахождения знаменателя:
(15 слагаемых)
15. Вычислить, используя функцию нахождения знаменателя:
... (n слагаемых)
16. Вычислить, используя функцию нахождения знаменателя:
(n слаг.)
17. Вычислить, используя функцию нахождения знаменателя:
(15 слаг)
18. Вычислить, используя функцию нахождения знаменателя:
... (n слагаемых)
19. Вычислить, используя функцию нахождения знаменателя:
(n слаг.)
20. Вычислить, используя функцию нахождения знаменателя: