For i:=0 to High(r)-1 do

r[i]:=i*i;

SetLength(r,20); for i:=10 to High(r)-1 do r[i]:=i*i;

for i:=0 to High(r) do ListBox1.Items.Add(IntToStr(i)+' в квадрате ='+IntToStr(r[i]));

Эта процедура выполняет похожие действия, но с небольшими особенностями. В начале я объявляю новый тип: TDynArr=array of integer. После этого конструкция r:TDynArr; будет означать, что r относится к типу TDynArr, а тот относится к array of integer; . Это тоже самое, что мы писали в первой процедуре r:array of integer; , только такая конструкция удобней, если ты захочешь объявить несколько динамических массивов. Тебе не приходится сто раз писать громоздкую строку r:array of integer; , ты объявляешь новый массив как TDynArr.

Далее идёт всё та же очистка строк и выделение памяти под массив.

for i:=0 to High(r)-1 do r[i]:=i*i;

Эта конструкция заполняет десять элементов квадратами числа i. После этого я снова вызываю функцию SetLength(r,20);, в которой говорю, что массив теперь будет состоять из 20-и элементов. Таким способом можно как увеличивать количество элементов, так и уменьшать.

for i:=10 to High(r)-1 do r[i]:=i*i;

Здесь я заполняю квадратами числа i элементы начиная с 10 по последний. И в конце я снова заполняю ListBox1 значениями элементов массива.

На компакт диске, в директорииПримерыГлава 10DynArraysты можешь увидеть пример этой программы.

 

10.2 Многомерные массивы.

ы уже разобрались с массивами, но пока это только одномерные массивы, в которых данные располагаются в виде строки. Для Delphi это не предел и он может работать и с несколькими измерениями массива.

Например, допустим, что тебе надо держать таблицу из данных. Таблица будет состоять из пяти колонок и четырёх строк. В этом случае ты можешь завести четыре массива, в каждом из которых будут храниться по 5 элементов. Но это же не солидно!!! Вот тут на встречу приходят многомерные массивы.

Объявляются такие массивы практически так же как и одномерные, разница только в том, что когда ты в квадратных скобках указываешь длину массива, нужно указывать размеры строк и столбцов данных.

Рассмотрим пример объявления двухмерного массива из четырёх строк и пяти столбцов:

var t:array[0..3, 0..4] of integer;

Как видишь, в квадратных скобках перечислены через запятую размеры строк и столбцов. Заметь, что я объявил массив от 0 до 3 – это будет четыре элемента и от 0 до 4, что будет 5 элементов.

Работа с таким массивом тоже достаточно простая:

var t:array[0..3, 0..4] of integer;

begin t[0][0]:=1; t[1][0]:=2; t[2][0]:=3; t[3][0]:=4; t[1][1]:=5;

end;

После выполнения этого примера наша таблица будет иметь вид:

1 5 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0

Двухмерность не предел и ты можешь создавать и 3-х мерные массивы. Давай молча посмотрим на следующий пример:

var t:array[0..3, 0..4, 0..2] of integer;

begin t[0][0][0]:=1; t[1][0][0]:=2; t[2][0][0]:=3; t[3][0][0]:=4; t[1][1][0]:=5;

end;

 

10.3 Работа с файлами.

этой части я познакомлю тебя, как можно работать с файлами. Мы научимся открывать их, записывать и читать из них данные, ну и, конечно же, закрывать.

Для работы с файлами многие предпочитают использовать WinAPI. Не пугайся этого слова, потому что работа с WinAPI в Delphi очень даже прозрачна и ты не ощутишь никаких проблем. Я тоже любил так работать, пока не нарвался на одну неприятность. В самых первых окнах для чтения из файла использовалась функция _lread. В Windows 95 появилась ReadFile. А сейчас рекомендуют использовать ReadFileEx, которая может работать с файлами большего размера. После каждого изменения функций WinAPI приходится переделывать весь код проги, потому что нет гарантии, что старые функции будут работать в новых версиях Windows.

Вот поэтому я стал использовать специализированный в Delphi объект TFileStream. Я и тебе советую делать это, потому что если Microsoft снова введёт какие-то нововведения, то Borland учтёт их в объекте и тебе нужно будет только перекомпилировать свои проги. Никаких изменений в код вносить не надо. Ты один раз изменяешь объект (или это делает Borland) и компилируешь все свои проги с новыми возможностями. И в любом случае, использование объекта намного проще.

Итак, давай взглянём на объект TFileStream. Для работы с ним, ты должен объявить какую-нибудь переменную типа TFileStream.