Создаём одномерный массив в Delphi
Массив это, очень интересный и полезный способ организации однотипных данных в программе. Так, если мы оперируем некоторым количеством однотипных переменных, их иногда бывает очень удобно представить в виде массива данных, помещенных в одну единственную переменную.
В этом плане массив подобен русской матрешке, только каждая однотипная матрешка находящаяся внутри, называется элементом массива и имеет собственный числовой индекс. По этому индексу ее можно легко найти, отличить от других, поместить в нее или наоборот извлечь какие либо данные.
В общем иногда для понимания лучше рассмотреть ряд примеров, чем разбираться в дебрях теории. Рассмотрим рисунок ниже…
Здесь представлен одномерный массив — a, переменных типа Integer, где в каждой конкретной коробочке (переменной) содержится соответствующее значение, в первой -10, во второй 20, в третьей 30 и т.д. Значениями этими можно оперировать, изменять, сравнивать, проводить над ними арифметические операции и прочее… Допустим нам нужно сложить содержимое первой и четвертой коробок, а результат поместить в третью. Для этого обращаемся к их содержимому через индексы, итак наше сложение будет выглядеть, следующим образом:
a[3]:=a[1]+a[4];
Рассмотрим теперь основные правила работы с массивами данных. Для начала нам нужно объявить то, что мы имеем дело с массивом переменных.
Делается это соответствующей записью в разделе type или чаще всего в разделе var:
1 2 |
var a: array[1..5] of Integer; |
Здесь a: — наша переменная, array и of — специальные зарезервированные слова, array — в переводе на русский означает -«массив» и указывает на то что, объявляется массив данных, of — указывает на принадлежность массива к данным определенного типа, после него обычно указывается тип помещенных в него данных, в нашем случае это Integer, хотя можно указывать и String и Char и другие типы данных. А цифры через две точки друг от друга в квадратных скобках [1..5] означают размер массива — количество переменных или констант содержащих данные, в нашем случае указан размер от 1 до 5 ти. А вообще нумерация массивов может начинаться с нуля.
Итак мы научились объявлять массивы, попробуем теперь поработать с содержащимися в них данными. Давайте напишем такую программу, чтобы пользователь вводя в Edit номера с 1 по 12, по нажатию кнопки получал в Label, название месяца, соответствующего введенному числу.
Для этого:
1) Помещаем на форму компоненты Label Edit и Button;
2) Очищаем свойство Caption у Label и свойство Text у Edit, а в свойстве Caption у Button пишем слово: — Рассчитать
3) В разделе var листинга, объявляем переменные и массив:
1 2 |
b: Integer; a: array [1..12] of string; |
4) Cоздаем собственную функцию, и назовем ее number, для этого в разделе private листинга пишем:
1 |
function number:Integer; и нажимаем клавиши Ctrl+Shift+C; |
5) B разделе между begin и end сгенерированного программой кода для функции function TForm1.number: Integer; записываем:
1 2 3 4 5 6 7 8 9 10 11 12 |
If Edit1.Text = IntToStr(1) then b:=1; If Edit1.Text = IntToStr(2) then b:=2; If Edit1.Text = IntToStr(3) then b:=3; If Edit1.Text = IntToStr(4) then b:=4; If Edit1.Text = IntToStr(5) then b:=5; If Edit1.Text = IntToStr(6) then b:=6; If Edit1.Text = IntToStr(7) then b:=7; If Edit1.Text = IntToStr(8) then b:=8; If Edit1.Text = IntToStr(9) then b:=9; If Edit1.Text = IntToStr(10) then b:=10; If Edit1.Text = IntToStr(11) then b:=11; If Edit1.Text = IntToStr(12) then b:=12; |
Эта функция, когда мы ее вызовем присвоит переменной b значение от 1-12 введенное пользователем.
6) Создаем обработчик событий OnClick на кнопке и записываем следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
begin // Присваиваем массиву названия месяцев a[1]:= 'Январь'; a[2]:= 'Февраль'; a[3]:= 'Март'; a[4]:= 'Апрель'; a[5]:= 'Май'; a[6]:= 'Июнь'; a[7]:= 'Июль'; a[8]:= 'Август'; a[9]:= 'Сентябрь'; a[10]:='Октябрь'; a[11]:='Ноябрь'; a[12]:='Декабрь'; //Вызываем нашу функцию, то есть переменную b, //c уже присвоенным пользователем значением number; //И подставляем ее в качестве индекса, для вызова в Label из массива, //соответствующего значения месяца label1.Caption:=a[b]; end; |
7) Запускаем проект, и если вы выполнили в точности все, как предлагается в статье, то после ввода целого числа от 1-12, по нажатию кнопки, Label будет отображать название месяца соответствующее введенному числу.
Но это еще не все. В этом примере да и вообще, массивы можно объявлять не только как переменные, но и как константы, в таком случае синтаксис объявления массива будет немного отличаться. Возьмем наш последний пример и представим массив для хранения названий месяцев — константами.
Делается это так:
1 2 3 |
const a: array[1..12] of String = ('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'); |
После описания размерности и типа, ставим знак равенства и в скобках по порядку перечисляем значения для массива. И вот здесь нужно быть крайне внимательным, поскольку количество указанное в размерности [1..12] строго должно быть равно количеству присваиваемых значений. Если это условие не выполнится, то выскочит ошибка.