Пример 3.1. Демонстрация стандартных функций для работы с типом Char
Program Letterl; var N: Integer; X: Char; begin X:='L': { В символьную переменную X записали символ ' L' } writeln(X); N:=0rd (X); { Функция Ord, возвращает код символа. занесенного в переменную X, то есть код буквы ‘L' } writeln(N); X: =' А'; writeln(X); X:=Chr (N); { Функция.Chr возвращает символ по заданному коду. Сейчас в переменной X оказался символ ' L’ — именно его код мы . только что записали в переменную N } writeln(X); readln end.
При выполнении программа выведет на экран следующее:
L 76 А L
Пример 3.2. Ввод символов с клавиатуры
Program Letter2; var X,Y: Char; begin writeln('Введите несколько символов:'); readln(X); writeln(X); writeln('Введите еще несколько символов:'); readln(X,Y); writeln(X,Y); readln end.
Запустив программу на выполнение, введите с клавиатуры последовательность символов (например, ABC) и нажмите Enter. Программа выведет единственный символ: А
В ответ на второе предложение введите с клавиатуры CAT. На экране получим следующее: СА
ЗАМЕЧАНИЕ Переменная типа Char принимает только один символ из введенной строки. При вводе символы не заключаются в апострофы. Таким образом, в первом случае из введенных символов запомнился только один, во втором — два.
Можно определять и символьные константы: const Leto='X';
Тип Char — порядковый тип!
В таблице кодов вы могли заметить такую закономерность: '0'<’1’< '2'< '3'< ...< '9'<... <'А'< 'В'< 'С'< ...< 'X' < 'Y' < 'Z’... (коды символов упорядочены).
Таким образом, для каждого элемента типа Char всегда есть предшествующий и последующий элементы. Такой тип данных называется порядковым. Тип Char — порядковый тип. Тип Integer также является порядковым.
Пример 3.3. Стандартные функции, применяемые к порядковому типу
Program Letter3; var Х1,Х2,ХЗ,Х4:Char; begin X1: ='L'; writeln(Xl) ; X2:=Pred (X1); { Функция Pred возвращает предшествующий элемент относительно значения переменной X1 } writeln('Pred=',X2); X3:=Succ (X1); { Функция Succ возвращает последующий элемент относительно значения переменной X1 } writeln('Succ=',ХЗ); readln end.
При выполнении программа выведет на экран следующее:
L Pred=K Succ=M
Задание3.1. Напишите программу расшифровки 4-буквенного однословного сообщения. Для получения 4 букв нужно ввести 3 строки:
- из первой строки прочесть только первую букву; - из второй строки прочесть только первую букву; - из третьей строки прочесть первую и вторую буквы.
Далее расшифровать полученные четыре буквы по такому алгоритму: вместо первой и третьей букв подставить соответственно буквы, отстоящие от них по алфавиту на две буквы назад, а вторую и четвертую буквы оставить без изменения.
Для проверки возьмите пример, приведенный ниже.
Ввод:
FINISHED OR PENDING?
На выводе должно быть слово DONE.
Задание 3.2. Известно, что коды прописных (заглавных) букв латинского алфавита следуют в таблице непрерывно друг за другом. Коды строчных букв латиницы также следуют непрерывно друг за другом на расстоянии 32 символов от прописных (ниже по таблице). Если ord('A') = 65, то ord('A')+32 = 97, и это код строчной буквы «а», то есть chr(ord('A')+32) = 'а'. Напишите программу, в которой вы вводите прописную букву (только латиницу!), а получаете ее строчной эквивалент, и наоборот, по строчной букве получаете соответствующую прописную.
ЗАМЕЧАНИЕ
С русскими символами такого порядка нет из-за особенностей организации кодовой таблицы. В частности, строчные буквы в таблице следуют не подряд, а с разрывом в середине алфавита.
Выводы
1. Все символы хранятся в компьютере в виде кодов. 2. Обычно для кодирования символов применяется таблица ASCII. 3. Каждому символу соответствует свой код. 4. Для преобразования символов в коды и обратно применяют функции ord и chr. 5. Тип Char является порядковым типом. 6. Коды буквы латинского алфавита идут последовательно. 7. Русские буквы хранятся в таблице символов ASCII с разрывом в последовательности кодов. 8. Для получения следующего и предыдущего символов используют соответственно функции succ и pred.
Контрольные вопросы
1. Сколько всего различных символов кодируется таблицей ASCII? 2. Какой объем памяти требуется для кодирования одного символа? А 15 символов? 3. Какой тип данных в Паскале предназначен для хранения символьной информации? Сколько символов можно поместить в одну переменную этого типа? 4. Какой код у буквы «F»? Какой символ кодируется кодом 87? 5. В программе определены 3 переменные (a,b,c:char;). В ответ на инструкцию readln(b,а,с); пользователь ввел текст Леша. В каком месте памяти оказалась каждая из введенных букв? 6. Каков будет результат выполнения инструкции c:=succ(pred(succ('D')))? 7. Какое значение получит переменная i в операторе i := pred(ord('F’) - 2)?
Необходим еще один тип — логический!
Поговорим о философии, а именно — о логике. Логика оперирует утверждениями. Любое логическое утверждение может быть либо истинным, либо ложным. При решении многих задач возникает ситуация, когда требуется проверить некоторое условие (сформулированное в виде утверждения) и в зависимости от результата проверки (истинности утверждения) произвести те или иные действия:
- если условие выполняется, то результатом будет «истина», - если условие не выполняется, то результатом будет «ложь».
Например, утверждение «4 > 3» является истинным, а утверждение «2 > 3» — ложным. Такие выражения называются булевскими (по имени английского математика Джорджа Буля). Область математики, которая изучает действия с булевскими выражениями, называется булевской алгеброй или алгеброй логики.