Структурированные типы данных
Данные структурированного типа состоят из данных других типов. Переменные этих типов могут в каждый момент времени иметь только одно значение. К данным структурированного типа относятся: o Строки; o Массивы; o Множества; o Записи; o Файлы; o Классы. Строки (строковые типы): представлены тремя физическими и одним общим типами. Данные типа ShortString представляют собой строку, которая фактически является массивом из 256 элементов – array[0..255]. Нулевой байт этого массива указывает длину строки. Строка – это последовательность символов кодовой таблицы. Данные типов AnsiString и Wide String представляют собой динамичсекие массивы, максимальная длина которых фактически ограничена размером основной памяти компьютера. Данные типа AnsiString кодируются в коде ANSI, а типа Wide String – в коде Unicode. Общим является тип String, который может соответствовать типу ShortString или AnsiString, что определяется директивой компилятора $H. Так как строки фактически являются массивами, то для обращения к отдельному символу строки можно указать название строковой переменной и номер (позицию) этого символа в квадратных скобках. Формат описания строкового типа: Type <имя типа> = string [ max длина строки]; Иначе: var <имя переменной,... >: string [ max длина строки]; Если значение максимально допустимой длины строки не указано, по умолчанию длина 255 символов. При использовании в выражениях строка заключается в апострофы. Строковые данные можно использовать в качестве констант. Недопустимо использование строковых переменных в качестве селектора в операторе Case. Пример: const Adres = ’ul. Korolenco, 5’; type Stroka = string[100]; var Str: Stroka; St1: string; St2, St3: string[30]; Массивы: массив – это упорядоченная индексированная совокупность однотипных элементов, имеющих общее имя. Элементами массивов могут быть данные любого типа, включая структурные. Каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, если массив многомерный. Для обращения к отдельному элементу массива указывают имя этого массива и номер (номера) элемента, заключенный в квадратные скобки, например, arr1[3, 5] или arr2[7].
Количество индексных позиций определяет размерность массив (одномерный, двумерный и т.д.), при этом размерность массива не ограничивается. В математике аналогом одномерного массива является вектор, а двумерного массива – матрица. Индексы элементов массива должны принадлежать порядковому типу. Различают массивы статические и динамические. Статическиймассив представляет собой массив, границы индексов и, соответственно, размеры которого задаются при объявлении, т.е. они известны до компиляции программы. Формат описания типа статического массива: Type <имя типа> = Аггау [<тип индексов>] of <тип элементов >; Иначе: var <имя переменной,...>: Аггау [<тип индексов>] of <тип элементов >; Пример. type Matrix = a ггау [1..3, 1..2] of integer; Znak = array[1..255] of char; Day =(Mon, Tue, Wed, Thu, Fri, Sat, Sun); var m1, m2: Matrix; a: Znak; Week: array[1..7] of Day; r: array[1..10] of real; Динамический массив представляет собой массив, для которого при объявлении указывается только тип его элементов, а размер массива определяете при выполнении программы. Формат описания типа динамического массива: Type <имя типа> = Аггау of <тип элементов >; Задание размера динамического массива во время выполнения программы производится процедурой SetLength(var S;NewLength: integer), которая для динамического массива S устанавливает новый размер, равный NewLength. Выполнять операции с динамическим массивом и его элементами можно только после задания размеров этого массива. После задания размера динамического массива для определения его длины, минимального и максимального номеров элементов используются функции Length(), Low() и High() соответственно. Нумерация элементов динамического массива начинается с нуля, поэтому функция Low() для него всегда возвращает значение ноль.
Пример. Var n: integer; m: array of real; ... SetLength(m, 100); for n:=0 to 99 do m[n]:=n; SetLength (m, 200); После описания динамического массива, состоящего из вещественных чисел, определяется размер этого массива, равный 100 элементам. Каждому элементу присваивается значение, равное его номеру в массиве. Так как нумерация элементов массива начинается с нуля, то номер последнего из них равен не 100, а 99. После цикла размер массива увеличивается до двухсот. Для описания типа многомерного динамического массива (например, двумерного) используется конструкция: Type <имя типа> = Аггау of Аггау of <тип элементов >; Действия над массивом обычно выполняются поэлементно, в том числе операции ввода и вывода. Поэлементная обработка массивов производится, как правило, с использованием циклов. Массив в целом (как единый объект) может участвовать только в операциях отношения и в операторе присваивания, при этом массивы должны быть полностью идентичными по структуре, то есть иметь индексы одинаковых типов и элементы одинаковых типов. Множества: множество представляет собой совокупность элементов, выбранных из предопределенного набора значений. Все элементы множества имеют порядковый тип; количество элементов множества не может превышать 256. Формат, описания множественного типа: Type <имя типа> = Set of <тип элементов >; Переменная множественного типа может содержать от нуля до максимального числа элементов своего множества. Значения множественного типа заключаются в квадратные скобки. Пустое множество обозначается [ ]. Операции, допустимые над множествами, приведены в таблице. Кроме того, имеется операция in (проверка членства), которая определяет принадлежность выражения порядкового типа (первого операнда) множеству (второму операнду). Результат операции будет типа boolean и иметь значение True в случае соблюдения принадлежности значения множеству. Записи: з аписи объединяют фиксированное число элементов данных других типов. Отдельные элементы записи имеют имена и называются полями. Имя поля должно быть уникальным в пределах записи. Различают фиксированные и вариантные записи. Фиксированная запись состоит из конечного числа полей, ее объявление имеет следующий формат:
Type <имя типа> = record; <имя поля_1>: <Тип поля>; ... <имя поля_ n >: <Тип поля>; end; Вариантная запись, так же как и фиксированная, имеет конечное число полей, однако предоставляет возможность по-разному интерпретировать области памяти, занимаемые полями. Все варианты записи располагаются в одном месте памяти и позволяют обращаться к ним по различным именам. Отметим, что термин «вариантная запись» не имеет ничего общего с термином «вариантный тип» (variant). Формат объявления вариантной записи: Type <имя типа> = record; Case <Признак>: <Тип признака> of; <вариант_1>: (<описание варианта_1>) ... <вариант_ n >: (<описание варианта_ n >); end; Для обращения к конкретному полю необходимо указывать имя записи и имя поля, разделенные точкой. Таким образом, имя поля является составным. С полем можно выполнять те же операции, что и с переменной этого типа. Пример. var Man: record; Name: string; Salary: real; Note: string; end; ... Man.Name:=’Ivanov M.A.’; Man.Salary:=5000; Переменная Man — фиксированная запись, которая содержит поля имени (Name), оклада (Salary) и примечания (Note), причем каждое поле имеет свой тип. Файлы: Файл представляет собой имеющую имя последовательность однотипных элементов, размещенных на внешнем устройстве, чаще всего, на диске. Файл имеет много общего с одномерным динамическим массивом, но размещается не в оперативной, а во внешней памяти, и не требует предварительного указания размера. Для выполнения операций с конкретным файлом, размещенным на диске, в программе обычно используется так называемая файловая переменная (логический файл). Файловая переменная после ее описания связывается с некоторым файлом, в результате чего операции, выполняемые над ней, приводят к соответствующим изменениям в этом файле. После завершения всех операций связь между файловой переменной и файлом разрывается. Теперь файловую переменную можно связать с другим файлом этого же типа.
В зависимости от типа элементов различают текстовые, типизированные и нетипизированные файлы. Текстовый файл содержит строки символов переменной длины, типизированный файл составляют элементы указанного типа (кроме файлового), в нетипизированном файле находятся элементы, тип которых не указан. Описание файловой переменной, предназначенной для работы с файлом, должно соответствовать типу элементов файла. Пример. var f1: TextFile; f2: File of integer; f3: File of real; f4: File; здесь переменная f1 предназначена для работы с текстовыми файлами, переменные f2 и f3 – с типизированными файлами, содержащими целые и вещественные числа, соответственно, а переменная f4 – с нетипизированными файлами. Примечание. В языке Object Pascal описателем текстовых файлов служит слово Text. В Delphi многие компоненты имеют одноименное свойство, поэтому при описании текстовых файлов этот описатель применять нельзя; нужно использовать TextFile или System. Text (описатель Text из модуля System). Для непосредственной работы с файлами многие компоненты (объекты) предоставляют соответствующие методы, например, LoadFromFile (const FileName: string) – загрузить из файла или SaveToFile(const FileName: string) сохранить в файле. В таких методах файловая переменная не нужна и в параметре FileName указывается имя файла.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|