Array/ru

From Free Pascal wiki

Deutsch (de) English (en) español (es) suomi (fi) français (fr) Bahasa Indonesia (id) 日本語 (ja) русский (ru)

Тип array (массив) представляет собой последовательность однотипных переменных. Примерами могут служить массивы символов, целых и вещественных чисел. Фактически, в массивах могут использоваться любые типы, включая определенные пользователем. Однако, элементы массива всегда являются однотипными. Элементы разных типов не могут быть сгруппированы в массив. Для этих целей необходимо использовать записи.

Массивы отражают идею таких математических понятий, как

  • векторы (одномерные массивы) и
  • матрицы (двумерные массивы)

Статические массивы

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

program
...
var 
  variablename: array [startindex..endindex] of type;
begin
  ...

Значение startindex должно быть меньше либо равно значению endindex. При этом оба значения должны быть целыми константами, либо целочисленными константными значениями. Допускается, если одно или оба значения будут отрицательными либо равными 0.

Одномерный массив

Пример одномерного массива:

type
  simple_integer_array = array [1..10] of integer;
 
var
  Numbers: simple_integer_array;

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

Многомерные массивы объявляются аналогично одномерным, при этом каждая дополнительная размерность перечисляется через запятую (например [x..y,z..t] и т.д.)

Пример многомерного массива:

type
  more_complex_array = array [0..5,1..3] of extended;
 
var
  specialmatrix: more_complex_array;


Динамические массивы

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

Доступ к элементам массива

Для доступа к элементу массива вам необходимо указать индекс элемента в квадратных скобках ([]) после имени массива. После этого элемент массива можно использовать как обычную переменную.

Var
   my_array   : array[1..3] of Integer;
   my_matrix  : array[1..5,1..5] of Integer;
   some_value : Integer;
...
begin
   my_array[2]    := a + 2;
   my_matrix[2,3] := some_value;
   ...
   some_value := my_array[2];
   some_value := my_matrix[4,3];
end.

Массивы литералов

Существует два способа, использующихся для массивов литералов, в зависимости от места их размещения. Вы можете проинициализировать статический массив в секции объявления переменных (для динамических массивов это сделать невозможно) с помощью последовательности значений, заключенных в круглые скобки. В блоке инструкций вы можете создать анонимный массив с помощью ряда значений, заключенных в квадратные скобки. Например:

Var
   // инициализация статического массива типа integer с помощью массива литералов
   Numbers : array [1..3] of Integer = (1, 2, 3);
   
procedure PrintArray(input : array of String);
var 
   i : integer;
begin
    for i := 1 to length(input) do
       write(input[i - 1],' ');
    writeln;
end;

begin
    Writeln( Numbers[2] );
    // создаем три элемента анонимного массива типа string с помощью массива литералов
    PrintArray( ['one', 'two', 'three'] );
end.

На экран будет выведено:
2
one two three

Типы данных
Простые типы Boolean | Byte | Cardinal | Char | Currency | Extended | Int64 | Integer | Longint | Pointer | Real | Shortint | Smallint | Word
Сложные типы Array | Class | Record | Set | String | Shortstring