
- •Целый тип данных
- •Вещественный тип данных
- •Структура программы. Операторы языка
- •Ввод-вывод данных
- •Условный оператор и оператор выбора
- •Перечисляемый тип. Ограниченный тип. Множества
- •Иерархические записи
- •Операторы цикла Оператор цикла с параметром. Операторы цикла итерационного типа
- •Основные принципы ооп
- •Класс, объект
- •Конструкторы и деструкторы
- •Наследование
- •Полиморфизм
- •Визуальное программирование. Среда Делфи
- •Структура проекта. Модули
- •Компоненты. Его свойства и методы
- •Компиляция и сообщение компилятору
- •Линейный алгоритм в среде Делфи
- •20Иерархия классов в Делфи
- •Массивы
- •Создание и работа со списками
- •Управляющие компоненты
- •Переключатели зависимые и независимые
- •Контейнеры
- •Контейнеры. Формы модальные. Диалоговые окна
- •Классы exception
- •Создание главного меню
- •Типизированные файлы
- •Инструменты TabControl PageControl ToolBar CoolBar StatusBar
- •Динамическая структура
- •Форматы графических файлов
- •Основные типы бд. Создание бд
- •Компоненты для создания приложений бд
- •Создание вычисляемых полей и полей выбора
- •Навигационный способ доступа к данным
- •Способы фильтрации
- •Создание и обработка набора данных нескольких таблиц
- •Конструктор отчетов
Компоненты отображения текстовой информации
Строки. Строковые процедуры и функции
многострочного редактора для обработки строковых данных
Массивы
Массив (в некоторых языках программирования также таблица, ряд) — набор однотипных компонентов (элементов), расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу (индексам). В отличие от списка, массив является структурой с произвольным доступом.
Размерность массива — количество индексов, необходимое для однозначного доступа к элементу массива
Форма или структура массива — количество размерностей и размер (протяжённость) массива для каждой размерность, может быть представлен одномерным массивом.
В языке программирования APL массив является основным типом данных (при этом нуль-мерный массив называется скаляром, одномерный — вектором, двумерный — матрицей).
В ряде языков программирования, например, Лисп, JavaScript, PHP, Ruby применяются также ассоциативные массивы (или хэш-массивы), в которых элементы не обязательно являются однотипными, а доступ к ним не обязательно осуществляется по индексу.
type
TArrayType = array [0..9] of Integer; (* Объявления типа "массив" *)
var
arr1, arr2, arr3: TArrayType; (* Объявление трёх переменных-массивов одного типа *)
Динамическим называется массив, размер которого может меняться во время исполнения программы. Язык программирования, поддерживающий динамические массивы, должен предоставлять возможность для изменения размера массива. Динамические массивы делают работу с данными более гибкой, так как не требуют предварительного определения хранимых объёмов данных, а позволяют регулировать размер массива в соответствии с реальными потребностями. Обычные (не динамические) массивы называют ещё фиксированными.
byteArray : Array of Byte; // Одномерный массив
multiArray : Array of Array of string; // Многомерный массив
Создание и работа со списками
Помимо многострочного редактора, в Delphi, на той же закладке Standard палитры компонентов, располагаются еще 2 компонента, использующих списки строк для хранения своих значений. Это ListBox и ComboBox.
Простой список, представленный компонентом ListBox, представляет собой прямоугольную область, в которой располагаются его элементы – строки. Если строк в списке больше, чем может поместиться в отведенной области, то автоматически появляется полоса прокрутки.
Класс TListBox является наследником класса TWinControl и имеет собственные свойства, представленные в таблице 12.5.
Таблица 12.5. Основные свойства ListBox |
||
Свойство |
Тип |
Описание |
AutoComplete |
Boolean |
Определяет, должен ли список реагировать на нажатие клавиш таким образом, чтобы находить и выделить совпадающий элемент |
BorderStyle |
TBorderStyle |
Определяет, должна или нет быть рамка вокруг списка. Допустимые значения: bsNone, bsSingle |
Columns |
Integer |
Определяет количество колонок, видимых без горизонтальной прокрутки |
Count |
Integer |
Указывает на количество элементов списка |
ItemIndex |
Integer |
Определяет порядковый номер выбранного элемента, начиная с 0. Если не выбрано ни одного, то устанавливается в -1 |
Items |
TStrings |
Содержит строки списка |
MultiSelect |
Boolean |
Определяет, допустимо или нет производить множественный выбор |
SelCount |
Integer |
Указывает на количество выбранных элементов |
Selected |
array of Boolean |
Определяет, выбран или нет тот или иной элемент списка |
Sorted |
Boolean |
Определяет, должен ли список быть отсортирован |
TopIndex |
Integer |
Определяет порядковый номер элемента, который является самым верхним в видимой части списка |
Отдельное пояснение следует дать для свойства Columns. Дело в том, что если оно имеет значение, отличное от принятого по умолчанию нуля, то список становится не простым вертикальным, а многоколоночным, с горизонтальной прокруткой по колонкам для случая, если все элементы не умещаются на отведенной для списка области. Поэтому, в зависимости от того, какое значение имеет параметр Columns, один и тот же список может выглядеть совершенно по-разному (рис. 12.3).
Рис.
12.3. Влияние значения свойства Columns на
внешний вид списка
Двумерный Массив. Матрица Не буду путать вас сложными техническими обозначениями термина, я просто скажу простым языком. Пример массива – это шахматная доска. Снизу у нас буквы (A-B-C…), сбоку цифры (1-2-3…), каждый квадрат на поле задается двумя координатами, к примеру: E2, E4, G5. И на выбранном квадрате может стоять фигура, конь, ферзь, ладья, а может и не стоять вовсе. В программировании двумерный массив позволяет построить подобные схемы. Давайте рассмотрим пример, построим шахматную доску размером 3 на 3 ячейки и заполним несколько ячеек фигурами: Сначала мы создадим двумерный массив Delphi mas, имеющий по три ячейки (1..3), зададим ему тип string: var mas: array[1..3,1..3] of string; Теперь нам нужно заполнить все девять ячеек, “расставить фигуры” в каждую, для этого обратимся к каждой ячейке на прямую по ее адресу, как это делается в шахматах, к примеру ячейка 1-1 или 2-3, первая цифра – номер по горизонтали, вторая – по вертикали. Сделаем это так
mas[1,1]:='Ферзь'; mas[1,2]:='Пусто'; mas[1,3]:='Ладья'; ... mas[3,3]:='Пусто'; Теперь у нас есть поле из 9 ячеек, заполненное теми фигурами, которыми вы пожелаете. Двумерные массивы Delphi применяются для многих целей, это может быть база данных, с именами людей, номерами телефонов, должностями или еще какой-либо информацией, так же массивы чисел можно применять в играх для сохранения в памяти программы информацию об игроках, уровнях их здоровья, очках. Любой программист сам выбирает для каких целей он будет использовать массив, потому что он является одной из самых важных конструкций в программировании. Если кому будет интересно, то существует также двумерный динамический массив – его отличие заключается лишь в том, что значение его ячеек и, самое главное, количество этих самых ячеек изменяется по ходу выполнения программы.
МАТРИЦА
Как видите, в квадратных скобках перечислены через запятую размеры строк и столбцов. Заметьте, что мы объявили массив от 0 до 3 — это будет четыре элемента и от 0 до 4, что будет составлять 5 элементов.
Работа с таким массивом также достаточно простая
var
t:array[0..3, 0..4] of integer; begin
t[0][0]=1;
t[l][0]=2;
t[2] [0]=3;
t[3] [0]=4;
t[l][1] =5;
end;
После выполнения этого примера таблица примет вид:
1 0 0 0 0
2 5 0 0 0
3 0 0 0 0
4 0 0 0 0
Двумерность не предел, и вы можете создавать и трехмерные массивы. Давайте просто посмотрим на содержимое листинга 10.6, и вам все должно стать понятно.
var
t:array[0..3, 0..4, 0..2] of integer;
begin t[0][0][0]:=1;
t[l][0][0]:=2;
t [2] [0] [0] : =3;
t[3][0][0]:=4;
t[l][1][0]:=5;
end;
Использование массивов очень удобно, но иногда может оказаться излишне расточительным. Дело в том, что двумерный массив из 100x100 строк может "съесть" достаточно много оперативной памяти (100*100* на длину строки).
Да, в наше время о памяти мало кто заботится, но это ужасно, и ничего хорошего в этом нет.