В разделе теории «Введении в программирование» говорилось о существовании еще одного важного хранилища данных в языках программирования. Речь идет о массивах. Массивы во всех языках обозначают одно и то же — это наборы каких-то величин (не обязательно численных, но чаще всего — именно их), которые хранятся вместе и используются с общей целью. Например, в программе требуется обработать двести различных чисел — объемы партий некоторых товаров. Вместо того, чтобы использовать двести разных переменных (придется придумать двести разных имен), разумнее создать массив — объект, имеющий всего одно имя и адреса (индексы), которые позволят обращаться к каждому значению внутри него по-отдельности. Или к диапазону значений. Или ко всем значениям сразу. Попросту говоря, массивы — это удобно. Массивам присваиваются имена по тем же правилам, что и переменным. Массивы могут иметь несколько «измерений», но в ЕГЭ по информатике в заданиях на программирование вы столкнетесь только с одномерными массивами и, реже, двумерными.
Одномерные массивы
Одномерный массив — это просто последовательность каких-то данных.
Например, строк:
'раз', 'два', 'три', 'четыре', 'пять'
или чисел:
1, 2, 42, 645, -4
Каждое значение внутри массива называется элементом.
Одномерный массив имеет длину — это количество содержащихся в нем элементов. Длина каждого из приведенных выше массивов равна 5. Одномерный массив представляется как перечисленные через запятую элементы. У каждого элемента есть индекс, по которому можно однозначно определить элемент среди всех других. Индексы в массиве строго фиксированы — это целые положительные числа, начинающиеся с нуля (всегда). Элемент 'три' из первого примера имеет индекс 2, а элемент -4 из второго примера имеет индекс 4.
Самый простой способ создать массив на Python, это перечислить элементы через запятую в квадратных скобках:
# создали массив из пяти элементов
Чтобы обратиться к элементу массива, надо написать имя массива и индекс в квадратных скобках:
# будет напечатано число 645
В массив можно добавить элемент с помощью метода .append:
# в конец массива добавится 90
Любой существующий элемент массива можно изменить:
# элемент с индексом 1 станет равным 0
В итоге наш массив A будет выглядеть так: 1, 0, 42, 645, -4, 90
# Создаем новый массив, состоящий из 10 нулей
Если массив надо сделать очень большим, неплохо бы оптимизировать процесс его заполнения. Например, пускай требуется создать массив, состоящий из двухсот нулей. Для этого стоит использовать цикл, а внутри — повторяющееся событие (добавление элемента):
# создали пустой массив
# цикл выполнится 200 раз
# при каждом проходе к массиву будет добавляться 0
Таким образом можно заполнить массив не только нулями, но и последовательностью чисел, связанных с итерационной переменной. Например, нам нужно получить последовательность 1, 2, 3, …, 100. Для этого следует написать:
При помощи цикла удобно не только создавать, но и обрабатывать массив.
Пример.
Представим, что стоит задача найти и вывести квадраты всех положительных элементов массива. Пускай массив у нас уже есть (называется A), и мы знаем его длину (500). Решение задачи будет выглядеть следующим образом и состоять всего из трех строк:
Пример.
Пусть есть задача: создать массив из 30 элементов, найти сумму элементов, кратных 11, после чего заменить полученной суммой все те элементы, которые не кратны 11. Вывести все полученные элементы массива.
Двумерные массивы
Двумерные массивы — чуть более сложная конструкция, но и там все достаточно очевидно. Проще всего представить двумерный массив как таблицу. Например, так:
0 4 3 9
3 0 1 4
4 4 0 7
Сразу можно заметить две вещи: 1. для индексации в двумерном массиве потребуется два числа — одно для строки, другое для столбца; 2. двумерный массив — это своего рода массив из массивов. Второе соображение особенно имеет смысл для двумерных (да и скольки-угодно-мерных) массивов на Python. Двумерные массивы на Python создаются именно как массивы в массиве. Строки — это «внутренние» массивы, а столбцы возникают из-за того, что строки помещаются во «внешний» массив. Для приведенного выше примера синтаксис создания был бы следующим:
Обращение к элементу двумерного массива выполняется через указание индекса строки и столбца в квадратных скобках:
Этой строкой мы напечатали число 4 — этот элемент находится в строке с индексом два (третья по счету) и столбце с индексом 0 (первый по счету). Чтобы напечатать число 9, надо написать:
В общем и целом, с двумерными массивами можно делать все то же, что и с одномерными. Например, их так же удобно обрабатывать с помощью цикла for — но в этом случае уже потребуются два вложенных цикла (один будет «бегать» строкам, а второй — по элементам в строке).
Также можно создать двумерный массив из уже созданных одномерных:
Пример.
Допустим, надо создать двумерный массив 4x4, где каждый элемент равен разности индексов строки и столбца. Решение задачи следующее:
В итоге получим следующий двумерный массив:
[[0, -1, -2, -3], [1, 0, -1, -2], [2, 1, 0, -1], [3, 2, 1, 0]]
Пример.
Дан фрагмент программы:
Чему будет равно значение элемента двумерного массива С[4][3], если до выполнения этих команд С[4][3]=10?
Решение.
Нам надо найти C[4][3]. Давайте посмотрим на то, как считаются элементы массива в коде. С[n][m]=C[n][m] + (2 * n - m)
Разберём, что есть что. C[n][m] — значение номера строки (n) и столбца (m)
То есть, новое значение элемента считается, как старое значение плюс номер строки, умноженный на два, и минус номер столбца. То есть у нас есть всё необходимое, чтобы посчитать новое значение элемента C[4][3]: C[4][3] = 10 + 2 * 4 - 3 = 10 + 8 - 3 = 15
Ответ. 15.