Символьный тип данных
Для работы с символами в языке PascalABC предусмотрен специальный тип данных, который называется символьным и обозначается char (от слова character - символ). Значениями переменных этого типа являются отдельные символы: буквы, цифры, знаки.
Символьные переменные описываются так: Var имя_переменной: char;
Примеры описания переменных: VAR a, b, ch: char;
Каждый символ имеет свой уникальный двоичный код. В оперативной памяти один символ занимает 1 байт. Переменные символьного типа могут принимать значения одного из символов с кодами от 00000000 до 11111111 ( от 0 до 255 в десятичном представлении). Допускаются буквы национальных алфавитов и некоторые специальные символы так называемой псевдографики (линии, штриховки, стрелки). Символы с кодами от 0 до 31 (управляющие) в тексте воспринимаются как пробел, а в операторах вывода как символ или соответствующая команда.
Все символы упорядочены в соответствии с их кодом: 0 .. 255. Этот код в виде целого числа возвращает функция ord(x) в качестве результата, если параметром является символ алфавита. Коды всех символов принято размещать в таблицу (приложение 1). Первая половина таблицы стала международным стандартом, который называется ASCII - American Standard Code Information Interchange (читается "аски код"). В ней содержится цифры, латинский алфавит и служебные символы. Во второй половине таблицы размещают символы национальных алфавитов. Размещение символов кириллицы имеет несколько вариантов. Для работы в Windows часто используют кодировку Windows-1251 (CP-1251).
Над символьными переменными можно выполнять следующие действия: присваивание, ввод и вывод, сравнение.
Значения символьных констант и переменных заключаются в апострофы (одинарные кавычки), например, 'A', 'B', 'C', '4', '7', ' ' (пробел). Если нужен сам апостроф, то он удваивается: В := ’’’’ . Символьные значения можно задавать и их числовыми кодами. В этом случае перед кодом записывают знак #.
Примеры присваивания символьных значений (они предварительно должны быть описаны Var a, aa, b, bb c, d: char; ):
a:= 'A'; { прописная латинская буква A вводится непосредственно },
aa:= #65; { прописная латинская буква A задается значением ее кода },
b:= '!'; { символ восклицательный знак вводится непосредственно },
bb:= #33; { символ восклицательный знак "!" задается значением его кода },
c:= #13; { задание кода клавиши Enter }
d:= #27; { задание кода клавиши Esc }
Вывод символьных переменных выполняется с помощью стандартных процедур Write и Writeln. Примеры вывода:
Write(a) или Write(aa); {выводится буква "A" },
Write(b) или Write(bb); {выводится символ " ! " },
Write(c); { команда перевода курсора на новую строку },
Write(d); { выводится специальный символ, соответствующий коду #27 }
Ввод символьных переменных выполняется с помощью стандартных процедур Read и Readln. Обратим внимание на следующую особенность ввода нескольких символов. Нажатие клавиши Enter при вводе приводит к присвоению символьной переменной значения кода клавиши Enter (код #13), поэтому значения символьных переменных вводятся одна за другой без нажатия клавиш Enter или Пробел (код #32).
Например, процедура Readln(a,b,c) ожидает ввода значений символьных переменных a, b, с, т. е. набора на клавиатуре символов, например: "У", "Р", "А" и нажатия Enter. В результате процедура Write (a, b, с); выведет на экран надпись: “УРА”.
Пример 1. Составить программу, в которой выполняется присваивание, ввод и вывод символов. Прежде всего объявляем тип char (символьный) переменных a, b, c, d.
Значения переменных a, b, c будем вводить c клавиатуры. Пусть значение переменной d присваивается программой, например: d:='!';
Программа может выглядеть так:
Program Primer61_1;
Var a, b, c, d : char;
Begin
d:='!'; { присваивание значения }
read(a,b,c); { ввод трех символов }
writeln(a,b,c,d); { вывод четырех символов }
End.
PascalABC содержит несколько стандартных функций для работы с символами (приложение 2). Рассмотрим на примерах использование функций:
ord(s) – определяет код символа s ,
chr(n) - возвращает символ с кодом n,
Пример 2. Составить программу, которая определяет код введенного с клавиатуры символа.
Код введенного символа s определяем с помощью функции ord(s).
Программа может выглядеть так:
Program Primer61_2;
Var s: char;
begin
readln(s); { ввод символа }
writeln(ord(s)); { вывод кода }
end.
Пример 3. Составить программу, которая выводит символ по его коду, введенному с клавиатуры. Символ с кодом n возвращается функцией chr(n).
Программа может выглядеть так:
Program Primer61_3;
var
n: integer;
begin
readln(n); { ввод кода }
writeln(chr(n)); { вывод символа }
end.
Пример 4. Составить программу, которая определяет, какой символ введен с клавиатуры: цифра, большая или малая латинская буква.
Введенный символ a преобразуем в код функцией ord(a). Цифры имеют коды от 48 до 57, заглавные латинские буквы от 65 (A) до 90 (Z), строчные от 97 (a) до 122 (z).
Программа может выглядеть так:
Program Primer61_4;
Var
a: char;
Begin
Read(a);
if (ord(a)>=48) and (ord(a)<=57) then Writeln(a,' цифра');
if (ord(a)>=65) and (ord(a)<=90) then Writeln(a,' заглавная буква');
if (ord(a)>=97) and (ord(a)<=122) then Writeln(a,' малая буква');
End.
Благодаря тому, что в компьютере символы представляются в виде числовых кодов, к ним можно применять операции сравнения (отношения).
Допустимы шесть операций сравнения: =, <=, >=, <, >, < > .
Из двух символов большим считается тот, код которого больше.
Символы упорядочены в соответствии с их кодами следующим образом:
'0' < '1' <...< '9'
'A' < 'B'<...< 'Z' 'a '< ' b' <.. .< 'z' 'А' < 'Б' <...< 'Я' 'а' < 'б' <...< 'я'
Пример 5. Составить программу, которая выполняет сравнение введенного с клавиатуры символа с заданным.
Прежде всего объявляем тип char (символьный) переменных x и y. Переменной y присваиваем некоторое значение, например y:='h'. Записываем процедуру ввода значения переменной x. Записываем условие сравнения переменных: if x<y. Если оно выполняется, то выводим значения, соединенные знаком меньше: x, '<', y , иначе выводим x, '>=', y.
Программа может выглядеть так:
Program Primer61_5;
Var x, y: char; { переменные символьного типа }
Begin
y:='h'; { присваивание значения символа }
Read(x); {ввод символа}
If x<y then writeln(x, '<', y) else writeln(x, '>=', y); {сравнение символов}
End.
|