Скачать презентацию Символьный тип данных Строковый тип данных Перечисляемый тип Скачать презентацию Символьный тип данных Строковый тип данных Перечисляемый тип

11 Строковый тип.ppt

  • Количество слайдов: 16

Символьный тип данных Строковый тип данных Перечисляемый тип Тип множество Символьный тип данных Строковый тип данных Перечисляемый тип Тип множество

IBM-совместимые компьютеры обрабатывают 256 различных символов, каждый из которых кодируется одним байтом. Соответствие символов IBM-совместимые компьютеры обрабатывают 256 различных символов, каждый из которых кодируется одним байтом. Соответствие символов и байтов задается таблицей кодировки, в которой для каждого символа указывается соответствующий байт. Символы с кодами от 0 до 127 построены по стандарту ASCII (American Standard Code for Information Interchange — Американский стандартный код обмена информацией, читается "аски"). Вторая половина таблицы (коды 128. . . 255) в нашей стране содержит русские буквы (кириллицу) и символы псевдографики.

Кодовая таблица ASCII . 0 . 1 . 2 . 3 . 4 . Кодовая таблица ASCII . 0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . A . B . C . D . E . F EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI DC 1 DC 2 DC 3 DC 4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 0. NUL SOH STX 1. DLE 2. ! " # $ % & ' ( ) * + , — . / 3. 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 4. @ A B C D E F G H I J K L M N O 5. P Q R S T U V W X Y Z [ ] ^ _ 6. ` a b c d e f g h i j k l m n o 7. p q r s t u v w x y z { | } ~ DEL ETX

Для того, чтобы определить по этим таблицам код того или иного символа, нужно сложить Для того, чтобы определить по этим таблицам код того или иного символа, нужно сложить номер строки с номером столбца, в которых он расположен. Так, код цифры 5 равен 05+048 = 053.

Кодировка 1 байт на символ 0 127 1 таблица ASCII (международная) 128 254 255 Кодировка 1 байт на символ 0 127 1 таблица ASCII (международная) 128 254 255 кодовая страница ASCII = American Standard Code for Information Interchange 0 -31 управляющие символы: 7 – звонок, 10 – новая строка, 13 – возврат каретки, 27 – Esc. 32 – пробел знаки препинания: . , : ; ! ? специальные знаки: + - * / () {} [] 48 -57 цифры 0. . 9 65 -90 заглавные латинские буквы A-Z 97 -122 строчные латинские буквы a-z Кодовая страница (расширенная таблица ASCII) для русского языка: CP-866 для системы MS DOS CP-1251 для системы Windows (Интернет) КОИ 8 -R для системы UNIX (Интернет) 5

Тип данных CHAR (символ) – определяет полный набор символов таблицы ASCII. Функция Ord дает Тип данных CHAR (символ) – определяет полный набор символов таблицы ASCII. Функция Ord дает ASCII-код соответствующего символа, например, Ord(’A’) = 65, Ord(’a’) = 97. Сравниваются величины символьного типа по своим кодам. Тип данных STRING (строка) – строковый тип – в Паскале используется для обработки текстов. Строковая константа – последовательность символов, заключенных в апострофы, например, ‘Сумма равна’. Строковая переменная объявляется в разделе описания: Var <идентификатор>: string [<максимальная длина строки>]; Например: Var S: string [12];

Длину строки можно не указывать. В этом случае длина строки максимальна – 255. Длина Длину строки можно не указывать. В этом случае длина строки максимальна – 255. Длина строки может меняться в ходе выполнения программы. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива: S[i]. Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый символ строки занимает второй байт и имеет индекс 1. Типы STRING и CHAR совместимы, они могут употребляться в одних и тех же выражениях, т. е. например, переменной типа STRING можно присвоить значение переменной типа CHAR.

Операции над строками Операции отношения: =, <. >, <=, >=, <>. Сравнение строк производится Операции над строками Операции отношения: =, <. >, <=, >=, <>. Сравнение строк производится слева направо до первого несовпадающего символа. Если длины строк разные, но в общей части символы совпадают, то считается, что больше более длинная строка. Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно как константы, так и переменные. Сцепление можно выполнять и с помощью функции Concat(S 1, S 2, …, S 1). Функция Copy(S, M, N) выделяет из строки S подстроку длиной N символов, начиная с позиции M. Функция Length(S) определяет текущую длину строки S. Функция Pos(S 1, S 2) обнаруживает первое появление в строке S 2 подстроки S 1. Результат – номер позиции, с которой она начинается. Если подстрока не найдена, возвращается 0.

