Символьные переменные.
Тип данных "CHAR"
Переменные, предназначенные
для хранения одиночных символов, называются символьными переменными. В
языке Turbo Pascal для них определён тип данных CHAR. В переменную этого
типа может быть помещён любой из 256 символов расширенного кода ASCII.
Таблица расширенного кода
ASCII.
Объявление символьных
переменных осуществляется в разделе объявления переменных с помощью
служебного слова CHAR.
Этот тип данных обладает
некоторыми особенностями. Обычно значения для переменных типа "CHAR"
задаются в апострофах. Например, если в программе есть описания
u, v: char
то возможны операторы присваивания
u:='a'; v:=u; v:='*' и т.д.
Апостроф (штрих) ' - принятая в
Паскале форма кавычки - употребляется всякий раз, когда значение типа "CHAR"
явно указывается в программе (то есть является константой). Выполнение операторов
u:='b'; write(u)
приводит к отображению на экране символа b.
Кроме того, имеется
возможность задавать значения указанием непосредственно числового значения
ASCII-кода. В этом случае Вы должны перед числом, обозначающим код символа
ASCII, поставить знак "#"
u:=#97
П р и м е р 1. Дана
последовательность символов заканчивающаяся символом "/". Необходимо
подсчитать количество восклицательных знаков в данной последовательности.
Program ex_1;
var
c: char; { организация символьной переменной }
n: integer; { переменная для хранения количества "!" }
begin
read(c); { чтение первого символа с клавиатуры }
n:=0; { обнуление cчётчика "!" }
while c<>'/' do { условие окончания работы водом символа '/' }
begin
if c='!' then n:=n+1; { подсчёт символов "!" }
read(c); { чтение следующего символа }
end;
end.
Обратите внимание. В
таблице ASCII большие латинские буквы и малые латинские буквы расположены
подряд по алфавиту. Такая упорядоченность открывает возможность
использования в программах операторов цикла с параметром, имеющим тип
"CHAR". Параметр цикла пробегает последовательность символов в указанных
границах. Выполнение оператора цикла
for c:='a' to 'z' do write(c)
где c символьная переменная, приводит к высвечиванию на
экране последовательности всех малых букв латинского алфавита:
abcdefghhijklmnopqrstuvwxyz
Выполнение оператора цикла
for c:='z' downto 'a' do write(c)
приведёт к выводу этих же букв в обратном порядке.
Символьные переменные очень
удобны для написания диалоговых программ. Представим себе, что вам
необходимо довольно часто получать значения некоторой функции, например
значение синуса от корня квадратного из x для разных значений x.
Пусть заранее неизвестно,
сколько раз и для каких именно значений x потребуется вычислить значение
функции. Можно составить такую программу, которая будет вычислять значение
фукнкции и сразу же ожидать ввода нового значения дл x. Это зацикленная
программа.
program ex_2;
label 1;
var c: real;
begin
1: write('x=);read(c);
writeln(' ,f(x)=',sin(sqrt(x)));
goto 1;
end.
Когда эта программа
выполняется, на экране формируется последовательность строк
x=...,f(x)=...
x=...,f(x)=...
x=...,f(x)=...
. . . .
Для того, чтобы прекратить
выполнение программы, потребуется предпринять специальные меры - например,
выключить компьютер или нажать комбинацию клавиш
Ctrl-Break.
Другой вариант - программа,
в ходе выполнения которой на экране регулярно возникает вопрос, следует ли
продолжать работу, или прекратить выполнение программы:
program ex_3;
var
x: real;
s: char;
begin
s:='д';
while s='д' do
begin
write('x=);read(c);
writeln(' ,f(x)=',sin(sqrt(x)));
writeln('продолжить?(д или н)');
read(s);
write(' ');
end;
end.
Когда выполняется эта
программа, на экране возникает следующая последовательность строк:
x=...,f(x)=...
продолжить?(д или н)
д
x=...,f(x)=...
продолжить?(д или н)
д
. . . .
x=...,f(x)=...
продолжить?(д или н)
н
С вводом буквы н выполнение
программы заканчивается. Возможность прочтения буквы ответов обеспечивается
использованием в программе символьной переменной.
Описание функций
работающих с символьными переменными.
CHR(x: byte): char;
Преобразует целое число,
имеющее тип BYTE, в один символ ASCII-кода. Следующая программа иллюстрирует
возможности функции "CHR". Она выдаёт все символы кода ASCII на экран. При
этом некоторые символы ASCII-кода (например 7, 10, 13) при обычных условиях
не имеют изображения, а используются для реализации специальных функций
(пере- вод курсора и т.д.) Благодаря использованному в операторе Write
формату каждый из изображаемых символов отделяется от соседнего пробелом
(занимает две позиции)
Program ex_4;
var
i: byte;
begin
for i:=0 to 255 do write(chr(i):2);
end.
ORD(c: char): byte;
Функция Ord выполняет
действие, обратное функции Chr, т.е. возвращает порядковый номер символа
параметра в таблице ASCII.
UpCase(c: char): char;
Осуществляет преобразование
символов английского алфавита из строчных символов в прописные. Все
остальные символы при применении этой функции остаются непреобразованными.
Контрольные вопросы.
- Какие переменные называют символьными
переменными?
- Опишите тип данных CHAR.
- Как используется в языке Turbo Pascal символ
номер 39.
- Какие преобразования выполняет функция ODD?
- Какие преобразования выполняет функция CHR?
- Какие преобразования выполняет функция UpCase?
- Как используются специальные символы -
"управляющие коды"?
- Сколько символов содержится в таблице ASCII?
- Опишите использования формата вывода информации
в операторе Write.
- Как сравниваются символьные переменные при
вычислении условий?
Задания для
самостоятельного выполнения.
- Дана последовательность из n символов.
Подсчитать:
а) сколько раз среди данных символов встречается символ + и сколько раз
- символ *.
б) общее число вхождений символов +, -, * в данную последовательность.
- Вывести на экран изображение всех возможных
символов вместе с их номерами.
- Дана последовательность из n символов.
Выяснить, имеются ли в последовательности два подряд идущих символа
",-".
- Дана последовательность из n символов.
Известно, что в последовательности имеется хотя
бы одна запятая. Найти
номер:
а) первой по порядку запятой;
б) последней по порядку запятой.
- Дана последовательность из n символов.
Выяснить, каких символов в последовательности больше, запятых или точек
с запятой. (Не исключается случай равенства).
- Дана последовательность символов,
заканчивающаяся символом '+'. Определить и вывести на экран номера
символов, имеющих наибольший и наименьший номер.
- Дана последовательность из n символов.
Выяснить, в какой половине последовательности, в первой или во второй,
больше вопросительных знаков. (Не исключается случай равенства).
- Дана последовательность из n символов. Выяснить
встречается ли в данной последовательности группа из трёх стоящих рядом
точек.
- Дана последовательность из n символов.
Подсчитать наибольшее число букв "a" идущих подряд в данной
последовательности.
- Дана последовательность символов,
заканчивающаяся символом '?' Подсчитать наибольшее количество символов
"пробел" идущих в строке подряд.
ДАЛЕЕ