Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Лекции по Паскалю2 / Иллюстрации к Лекции 9 по информатике.doc
Скачиваний:
54
Добавлен:
02.05.2014
Размер:
1.05 Mб
Скачать

Лекция 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’.