Одномерные массивы: объявление, индексы, заполнение
Урок вводит понятие массива — структуры для хранения множества однотипных значений под одним именем — и учит заполнять и выводить его.
Массив — это пронумерованный набор ячеек одного типа, объединённых одним именем; к каждой ячейке обращаются по её номеру (индексу).
Зачем нужны массивы
Допустим, нужно хранить оценки 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 она всегда с нуля — не путайте.