- •2.1. Алгоритмизация задач
- •2.5. Построение (разработка) программ
- •2.8. Константы
- •2.9. Метки и оператор перехода
- •2.12. Табуляция функций
- •2.13. Вычисление суммы
- •2.14. Вычисление произведения
- •2.15. Определение факториала
- •2.16. Вложенные циклы
- •2.17. Оператор цикла с предусловием
- •2.18. Оператор цикла с постусловием
- •2.19. Символьные переменные
- •2.20. Процедуры и функции
- •2.21. Функции
- •2.22. Сложный тип данных - массивы
- •2.23. Тип массива
- •2.24. Строки
- •2.25. Файлы
- •5. Самостоятельная работа
- •6. Среда программирования турбо паскаль
2.21. Функции
В Паскале, помимо процедур, разрешены похожие на них конструкции, которые назы-ваются функциями. Обращение к функции приводит к вычислению ее значения - объекта ти-па real, integer, char. Тип фиксируется в описании функции.
Имеются две отличительные особенности описания функции в сравнении с описанием процедуры. Первая особенность связана с заголовком, он должен начинаться со служебного слова function (функция) и заканчиваться именем того типа, которому принадлежит значе-ние функции.
Например: function f(a:real; var b:t):rael;
61
function g(var a,b:integer): integer; function h(a:integer): char;
Вторая особенность: составной оператор, который располагается в описании функции после заголовка и, возможно, после описания локальных меток и переменных, должен обяза-тельно содержать внутри себя оператор присваивания, в котором слева от := помещено имя функции, например: f:=3,14 g:=a+2*b
if a mod 2=0 then h:=’*’ else h:=’!’ Таких операторов присваивания может быть несколько, но при каждом конкретном об-ращении к функции «сработать» должен только один из них. Это присваивание и определит значение функции.
Относительно параметров функции имеется полная аналогия с параметрами процедур. Описание функции, как и описания процедур, располагаются в программе после совокупно-сти описания процедур.
Расмотрим пример программы с трассировкой
1 Program pro6;
Var a,b,c:integer;
function pr(x, y: integer) : integer;
4 Begin
x:=x+2;
y:=y-3;
7 pr :=(x+y) DIV 2;
8 end;
9 BEGIN
readln(a,b);
c:= pr (a,b);
writeln(a,’ ‘,b,’ ‘,c);
END.
|
Таблица трассировки |
|
|
|
| |||
|
№ |
Ход выполнения |
a |
b |
c |
| ||
|
9 |
Вход в pro6 |
? |
? |
? |
| ||
|
10 |
|
2 |
3 |
|
| ||
|
11 |
Вызов pr |
|
|
|
x y pr | ||
|
4 |
Вход pr |
|
|
|
2 |
3 |
|
|
5 |
|
|
|
|
4 |
|
|
|
6 |
|
|
|
|
|
0 |
|
|
7 |
|
|
|
|
|
|
2 |
|
8 |
Выход из pr |
|
|
|
|
|
|
|
11 |
Возврат в pro6 |
|
|
2 |
| ||
|
12 |
Вывод a,b,c (2 3 2) |
|
|
|
| ||
|
13 |
Выход из pro6 |
|
|
|
| ||
62
Пример. Рассмотрим определение площади четырехугольника по формуле Герона. PROGRAM PR44; VAR
AB,BC,CD,DA,AC:REAL; funcrion tr1(a, b, c: real): real; var p:real: begin
p:=(a+b+c)/2; tr1:=sqrt(p*(p-a)*(p-b)*(p-c)) end; BEGIN
WRITE(‘ Введите AB,BC,CD,DA,AC ‘); READLN(AB,BC,CD,DA,AC); WRITE(tr1(AB,BC,AC) +tr1(CD,DA,AC):8:3) END.
Пример. Вычислить значение y = ∑ ai + ∑bj
program pr45; var
a,b,S:real; n,e:integer;
function TR(n:integer;m:REAL):real; var
k:real; i:integer; begin S:=0; for i:=1 to n do
begin k:=exp(i*ln(m)); S:=k+S; TR:=S; end; end; begin
write(' Введите n,a '); readln(n,a); write(' Введите m,b '); readln(m,b); S:=TR(n,a)+TR(m,b); writeln('S= ',S:8:3); end.
