Символьный тип данных ASCII table • American Standard Code for Information Interchange • Таблица была разработана и стандартизована в США в 1963 году ASCII table • Символы с кодами 0 – 127 – латинские буквы, цифры, знаки препинания, управляющие символы • Управляющие символы используются для управления устройствами, организации передачи данных и других целей) • Символы с кодами 128 – 255 – национальный алфавит, символы псевдографики • Псевдографика – символы, отображающие графические примитивы • Основное назначение псевдографики — графическое оформление программ с текстовым интерфейсом пользователя — отображение в них окон, меню, кнопок и прочих элементов интерфейса, создания рамок и таблиц Коды ASCII • цифры ‘0’ до ‘9’ – от 4810 (001100002) до 5710 (001110012) • латинский алфавит от ‘A’ до ‘Z’ – от 6510 (010000012) до 9010 (010110102) • латинский алфавит от ‘a’ до ‘z’ – от 9710 (011000012) до 12210 (011110102) • русский алфавит от ‘А’ до ‘Я’ – от 12810 (100000002) до 15910 (100111112) Стандартные функции • Функция Ord (w) возвращает код символа w. i: integer; w: char; … w:=‘A’; i:=Ord (w); {i=65} Стандартные функции • Chr (i) определяет символ с кодом i. i: integer; w: char; … i:=65; w:=Chr(i); {w=A} Стандартные функции • Функции Ord и Chr являются обратными друг другу: Chr(Ord(w))=w и Ord(Chr(i))=i. Стандартные функции • Pred – предыдущий по порядку • Succ – последующий по порядку Pred(q)=Chr(Ord(q)-1) Succ(q)=Chr(Ord(q)+1) • На экран выводятся символы и соответствующие им коды. var i, k: Integer; Begin For i:=0 to 255 do begin Write(i:4, ' ', Chr(i),' '); k:=k+1; If k=8 then begin writeln; k:=0; end; end; end. • Зачем нужна переменная k? • Переменная символьного типа используется в качестве управляющей переменной в операторе For. Вывести символы: A BB CCC … WW…WW (23 раза) var i: сhar; j: Integer; begin for i:=’A’ to ‘W’ do begin For j:=1 to ord(i)-ord(‘A’)+1 do Write (i); writeln; end; end. • Определить, что будет выводиться после следующей не очень значительной модификации программы. var i, j: char; begin For i:=’a’ to ‘z’ do For j:=’a’ to i do Write (j); readln; aababcabcd…abcde….wxyz end. • В следующем примере подсчитывается количество символов введенных с клавиатуры. Ввод заканчивается символом ‘.’ (точка). Var i: Char; j: Integer; Begin Read (i); j:=0; While i<>’.’ do begin j:=j+1; Read (i); end; Writeln (j); End. • Другая версия этой простой программы позволяет отказаться от символа ‘.’ (точка) как признака конца ввода данных. Var i: Char; j: Integer; Begin #13 – управляющий символ Read(i); «возврат каретки» j:=0; While i<>#13 do begin j:=j+1; Read (i); end; Writeln (j); End. • А если изменить цикл на следующий: While i<>#10 do begin j:=j+1; Read (i); end; #10 – управляющий символ «новая строка» - то количество посчитанных символов будет на единицу больше. Объяснить, почему. В конце строки всегда стоят 2 управляющих символа: #13 #10. Если идти циклом до #10, то будет подсчитан еще и символ #13 • В следующем примере подсчитывается количество цифр в вводимых с клавиатуры данных. var ch: char; k: Integer; Begin read (ch); k:=0; while ch<>#13 do begin If (ch>=’0’) and (ch<=’9’) then k:=k+1; read (ch); end; end. • Функция Upcase(ch) используется для преобразования строчных английских букв в прописные. • Задание. Определите, какая обработка вводимых с клавиатуры символов осуществляется в следующем примере. var ch: Char; Было: AbCdeF Begin Стало: ABCDEF Read (ch); While ch<>#13 do begin If (ch>=’a’) and (ch<=’z’) then write (upcase(ch)) else write (ch); Read (ch); end; Также есть функция Lowercase(ch) End. Что она делает? Задание для тренировки в классе 1. Набрать в FP пример со слайда 9 и рассмотреть все символы и их коды 2. Вывести на экран (с помощью циклов) ZYYXXX … BB…BAA…A (B – 25 раз, А – 26 раз) 3. Дан набор символов, заканчивающийся «.», например ABcDefg. Сделать маленькие большими и наоборот: abCdEFG. Домашнее задание (сделать в FP, записать в тетрадь) 1. Вывести на экран символы AAAAAAA…..(26 раза) BBBBBB….(25 раза) …….. XXX YY Z 2. 3. 4. 5. Подсчитать, сколько раз определенный символ (например ‘*’) встречается в данной строке. Вывести Aa Bb Cc … Zz Даны 2 слова, они разделены пробелом, в конце второго стоит точка. Определить, в каком из них больше символов «d» Дан текст. Перед заданным символом 1 вставить символ 2 к-штук.