Процедура Delete(S, M, N ) – удаление N символов из строки S, начиная с Процедура Delete(S, M, N ) – удаление N символов из строки S, начиная с символа с позиции M. Процедура Insert(S 1, S 2, N) – вставка строки S 1 в строку S 2, начиная с символа с позиции N. Процедура Str(X[: m[: n]], S) – преобразует целое или вещественное выражение Х в строку S. m, n – форматы вывода целого типа, аналогично процедуре Write. Процедура Val(S, X, Code) – преобразует строку S во внутреннее представление целой или вещественной переменной Х, параметр Code получает значение 0, если преобразование прошло успешно, и тогда в Х помещается результат преобразования, в противном случае Code содержит номер позиции, где обнаружен ошибочный символ, и в этом случае Х не меняется. Например, в результате обращения Val(’ 123’, k, c) k получит значение 123, а обращение Val(’ 123 ’, k, c) ошибочно.

Функция Up. Case(С) – типа CHAR, преобразует строчную латинскую букву в заглавную. С – Функция Up. Case(С) – типа CHAR, преобразует строчную латинскую букву в заглавную. С – выражение типа CHAR, которое находится в пределах a-z, в противном случае функция не выполняет никаких действий. Функция Chr( X : Byte ): Char Возвращает символ с заданным порядковым номером X.

Задача: Дана строка, заканчивающаяся точкой. Подсчитать, сколько в ней слов. Слова в тексте разделены Задача: Дана строка, заканчивающаяся точкой. Подсчитать, сколько в ней слов. Слова в тексте разделены одним пробелом. begin read(S); k: =0; L: = length(S); for i: =1 to L do if S[i]=’ ’ then k: =k+1; write(’кол-во слов: ’, k+1); end. Если слова в тексте разделены произвольным кол-вом пробелов, их cначала нужно удалить, оставив по 1 пробелу. Это можно сделать так: … n: = Pos(’ ’, S); whiele n<>0 do begin Delete(S, n, 1); n: = Pos(’ ’, S); end; if S[1]=’ ’ then Delete(S, 1, 1); L: = length(S); if S[L]=’ ’ then Delete(S, L, 1); … Далее выполняется предыдущий алгоритм.

Задача (самостоятельно): в заданной строке заменить все вхождения ‘ФОМ’ на ‘МФ’. Задача (самостоятельно): в заданной строке заменить все вхождения ‘ФОМ’ на ‘МФ’.

Перечисляемый тип Не является стандартным и определяется набором идентификаторов, с которыми могут совпадать значения Перечисляемый тип Не является стандартным и определяется набором идентификаторов, с которыми могут совпадать значения параметра. Список идентификаторов указывается в круглых скобках через запятую: <имя типа>: = (<идентификатор 1, идентификатор 2, … , идентификатор N>; ) Пример: Type Operat = (Plus, Minus, Mult, Divide); Логический тип является частным случаем перечислимого: Type Boolean = (True, False);

Тип множество Множества – наборы однотипных логически связанных друг с другом объектов. Связи лишь Тип множество Множества – наборы однотипных логически связанных друг с другом объектов. Связи лишь подразумеваются программистом и никак не контролируются Паскалем. Количество элементов – 0 -256. Для описания следует использовать служебные слова set и of, а затем указать элементы этого множества, как правило, в виде перечисления или диапазона, например: var M: set of string[2]; V: set of ’o’. . ’ 9’; D: set of CHAR: Begin M: =[’жи’, ’ши’, ’ча’, ’ща’] {присваивание с помощью конструктора множеств}

Для множеств определены следующие операции: + – объединение – – разность * – пересечение Для множеств определены следующие операции: + – объединение – – разность * – пересечение <> – проверка неэквивалентности двух множеств <= – проверка, является ли левое множество подмножеством правого >= – в обратном порядке in – проверка, входит ли элемент, указанный слева, во множество, указанное справа. Результат операций +, –, * – множество, у остальных операций логический результат. Множества используются редко из-за низкой скорости выполнения операций над ними.

Задача: Подсчитать количество знаков препинания в предложении. Program Kol_zn; Var S: string; K, l, Задача: Подсчитать количество знаков препинания в предложении. Program Kol_zn; Var S: string; K, l, i: integer; M: set of CHAR; Begin M: =[’. ’, ’, ’, ’: ’, ’; ’, ’!’, ’? ’] read(S); k: =0; L: = length(S); for i: =1 to L do if S[i] in M then k: =k+1; write(‘кол-во знаков препинания: ’, k); readln; end. Как выглядит программа без использования множеств?