Довольно часто при создании программ нам требуется принимать от пользователя разные по значению входные данные и в зависимости от получаемого результата каждого из них совершать определенные действия. Для этого в Паскале есть условный оператор Case.
Его синтаксис таков:
Case <анализируемая переменная> of
<Значение 1>:<Действие 1>;
<Значение 2>:<Действие 2>;
<Значение 3>:<Действие 3>;
…
<Значение N>:<Действие N>;
Else<Действие N + 1>
end;
Конечно же вместо “Действие” здесь можно вставить любую часть кода, заключив ее в операторные скобки Begin … End; если нам нужно для одного варианта совершать несколько действий.
Program OcenkaUchrnika;
Var Ocenka: Integer;
Begin
writeLn ('Какую оценку ты получил по математике');
ReadLn (Ocenka);
Case Ocenka of
1,2:WriteLn('Кошмар!');
3:WriteLn('Неважно');
4:WriteLn('Неплохо');
5:WriteLn('Молодец!');
else WriteLn('Таких оценок не бывает');
end;
End. Надеюсь, с этой программой все понятно. Она просто принимает число от пользователя – его оценку и выводит на экран соответствующее сообщение. Вот как она выглядела бы, если писать ее с помощью if … then … else.
Program OcenkaUchrnika2;
var Ocenka: Integer;
begin
writeLn('Какую оценку ты получил по математике');
ReadLn(Ocenka);
if (Ocenka = 1) OR (Ocenka = 2)
then WriteLn('Кошмар!')
else if Ocenka = 3
then WriteLn('Неважно')
else if Ocenka = 4
then WriteLn('Неплохо')
else if Ocenka = 5
then WriteLn('Молодец!')
else WriteLn('Таких оценок не бывает');
End. Замечу, что у оператора case есть существенное ограничение – переменная, стоящая после слова case, должна быть порядкового типа(Integer, LongInt, Char, Byte, Word). А значения типов Real и String применять в операторе case нельзя. Давайте решим еще одну задачу, допустим, нам нужно определить, какую букву ввел с клавиатуры пользователь (гласную или согласную, возможен ответ “таких букв не существует”). Кроме того, давайте разделим согласные буквы на глухие и звонкие, если введены “ъ” или “ь”, то выведем “другая”.
Program Bukvi;
Var bukva : Char;
Begin
WriteLn ('Введи строчную букву русского алфавита');
ReadLn (bukva);
case bukva of
'а','е','и','о','у','ы','э','ю','я' :WriteLn('гласная');
'б','з','в','г','д','ж','й','л','м','н','р':WriteLn('согласная звонкая');
'п','с','ф','к','т','ш','х','ц','ч','щ':WriteLn('согласная глухая');
'ъ','ь':WriteLn('другая');
else WriteLn('Таких букв не существует')
end;
End. Теперь давайте напишем мини калькулятор с помощью оператора case.
Program Calculator;
var a, b: integer;
dejstvie: char;
begin
writeln('Введите 2 целых числа');
readln(a, b);
writeln('Введите знак действия');
readln(dejstvie);
case dejstvie of
'+': writeln(a + b);
'-': writeln(a - b);
'/': writeln(a / b);
'*': writeln(a * b);
else writeln('Таких действий не существует');
end;
End. Данная программа просто выполняет подсчеты, исходя из данных, введенных пользователем.
И еще хочу дополнить, что в операторе case вместо анализируемой переменной может находиться какое-нибудь выражение, например, case a*a+1 of (далее следует продолжение оператора case, оно может быть произвольным, но не нужно забывать, в каких случаях могут возникнуть ошибки).
Кроме того, конструкция <Значение 1>:<Действие 1>; может выглядеть следующим образом. 12 ..18 . Она обозначает то же, что и 12,13,14,15,16,17,18. Служит в нашем случае для сокращения записи и называется диапазоном. Итак, надеюсь, теперь вы имеете представление, что такое условный оператор Case, возможно, эта статья была для Вас полезной.


