Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
21
Добавлен:
14.11.2018
Размер:
242.69 Кб
Скачать

Лекция №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;