Массивы позволяют нам ссылаться на серию переменных с одинаковым именем и использовать число (индекс) для вызова отдельных элементов в этой серии. Массивы имеют как верхнюю, так и нижнюю границы, и элементы массива являются смежными в этих границах.
Элементами массива являются значения одного типа (строка, целое число, запись, пользовательский объект).
В Delphi существует два типа массивов: массив фиксированного размера, который всегда остается одинакового размера - статический массив - и динамический массив, размер которого может изменяться во время выполнения.
Статические массивы
Предположим, мы пишем программу, которая позволяет пользователю вводить некоторые значения (например, количество встреч) в начале каждого дня. Мы хотели бы сохранить информацию в списке. Мы могли бы назвать этот список Назначенияи каждый номер может быть сохранен как Встречи [1], Встречи [2] и так далее.
Чтобы использовать список, мы должны сначала объявить его. Например:
var Назначения: массив [0..6] из Integer;
объявляет переменную с именем Appointments, которая содержит одномерный массив (вектор) из 7 целочисленных значений. Учитывая это объявление, Appointments [3] обозначает четвертое целое значение в Appointments. Число в скобках называется индексом.
Если мы создадим статический массив но не присваивайте значения всем его элементам, неиспользуемые элементы содержат случайные данные; они похожи на неинициализированные переменные. Следующий код можно использовать для установки всех элементов в массиве Appointments на 0.
для k: = от 0 до 6 делать Назначения [k]: = 0;
Иногда нам нужно отслеживать связанную информацию в массиве. Например, чтобы отслеживать каждый пиксель на экране вашего компьютера, вам нужно обратиться к его координатам X и Y, используя многомерный массив для хранения значений.
С Delphi мы можем объявить массивы нескольких измерений. Например, следующий оператор объявляет двумерный массив 7 на 24:
var DayHour: массив [1..7, 1..24] из Real;
Чтобы вычислить количество элементов в многомерном массиве, умножьте количество элементов в каждом индексе. Переменная DayHour, объявленная выше, выделяет 168 (7 * 24) элементов в 7 строках и 24 столбцах. Чтобы извлечь значение из ячейки в третьей строке и седьмом столбце, мы использовали бы: DayHour [3,7] или DayHour [3] [7]. Следующий код может быть использован для установки всех элементов в массиве DayHour на 0.
для я: = от 1 до 7 сделать
для j: = от 1 до 24 до
DayHour [i, j]: = 0;
Динамические массивы
Вы можете не знать точно, насколько велик массив. Вы можете хотеть иметь возможность изменение размера массива во время выполнения. Динамический массив объявляет его тип, но не его размер. Фактический размер динамического массива может быть изменен во время выполнения с помощью SetLength процедура.
var Students: массив строк;
создает одномерный динамический массив строк. Декларация не выделяет память для студентов. Чтобы создать массив в памяти, мы вызываем процедуру SetLength. Например, учитывая объявление выше,
SetLength (Студенты, 14);
выделяет массив из 14 строк, проиндексированных от 0 до 13. Динамические массивы всегда индексируются целыми числами, всегда начиная с 0 до единицы, меньшей их размера в элементах.
Чтобы создать двумерный динамический массив, используйте следующий код:
var Matrix: массив массивов Double;
начать
SetLength (Matrix, 10, 20)
конец;
который выделяет пространство для двумерного массива двойных значений с плавающей точкой 10 на 20.
Чтобы удалить область памяти динамического массива, присвойте переменной массива значение nil, например:
Матрица: = ноль;
Очень часто ваша программа не знает во время компиляции, сколько элементов потребуется; это число не будет известно до времени выполнения. С помощью динамических массивов вы можете выделить только столько памяти, сколько требуется в данный момент времени. Другими словами, размер динамических массивов может быть изменен во время выполнения, что является одним из ключевых преимуществ динамических массивов.
В следующем примере создается массив целочисленных значений, а затем вызывается функция Copy для изменения размера массива.
вар
Vector: массив целых чисел;
k: целое число;
начать
SetLength (Vector, 10);
для k: = от низкого (вектор) до высокого (вектор)
Вектор [k]: = i * 10;
...
// теперь нам нужно больше места
SetLength (Vector, 20);
// здесь массив Vector может содержать до 20 элементов // (их уже 10) end;
Функция SetLength создает большой (или меньший) массив и копирует существующие значения в новый массив. Функции Low и High обеспечивают доступ к каждому элементу массива, не оглядываясь в коде на правильные значения нижнего и верхнего индексов.