ТЕМА: Ветвление. Написание программ, реализующих алгоритмическую структуру "ветвление" (содержащую операторы IF..THEN..ELSE и CASE..OF).
Цель работы: уметь составлять программы, используя основные алгоритмические структуры ветвления.
Ветвление в Паскаль. Условный оператор.
На практике решение большинства задач не удается описать с помощью программ линейной структуры. При этом после проверки некоторого условия выполняется та или иная последовательность операторов, однако происходит нарушение естественного порядка выполнения операторов. Для этих целей используют управляющие операторы.
Условный оператор используется для реализации разветвлений в программе, которые происходят при выполнении некоторого условия и имеет следующую структуру:
IF логическое выражение THEN оператор1 ELSE оператор2;
Если логическое выражение, выступающее в качестве условия, принимает значение True, то выполняется оператор1, следующий за словом THEN, иначе выполняется оператор2 расположенный после ELSE.
Поскольку разветвление может быть неполным, то возможна и неполная форма записи условного оператора, т.е. без ветви ELSE.
В качестве оператора в структуре условного оператора может выступать составной оператор, тогда общая форма оператора IF..THEN..ELSE можно записать следующим образом:
IF Условие
THEN
BEGIN
оператор_1;
оператор_2;
…
оператор_N;
END
ELSE
BEGIN
оператор_1;
оператор_2;
…
оператор_N;
END;
Условный оператор реализует разветвление вычислительного процесса по двум направлениям, одно из которых осуществляется при выполнении условия, другое – в противном случае. Для реализации разветвлений более чем по двум направлениям необходимо использовать несколько условных операторов.
Примечание: Обратите внимание на отсутствие между зарезервированными словами END и ELSE символа "точка с запятой" (;). Появление этого символа может привести к ошибкам.
Задача 1 Даны действительные числа x, y. Если x и y отрицательны, то каждое значение заменить модулем; если отрицательно только одно из них, то оба значения увеличить на 0.5; в остальных случаях оба значения уменьшить в 10 раз.
Разработаем алгоритм решения задачи и составим блок-схему этого алгоритма, после чего напишем программу.
Составим структурный план задачи:
1. Ввести значения X, Y;
2. Если X<0 и Y<0, то найти их модули и перейти к п. 4, иначе перейти к следующему пункту;
3. Если X<0 или Y<0, то увеличить каждую величину на 0,5 и перейти к п. 4; иначе оба значения разделить на 10 и перейти к следующему пункту;
4. Вывести значения X и Y;
5. Конец.
Составим блок-схему и программу.
Program Pr_If_Then_Else;
Var X, Y : Real;
Begin
Write('Введите два действительных числа:'); ReadLn(X,Y);
If (X < 0) AND (Y < 0) THEN
Begin
X = ABS(X);
Y = ABS(Y)
End
ELSE
IF (X < 0) OR (Y < 0) THEN
Begin
X = X + 0.5;
Y = Y + 0.5
End
ELSE
Begin
X = X / 10;
Y = Y / 10
End;
WriteLn('Результат:');
WriteLn('X= ', X:10:6);
WriteLn('Y= ', Y:10:6)
END.
Оператор выбора CASE..OF
Кроме условного оператора в качестве управляющей структуры довольно часто используется оператор выбора CASE. Эта структура позволяет переходить на одну из ветвей в зависимости от значения заданного выражения (селектора выбора). Ее особенность состоит в том, что выбор решения здесь осуществляется не в зависимости от истинности или ложности условия, а является вычислимым. Оператор выбора позволяет заменить несколько операторов ветвления (в силу этого его ещё называют оператором множественного ветвления).
В конструкции CASE вычисляется выражение K и выбирается ветвь, значение метки которой совпадает со значением K. После выполнения выбранной ветви происходит выход из конструкции CASE. Если в последовательности нет метки со значением, равным K, то управление передается внешнему оператору, следующему за конструкцией CASE (в случае отсутствия альтернативы ELSE; если она есть, то выполняется следующий за ней оператор, а уже затем управление передается внешнему оператору).
Запись оператора выбора:
Case k of
метка1: оператор1;
метка2: оператор2;
…………….
Метка N: операторN;
ЕLSE оператор N+1
END;
Любая из указанных серий операторов может состоять как из единственного оператора, так и нескольких (в этом случае, как обычно, операторы, относящиеся к одной метке, должны быть заключены в операторные скобки Begin .. End).
Выражение K здесь может быть целого, логического или символьного типа.
Задача 2 ––––––––––––––––––––––––––––––––––––––––––––––––––
В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и свиньи. Написать программу, которая позволяет ввести номер года и печатает его название по старо японскому календарю. Справка: 1996 г. – год крысы – начало очередного цикла.
Поскольку цикл является двенадцатилетним, поставим название года в соответствие остатку от деления номера этого года на 12.