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