Оператор выбора Case в Паскале

В языке программирования Паскаль оператор CASE используют в тех случаях, когда в зависимости от значения какой-либо переменной нужно выполнить те или иные действия (простые или составные операторы).


Если вариантов всего два, то можно обойтись и условным оператором IF. Но если их, к примеру, десятки, то использование конструкции if then else становится затрудинительным. В этом случае оптимален оператор CASE варианта.


Оператор выбора Case в Паскале

Синтаксис оператора case


	Case n of

1:Writeln(один);
2:Writeln(два);
else Writeln(много);
end;

Здесь 1 и 2 это те значения, которые может принимать переменная n. Если ничего не подходит, то выполняется тот оператор, который стоит после ELSE.
Не забываем, что оператор case заканчивается END;

Рассмотрим использование оператора выбора case на языке Паскаль на примере.


Условие задачи. Написать программу в Паскаль в которой необходимо указать номер месяца. В зависимости от введённого номера, программа в Паскаль должна вывести сообщение с указанием на то, к какому времени года относится введенный номер (зима, весна, лето, осень).


Попробуем решить задачу, используя условный оператор if


Program vremena_goda;

Var n:integer;
Begin
Write(Введите номер месяца =);
readln(n);
// 12,1,2 - зима
// 3,4,5 - весна
// 6,7,8 - лето
// 9,10,11 - осень
if (n>=3) and (n<=5) then Writeln(весна);
if (n>=6) and (n<=8) then Writeln(лето);
if (n>=9) and (n<=11) then Writeln(осень);
if (n=12) or (n=1) or (n=2) then Writeln(зима);
End.

Как видим программа получилась достаточно компактной, но логические условия которые мы применили не всегда сразу понятны.


В том случае, если нужно сделать несколько сотен проверок, программа станет невероятно сложной и запутанной.


С помощью оператора case приведём нашу программу к следующему виду. Сейчас она стала более понятной, нежели с оператором if.


Program vremena_goda2_1;

Var n:integer;
Begin
Write(Введите номер месяца =);
readln(n);
Case n of
1:Writeln(зима);
2:Writeln(зима);
3:Writeln(весна);
4:Writeln(весна);
5:Writeln(весна);
6:Writeln(лето);
7:Writeln(лето);
8:Writeln(лето);
9:Writeln(осень);
10:Writeln(осень);
11:Writeln(осень);
12:Writeln(зима)
else Writeln(Вы ввели неправильный месяц);
end;
End.

В операторе case можно использовать перечисление через запятую


case x of

1,2,3,4: writeln(от одного до четырёх);

Программа понятна, но всё же, в ней достаточно много строк. Используя символ запятой в качестве перечисления, можно существенно уменьшить количество строк в программе:


Program vremena_goda2_2;

Var n:integer;
Begin
Write(Введите номер месяца =);
readln(n);
Case n of
1,2,12:Writeln(зима);
3,4,5:Writeln(весна);
6,7,8:Writeln(лето);
9,10,11:Writeln(осень);
else Writeln(Вы ввели неправильный месяц);
end;
End.
 

Нашу программу можно ещё немного подсократить,если вместо запятой при указании диапазона использовать ..



...

case x of:
3..5: writeln(весна);
...

Применим это знание на практике:


Program vremena_goda2_3;

Var n:integer;
Begin
Write(Введите номер месяца =);
readln(n);
Case n of
1,2,12:Writeln(зима);
3..5:Writeln(весна);
6..8:Writeln(лето);
9..11:Writeln(осень);
else Writeln(Вы ввели неправильный месяц);
end;
End.

Оператор ввода данных с клавиатуры