Язык программирования Delphi Динамические массивы:
Мы снова возвращаемся к Delphi. Я уже рассказал тебе достаточно много начальных знаний, поэтому я больше не буду размусоливать каждую строчку. Начиная с этого номера, я буду давать тебе пример и объяснять, что в нём происходит. Забирай исходники здесь, и давай посмотрим, что происходит внутри.
Рис 1. Форма
Цель это примера научить тебя работать с динамическими массивами, ты будешь встречаться с ними постоянно, поэтому я решил уделить этому внимание уже сейчас. Рассмотрим первую процедуру:
var
r:array of integer;
i:Integer;
begin
ListBox1.Items.Clear;
SetLength(r,10);
for i:=0 to High(r) do
begin
r[i]:=i*i;
ListBox1.Items.Add(IntToStr(i)+' в квадрате ='+IntToStr(r[i]));
end;
Эта процедура вызывается по нажатии первой кнопки. В области объявлений VAR я объявил две переменные. Первая это r которая является массивом чисел типа Integer. Вторая i это переменная, которую я буду использовать в качестве счётчика. Переходим к самой процедуре:
Первая строка очищает все строки у ListBox1. Для этого вызывается процедура ListBox1.Items.Clear. Объясню подробней. У ListBox1 есть свойство Items, где хранятся все строки. У Items есть метод Clear, который удаляет все находящиеся в нём строки.
Во второй строке вызывается процедура SetLength, которая выделила память для массива r (первый параметр), размером в 10 элементов (второй параметр). Обращение к элементом будет происходить как r[номер_элемента]. Элементы будут нумероваться от 0 до 9. Вообще, в программировании всё нумеруется с нуля.
Далее используется конструкция:
for выражение1 to выражение2 do
begin
end;
Эта конструкция создаёт цикл выполняя операторы между Begin и End, "Выражение2" - "Выражение1" количество раз. Функция High(r) возвращает количество элементов в массиве r. В итоге получается, что цикл будет выполняться от i:=0 (от нуля), до количества элементов в массиве r (до 9). Внутри массива выполняется две строки:
r[i]:=i*i . Здесь i-му элементу массива присваивается i*i.
ListBox1.Items.Add(IntToStr(i)+' в квадрате ='+IntToStr(r[i])); Эта строка добавляет новый элемент в ListBox1. Функция IntToStr переводит число в строку.
С первой процедурой мы разобрались, теперь перейдём ко второй:
type
TDynArr=array of integer;
var
r:TDynArr;
i:Integer;
begin
ListBox1.Items.Clear;
SetLength(r,10);
for i:=0 to High(r) do
r[i]:=i*i;
SetLength(r,20);
for i:=10 to High(r) 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) do
r[i]:=i*i;
Эта конструкция заполняет десять элементов квадратами числа i. После этого я снова вызываю функцию SetLength(r,20);, в которой говорю, что массив теперь будет состоять из 20-и элементов. Таким способом можно как увеличивать количество элементов, так и уменьшать.
for i:=10 to High(r) do
r[i]:=i*i;
Здесь я заполняю квадратами числа i элементы начиная с 10 по последний. И в конце я снова заполняю ListBox1 значениями элементов массива.
Теперь о том, как я изменил иконку для программы. Для того, чтобы изменить иконку для формы нужно дважды щёлкнуть в Object Inspector по свойству Icon и выбрать любую.
Для изменения иконки программы нужно щёлкнуть по меню Project и выбрать пункт Option . В появившемся окне выбрать закладку Application и на этой странице нажать кнопку Load Icon .