Читайте также:
|
|
Для работы с отдельными символами описываются переменные типа char:
var ch:char;
{... }
ch:='y';
Одна переменная типа char хранит информацию об одном коде ASCII-символа. Это можно использовать, например, для отслеживания действий пользователя по нажатию клавиш. Приведем пример одного из вариантов такой программы:
var ch:char;
begin
repeat
writeln;
write ('Продолжить? (Y/N)');
readln (ch);
if (ch='Y') or (ch='y') then begin
{Здесь программируется
нужный вычислительный процесс}
end
else if (ch='N') or (ch='n') then halt
{Завершение программы}
else writeln ('Нажмите Y или N');
until false;
end.
Для работы с кодами символов существуют 2 основных функции:
function ord(x):char;
— возвращает ASCII-код символа x
function chr(x: byte):char;
— возвращает символ с указанным ASCII-кодом x.
Применим последнюю функцию для того, чтобы узнать, как выглядит таблица символов кодировки DOS, используемой Паскалем:
var i,j:integer;
begin
writeln;
write ('ASCII-коды [32..255]');
for i:=2 to 15 do begin
writeln;
write (i*16:3,' ');
for j:=0 to 16 do write(chr(i*16+j),' ');
end;
writeln;
write ('ENTER для выхода...');
readln;
end.
Здесь печатаются только символы с кодами от 32 до 255 включительно, т. к. первые 32 символа с кодами от 0 до 31 -- непечатаемые (например, табуляция, перевод строки).
Для определения того, попадает ли код символа в некоторый диапазон значений, удобно использовать оператор in, как это делает следующий фрагмент программы:
write ('Введите символ: '); readln (ch);
if ch in ['A'..'Z'] then
write ('Большая латинская;')
else if ch in ['a'..'z'] then
write ('Малая латинская;')
else if (ch in ['А'..'Я']) then
write ('Большая русская;')
else if (ch in ['а'..'п']) or
(ch in ['р'..'я']) then
write ('Малая русская;')
else if ch in ['0'..'9'] then
write ('Цифра;')
else write
('Это не алфавитно-цифровой символ;');
write (' Код Вашего символа= ',ord(ch));
Работая с алфавитными символами, приходится отдельно учитывать ввод строчных и прописных букв. Удобнее сначала преобразовать все символы к прописным с помощью функции upcase:
var ch:char; i:integer;
begin
repeat
for i:=1 to random(72) do write ('*');
writeln;
write ('Продолжить? (Y/N)');
readln (ch);
until upcase(ch)='N';
end.
К сожалению, эта функция бесполезна при работе с символами русского и других национальных алфавитов, для ее замены напишем и протестируем собственную подпрограмму c названием upcase_ru:
procedure upcase_ru (var s:string);
var i,l,c:integer;
begin
l:=length(s);
for i:=1 to l do begin
c:=ord(s[i]);
if (c>=ord('а')) and (c<=ord('п'))
then c:=c-32
else if (c>=ord('р')) and (c<=ord('я'))
then c:=c-80;
s[i]:=Upcase(chr(c));
end;
end;
var s:string;
begin
writeln ('Введите строку текста:');
readln (s);
upcase_ru (s);
writeln ('Преобразованная строка:');
writeln (s);
end.
Программа учитывает, что в кодировке DOS не все символы кириллицы закодированы идущими подряд числами (см. Приложение 1).
Кроме того, в программе уже применяется массив символов, которому в Паскале соответствует тип данных string (строка). Мы упоминали этот тип данных, но еще не работали с ним. Как раз строкам посвящен п. 20.2.
Дата добавления: 2015-11-16; просмотров: 42 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Множества и перечислимые типы | | | Работа со строками |