Двовимірні масиви
До двовимірних масивів належать масиви з фіксованої кількості рядків та стовпців. У мові 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)]
Завдання 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
Коментарі
Дописати коментар