Функции и процедуры
Любая большая программа состоит из определенного количества логически завершенных блоков. Для удобства создания и отладки программы, для большей наглядности кода подобные "завершенные блоки" записывают в виде подпрограмм.
Подпрограмма - именованная часть компьютерной программы, содержащая описание определенного законченного набора действий. Другими словами, это вспомогательная программа, которая обычно несколько раз выполняется в основной программе.
Подпрограммы могут работать с данными и выдавать результаты. Любая подпрограмма подобна программе: у неё есть заголовок, начало, тело подпрограммы, конец. В подпрограмме могут быть константы, переменные, свои подпрограммы. Подпрограмма должна быть описана до того как она будет использована и всегда перед основным Begin. В подпрограммах используются те же операторы, что и в обычной программе.
Разберемся с новыми понятиями:
- Глобальные переменные - переменные, описываемые в начале основного алгоритма.
- Локальные переменные - переменные, описываемые в подпрограмме. (Ими можно пользоваться только в подпрограмме)
- Формальные переменные фигурируют в подпрограмме и в дальнейшем замещаются конкретным значением, от которого мы хотим выполнить подпрограмму.
- Фактический параметр - величина, для которой необходимо вычислить значение функции.
Например, в математике F(x)=x3+x2-5, x - формальный параметр, а при вычислении значения функции F(3)=33+32-5, 3 - фактический параметр.
Подпрограммы в Pascal делятся на два вида: процедуры и функции.
Функция используется в том случае, когда после выполнения каких-то действий нужно получить результат в виде числа или текста. И результирующая переменная - строго одна.
Любую функцию, перед тем как её использовать в программе, необходимо описать и задать. Секция описания функций начинается с ключевого слова FUNCTION.
Форма записи:
FUNCTION F(x:тип):тип функции;
begin
F:=выражение
end;
Далее в программе к функции обращаются по F(x).
Обращение к функции осуществляется в правой части оператора присваивания или внутри оператора Writeln, при этом в выражении записываются имя функции и фактические параметры.
Вызов функции в основной программе:
K := F(фактический параметр);
Причем, тип переменной К и тип функции F должны совпадать!
Кроме того, в теле функции обязательно должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции или переменная result, а в правой — ее значение.
Пример:
var a,b, c: integer;
function sum(x, y: integer): integer;
begin
sum := x + y;
end;
begin
readln(a, b);
writeln(sum(a, b));
end.
Или так:
var a, b, c: integer;
function sum(x, y: integer): integer;
begin
result := x + y;
end;
begin
readln(a, b);
writeln(sum(a, b));
end.
Пример 1.Составьте программу, вычисляющую разность двух дробей ,
(a,b,c,d - натуральные числа). Результат представить в виде простой несократимой дроби .
Оформим вычисление НОД двух чисел в виде функции.
var a,b,c,d,e,f:integer;
function NOD(m,n:integer):integer;
begin
while m<>n do if m>n then m:=m-n
else n:=n-m;
NOD:=m;
end;
BEGIN
writeln('введите числитель и знаменатель первой дроби');
readln(a,b);
writeln('введите числитель и знаменатель второй дроби');
readln(c,d);
x:=a*d-b*c;
y:=b*d;
if x=0 then writeln('0')
else begin
e:=x div NOD(abs(x),y);
f:=y div NOD(abs(x),y);
writeln('ответ: ', e, '/', f);
end;
END.
Процедуры
Процедура же используется в том случае, когда после выполнения каких-то действий нужно получить несколько результирующих переменных или ни одной!
Процедура в чем-то похожа на функцию, также имеет имя, параметры, тело подпрограммы отличия от функции заключаются в описании и вызове.
Форма записи:
PROCEDURE имя процедуры(формальные параметры: тип);
begin
end;
Помимо таких понятий, как глобальные и локальные переменные, формальные и фактические параметры, для процедуры существуют еще два понятия: входные и выходные параметры.
Формальные параметры, определяющие исходные данные для работы процедур называются входными параметрами.
Формальные параметры, являющиеся результатами вычислений называются выходными параметрами (в описании процедуры записываются после слова var).
Например, в описании процедуры:
Procedure Pr(a, b, c: integer; k: real; var m, n: real);
begin
end;
входные параметры: a, b, c, kвыходные параметры: m, n.
Другими словами, входные параметры - исходные значения для процедуры, выходные - результаты. Но, и те, и другие могут отсутствовать!
Вызов процедуры в основной программе:
Функции вызываются внутри Writeln (имя_ функции) или справа от оператора присваивания в составе выражений у: = имя_ функции (х); процедура всегда вызывается отдельной строкой.
имя процедуры (фактические параметры);
Фактические параметры должны соответствовать формальным по количеству, типу и месту расположения!
Пример 2. Написать процедуру, вычисляющую среднее арифметическое и среднее геометрическое двух положительных чисел. Найти среднее арифметическое и среднее геометрическое для всевозможных пар чисел A, B, C, D.
Всевозможные пары чисел: A и B, B и C, A и C, B и D, C и D, A и D.
Var a, b, c, d, x, y: real;
Procedure sred(m, n: real; var SA, SG: real);
begin
SA:=(m+n)/2;
SG:=sqrt(m*n);
end;
Begin
writeln('введите A, B, C, D');
readln(A, B, C, D);
sred(A, B, x, y);
writeln ('для чисел А и В среднее арифметическое=', х, 'среднее геометрическое =', y);
sred(B, C, x, y);
writeln('для чисел B и C среднее арифметическое = ', x, ' среднее геометрическое = ', y);
sred(A, C, x, y);
writeln('для чисел A и C среднее арифметическое = ', x, ' среднее геометрическое = ', y);
End.