Лекция №12
Тема: Разветвляющиеся программы
Цель: Сформировать и развить умения и навыки составления и записи на языке Раskal разветвляющийся программ.
Количество часов – 4часа
Разветвления в программах возникают при необходимости выбора одного из нескольких возможных путей в решении задачи , который может зависеть от исходных данных или промежуточных результатов. Для организации разветвлений в программах используются операторы перехода, условий и выбора.
Оператор перехода имеет общий вид записи:
GOTO n;
Где n-метка оператора.
Метка назначается пользователем и представляет собой число без знака, содержащее не более четырех цифр. Используемые в программе метки должны быть описаны в разделе описания меток. Например:
GOTO 120;
GOTO 250;
Эти операторы осуществляют передачу управления оператором, имеющим соответственно метки 120 и250.
Использовать оператор GOTO следует только в редких случаях, например, для выхода к концу программы или процедуры в случае неправильного задания данных или выхода из тела цикла. Неправильное использование оператора GOTO усложняет программу за счёт многократных переходов вперёд или назад по программе, затрудняя её чтение, отладку и проверку на правильность.
Условный оператор имеет два вида записи:
If b then a;
If b then a1 else a2;
Где b – логическое выражение; а, а1, а2 – операторы простые или составные.
Составной оператор представляет собой последовательность операторов, заключённых в ключевые слова BEGIN и END.
Первый вид записи оператора позволяет организовать выполнение оператора а при условии, что логическое выражение имеет значение TRUE, а в противном случае оператор а не выполняется, а выполняется оператор стоящий за условным.
Второй вид записи оператора позволяет производить выполнение оператора а1 в случае, если логическое выражение имеет значение TRUE, и оператора а2 – в противном случае.
Примеры записи операторов:
IF N DIV 2*2=N THEN NI: = N ELSE N2: =N*N;
IF X<0,1 THEN V: = EXP(X);
Условный оператор можно расширить за счёт вложенности новых условий в операторе. Это приводит к сокращению числа операторов, но одновременно снижает наглядность программы. Новое условие может записываться за ключевыми словами THEN и ELSE. По принятому соглашению в языке ПАСКАЛЬ ключевое слово ELSE всегда относиться к ближайшему ему слову IF. Например:
If b1 then a1 else if b2 then a2 else a3.
Пример 1: Составить программу для вычисления значения функции
Z=x3/y, где y= sin nx+0,5.
Для записи программы используются два варианта записи условного оператора.
Вариант 1
PROGRAM USL1(INPUT, OUTPUT);
LABEL 20,30;
Var n:integer;
X, y, z: real;
BEGIN
READ (N, X);
Y:=SIN (N*X)+0,5;
IF Y=0 THEN GOTO 20;
Z:=SQR(X)*X/Y;
WRITE (‘Z=’,Z);
GOTO 30;
20: WRITE(‘Y=0’);
30:
END.
Вариант 2
PROGRAM USL2(INPUT, OUTPUT);
VAR N:INTEGER;
X, Y, Z: REAL;
BEGIN
READ (N, X);
Y:=SIN (N*X)+0,5;
IF Y=0 THEN WRITE(‘Y=0’)
ELSE BEGIN
Z:=X*X*X/Y;
WRITE (‘Z=’,Z);
END
END.
Пример 2 Составить программу для вычисления функции
sinx, если х;
Z=cosx, если а<x<b;
tgx, если xb.
Получить разветвление на три ветви можно различными сочетаниями операторов перехода и условного. Однако в языке ПАСКАЛЬ условный оператор можно наращивать за счёт использования вложенности условий. С использованием одного условного оператора программа имеет вид
PROGRAM UCL3 (INPUT, OUTPUT);
VAR X,A,B,Z:REAL;
BEGIN
READ (X, A,B);
IF X<=A THEN Z:=SIN(X)
ELSE IF X>B THEN Z:=SIN(X)/COS(X)
ELSE Z:=COS(X);
WRITELN(Z)
END.
Пример 3 Составить программу для упорядочивания трёх чисел a, b, c по возрастанию таким образом, чтобы имени а соответствовало наименьшее число, имени b – среднее, а имени с – наибольшее. Программа имеет вид
PROGRAM SORT (INPUT, OUTPUT);
LABEL 10, 20, 30;