Довольно часто при создании программ нам требуется принимать от пользователя разные по значению входные данные и в зависимости от получаемого результата каждого из них совершать определенные действия. Для этого в Паскале есть условный оператор 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, возможно, эта статья была для Вас полезной.