Двовимірні масиви

 До двовимірних масивів належать масиви з фіксованої кількості рядків та стовпців. У мові Python нумерація рядків і стовпців двовимірного масиву починається з нуля. ці масиви називають ще таблицями або матрицями.

Значення двовимірного масиву записують у квадратних дужках, кожний рядок береться у квадратні дужки і відокремлюється від іншого рядка комою.

Наприклад:

m = [[1,2,3],[4,5,6],[7,8,9]]

або можна записати в стовпчик:

m = [[1,2,3],

[4,5,6],

[7,8,9]]

Порожній масив з n рядками і m стовпцями створюють так:
mas = []
for i in range (n):
mas.append ([0]*m)
або так: mas = [[0]*m for i in range (n)].
Звернення до елементу масиву прописують так: mas[n][m]
де n - рядок, m - стовпець, mas - назва масиву.

Введення масиву з клавіатури здійснюється за допомогою двох циклів:
for i in range(n):
for j in range(m):
a = int(input('Введіть число '))
mas[i][j] = a

Виведення масиву:

for i in range(n):
for j in range(m):
print(mas[i][j])
або:
print(mas)

Перший цикл - зовнішній виконує перехід на новий рядок, а другий - внутрішній цикл вводить або виводить значення елементів кожного стовпця певного рядка.
i - лічильник рядків
j - лічильник стовпців.
Масив також можна вводити методом обчислення його елементів.
Для цього ми створюємо пустий масив:
mas = [[0]*m for i in range (n)]
беремо лічильник циклів i = 0
Записуємо перший цикл:
for a in (5, 10, 12): - записуємо значення, які може набувати перша змінна a
j = 0 - беремо лічильник стовпців
for b in (7, 8, 9, 10): - записуємо значення, які може набувати друга змінна b
Далі записуємо значення виразу для обчислення елементів масиву:
x = 20*a+10*b
І заповнюємо масив:
mas[i][j] = x
Здійснюємо перехід на новий стовпець j = j+1
Здійснюємо перехід на новий рядок i = i+1
Друкуємо масив: print(mas)

Загалом програма код буде виглядати так:

mas = [[0]*4 for i in range(3)] i = 0 for a in (5, 10, 12): j = 0 for b in (7, 8, 9, 10): x = 20*a+10*b mas[i][j] = x j = j+1 i = i+1 print(mas)

Результат:
[[170, 180, 190, 200], [270, 280, 290, 300], [310, 320, 330, 340]]

Створення масиву за допомогою випадкових чисел:
import random
mas = [[0]*m for i in range(n)]
for i in range(n):
for j in range(m):
a = random.randint(початкове випадкове, кінцеве випадкове)
mas[i][j] = a
print(mas)

Запитання для перевірки знань
1. Як у мові Python нумеруються рядки і стовпці у двовимірному масиві?
- 1 і 2
- рядки mas, стовпці m
- i, j
2. Наведіть приклад числового двовимірного масиву розмірністю 2x2.
- [1, 2], [1, 2]
- [[3, 4],[5, 6]]
- [2, 2]
3. Як здійснюється звернення до елементів двовимірного масиву?
- mas[i][j]
- mas[i, j]
- mas[[m],[n]]
4. Які існують способи створення двовимірного масиву?
- введення з клавіатури, виведення випадкових чисел
- введення з клавіатури, виведення масиву і рядок
- введення з клавіатури, обчисленням виразу, за допомогою випадкових чисел
5. Поясніть сутність створення двовимірного масиву шляхом введення з клавіатури.
- записуємо два цикли, вводимо число і присвоюємо його елементу масиву
- записуємо цикл, вводимо число і присвоюємо його елементу масиву
- записуємо цикл, числу присвоюємо елементу масиву.
6. Як можна створити порожній двовимірний масив?
- записати цикл із нулем mas = [0]
- mas = [[0]*4 for i in range(3)]
- mas = [[0]*0 for i in range(n)]


Завдання з підручника Руденко Інформатика 9 клас 2022, для поглибленого вивчення.
Завдання 1. Розробіть код створення числового двовимірного масиву розмірністю 3×5, значеннями якого є цілі числа. Виведіть масив на екран.

# Завдання 1
mas = [[0]*5 for i in range(3)] for i in range(3): for j in range(5): a = int(input('Введіть число: ')) mas[i][j] = a for i in range(3): print() for j in range(5): print(mas[i][j], end=' ')

Результат:
Введіть число: 5 Введіть число: 4 Введіть число: 7 Введіть число: 8 Введіть число: 1 Введіть число: 2 Введіть число: 6 Введіть число: 3 Введіть число: 4 Введіть число: 1 Введіть число: 7 Введіть число: 2 Введіть число: 1 Введіть число: 7 Введіть число: 4 5 4 7 8 1 2 6 3 4 1 7 2 1 7 4

