Programowanie

Tablice dwuwymiarowe i macierze na maturze - Zrozum to raz a dobrze (Python i C++)

KI

KursInformatyka

Eksperci od przygotowania do matury z informatyki

18 min
Obraz główny artykułu: Tablice dwuwymiarowe i macierze na maturze - Zrozum to raz a dobrze (Python i C++)

Kiedy w arkuszu maturalnym pojawia się słowo "macierz" albo "piksele na ekranie", wielu uczniów wpada w panikę. Zupełnie niepotrzebnie! Macierz to matematyczna nazwa na coś, co doskonale znasz z życia codziennego: arkusz w Excelu, planszę do statków, szachownicę, czy układ ławek w klasie. To po prostu tablica dwuwymiarowa (2D) – czyli taka, która ma wiersze (poziome) i kolumny (pionowe).

Na maturze zadania z tablic 2D (np. symulacja automatu komórkowego typu "Gra w Życie", przekształcanie obrazków, czy analiza labiryntu) pojawiają się niezwykle często. Zrozumienie, jak się po nich poruszać, to darmowe punkty. Zaczynamy od absolutnych podstaw.

1. Współrzędne: Wiersz czy Kolumna? (Najważniejsza zasada)

W matematyce szkolnej na wykresie najpierw podajemy x (poziom), a potem y (pion). W informatyce, przy tablicach dwuwymiarowych, zazwyczaj jest na odwrót!

Tablica[Y][X] - zapamiętaj to na zawsze!

Większość tablic 2D w kodzie obsługujemy jako tablica[wiersz][kolumna]. Wiersz (z ang. row) to nasza współrzędna Y (idąca z góry na dół), a kolumna (z ang. col) to nasza współrzędna X (idąca od lewej do prawej). Jeśli chcesz pobrać element, najpierw mówisz "w której jest linii", a potem "który to element w tej linii".

2. Tworzenie (inicjalizacja) tablicy 2D

Zanim zaczniemy cokolwiek liczyć, musimy utworzyć pustą tablicę o wymiarach N x M (gdzie N to liczba wierszy, a M to liczba kolumn) i wypełnić ją np. zerami.

Python: Pułapka referencji!

W Pythonie tablicę 2D robimy jako "listę list". Każdy wiersz to osobna lista, a cała tablica to lista zawierająca te wiersze.

# ZŁY SPOSÓB (Pułapka na maturze!)
# Wiele osób pisze tak, by stworzyć tablicę 3x3 wypełnioną zerami:
zla_tablica = [[0] * 3] * 3

# Dlaczego to błąd? Bo Python nie kopiuje wierszy, tylko tworzy 3 odnośniki do TEGO SAMEGO wiersza!
# Jeśli zmienisz zla_tablica[0][0] = 5, zmienią się też elementy w pozostałych wierszach!

# DOBRY SPOSÓB (Używaj List Comprehension)
N_wierszy = 3
M_kolumn = 4
dobra_tablica = [[0 for _ in range(M_kolumn)] for _ in range(N_wierszy)]

dobra_tablica[0][0] = 5 # Zmieni się tylko jeden element. Bezpieczne i pewne!
python

C++: Klasyczna tablica vs Vector

W C++ możemy użyć klasycznej tablicy statycznej (jeśli z góry znamy rozmiar, np. 100x100) lub, co bezpieczniejsze i polecane, zagnieżdżonego wektora.

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int N_wierszy = 3;
    int M_kolumn = 4;
    
    // Sposób 1: Tablica statyczna globalna (wymiary muszą być znane przed kompilacją)
    // W C++ globalne tablice same wypełniają się zerami.
    // int tab_stat[100][100]; 
    
    // Sposób 2: Vector (Dynamiczny, bezpieczniejszy, polecany na maturze)
    // Tworzymy wektor o rozmiarze N_wierszy, gdzie każdy element to wektor o rozmiarze M_kolumn wypełniony zerami.
    vector<vector<int>> tablica(N_wierszy, vector<int>(M_kolumn, 0));
    
    tablica[0][0] = 5;
    return 0;
}
cpp

3. Poruszanie się po macierzy: Magia dwóch pętli (O(N*M))

Aby odwiedzić każdy element (np. w celu wypisania go na ekran lub zsumowania), potrzebujemy dwóch pętli for - jednej wewnątrz drugiej. Zewnętrzna pętla zazwyczaj odpowiada za wiersze (przechodzimy linię po linii), a wewnętrzna przesuwa się po kolumnach (od lewej do prawej).

Kod - Python (Klasyczne przejście i ładne wypisywanie)

# Definiujemy funkcję pomocniczą WYŻEJ, aby utrzymać czystą strukturę kodu
def wypisz_macierz(macierz):
    for wiersz in range(len(macierz)):
        for kolumna in range(len(macierz[wiersz])):
            # Z end=" " wypisujemy w jednej linii, oddzielając spacją
            print(macierz[wiersz][kolumna], end=" ")
        # Po zakończeniu wiersza (wewnętrznej pętli), robimy enter (nową linię)
        print()

# --- Główny program ---
moja_macierz = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

print("Oto macierz:")
wypisz_macierz(moja_macierz)
python

Zrozum to wizualnie

Pętle działają jak skaner w drukarce. Zewnętrzna pętla ustawia głowicę na wierszu nr 0. Wewnętrzna pętla przesuwa głowicę w prawo (kolumna 0, 1, 2). Kiedy wewnętrzna pętla się skończy, zewnętrzna przeskakuje na wiersz nr 1 i znowu skanuje od lewej do prawej. To najczęstszy i najbardziej intuicyjny wzorzec.

