Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

5.6. Символьный тип данных Char

Для того, чтобы получить более полное представление о возможностях оператора варианта case, который нам предстоит изучить, познакомимся сначала с новым типом данных. Мы с вами уже познакомились с четырьмя типами данных в Паскале: Integer и LongInt (целые числа), Real (вещественные числа) и String (строки символов). Введем еще один тип, символьный - Char (читается -"кэр"), это сокращение от Character - "символ".

Описание VAR a, b: Char означает, что переменные а и b имеют право принимать значения любых символов, с которыми может ра­ботать компьютер. (О символах мы говорили в разделе 3.5.) Мы можем записать а:='Л'; b:='+', что означает приказ присвоить пере­менной а значение символа Л, а переменной b - значение символа +. Но мы не можем написать а:='Кошка', так как здесь не один сим­вол, а пять. Мы можем записать ReadLn (а), что означает приказ компьютеру ждать ввода с клавиатуры любого одного символа и присвоить его значение переменной а. Мы можем записать WriteLn (b) - и на экране появится плюс.

Вот программа, переворачивающая любое трехбуквенное слово, введенное человеком с клавиатуры:

VAR c1, c2, c3 :Char;

BEGIN

ReadLn (d,c2,c3);

WriteLn (c3,c2,d)

END.

Если мы по оператору ReadLn введем символы ТОК, то оператор WriteLn напечатает КОТ. При вводе нескольких символов одним оператором ReadLn все символы набираются на клавиатуре подряд, без пробелов, которыми мы привыкли разделять при вводе числовые данные. После ввода последнего символа нажимаем клавишу Enter. Таким образом, ввод трех символов одним оператором ReadLn не отличается от ввода одной трехсимвольной строки. Вообще тип Char похож на тип String. Строка состоит из символов, да и сам символ - это как бы очень короткая строка длиной в один символ.

5.7. Оператор варианта case

В задаче про ПЕРЕЛЕТ-НЕДОЛЕТ раздела 5.5 мы для выбора одной из четырех возможностей использовали 4 оператора if. В Паскале есть специальный оператор, который позволяет выбрать одну из нескольких возможностей. Рассмотрим программу, спрашивающую у ученика его отметку по чистописанию и реагирующую на нее подходящим текстом:

VAR Otmetka: Integer;

BEGIN

WriteLn ('Какую отметку ты получил по чистописанию?');

ReadLn (Otmetka);

CASE otmetka OF {Перевод: В СЛУЧАЕ ЕСЛИ отметка РАВНА...}

1,2 WriteLn('Кошмар!');

3 WriteLn('Неважно');

4 WriteLn('Henлoxo');

5 WriteLn('Молодец!');

ELSE WriteLn('Таких отметок не бывает')

END {Конец оператора CASE}

END.

Основой программы является оператор варианта case (читается - "кэйс", переводится как "случай"). Предлог OF читается как –"эв". Весь оператор case нужно понимать так:

В СЛУЧАЕ ЕСЛИ отметка РАВНА 1 или 2 печатай 'Кошмар!'

3 печатай 'Неважно'

4 печатай 'Неплохо'

5 печатай 'Молодец!'

ИНАЧЕ печатай ‘Таких отметок не бывает'

КОНЕЦ оператора case

В процессе исполнения оператора case компьютер по очереди равнивает значение переменной Otmetka со всеми значениями, перечисленными перед двоеточиями. Встретив совпадающее значение, он выполняет оператор, стоящий после двоеточия. На этом исполнение оператора case завершается. Если же совпадающего о значения так и не нашлось, то выполняется оператор, стоящий после слова else (в нашей программе он полезен на тот случай, если ученик вводит число 6). После else может стоять и цепочка операторов, записанных через точку с запятой.

Если вы еще недостаточно хорошо поняли логику оператора case, то обратите внимание на то, что в нашей программе он работает так же, как следующий оператор if:

if (Otmetka=1) OR (Otmetka=2)

then WriteLn('Кошмар!');

else if Otmetka = 3

then WriteLn('Неважно')

else if Otmetka = 4

then WriteLn(' Henлoxo')

else if Otmetka = 5

then WriteLn('Молодец!')

else WriteLn('Таких отметок не бывает')

У оператора case есть существенное ограничение - переменная, стоящая после слова case, должна быть так называемого порядкового типа. Подробно о порядковых типах мы поговорим в главе 12, пока же мы знаем 3 типа, относящихся к порядковым, - это Integer, LongInt и Char. Порядковыми они называются потому, что все их возможные значения можно выстроить по порядку и перечислить с начала до конца, например: -32768, ..., 4,5,6,7,8, ..., 32767 для Integer, ...'д', 'е', 'ж', 'з', 'и' ... для Char. Получается, что значения типов Real и String применять в операторе case нельзя, так как совершенно непонятно, как их перечислять по порядку.

Таким образом, задачу про ПОПАЛ - НЕ ПОПАЛ в принципе невозможно решить при помощи case. И этому есть две причины 1) переменная имеет тип Real, 2) перед двоеточием в операторе case нельзя писать условия со знаками >, < и т. п.

Вот еще пример программы с оператором case:

VAR a,k: Integer;

BEGIN

а:=3;

case а*а+1 of {В СЛУЧАЕ ЕСЛИ а*а+1 РАВНО...}

8,3,20 :k:=0;

7,10 :begin k:=1; WriteLn(k) end;

12..18 :k:=3

end {Конец оператора CASE}

END.

Эта программа напечатает единицу. Здесь мы видим несколько новых для нас элементов:

Во-первых, после слова case стоит не переменная, а выражение, поэтому с перечисленными перед двоеточиями значениями будет сравниваться число 10, полученное как 3*3+1. Кстати, выражение тоже обязано быть порядкового типа (о том, что такое тип выражения, мы строго поговорим в разделе 14.4, а сейчас скажем только, что это выражение, имеющее значения порядкового типа).

Во-вторых, один из операторов, стоящих после двоеточия, составной. Это begin k:=1; WriteLn(k) end;

В-третьих, конструкция 12 ..18. Она обозначает то же, что и 12,13,14,15,16,17,18, служит в нашем случае для сокращения записи и называется диапазоном.

В-четвертых, здесь отсутствует конструкция else. Это значит, что если бы в нашей программе мы вместо а:=3 написали а:=0, то оператор case, не найдя совпадения, не выбрал бы ни один из трех своих вариантов и, не найдя также else, завершил свою работу, так ничего и не сделав.

Задание 28

Ученик вводит с клавиатуры строчную букву русского алфавита. Компьютер должен сказать, какой звук обозначает эта буква - гласный, согласный звонкий, согласный глухой или какой-нибудь другой (можно и НЕ ЗНАЮ).

Задание 29

"Калькулятор". Ученик вводит с клавиатуры число, символ арифметического действия (+, -,*,/) и еще одно число. Компьютер должен напечатать результат.

Указание. Используйте 3 оператора ReadLn, так как одним оператором ReadLn вводить числовые и символьные данные вы не умеете.