Sign in Join
Wiki copytemporary

Array/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Array/ru

OldNewLine
1+Тип **array** (массив) представляет собой последовательность однотипных [[Variable/ru|переменных]]. Примерами могут служить массивы [[Char/ru|символов]], [[Integer/ru|целых]] и [[Real/ru|вещественных]] чисел. Фактически, в массивах могут использоваться любые типы, включая определенные пользователем. Однако, элементы массива всегда являются однотипными. Элементы разных типов не могут быть сгруппированы в массив. Для этих целей необходимо использовать [[Record/ru|записи]].
2+
3+Массивы отражают идею таких математических понятий, как
4+
5+- [[vector/ru|векторы]] (одномерные массивы) и
6+- матрицы (двумерные массивы)
7+
8+## Статические массивы
9+
10+Объявление статического массива выполняется аналогично, как для простых типов, но при этом вам необходимо указать размерность массива (количество элементов) в виде диапазона значений, а также тип элементов.
11+
12+``` pascal
13+program
14+...
15+var
16+ variablename: array [startindex..endindex] of type;
17+begin
18+ ...
19+```
20+
21+Значение **startindex** должно быть меньше либо равно значению **endindex**. При этом оба значения должны быть целыми константами, либо целочисленными [[Const/ru|константными]] значениями. Допускается, если одно или оба значения будут отрицательными либо равными 0.
22+
23+### Одномерный массив
24+
25+Пример одномерного массива:
26+
27+``` pascal
28+type
29+ simple_integer_array = array [1..10] of integer;
30+
31+var
32+ Numbers: simple_integer_array;
33+```
34+
35+### Многомерный массив
36+
37+[[Multidimensional arrays/ru|Многомерные массивы]] объявляются аналогично одномерным, при этом каждая дополнительная размерность перечисляется через запятую (например \[x..y,z..t\] и т.д.)
38+
39+Пример многомерного массива:
40+
41+``` pascal
42+type
43+ more_complex_array = array [0..5,1..3] of extended;
44+
45+var
46+ specialmatrix: more_complex_array;
47+```
48+
49+## Динамические массивы
50+
51+Если заранее точно не известно необходимое количество элементов массива, то можно воспользоваться [[Dynamic array/ru|динамическим массивом]]. В процессе выполнения программы размер динамического массива можно увеличивать или уменьшать.
52+
53+## Доступ к элементам массива
54+
55+Для доступа к элементу массива вам необходимо указать индекс элемента в квадратных скобках (\[\]) после имени массива. После этого элемент массива можно использовать как обычную переменную.
56+
57+``` pascal
58+Var
59+ my_array : array[1..3] of Integer;
60+ my_matrix : array[1..5,1..5] of Integer;
61+ some_value : Integer;
62+...
63+begin
64+ my_array[2] := a + 2;
65+ my_matrix[2,3] := some_value;
66+ ...
67+ some_value := my_array[2];
68+ some_value := my_matrix[4,3];
69+end.
70+```
71+
72+## Массивы литералов
73+
74+Существует два способа, использующихся для массивов литералов, в зависимости от места их размещения. Вы можете проинициализировать статический массив в секции объявления переменных (для [[Dynamic array/ru|динамических массивов]] это сделать невозможно) с помощью последовательности значений, заключенных в *круглые скобки*. В блоке инструкций вы можете создать анонимный массив с помощью ряда значений, заключенных в *квадратные скобки*. Например:
75+
76+``` pascal
77+Var
78+ // инициализация статического массива типа integer с помощью массива литералов
79+ Numbers : array [1..3] of Integer = (1, 2, 3);
80+
81+procedure PrintArray(input : array of String);
82+var
83+ i : integer;
84+begin
85+ for i := 1 to length(input) do
86+ write(input[i - 1],' ');
87+ writeln;
88+end;
89+
90+begin
91+ Writeln( Numbers[2] );
92+ // создаем три элемента анонимного массива типа string с помощью массива литералов
93+ PrintArray( ['one', 'two', 'three'] );
94+end.
95+```
96+
97+На экран будет выведено:\
98+**2**\
99+**one two three**
100+
101+---
102+*From the Free Pascal wiki, page "Array/ru", as it stood on 2020-02-09 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history