4. Maturalne klasyki: Przekątne i Sąsiedzi

Jeśli zadanie dotyczy macierzy kwadratowej (tyle samo wierszy co kolumn, N x N), prawie na pewno spotkasz się z operacjami na przekątnych (diagonals). Nie potrzebujesz do tego dwóch pętli!

Główna Przekątna

Idzie z lewego górnego rogu do prawego dolnego. Jej cechą charakterystyczną jest to, że współrzędna wiersza jest równa współrzędnej kolumny (wiersz == kolumna lub i == j). Zamiast dwóch pętli, użyj jednej:

def suma_glownej_przekatnej(macierz, N):
    suma = 0
    for i in range(N):
        suma += macierz[i][i] # Bierzemy [0][0], [1][1], [2][2]...
    return suma
python

Przekątna Poboczna (Anty-przekątna)

Idzie z prawego górnego rogu do lewego dolnego. Jej cechą jest to, że suma indeksów wynosi N - 1 (czyli wiersz + kolumna = N - 1, z czego wynika, że kolumna = N - 1 - wiersz).

int suma_pobocznej_przekatnej(const vector<vector<int>>& macierz, int N) {
    int suma = 0;
    for(int i = 0; i < N; i++) {
        int j = N - 1 - i;
        suma += macierz[i][j];
    }
    return suma;
}
cpp

Badanie sąsiadów elementu (Sprawdzanie granic!)

Uważaj na Index Out of Bounds

W zadaniach typu 'Gra w Życie' lub 'Wypełnianie obszaru', musisz sprawdzić pola obok konkretnego punktu (góra, dół, lewo, prawo). Największym błędem jest sprawdzanie sąsiada dla elementu na brzegu tablicy (np. sąsiada po lewej dla elementu w kolumnie 0). Program wysypie się błędem wyjścia poza tablicę! Zawsze dodawaj instrukcje if sprawdzające, czy nie wychodzisz za granicę.

5. Przykładowe zadanie maturalne z rozwiązaniem

Zadanie: Wiersz o największej sumie

Treść: Dana jest macierz z liczbami całkowitymi. Znajdź indeks wiersza, którego suma elementów jest największa, oraz wypisz tę sumę.

Rozwiązanie w Pythonie

# Zgodnie z dobrymi praktykami, małe funkcje logiki wyrzucamy nad blok główny
def suma_elementow_w_linii(lista_liczb):
    suma = 0
    for liczba in lista_liczb:
        suma += liczba
    return suma

# --- Główny program ---
macierz = [
    [1, 5, 2],
    [8, 1, 1],
    [3, 4, 4]
]

max_suma = -1
najlepszy_wiersz = -1

# Przechodzimy przez wszystkie wiersze z ich indeksem (i)
for i in range(len(macierz)):
    # Pobieramy cały wiersz i liczymy jego sumę naszą funkcją
    aktualny_wiersz = macierz[i]
    suma_wiersza = suma_elementow_w_linii(aktualny_wiersz)
    
    # Jeśli znaleźliśmy nową największą sumę, aktualizujemy zmienne
    if suma_wiersza > max_suma:
        max_suma = suma_wiersza
        najlepszy_wiersz = i

print(f"Największa suma to {max_suma} w wierszu nr {najlepszy_wiersz}.")
# Wynik: Największa suma to 11 w wierszu nr 2.
python

Podsumowanie - Twoja maturalna ściągawka

  1. Słowo macierz = Tabela 2D. Nie daj się przestraszyć terminologii.
  2. Kolejność współrzędnych: Pamiętaj, że w programowaniu to najczęściej tablica[Y][X], czyli tablica[wiersz][kolumna].
  3. Python - bezpieczne tworzenie: Zapomnij o mnożeniu list [[0]N]M. Zawsze używaj list comprehension: [[0 for _ in range(kolumny)] for _ in range(wiersze)].
  4. Dwie pętle to norma: Przejście po całej strukturze zawsze będzie wymagać zewnętrznej pętli dla wierszy i wewnętrznej dla kolumn. Złożoność takiego operowania to O(N x M).
  5. Przekątne: Jeśli badasz przekątne w macierzy kwadratowej, wystarczy Ci tylko jedna pętla for i in range(N).

Zrozumienie jak działa indeksowanie w dwóch wymiarach to kamień węgielny do dziesiątek innych, bardziej skomplikowanych algorytmów (np. szukania ścieżek w labiryntach BFS-em). Poćwicz tworzenie tablic na sucho, a na egzaminie zrobisz to z zamkniętymi oczami.

Chcesz przećwiczyć to na prawdziwych zadaniach ze starych arkuszy? Odwiedź nasz kurs do matury z informatyki.

Tagi:

matura
informatyka
tablice dwuwymiarowe
macierze
python
c++
programowanie
algorytmy

Udostępnij artykuł:

KI

O autorze: KursInformatyka

Zespół ekspertów specjalizujących się w przygotowaniu do matury z informatyki. Pomagamy uczniom osiągnąć wymarzony wynik na egzaminie.

Zobacz wszystkie artykuły

Bądź na bieżąco

Zapisz się do newslettera i otrzymuj najnowsze artykuły, porady i materiały prosto na swoją skrzynkę.

Twoje dane są bezpieczne. Możesz wypisać się w każdej chwili.