Власні і структурні типи даних DelphiПри створенні будь-якої серйозної програми не обійтися без додаткових, більш складних, ніж числа і рядки, типів даних. У Delphi програміст може для своїх цілей конструювати власні типи даних. Щоб ввести в програму (описати) новий тип даних, застосовується оператор з ключовим словом type : type назва_типа = опис_типа ; Перелічувальними тип - це тип даних, діапазоном значень якого є просто набір ідентифікаторів. Це може застосовуватися в тих випадках, коли потрібно описати тип даних, значення якого наочніше уявити не числами, а словами. Перелічувальний тип записується взятої в круглі дужки послідовністю ідентифікаторів - значень цього типу, що перераховуються через кому. При цьому, перші елементи типу вважаються молодшими в порівнянні з тими, що йдуть слідом. Наприклад, тип, що описує назви футбольних команд, можна сформувати так:
Взагалі, під перелічуваними типами розуміють всі типи, для яких можна визначити послідовність значень і їх старшинство. До них відносяться:
Структурні типи даних використовуються практично в будь-якій програмі. Це такі типи, як
type ім'я_типа_масива = array [діапазон] of тип_елемента; Діапазон визначає нижню і верхню межі масиву і, отже, кількість елементів в ньому. При зверненні до масиву індекс повинен лежати в межах цього діапазону. Масив зі ста елементів цілого типу описується так:
type TMyArray = array [1 .. 100] of Integer;
Тепер можна описати змінні типу TMyArray: Замість присвоєння типу можна явно описати змінні як масиви: Для доступу до елементу масиву потрібно вказати ім'я масиву та індекс елемента в квадратних дужках. В якості індексу може виступати число, ідентифікатор або вираз, значення яких має укладатися в діапазон, заданий при описі масиву:
Іноді потрібно дізнатися верхню чи нижню межу масиву . Для цього служать вбудовані функції:
У дужки потрібно підставити масив, межі якого потрібно дізнатися . Вираз B := A означає, що кожен елемент масиву B буде дорівнювати елементу з таким же індексом масиву A . Таке привласнення можливе тільки якщо обидва масиви оголошені через якийсь поіменований тип, або перераховані в одному списку. І в разі: його використовувати неможливо (але можливо поелементне привласнення B[1] := A[2]; і т.д.). Масиви можуть мати кілька вимірів, що перераховуються через кому. Наприклад, таблицю з чотирьох стовпців і трьох рядків:
можна описати у вигляді масиву з двома вимірами: Результат буде аналогічний попередньому прикладу. Кожен вимір багатовимірного масиву може мати свій власний тип, не обов'язково цілий . Крім вищеописаних, так званих статичних масивів, у яких кількість елементів незмінно, в Delphi можна використовувати динамічні масиви, кількість елементів в яких можна змінювати в залежності від вимог програми. Це дозволяє економити ресурси комп'ютера, хоча робота з такими масивами відбувається набагато повільніше. Описуються динамічні масиви аналогічно статичним, але без вказівки діапазону індексів: Після створення в динамічному масиві немає жодного елемента. Необхідний розмір задається в програмі спеціальною процедурою SetLength . Масив зі ста елементів: Нижня межа динамічного масиву завжди дорівнює нулю. Тому індекс масиву A може змінюватися від 0 до 99 . Багатовимірні динамічні масиви описуються саме як масиви масивів . Наприклад, двовимірний: У програмі спочатку задається розмір по першому вимірюванню (кількість стовпців):
Потім задається розмір другого виміру для кожного з трьох стовпців, наприклад:
Таким чином створюється трикутна матриця: A00 A10 A20 Щоб звільнити пам'ять, виділену динамічному масиву, потрібно масиву як цілого привласнити значення nil : type ім'я_типа_запису = record назва_поля: тип_поля; . . . Назва_поля: тип_поля; end; Назви полів, що мають однаковий тип, можна, як і в разі опису змінних, вказувати в один рядок через кому. Для звернення до полю запису спочатку вказують ім'я запису, потім точку, потім ім'я поля. Наприклад, дані про персонал підприємства можуть бути організовані таким типом записи: Тепер змінна такого типу займає строго певне місце в пам'яті, і може бути записана в файл. Як це зробити, розповідається у 2-й частині Уроку №7. Множини - це група елементів, об'єднана під одним ім'ям, і з якої можна порівнювати інші величини, щоб визначити, чи належать вони до цієї множини. Кількість елементів в одній множині не може перевищувати 256. Множини описується так: type імя_множини = set of діапазон_значень_множини; В якості діапазону може вказуватися будь-який тип, кількість елементів в якому не більше 256. Наприклад:
Конкретні значення множини задаються в програмі за допомогою перерахування елементів, ув'язнених в квадратні дужки. Допускається використовувати і діапазони: var MySet: TMySet; begin MySet: = [1, 3 .. 7, 9]; end; Щоб перевірити, чи є якесь значення елементом множини, застосовується оператор in у поєднанні з умовним оператором: Щоб додати елемент у множину, використовується операція додавання, видалити - віднімання: var Digit: set of Char=['1'..'9']; * Примітка: DecimalSeparator - вбудована в Delphi константа типу Char, що має значення символу-роздільника цілої та дробової частин, який може дорівнювати точці ('.' ) або коми ( ','), в залежності від поточних налаштувань Windows . |