- •9.1. Строки (повторить самостоятельно, см. Также 7.2.1.3 и 7.2.1.4)
- •9.2. Примеры решения задач обработки строковых данных
- •1. Программа обработки массива строк
- •3. Удаление пробелов перед началом текста строки
- •4. Программа, удаляющая из вводимой с клавиатуры строки пробелы между словами и записывающая в массив n длину (число символов) каждого слова
- •9.3. Записи
- •9.4. Примеры использования данных типа «запись»
- •1. Программа для добавления записей в файл данных о дневной температуре воздуха
- •2. Программа для обработки массива данных по группе студентов из 30 человек
- •Протокол работы программы
- •Результат работы программы
Лекция 9. Паскаль. Структурированные типы данных. Строки. Записи.
ПЛАН
9.1. Строки (повторить самостоятельно, см. Также 7.2.1.3 и 7.2.1.4)
9.2. Примеры решения задач обработки строковых данных (повторить самостоятельно, см. также 7.2.1.3 и 7.2.1.4)
9.3. Записи
9.4. Примеры использования данных типа «запись»
9.1. СТРОКИ
Тип данных STRING (строка) предназначен для обработки строк (цепочек символов).
Обработка строковых данных - необходимый элемент программ, работающих с текстами:
- Программы лингвистического анализа текстов;
- Текстовые редакторы;
- Программы, работающие в диалоговом (интерактивном) режиме;
- Программы, содержащие текстовые пояснения результатов своей работы.
Строка – последовательность символов (от 0 до 255), заключенная в апострофы.
При составлении программ используются строковые константы и строковые переменные.
Строковые константы – элементы данных, значения которых известны заранее, описаны в разделе описания констант и в ходе выполнения программы не изменяются.
Формат описания строковых констант
CONST
<идентификатор> = <значение>;
CONST
ZAG = `Результат расчета`;
VAR1 = ` Вариант №1 `;
VAR2 = ` Вариант № 2`;
KNIGA = `Турбо-Паскаль 7.0`;
Строковые переменные – элементы данных, которые по ходу выполнения программы могут изменять значение и количество символов в пределах от 0 до числа, равного заданной программистом максимальной длины строковой переменной.
Определить строковую переменную можно двумя способами:
1. Определение через описание типа в разделе описания типов.
Формат
TYPE
<имя типа> = STRING [максимальная длина строки];
VAR
<идентификатор1, идентификатор2,…> : <имя типа>;
где - STRING – зарезервированное слово;
- максимальная длина строки – наибольшее допустимое количество символов переменной данного типа (≤ 255).
TYPE
FLO = STRING [130];
FTK = STRING; {По умолчанию длина строки равна 255}
VAR
ST1 : FLO;
ST2, ST3 : FTK;
2. Определение непосредственно в разделе описания переменных:
Формат
VAR
ST4, ST5 : STRING [60];
ST6,ST7 : STRING;
Операции со строками
Выражения, в которых операндами служат данные строкового типа - строковые выражения.
Строковые выражения могут состоять из:
- строковых констант;
- строковых переменных;
- знаков операций;
- указателей процедур;
- указателей функций.
Над строковыми данными допустимо выполнять операции сцепления и операции отношения.
Операции сцепления (+) применяются для сцепления нескольких строк в одну результирующую строку, длина которой не должна превышать 250 символов.
Например, выражение
`Процессор ` + ` Intel ` + ` Celeron ` + ` 1.7/20 GHz`
дает результат
`Процессор Intel Celeron 1.7/20 GHz`,
а выполнение операторов
STR1 := `Группа студентов `;
STR2 := `Н - 109`;
STR3:= STR1+STR2;
дает строку `Группа студентов Н - 109`.
Такой же результат можно получить и так
STR3:= STR1+`Н – 109`
Операции отношения (=, <> , < , > , >= , <=) проводят сравнение двух строковых операндов и имеют приоритете более низкий, чем операции сцепления.
Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией (ASCII - коды).
Результат выполнения операций отношения над строковыми данными всегда имеет булевский тип (Boolean), и равен:
- TRUE, если выражение истинно;
- FALSE, если выражение ложно.
Например,
Выражение Результат
`COM1` < `KOM2` TRUE
`DOS1.0` > `DOC1.0` TRUE
`АККОРД` < `AKKORD` FALSE
Строки считаются равными, если они равны по длине и содержат одни и те же символы. Если строки имеют различную длину, но в общей части символы полностью совпадают, считается, что более короткая строка меньше. Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).
STR10:= `Название факультета`;
STR11:= STR10 + `ФЭМФ`;
Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую величину, указанную при описании этой переменной, то все лишние символы справа отбрасываются.
Описание Строковое выражение Получаемое значение
переменной А переменной А
A : STRING [14]; A := `Группа ФК-418`; `Группа ФК-418`
A : STRING [9]; A := `Группа ФК-418`; `Группа ФК`
A : STRING [6]; A := `Группа ФК-418`; `Группа`
В одно выражение допускается включать операнды строкового и символьного (CHAR) типа. Если при этом символьной переменной присваивается значение строкового типа, фактическая длина строки должна быть равна единице, иначе возникает ошибка выполнения.
VAR
LITERA : CHAR;
ST1, ST2: STRING [12];
BEGIN
LITERA := `A`;
ST1 := ‘КЛАСС ’;
ST2 := ST1 + LITERA; {Дает результат « КЛАСС А»}
ST1 := ‘B’;
LITERA := ST1;
ST2 := ‘B2’;
LITERA := ST2; {Ошибка, т.к. литерной переменной нельзя присваивать значения длиной более одного символа}
К отдельным символам строки можно обращаться по номеру (индексу) данного символа в строке. Индекс определяется выражением целочисленного типа, которое записывается в квадратных скобках.
Например, после выполнения присваивания
STR5 := ‘Специальность Н-109’;
выражение STR5[1] дает обращение к первому символу, а выражение
STR5[15] + STR5[16]
дает значение «Н».
Запись STR5[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Это значение не должно превышать число 255.
При вводе и обработке строковых данных кроме непосредственного указания входящих в эти строки символов для обозначения символов можно использовать соответствующие им ASCII коды. В этом случае перед числом, обозначающим код ASCII символа, необходимо поставить знак #.
Таким образом, можно в качестве элементов строк задавать и символы, не обозначенные на клавиатуре.
VAR
ST1: STRING [32];
BEGIN
ST1:= ‘TEKST’ + ‘ ‘ + #3;
Переменной ST1 будет присвоено значение
‘TEKST ♥’
Процедуры для обработки строк
DELETE (ST, POZ, N) – удаление N символов строки ST, начиная с позиции POZ.
Например, для значения ST ’ АБВГДЕ’ выражение DELETE (ST, 4,2) дает результат ‘АБВЕ’.
INSERT (ST1, ST2, POZ) – вставка строки ST1 в строку ST2 начиная с позиции POZ.
Например,
VAR
ST1, ST2, ST3: STRING;
BEGIN
ST2:= ‘Компьютер 2.0 GHz’;
ST1:= ‘Celeron’;
ST3:= INSERT (ST1, ST2, 11);
В результате получается строка ST3, равная
‘Компьютер Celeron 2.0 GHz’
STR (IBR, ST) – преобразование числового типа (integer, byte, real) значения величины IBR и помещение результата в строку ST. После имени переменной IBR может быть указан формат вывода.
Например, при значении переменной IBR, равном 2680, выражение
STR (IBR:7, ST) дает результат ‘ 2680’.
VAL (ST, IBR, COD) – преобразование значения ST в величину типа integer, byte, real и помещение результата в IBR. Значение ST не должно содержать не значащих пробелов в начале и конце.
COD - целочисленная переменная.
Если при выполнении операции преобразования ошибки не обнаружено, COD = 0.
Если обнаружена ошибка, то COD будет содержать номер позиции первого ошибочного символа в ST, значение IBR будет неопределенно.
Например, при ST равном ‘1526’ выражение VAL (ST,IBR,COD) дает результат 1526, COD=0.
Функции для обработки строк
LENGTH (ST) - вычисляет длину в символах строки ST. Результат – целочисленного типа.
Например, при ST, равном ‘длина строки’, выражение LENGTH (ST) дает результат 12.
COPY (ST, POZ, N) – выделяет из строки ST подстроку длиной N символов, начиная с позиции
POZ. POZ, N – целочисленные выражения.
Если POZ > LENGTH (ST), то результатом будет пробел;
Если POZ > 255, возникнет ошибка при выполнении.
Например, при значении ST= ‘ABCDEFG’, выражение COPY (ST,2,3) дает результат ‘BCD’.
CONCAT (STR1, STR2,…, STRN) – выполняет конкатенацию (сцепление) строк STR1,STR2,…,STRN в том порядке, в каком они указаны в списке параметров. Сумма символов всех сцепляемых строк должна быть не более 255.
Например, выражение CONCAT (‘AA’, ’BB’, ’CC’) дает результат ‘AABBCC’.
POS (ST1, ST2) – обнаруживает первое появление в строке ST2 подстроки ST1.
Результат целочисленного типа и равен номеру той позиции, в которой находится первый символ подстроки ST1. Если в ST2 не найдено ST1, то результат равен 0. Например, для значения ST2 ‘ABCDEFGH’ выражение POS (‘DE’,ST2) дает результат, равный 4.
UPCASE (CH) - преобразует строчную букву в прописную. Параметр и результат имеют тип
CHAR. Обрабатывает только буквы латинского алфавита.
Например, для значения CH = ‘f’, выражение UPCASE (CH) дает результат ‘F’.