Завдання 2. Розробіть код створення двовимірного масиву розмірністю 2×4, елементами якого є назви таких річок України: Дніпро, Рось, Дністер, Прип’ять, Тетерів, Псел, Тиса, Десна. Виведіть масив на екран.

# Завдання 2
mas = [['Дніпро', 'Рось', 'Дністер', 'Прип"ять'], ['Тетерів', 'Псел', 'Тиса', 'Десна']] for i in range(2): print() for j in range(4): print(mas[i][j], end=' ')

Результат:
Дніпро Рось Дністер Прип"ять Тетерів Псел Тиса Десна

Завдання 3. Розробіть алгоритм створення двовимірного масиву розмірністю 3×4, елементами якого є цілі випадкові числа в діапазоні від 3 до 15, і виведення масиву на екран. Розробіть код реалізації алгоритму.

# Завдання 3
import random
mas = [[0]*4 for i in range(3)]
for i in range(3):
for j in range(4):
a = random.randint(3, 15)
mas[i][j] = a
print(mas)

Результат:
[[9, 13, 12, 15], [15, 15, 13, 11], [12, 13, 5, 12]]

Завдання 4. Розробіть алгоритм і код створення двовимірного масиву розмірністю 2×4, елементи якого набувають значень 5, 3, 9, 11, 8, 6, 13, 7, які вводяться з клавіатури. Виведіть масив на екран.

# Завдання 4
mas = [[0]*4 for i in range(2)] for i in range(2): for j in range(4): a = int(input('Введіть число: ')) mas[i][j] = a for i in range(2): print() for j in range(4): print(mas[i][j], end=' ')

Результат:
Введіть число: 5 Введіть число: 3 Введіть число: 9 Введіть число: 11 Введіть число: 8 Введіть число: 6 Введіть число: 13 Введіть число: 7 5 3 9 11 8 6 13 7

Завдання 5. Розробіть код алгоритму створення масиву розмірністю n×m, елементами якого є назви найбільших міст України за кількістю населення. Назви міст уводяться з клавіатури. Виведіть масив на екран.
Нехай масив буде 2x4. Візьмемо міста: Київ, Харків, Одеса, Дніпро, Запоріжжя, Львів, Миколаїв, Маріуполь

# Завдання 5
mas = [[0]*4 for i in range(2)] for i in range(2): for j in range(4): a = input('Введіть місто: ') mas[i][j] = a print(mas)

Результат:
Введіть місто: Київ Введіть місто: Харків Введіть місто: Одеса Введіть місто: Дніпро Введіть місто: Запоріжжя Введіть місто: Львів Введіть місто: Миколаїв Введіть місто: Маріуполь [['Київ', 'Харків', 'Одеса', 'Дніпро'], ['Запоріжжя', 'Львів', 'Миколаїв', 'Маріуполь']]

Завдання 6. Розробіть код алгоритму обчислення значення виразу:
в якому змінна a набуває значень 4, 6, 7, а змінна b — значень 1, 2, 3, 5, і створення двовимірного масиву розмірністю 3×4, елементами якого є отримані значення. Виведіть масив на екран.

# Завдання 6
import math mas = [[0]*4 for i in range(3)] i = 0 for a in (4, 6, 7): j = 0 for b in (1, 2, 3, 5): x = (math.sqrt(pow(a, 3) + 2*a*b))/(3*a -b) x = round(x, 1) mas[i][j] = x j = j+1 i = i+1 print(mas)

Результат:
[[0.8, 0.9, 1.0, 1.5], [0.9, 1.0, 1.1, 1.3], [0.9, 1.0, 1.1, 1.3]]

round(x, 1) - це округлення числа x. 1 - це кількість знаків після коми. Число x у нас округлюється до десятих.

Опрацювання значень елементів двовимірних масивів
До класичних алгоритмів відносяться: упорядкування значень рядків, стовпців, головної і побічної діагоналей, обчислення їх суми, визначення максимального і мінімального значень, обчислення кількості елементів, які відповідають певній умові.
Обчислення суми елементів по рядку:
Тут використовується метод накопичення суми. Перехід до нового рядка здійснюється в зовнішньому циклі, а обчислення суми елементів по рядку у внутрішньому циклі.
i - номер рядка
j - номер стовпця
s1 - сума всіх елементів
s2 - сума елементів по рядку

Розглянемо приклад:
mas = [[1,2,3,4], [5,6,7,8], [9,10,11,12]] s1 = 0 for i in range(3): s2 = 0 for j in range(4): s2 = s2 + mas[i][j] print('Сума ', i, 'рядка =', s2) s1 = s1 + s2 print('Повна сума =', s1)


Результат:
Сума 0 рядка = 10 Сума 1 рядка = 26 Сума 2 рядка = 42 Повна сума = 78


