Если в этом операторе вместо TO использовать DOWNTO, то при каждой итерации значение параметра K будет уменьшаться на единицу.
3. Процедуры и функции (подпрограммы)
Подпрограммы позволяют разбить одну сложную программу на несколько более простых и решать эти отдельные задачи самостоятельно, возможно даже, что делать это будут разные программисты и в разное время. Готовую подпрограмму, в дальнейшем, можно использовать в других программах.
Функции и процедуры описываются после описания переменных.
Главное отличие процедуры от функции заключается в том, что процедура может возвращать в программу более одного значения или не возвращать совсем, а функция – всегда должна возвращать одно значение.
Вызов функции отличается от вызова процедуры, тем, что, при вызове имя функции указывается в качестве одного из операндов выражения, например, в правой части оператора присваивания.
Среди входящих в тело функции операторов должен быть хотя бы один оператор присваивания, в левой части которого стоит имя функции.
Процедуры или функции могут не иметь параметров или иметь параметры-переменныеили параметры-значения. При помощи параметров производится передача данных в процедуру или функцию. Параметры, в которые записываются результаты работы процедуры и которые будут использоваться в программе должны описываться как параметры-переменные(перед ними должно стоять слово VAR), а параметры, которые будут передавать в процедуру или функцию исходные данные должны описываться как параметры-значения. Параметры при объявлении процедуры ( формальные параметры) и при вызове процедуры ( фактические параметры) должны соответствовать друг другу по типу данных.
Структура процедуры или функции имеет только два различия от структуры обычной программы: процедуры и функции начинаются с заголовка PROCEDURE или FUNCTION, а не с заголовка PROGRAM, и заканчиваются не точкой, а точкой с запятой.
Процедуры и функции могут иметь свои собственные константы, типы данных, переменные и даже собственные процедуры и функции. Но все эти элементы, которые называются локальными, могут использоваться только в тех процедурах и функциях, в которых они определены. Константы, типы и переменные объявленные в программе имеющей процедуру или функцию называются глобальными. Они могут быть доступны, то есть предоставлять или изменять свои значения внутри тел процедур или функций, объявленных в этой программе. Локальные элементы позволяют работать над подпрограммами разным программистам, не боясь, что, например, они могут дать имена переменным аналогичные именам переменных в других подпрограммах или в основной программе – это не повлияет на работу других подпрограмм, или основной программы.
На этом, в том числе, базируется структурное программирование. По данной методологии любая программа строится без использования оператора безусловного перехода (goto) из трёх базовых управляющих структур: последовательность, ветвление и цикл. Кроме того, используются подпрограммы. Притом, разработка программы ведётся пошагово, методом “сверху вниз”. Методология структурного программирования появилась, как следствие возрастания сложности решаемых на компьютерах задач и усложнения программ.
Пример 1.7: Функция вычисляющая факториал.
VAR A, Y : INTEGER;
FUNCTION FAKTORIAL (N : INTEGER) : INTEGER;
VAR F, K : INTEGER;
BEGIN
F := 1;
FOR K := 1 TO N DO
F := F * K;
FAKTORIAL := F
END;
BEGIN
WRITELN (‘ВВЕДИТЕ ЦЕЛОЕ ПОЛОЖИТЕЛЬНОЕ ЧИСЛО’);
READLN (A);
Y := FAKTORIAL (A);
WRITELN (‘N!=’, Y);
READLN;
READLN
END.
Обратите внимание на то, что в описании функции обязательно содержится оператор присваивания в котором слева от знака присваивания помещено имя функции.
Пример 1.8: Процедура вычисляет корни квадратного уравнения
AX 2+BX+C=0
PROGRAM KU (INPUT, OUTPUT);
VAR A, B, C, D, X1, X2 : REAL;
PROCEDURE KVUR (A, B, C: REAL; VAR D, X1, X2: REAL);
BEGIN
D:=SQR (B) -4*A*C;
IF D = 0 THEN X1:= (-B) / (2*A)
ELSE
IF D> 0 THEN
BEGIN
X1:= ((-B) – SQRT (D)) / (2*A);
X2:= ((-B) + SQRT (D)) / (2*A)
END
END;
BEGIN
WRITE (‘Введите A=’);
READLN (A);
WRITE (‘Введите B=’);
READLN (B);
WRITE (‘Введите C=’);
READLN (C);
KVUR (A, B, C, D, X1, X2);
IF D <0 THEN WRITELN (‘Действительных корней нет’)
ELSE
IF D = 0 THEN WRITELN (‘X=’, X1)
ELSE
BEGIN
WRITELN (‘X1=’, X1);
WRITELN (‘X2=’, X2)
END;
READLN;
READLN
END.
Где SQR – квадрат числа, а SQRT – корень квадратный.
Читать дальше
Конец ознакомительного отрывка
Купить книгу