Для роботи з окремими символами описуються змінні типу 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, потім Enter!');
until false;
end.
Для роботи з кодами символів існують 2 основних функції:
Function Ord(X) : Char;-повертає Ascii-Код символу X
Function Chr(X : Byte) : Char;-повертає символ із зазначеним Ascii-Кодом X
Використовуємо останню функцію для того, щоб довідатися, як взагалі виглядає таблиця символів:
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. Ми згадували цей тип даних, але ще не працювали з ним. Зробимо це в наступному розділі.