Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6.1 (Строки).doc
Скачиваний:
4
Добавлен:
04.12.2018
Размер:
217.09 Кб
Скачать

12

Лабораторная работа № 7 строки

1.Цель работы

Целью работы является приобретение навыков алгоритмизации и программирования задач, оперирующих строковыми типами данных:

- ввод и вывод строковых данных;

- обработка строковых данных;

- использование стандартных процедур и функций языка Turbo-Pascal для обработки строковых данных.

2. Теоретическая часть

2.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;

  1. Определение непосредственно в разделе описания переменных

Формат

VAR ST4, ST5 : STRING [60];

ST6,ST7 : STRING;

2.2 Операции со строками

Выражения, в которых операндами служат данные строкового типа, называются строковыми выражениями. Они могут состоять из:

- строковых констант;

- строковых переменных;

- знаков операций;

- указателей процедур;

- указателей функций.

Над строковыми данными допустимо выполнять операции сцепления и операции отношения. Операции сцепления (+) применяются для сцепления нескольких строк в одну результирующую строку, длина которой не должна превышать 250 символов.

Например, выражение

`Процессор ` + ` Intel ` + ` Celeron ` + ` 1.7/20 GHz`

дает результат `Процессор Intel Celeron 1.7/20 GHz`,

а выполнение операторов

STR1 := `Группа студентов `;

STR2 := `ФК- 418`;

STR3:= STR1+STR2;

дает строку `Группа студентов ФК- 418`.

Такой же результат можно получить и так

STR3:= STR1+`ФК- 418`.

Операции отношения (=, <> , < , > , >= , <=) проводят сравнение двух строковых операндов и имеют приоритете более низкий, чем операции сцепления. Это значит, что сначала выполняются все операции сцепления (если они присутствуют в данном строковом выражении), а затем операции отношения.

Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией (см. Приложение).

Результат выполнения операций отношения над строковыми данными всегда имеет булевский тип (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 := ‘Специальность ФК’;

выражение STR5[1] дает обращение к первому символу, а выражение

STR5[15] + STR5[16]

дает значение «ФК».

Запись STR5[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Это значение не должно превышать число 255.

Замечание.

При вводе и обработке строковых данных кроме непосредственного указания входящих в эти строки символов для обозначения символов можно использовать соответствующие им ASCII коды. В этом случае перед числом, обозначающим код ASCII символа, необходимо поставить знак #. Таким образом можно в качестве элементов строк задавать и символы, не обозначенные на клавиатуре.

Например

VAR ST1: STRING [32];

BEGIN

ST1:= ‘TEKST’ + ‘ ‘ + #3;

Переменной ST1 будет присвоено значение

‘TEKST ♥’

Фрагмент таблицы обмена информацией ASCII CARACTER CODE CARD приведен в Приложении А.