Обчислення суми кожного стовпця:
Сума обчислюється методом накопичення. У внутрішньому циклі знаходиться сума елементів одного стовпця, у зовнішньому - перехід на новий стовпець.
i - номер рядка
j - номер стовпця
s1 - сума всіх елементів
s2 - сума елементів по стовпцю

mas = [[1,2,3,4], [5,6,7,8], [9,10,11,12]] s1 = 0 for j in range(4): s2 = 0 for i in range(3): s2 = s2 + mas[i][j] print('Сума ', j, 'стовпця =', s2) s1 = s1 + s2 print('Повна сума =', s1)

Результат:
Сума 0 стовпця = 15 Сума 1 стовпця = 18 Сума 2 стовпця = 21 Сума 3 стовпця = 24 Повна сума = 78

Пошук мінімального та максимального по головній діагоналі:
Головна діагональ проходить від верхнього кута масиву у нижній правий кут. Тут розташовані елементи: m[0][0], m[1][1], m[2][2], і т.д. Спочатку нехай нульовий елемент є максимальним (мінімальним), а потім кожен елемент ми порівнюємо з цим елементом, якщо він більший (менший) то він буде максимальним (мінімальним) елементом. Процес аналогічний до пошуку максимального (мінімального) в одновимірних масивах.

Розглянемо приклад:
mas = [[1,2,3,4], [5,6,7,8], [9,10,11,12]] max = mas[0][0] min = mas[0][0] j = 1 for i in range(3): if mas[i][j] > max: max = mas[i][j] if mas[i][j] < min: min = mas[i][j] j = j+1 print('Максимальне =', max) print('Мінімальне =', min)

Результат:
Максимальне = 12 Мінімальне = 1

Знаходження суми елементів побічної діагоналі масиву:
Побічна діагональ може бути лише в масивах з однаковою кількістю рядків та стовпців. Проходить від лівого нижнього кута в правий верхній кут.
Зміст цього алгоритму: початкова сума s = 0, беремо елемент найбільшого номера рядка та 0 номера стовпця, додаємо до s:
s = s + mas[n][0], далі беремо рядок на 1 менше і стовпець на 1 більше, s = s + mas[n-1][1] і т.д.

Розглянемо приклад:
mas = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14.15,16]]
s = 0
i = 3
for j in range(4):
s = s + mas[i][j]
i = i - 1
print('Сума елементів побічної діагоналі = ', s)

Результат:
Сума елементів побічної діагоналі = 34

Знаходження кількості заданих значень у масиві:
Спочатку нехай кількість значень k= 0, переглядається один рядок, якщо значення зустрічається, то k збільшуємо, потім дивимось наступний рядок і т.д., до останнього.

Розглянемо приклад: Знайти кількість чисел 7 у масиві.
mas = [[1, 5, 6, 7], [1, 7, 8, 7]]
k = 0
a = 7
for i in range(2):
for j in range(4):
if mas[i][j] == a:
k = k + 1
print('k = ', k)

Результат: k = 3

Упорядкування рядків масиву:
У внутрішньому циклі упорядковуємо масив по рядку, у зовнішньому циклі здійснюємо перехід на новий рядок. Таким чином переглядаємо всі рядки.
Візьмемо масив з випадкових чисел 3x4 і впорядкуємо за спаданням чисел.

p - поточний номер правого крайнього стовпця, i - поточний номер рядка, j - поточний номер стовпця, m - поточний номер стовпця з мінімальним значенням елемента

import random
mas = [[0]*4 for i in range(3)]
for i in range(3):
for j in range(4):
a = random.randint(0, 20)
mas[i][j] = a
print('Початковий масив з випадкових чисел:')
print(mas)
for i in range(3):
p = 3
while p>0:
m = 0
for j in range(p+1):
if mas [i][j] < mas[i][m]:
m = j
x = mas[i][m]; mas[i][m] = mas[i][p]; mas[i][p] = x
p = p -1
print('Впорядкований масив:')
for i in range(3):
for j in range(4):
print(mas[i][j], end = ' ')
print()

Результат:
Початковий масив з випадкових чисел: [[12, 2, 0, 7], [7, 20, 14, 18], [16, 6, 14, 10]] Впорядкований масив: 12 7 2 0 20 18 14 7 16 14 10 6

Завдання для закріплення знань:


Завдання з підручника Руденко Інформатика 9 клас, для поглибленого вивчення 2022, с. 171 - 172.
Завдання 1. У масиві [[17, 12, 21, 4], [24, 19, 25, 9], [48, 15, 7, 11]] визначте рядок із мінімальною сумою його чисел.
# Завдання 1
mas = [[17, 12, 21, 4], [24, 19, 25, 9], [48, 15, 7, 11]]
m =[]
for i in range(3):
s = 0
for j in range(4):
s = s + mas[i][j]
print('Сума ', i, 'рядка =', s)
m.append(s)
print(m)
min = m[0]
for i in range(1,3):
if m[i] < min:
min = m[i]
print('min =', min)

