Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_ЛР1,2_A5_Часть1.doc
Скачиваний:
35
Добавлен:
08.11.2019
Размер:
1.7 Mб
Скачать

7. Структурированные типы данных

Структурированные типы данных определяют наборы однотипных (однородных) или разнотипных (неоднородных) элементов, типы которых образуются из других типов (простых, структурированных, указателей и т. д.).

Структурированные типы Object Pascal включают в себя все типы этого класса, существующие в версиях Turbo/Borland Pascal, к которым добавлены следующие новые типы:

  • две разновидности строкового типа ShortString и AnsiString;

  • тип указатель на класс class of.

В настоящем пункте основное внимание уделено новым строковым типам, а также некоторым другим, за исключением файлового типа, который рассматривается в следующем разделе работы.

Тип class of, как и тип class, связан с объектно-ориентированной методологией разработки программ, которой посвящена отдельная лабораторная работа.

Строки типа ShortString (“короткая” строка) и AnsiString (“длинная” строка) могут использоваться наряду с основным строковым типом String и типом Pchar, описывающим строку, которая оканчивается нулем. Универсальная строка типа String может использоваться и как “короткая” строка, и как “длинная” строка в основном в зависимости от директивы компилятора {$H} или параметра Project|Options|Compiler|Huge strings главного меню. Если задана директива {$H+} или установлен указанный параметр, строка типа String ведет себя как “длинная”. В противном случае – как “короткая”. Строки типа String с явно заданным размером всегда являются “короткими”.

Строка типа ShortString представляет собой одномерный массив, в который можно поместить до 255 символов. Однако, в отличие от обычного массива, ShortString-строка имеет не фиксированную длину, а две разновидности длины:

  • общую длину строки, которая определяет размер памяти, выделяемый короткой строке при ее описании;

  • текущую длину (она всегда меньше или равна общей длине), которая показывает количество смысловых символов короткой строки в данный момент времени.

Текущая длина ShortString-строки указывается в нулевом (то есть имеющем индекс 0) элементе строки. В него записывается символ, код которого равняется значению текущей длины. Нулевой элемент строки при этом сделан невидимым для программиста, однако использовать его в программах допускается.

Строка ShortString совместима со строками любых других типов. Ей можно присваивать значение другой строки или строкового выражения. При этом другие типы строк приводятся к типу ShortString. Значение строки ShortString также допускается присваивать строке другого типа за исключением строки типа Pchar.

Строка типа AnsiString (строка для размещения символов ANSI-кодировки) представляет собой массив, в который можно поместить любое количество символов. В отличие от ShortString-строк память под такие строки выделяется не статически, а динамически. “Длинные” строки не имеют максимальной длины, устанавливаемой при объявлении, а только динамическую текущую длину. Переменная, соответствующая такой строке, фактически является указателем на динамически выделенную под эту строку область памяти. Если строка является пустой, этот указатель имеет значение nil2.

Строки типа AnsiString обладают такими же свойствами совместимости со строками других типов, что и ShortString-строки.

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

Задание 7. Подготовить и выполнить программу определения текущих характеристик строки типа ShortString.

Примечание. Для решения задачи использовать программу задания 6, внеся в нее некоторые изменения. В разделе объявления переменных ввести строковую переменную Str типа ShortString и инициализировать ее значением “Короткая строка”. Компоненту Edit формы пометить текстом “Строка”. Ее следует использовать в процессе работы программы для ввода новых строк.

В процедуре обработчика событий, инициируемой нажатием кнопки “Операция”, разместить операторы, выполняющие следующие действия:

1. Ввод новой строки.

2. Очистка списка.

3.Добавление в строки списка параметров текущей строки: общего и текущего размеров строки, текста строки и ее первого символа. Значение каждого параметра сопроводить текстом, поясняющим его название.

Для получения общего размера строки использовать стандартную функцию SizeOf, определяющую размер аргумента в байтах, а для получения текущего размера – стандартную функцию Length.

Добавить в создаваемый программный модуль процедуру обработчика событий FormCreate, обрабатывающего событие OnCreate, которое возникает при создании формы и по которому начальное значение строки Str присваивается свойству Text строки ввода Edit1.

Запустить программу на выполнение и получить характеристики исходной строки. Изменить информацию в строке ввода, нажать кнопку “Операция” и проанализировать, как будут изменяться параметры строки. Рассмотреть частный случай, когда длина строки равна нулю.

Задание 8. Подготовить и выполнить программу определения текущих характеристик “длинной” строки AnsiString.

Примечание. Для решения задачи использовать программу задания 6, внеся в нее соответствующие изменения. Вместо переменной Str типа ShortString ввести новую инициализированную переменную типа AnsiString. Дополнительно для текущей строки определить еще один параметр: код символа завершения строки, идущего за последним помещенным в строку символом и имеющего номер, равный значению выражения Length(Str)+1.

Аналогично заданию 6 получить характеристики нескольких “длинных” строк. По результатам выполнения заданий 7 и 8 сопоставить характеристики строк типа ShortString и AnsiString между собой.

Задание 9. Подготовить и выполнить программу, которая выполняет ввод строки символов, состоящей из строчных и заглавных букв латинского алфавита, цифр и пробелов, и осуществляет проверку правильности введенных символов. При обнаружении первого неправильного символа должно быть выдано сообщение “Неправильная строка”, символ выделен и дальнейший анализ прекращен. Если все символы строки правильные, то должно быть выдано сообщение “Правильная строка”.

Примечание. Ввод строки символов выполнить с помощью компоненты Edit. Название кнопки “Операция” изменить на “Проверка”. При проверке введенных символов совокупности правильных символов представить с помощью конструктора множеств диапазонов этих символов. При обнаружении неверного символа осуществить активизацию строки ввода с помощью метода SetFocus и выделить этот символ путем задания свойствам SelStart и SelLength3 соответствующих значений. Для вывода сообщений использовать компоненту Label.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]