Символьный тип данных Char. Оператор варианта case.
Символьный тип данных Char. Мы познакомились с четырьмя типами данных в Паскале: Integer и LongInt (целые числа), Real (вещественные числа) и String (строки символов). Введем еще один тип, символьный – Char (читается – «кир» ), это сокращение от Character – «символ». Описание VAR a, b : Char означает, что переменные a и b имеют право принимать значения любых символов, с которыми может работать компьютер. Мы можем написать а:=Л; b:=+,что означает приказ присвоить переменной а ззначение символа Л, а переменной b – ззначение символа +. Но мы не можем написать а:=Кошка, т.к. здесь не один символ, а пять. Можно записать ReadLn (a), что означает приказ компьютеру ждать ввода с клавиатуры любого одного символа и присвоить его ззначение переменной а или записать WriteLn (b) – и на экране появится плюсик.
Рассмотрим программу, переворачивающую любое трехбуквенное слово, введенное человеком с клавиатуры: VAR c1, c2, c3 : Char; BEGIN ReadLn (c1, c2, c3 ); WriteLn (c3, c2, c1 ); END. Если мы по оператору ReadLn введем символы ТОК, то оператор WriteLn напечатает КОТ. При вводе нескольких символов одним оператором ReadLn все символы набираются на клавиатуре подряд, без пробелов, которыми мы привыкли разделять при вводе числовые данные. Таким образом, ввод трех символов одним оператором ReadLn не отличается от ввода одной трехсимвольной строки. Вообще тип Char похож на тип String. Строка состоит из символов, да и сам символ – это как бы очень короткая строка длиной в один символ.
Оператор варианта case. Рассмотрим программу, спрашивающую у ученика его отметку по диктанту и реагирующую на нее подходящим текстом: VAR Otmetka : Integer; BEGIN WriteLn ( Какую отметку ты получил по диктанту?); ReadLn (Otmetka); CASE otmetka OF перевод: В СЛУЧАЕ ЕСЛИ отметка РАВНА … 1,2 : WriteLn (Кошмар!); 3 : WriteLn (Неважно); 4 : WriteLn (Неплохо); 5 : WriteLn (Молодец!); ELSE WriteLn (Таких отметок не бывает) END Конец оператора CASE END. В задаче про ПЕРЕЛЕТ – НЕДОЛЕТ для выбора одной из четырех возможностей мы использовали 4 оператора if. В Паскале есть специальный оператор, который позволяет выбрать одну из нескольких возможностей.
Обратите внимание на то, что в нашей программе оператор CASE работает так же, как следующий оператор if : if (Otmetka=1) OR (Otmetka=2) then WriteLn (Кошмар!) else if Otmetka=3 then WriteLn (Неважно) else if Otmetka=4 then WriteLn (Неплохо) else if Otmetka=5 then WriteLn (Молодец!) else WriteLn (Таких отметок не бывает) У оператора CASE есть существенное ограничение – переменная, стоящая после слова CASE, должна быть так называемого порядкового типа.
Основой программы является оператор варианта CASE (читается – «кейс», переводится как «случай»). Предлог OF читается как – «эв». Весь оператор CASE нужно понимать так: В СЛУЧАЕ ЕСЛИ отметка РАВНА 1 или 2 печатай Кошмар! 3 печатай Неважно 4 печатай Неплохо 5 печатай Молодец! ИНАЧЕ печатай Таких отметок не бывает КОНЕЦ оператора case В процессе исполнения оператора CASE компьютер по очереди сравнивает значение переменной Otmetka со всеми значениями, перечисленными перед двоеточиями. Наткнувшись на совпадающее ззначение, он выполняет оператор, стоящий после двоеточия. На этом исполнение оператора CASE завершается. Если совпадающее ззначение не нашлось, то выполняется оператор, стоящий после слова ELSE. После слова ELSE может стоять и цепочка операторов, записанных через точку с запятой.
Рассмотрим еще пример программы с оператором CASE : VAR а, k : Integer; BEGIN а:=3; case а * а + 1 OF 8, 3, 20 : k:=0; 7, 10 : begin k:=1; WriteLn (k) end ; : k:=3 end END. Эта программа напечатает единицу. Здесь встретились новые элементы: после слова case стоит не переменная, а выражение, поэтому с перечисленными через двоеточиями значениями будет сравниваться число 10, полученное как 3 * ; один из операторов, стоящих после двоеточия, составной. Это begin k:=1; WriteLn (k) end.
конструкция обозначает то же, что и 12, 13, 14, 15, 16, 17, 18, служит в нашем случае для сокращения записи и называется диапазоном. здесь отсутствует конструкция else. Это значит, что если бы в нашей программе вместо а:=3 написали а:=0, то оператор case, не найдя совпадения, не выбрал бы ни один из трех своих вариантов и, не найдя также else, завершил свою работу, так ничего и не сделав. Задания. 1. Ученик вводит с клавиатуры строчную букву русского алфавита. Компьютер должен сказать, какой звук обозначает эта буква – гласный, согласный звонкий, согласный глухой или какой-нибудь другой (можно и НЕ ЗНАЮ). 2. «Калькулятор». Ученик вводит с клавиатуры число, символ арифметического действия (+, –, *, /) и еще одно число. Компьютер должен напечатать результат. Указание. Используйте 3 оператора ReadLn, т.к. одним оператором ReadLn вводить числовые и символьные данные вы еще не умеете.