Результат:
Сума 0 рядка = 54 Сума 1 рядка = 77 Сума 2 рядка = 81 [54, 77, 81] min = 54

Завдання 2. Визначте номери рядків і стовпців, у яких розташовані елементи з максимальним і мінімальним значенням у масиві [[15, 31, 29], [23, 24, 66], [43, 13, 26]].

# Завдання 2
mas = [[15, 31, 29], [23, 24, 66], [43, 13, 26]] max = mas[0][0] imi = 0 imj = 0 for j in range(0,3): for i in range(1,3): if mas[i][j] > max: max = mas[i][j] imi = i imj = j print('Максимальне =','рядок',imi,'стовпець', imj, max) min = mas[0][0] mini = 0 minj = 0 for j in range(0,3): for i in range(1,3): if mas[i][j] < min: min = mas[i][j] mini = i minj = j print('Мінімальне =','рядок', mini,'стовпець', minj, min)
або
mas = [[15, 31, 29], [23, 24, 66], [43, 13, 26]] max = mas[0][0] imi = 0 imj = 0 min = mas[0][0] mini = 0 minj = 0 for j in range(0,3): for i in range(1,3): if mas[i][j] > max: max = mas[i][j] imi = i imj = j if mas[i][j] < min: min = mas[i][j] mini = i minj = j print('Максимальне =','рядок',imi,'стовпець', imj, max) print('Мінімальне =','рядок', mini,'стовпець', minj, min)

Результат:
Максимальне = рядок 1 стовпець 2 66 Мінімальне = рядок 2 стовпець 1 13

Завдання 3. Розробіть алгоритм обчислення суми чисел головної діагоналі в масиві [[31, 19, 8, 15], [33, 52, 3, 17], [9, 17, 33, 8], [51, 19, 42, 7]] і код його реалізації.
Це потрібно знайти суму: s = 31+52+33+7 = 123

# Завдання 3
mas = [[31, 19, 8, 15], [33, 52, 3, 17], [9, 17, 33, 8], [51, 19, 42, 7]] s = 0 j = 0 for i in range(4): s = s + mas[i][j] j = j + 1 print('Сума елементів головної діагоналі = ', s)

Результат:
Сума елементів головної діагоналі = 123

Завдання 4. Дано назви озер України: Сасик, Ялпуг, Кагул, Кугурлуй, Катлабуг, Китай, Донузлав, Світязь, Молочне. Розробіть алгоритм створення масиву розміром 3×3, елементами якого є назви цих озер. Визначить назви озер, що розташовані на побічній діагоналі. Розробіть код реалізації алгоритму.

# Завдання 4
mas = [['Сасик', 'Ялпуг', 'Кагул'], ['Кугурлуй', 'Катлабуг', 'Китай'], ['Донузлав', 'Світязь', 'Молочне']]
i = 2 for j in range(3): a = mas[i][j] print(a, end = ' ') i= i - 1

Результат:
Донузлав Катлабуг Кагул

Завдання 5. Розробіть Розробіть код реалізації алгоритму створення масиву розміром n×m, елементами якого є цілі випадкові числа в діапазоні від 7 до 20. Упорядкуйте кожний рядок масиву в порядку збільшення чисел.

# Завдання 5
import random
mas = [[0]*4 for i in range(3)]
for i in range(3):
for j in range(4):
a = random.randint(7, 20)
mas[i][j] = a
print('Початковий масив з випадкових чисел:')
print(mas)
for i in range(3):
p = 3
while p>0:
m = 0
for j in range(p+1):
if mas [i][j] > mas[i][m]:
m = j
x = mas[i][m]; mas[i][m] = mas[i][p]; mas[i][p] = x
p = p -1
print('Впорядкований масив:')
for i in range(3):
for j in range(4):
print(mas[i][j], end = ' ')
print()

Результат:
Початковий масив з випадкових чисел: [[15, 19, 14, 18], [20, 8, 17, 10], [7, 20, 13, 19]] Впорядкований масив: 14 15 18 19 8 10 17 20 7 13 19 20

Завдання 6. Розробіть код реалізації алгоритму обчислення суми чисел кожного рядка масиву [[44, 29, 4, 9], [7, 51, 1, 20], [13, 54, 3, 21]] .

# Завдання 6
mas = [[44, 29, 4, 9], [7, 51, 1, 20], [13, 54, 3, 21]]
for i in range(3): s = 0 for j in range(4): s = s + mas[i][j] print('Сума ', i, 'рядка =', s)

Результат:
Сума 0 рядка = 86 Сума 1 рядка = 79 Сума 2 рядка = 91




Коментарі