Одномерные массивы: объявление, индексы, заполнение

Урок вводит понятие массива — структуры для хранения множества однотипных значений под одним именем — и учит заполнять и выводить его.

Массив — это пронумерованный набор ячеек одного типа, объединённых одним именем; к каждой ячейке обращаются по её номеру (индексу).

Зачем нужны массивы

Допустим, нужно хранить оценки 30 учеников. Заводить 30 переменных — ocenka1, ocenka2, ... ocenka30 — кошмар: их не перебрать в цикле, не обработать единообразно. Нужна структура, которая хранит много значений вместе и позволяет обращаться к ним по номеру. Это и есть массив.

Представьте поезд: один состав (имя массива), много пронумерованных вагонов (элементы), в каждом — пассажир (значение). Зная номер вагона, вы мгновенно находите нужного пассажира. Массив устроен так же: одно имя, множество ячеек, доступ по номеру-индексу. Именно массивы в связке с циклами позволяют обрабатывать большие объёмы данных — это фундамент почти всех серьёзных алгоритмов.

Объявление массива

Массив объявляют в разделе var, указывая диапазон индексов и тип элементов:

var
  a: array[1..5] of integer;   // 5 целых чисел, индексы от 1 до 5
  temps: array[1..7] of real;  // 7 дробных чисел (температуры за неделю)

Запись array[1..5] of integer читается так: «массив с индексами от 1 до 5, элементы — целые числа». Диапазон 1..5 задаёт, сколько ячеек и как они пронумерованы. В школе чаще всего нумеруют с 1 — так привычнее. После объявления у нас есть пять ячеек: a[1], a[2], a[3], a[4], a[5].

Часто размер задают через константу, чтобы менять его в одном месте:

const
  N = 5;
var
  a: array[1..N] of integer;

Обращение к элементам по индексу

Чтобы прочитать или изменить конкретную ячейку, указывают имя массива и индекс в квадратных скобках:

begin
  a[1] := 10;          // в первую ячейку кладём 10
  a[2] := 25;
  a[3] := a[1] + a[2]; // в третью — сумму первых двух (35)
  writeln(a[3]);       // печатаем третий элемент
end.

Элемент массива a[i] ведёт себя как обычная переменная: его можно читать, менять, использовать в выражениях. Главное — индекс должен попадать в объявленный диапазон. Обращение к a[6] в массиве на 5 элементов — ошибка «выход за границы массива», одна из самых частых. В Python массивы (списки) нумеруются с нуля, что важно помнить при сравнении:

a = [0] * 5          # список из 5 нулей, индексы 0..4
a[0] = 10
a[1] = 25
a[2] = a[0] + a[1]
print(a[2])

Вывод:

35

Запомните различие: в классическом Паскале мы сами выбираем нумерацию (обычно с 1), а в Python она всегда с 0. Это частый источник путаницы при переходе между языками.

Заполнение массива в цикле

Главная сила массива раскрывается в паре с циклом for: счётчик цикла становится индексом, и мы обрабатываем все ячейки единообразно. Заполним массив квадратами чисел:

var
  a: array[1..5] of integer;
  i: integer;
begin
  for i := 1 to 5 do
    a[i] := i * i;        // a[1]=1, a[2]=4, a[3]=9, a[4]=16, a[5]=25
end.

На каждом шаге i пробегает индексы от 1 до 5, и мы заполняем соответствующую ячейку. Так же массив заполняют вводом с клавиатуры (readln(a[i])) или случайными числами (a[i] := random(100)).

Вывод массива

Вывести все элементы — тоже работа для цикла:

a = [0] * 6   # используем индексы 1..5, нулевой не трогаем
for i in range(1, 6):
    a[i] = i * i
for i in range(1, 6):
    print('a[' + str(i) + '] =', a[i])

Вывод:

a[1] = 1
a[2] = 4
a[3] = 9
a[4] = 16
a[5] = 25

Чтобы вывести элементы в строку через пробел, используют write(a[i], ' ') в цикле, а после цикла — пустой writeln для перехода на новую строку.

Попробуй сам

Создайте массив из 6 элементов, заполните его числами 10, 20, 30, 40, 50, 60 в цикле (a[i] := i * 10), затем выведите их в обратном порядке, используя цикл с downto. Проверьте логику на Python:

a = [0] * 7
for i in range(1, 7):
    a[i] = i * 10
for i in range(6, 0, -1):
    print(a[i], end=' ')
print()

Вывод:

60 50 40 30 20 10 

Частые ошибки

  • Выход за границы массива. Обращение к индексу вне объявленного диапазона (a[0] или a[6] в массиве 1..5) вызывает ошибку. Следите, чтобы цикл шёл точно по границам массива.
  • Путаница нумерации с Python. В Паскале диапазон вы задаёте сами, в Python — всегда с 0. Не переносите чужую нумерацию вслепую.
  • Забыли объявить счётчик. Переменная-индекс i должна быть объявлена как integer в разделе var.
  • Обращение к массиву без индекса. writeln(a) для всего массива в классике не работает — выводят поэлементно в цикле.

Итоги

  • Массив хранит набор однотипных значений под одним именем; к каждому обращаются по индексу в квадратных скобках.
  • Объявление: array[нижняя..верхняя] of тип; в школе обычно нумеруют с 1.
  • Массив и цикл for — неразлучная пара: счётчик становится индексом, и все элементы обрабатываются единообразно.
  • Индекс обязан попадать в объявленный диапазон, иначе — ошибка выхода за границы.
  • В Паскале нумерацию выбираете вы, в Python она всегда с нуля — не путайте.
Проверьте себя
1. Как объявить массив из 10 целых чисел с индексами от 1 до 10?
Avar a: integer[10];
Bvar a: array[1..10] of integer;
Cvar a: array of 10 integer;
Dvar a: int[1..10];
2. Как обратиться к третьему элементу массива a?
Aa(3)
Ba.3
Ca[3]
Da{3}
3. Что произойдёт при обращении к a[6] в массиве array[1..5]?
AВернётся последний элемент
BВернётся ноль
CВозникнет ошибка выхода за границы массива
DМассив автоматически расширится
Поддержать проект