Matura

Rozwiązania Matury z Informatyki 2026 (Maj) - Krok po kroku

KI

KursInformatyka

Eksperci od przygotowania do matury z informatyki

45 min
Obraz główny artykułu: Rozwiązania Matury z Informatyki 2026 (Maj) - Krok po kroku

Czas trwania egzaminu wynosił 210 minut, a do uzyskania było maksymalnie 50 punktów. Poniżej znajdziesz pełne rozwiązania wszystkich 8 zadań z arkusza CKE z 14 maja 2026 r. Każdy podpunkt omawiamy krok po kroku, z gotowym kodem i odpowiedziami do wpisania na arkusz.


BESTSELLERPełny Kurs Maturalny z Informatyki

Kompletne przygotowanie - wszystkie moduły w jednym pakiecie

C++ i PythonBazy danychExcel zaawansowanyTeoria + egzaminy
519 zł

oszczędzasz 316 zł


Zadanie 1. Rekurencja

Zadanie 1 – definicja funkcji A(m,n)
Treść zadania z arkusza CKE

Zadanie 1.1: Analiza wywołań rekurencyjnych (0-3 pkt)

Zadanie 1.1 – tabela wywołań rekurencyjnych
Treść zadania z arkusza CKE

1. Dla m = 2⁵, n = 2⁵:

Ponieważ n = 32 (jest parzyste), będziemy ciągle dzielić je przez 2, a m mnożyć przez 2. Rekurencja zakończy się, gdy n=1. Kolejne wywołania to: A(2⁶, 2⁴), A(2⁷, 2³), A(2⁸, 2²), A(2⁹, 2¹) oraz ostatnie A(2¹⁰, 1). Daje to łącznie 5 wywołań.

2. Dla m = 10, n = 15:

Liczba n=15 jest nieparzysta, więc wykonujemy dzielenie (15-1)/2 = 7. Następnie znów mamy liczbę nieparzystą (7-1)/2 = 3, i kolejny raz (3-1)/2 = 1. Zatem mamy 3 wywołania rekurencyjne: A(10, 7), A(10, 3), A(10, 1).

3. Dla m = 1, n = 2¹⁰⁰ + 1:

Tutaj musimy podać tylko liczbę wywołań. Liczba 2¹⁰⁰ + 1 jest nieparzysta. W pierwszym kroku odejmiemy 1 i podzielimy przez 2, co da nam 2⁹⁹. Następnie będziemy dzielić 2⁹⁹ przez 2, co wymaga dokładnie 99 kroków (dojście do 2⁰ = 1). Mamy zatem 1 krok początkowy + 99 kroków dla potęg dwójki, czyli łącznie 100 wywołań.

Zadanie 1.2: Wartości funkcji A(m,n) (0-1 pkt)

Zadanie 1.2 – tabela wartości A(m,n)
Treść zadania z arkusza CKE
# Zgodnie z najlepszymi praktykami, funkcje pomocnicze/wewnętrzne zawsze deklarujemy wyżej!
def oblicz_A(m, n):
    if n == 1:
        return m
    elif n % 2 == 0:
        return oblicz_A(2 * m, n // 2)
    else:
        return 2 * oblicz_A(m, (n - 1) // 2) + m

# --- Główny przepływ programu ---
# m = 1, n = 777
wynik_1 = oblicz_A(1, 777)
print(f"A(1, 777) = {wynik_1}")

# m = 2 * 10^6, n = 256 * 10^6
wynik_2 = oblicz_A(2_000_000, 256_000_000)
print(f"A(2*10^6, 256*10^6) = {wynik_2}")
python

Zarówno ze wzoru m · n, jak i z kodu uzyskujemy następujące odpowiedzi do tabeli:

  • Dla m = 1, n = 777: wartość to 777
  • Dla m = 2 · 10⁶, n = 256 · 10⁶: wartość to 512 · 10¹², co można zapisać w notacji wykładniczej jako 512 · 10¹² lub rozbić na inne potęgi.

Zadanie 1.3: Uogólnienie wywołań (0-3 pkt)

Zadanie 1.3 – uogólnienie wywołań
Treść zadania z arkusza CKE

1. Dla n = 2ᵏ:

Analogicznie do przykładu z 2⁵, liczba 2ᵏ będzie dzielona przez 2 dokładnie k razy, zanim osiągnie 1. Zatem liczba wywołań wynosi k. Wartość drugiego argumentu w i-tym wywołaniu to (2ᵏ)/2ⁱ, co matematycznie zapisujemy jako 2ᵏ⁻ⁱ.

2. Dla n = 2ᵏ - 1:

Zgodnie z naszym wcześniejszym spostrzeżeniem, w pierwszym kroku wartość 2ᵏ - 1 zostaje przekształcona z użyciem wzoru dla liczb nieparzystych: (2ᵏ - 1 - 1)/2 = (2ᵏ - 2)/2 = 2ᵏ⁻¹ - 1. Zjawisko to powtarza się w każdej pętli. Liczba k spada o 1, aż osiągnie 2¹ - 1 = 1. Zatem mamy tu k-1 wywołań rekurencyjnych, a wzór na wartość argumentu n w i-tym kroku to 2ᵏ⁻ⁱ - 1.

Zadanie 2. Dodawanie

Zadanie 2 – dodawanie pisemne
Treść zadania z arkusza CKE

Zadanie 2.1: Tabela z liczbą przeniesień (0-1 pkt)

Zadanie 2.1 – tabela przeniesień
Treść zadania z arkusza CKE

Dla liczb 37932 i 12528: sumując od prawej, w trzech kolumnach otrzymujemy przeniesienie (2+8+1=11, 3+2+1=6, 9+5+0=14 itd.) — 3 przeniesienia.

Dla liczb 88765 i 11111:

Dla liczb 88765 i 11111:

Liczymy od końca (od prawej do lewej): 5 + 1 = 6 (brak), 6 + 1 = 7 (brak), 7 + 1 = 8 (brak), 8 + 1 = 9 (brak), 8 + 1 = 9 (brak). Wynikiem jest 99876. Sumy w żadnej kolumnie nie przekroczyły 9, więc wpisujemy 0 przeniesień.

Dla liczb 456789 i 222222:

Tutaj sytuacja jest ciekawsza. Zaczynając od prawej strony: 9 + 2 = 11 (1 przeniesienie), potem 8 + 2 + 1 = 11 (kolejne przeniesienie, mamy już 2), 7 + 2 + 1 = 10 (kolejne przeniesienie, łącznie 3). Dalej mamy 6 + 2 + 1 = 9 (brak przeniesienia, od teraz do sumy nie dodajemy już jedynki), 5 + 2 = 7 (brak), 4 + 2 = 6 (brak). Wynik to 679011. Łącznie wystąpiły 3 przeniesienia.

Zadanie 2.2: Algorytm obliczający liczbę przeniesień (0-4 pkt)

Zadanie 2.2 – algorytm przeniesień
Treść zadania z arkusza CKE

Klucz do rozwiązania: operatory % i //

Używamy operatora modulo (reszta z dzielenia przez 10) do wyciągnięcia ostatniej cyfry liczby, oraz dzielenia całkowitego przez 10, aby tę cyfrę odciąć i przejść do kolejnego rzędu wielkości. To absolutne podstawy z pierwszego modułu programowania!

Ponieważ obie liczby mają taką samą liczbę cyfr, wystarczy zwykła pętla while, która działa dopóki liczby są większe od zera. W każdej iteracji sumujemy ostatnie cyfry obu liczb oraz ewentualne przeniesienie z poprzedniego kroku. Poniżej realizacja w Pythonie i C++ (przełącznik nad kodem):

def liczba_przeniesien(a, b):
    p = 0
    przeniesienie = 0

    while a > 0:
        cyfra_a = a % 10
        cyfra_b = b % 10

        suma = cyfra_a + cyfra_b + przeniesienie

        if suma >= 10:
            p += 1
            przeniesienie = 1
        else:
            przeniesienie = 0

        a //= 10
        b //= 10

    return p


print(liczba_przeniesien(27732, 72619))  # 4

Zadanie 3. Pary słów

Treść zadania 3 z arkusza CKE
Treść zadania z arkusza CKE

W pliku pary.txt jest 500 par słów. Program wczytuje je wiersz po wierszu, a odpowiedzi zapisuje w wyniki3.txt z numerami podzadań.

Zadanie 3.1: Największa różnica sum ASCII (0-2 pkt)

Treść zadania 3.1 z arkusza CKE
Treść zadania z arkusza CKE

Dla każdej pary liczymy f(s) — sumę kodów ASCII znaków w słowie — i szukamy maksymalnej wartości |f(s₁) - f(s₂)|.

Odpowiedź: gpeeazeugmvsbzwsrxfplqdbakoxxe lhpbmoirdm 2206

Zadanie 3.2: Suma wspólnych wystąpień liter (0-3 pkt)

Treść zadania 3.2 z arkusza CKE
Treść zadania z arkusza CKE

Dla każdej litery x liczymy W(x, s₁, s₂) = \min(d(x, s₁), d(x, s₂)), gdzie d(x, s) to liczba wystąpień litery w słowie. Szukamy pary z największą sumą W po wszystkich literach alfabetu.

Odpowiedź: aacbcccaacacbcabac cccccaaaacaccbabcba 18

Zadanie 3.3: Prefiksosufiks o długości co najmniej 5 (0-4 pkt)

Prefiksosufiks to słowo będące początkiem jednego słowa i końcem drugiego (w dowolnej kolejności). Dla każdej pary sprawdzamy wszystkie długości od 1 do \min(|s₁|, |s₂|) i wypisujemy pary, dla których najdłuższy prefiksosufiks ma co najmniej 5 liter.

W pliku pary.txt jest wiele takich par — program zapisuje je wszystkie w wyniki3.txt pod nagłówkiem 3.3. Przykładowe pary z pliku pary_przyklad.txt to m.in. bbbbaabbababbaaaa baaaaabaaabbbabab 5 oraz aababbbababbbbbbaab bbbbaabbababababa 7.

Pełny kod rozwiązania zadania 3

def suma_ascii(s):
    suma = 0
    for znak in s:
        suma += ord(znak)
    return suma


def suma_wspolnych_wystapien(s1, s2):
    wynik = 0

    for kod in range(ord('a'), ord('z') + 1):
        litera = chr(kod)
        wynik += min(s1.count(litera), s2.count(litera))

    return wynik


def najdluzszy_prefiksosufiks(s1, s2):
    najlepszy = 0
    maks = min(len(s1), len(s2))

    for dl in range(1, maks + 1):
        if s1[:dl] == s2[-dl:]:
            najlepszy = dl

        if s2[:dl] == s1[-dl:]:
            najlepszy = dl

    return najlepszy


pary = []

with open("pary.txt", "r", encoding="utf-8") as plik:
    for wiersz in plik:
        s1, s2 = wiersz.split()
        pary.append((s1, s2))


max_roznica = -1
odp_31 = ("", "", 0)

for s1, s2 in pary:
    roznica = abs(suma_ascii(s1) - suma_ascii(s2))

    if roznica > max_roznica:
        max_roznica = roznica
        odp_31 = (s1, s2, roznica)


max_suma = -1
odp_32 = ("", "", 0)

for s1, s2 in pary:
    suma = suma_wspolnych_wystapien(s1, s2)

    if suma > max_suma:
        max_suma = suma
        odp_32 = (s1, s2, suma)


odp_33 = []

for s1, s2 in pary:
    dl = najdluzszy_prefiksosufiks(s1, s2)

    if dl >= 5:
        odp_33.append((s1, s2, dl))


with open("wyniki3.txt", "w", encoding="utf-8") as wynik:
    wynik.write("3.1\n")
    wynik.write(f"{odp_31[0]} {odp_31[1]} {odp_31[2]}\n")

    wynik.write("\n3.2\n")
    wynik.write(f"{odp_32[0]} {odp_32[1]} {odp_32[2]}\n")

    wynik.write("\n3.3\n")
    for s1, s2, dl in odp_33:
        wynik.write(f"{s1} {s2} {dl}\n")

Zadanie 4. Korporacja

Zadanie 4 – hierarchia korporacji (Rysunek 1)
Treść zadania z arkusza CKE

Zadanie 4.1: Tabela z liczbą podwładnych (0-1 pkt)

Zadanie 4.1 – tabela podwładnych
Treść zadania z arkusza CKE

Kurs Programowania Python

Od podstaw do zaawansowanych technik maturalnych

Składnia PythonListy i słownikiFunkcje i modułyZadania maturalne
199 zł

jednorazowo


Ręczne zliczenie bezpośrednich i wszystkich podwładnych to darmowy punkt. Analizę zaczynamy od pracownika numer 1 (prezesa). Z rysunku odczytujemy, że ma on dwóch bezpośrednich podwładnych. Wszyscy pracownicy w firmie, poza samym prezesem, są jego podwładnymi. Z kolei pracownik numer 3 ma tylko jednego bezpośredniego podwładnego i łącznie też tylko jednego podwładnego. W ten sam sposób bez problemu uzupełniamy całą tabelę.

Informacja do zadań 4.2–4.4

Informacja do zadań 4.2–4.4 – plik korpo.txt
Treść zadania z arkusza CKE

Zadanie 4.2: Pracownicy, którzy nie są przełożonymi (0-2 pkt)

Zadanie 4.2
Treść zadania z arkusza CKE

Poniżej kompletny program liczący odpowiedzi do zadań 4.2–4.4 na podstawie pliku korpo.txt:

with open("korpo.txt", "r", encoding="utf-8") as plik:
    dane = [int(wiersz.strip()) for wiersz in plik if wiersz.strip()]

n = len(dane)
przelozony = [0] + dane
bezposredni = [0] * (n + 1)

for pracownik in range(2, n + 1):
    szef = przelozony[pracownik]
    bezposredni[szef] += 1

liczba_bez_podwladnych = sum(
    1 for pracownik in range(1, n + 1) if bezposredni[pracownik] == 0
)

max_bezposrednich = -1
pracownik_max = -1

for pracownik in range(1, n + 1):
    if bezposredni[pracownik] > max_bezposrednich:
        max_bezposrednich = bezposredni[pracownik]
        pracownik_max = pracownik

liczba_przelozonych = [0] * (n + 1)

for pracownik in range(2, n + 1):
    liczba_przelozonych[pracownik] = liczba_przelozonych[przelozony[pracownik]] + 1

max_przelozonych = max(liczba_przelozonych[1:])
ilu_ma_max = sum(
    1 for pracownik in range(1, n + 1)
    if liczba_przelozonych[pracownik] == max_przelozonych
)

with open("wyniki4.txt", "w", encoding="utf-8") as wynik:
    wynik.write("4.2\n")
    wynik.write(str(liczba_bez_podwladnych) + "\n\n")
    wynik.write("4.3\n")
    wynik.write(str(pracownik_max) + " " + str(max_bezposrednich) + "\n\n")
    wynik.write("4.4\n")
    wynik.write(str(max_przelozonych) + " " + str(ilu_ma_max) + "\n")
Zadanie 4.3
Treść zadania z arkusza CKE
def znajdz_pracownika_z_najwieksza_liczba_bezposrednich_podwladnych(dane):
    n = len(dane)
    bezposredni_podwladni = [0] * (n + 1)
    
    for i in range(1, n):
        przelozony = dane[i]
        bezposredni_podwladni[przelozony] += 1
        
    najwieksza_liczba_podwladnych = 0
    najlepszy_pracownik = 0
    
    for i in range(1, n + 1):
        if bezposredni_podwladni[i] > najwieksza_liczba_podwladnych:
            najwieksza_liczba_podwladnych = bezposredni_podwladni[i]
            najlepszy_pracownik = i
            
    return najlepszy_pracownik, najwieksza_liczba_podwladnych

# Wczytanie danych jak w 4.2
pracownik, liczba_podwladnych = znajdz_pracownika_z_najwieksza_liczba_bezposrednich_podwladnych(dane)
print(f'4.3: {pracownik} {liczba_podwladnych}')
python

Odpowiedź: Pracownik nr 2 ma 19 bezpośrednich podwładnych.

Zadanie 4.4: Pracownik z największą liczbą przełożonych (0-3 pkt)

Zadanie 4.4
Treść zadania z arkusza CKE
def policz_przelozonych(nr_pracownika, przelozony):
    liczba_przelozonych = 0
    aktualny_pracownik = nr_pracownika
    
    while przelozony[aktualny_pracownik] != 0:
        aktualny_pracownik = przelozony[aktualny_pracownik]
        liczba_przelozonych += 1
        
    return liczba_przelozonych

def znajdz_najwieksza_liczbe_przelozonych(przelozony):
    n = len(przelozony) - 1
    najwieksza_liczba_przelozonych = 0
    liczba_pracownikow = 0
    
    for i in range(1, n + 1):
        liczba_przelozonych = policz_przelozonych(i, przelozony)
        if liczba_przelozonych > najwieksza_liczba_przelozonych:
            najwieksza_liczba_przelozonych = liczba_przelozonych
            liczba_pracownikow = 1
        elif liczba_przelozonych == najwieksza_liczba_przelozonych:
            liczba_pracownikow += 1
            
    return najwieksza_liczba_przelozonych, liczba_pracownikow

przelozony = [0]
with open('korpo.txt', 'r') as plik:
    for linia in plik:
        przelozony.append(int(linia.strip()))

max_przelozonych, liczba_pracownikow = znajdz_najwieksza_liczbe_przelozonych(przelozony)
print(f'4.4: {max_przelozonych} {liczba_pracownikow}')
python

Rozwiązanie alternatywne: Rekurencja

Zamiast pętli, wspinanie się po grafie aż do korzenia idealnie nadaje się na rekurencję. Osiągamy ten sam wynik w zaledwie trzech linijkach czystego kodu!

def licz_przelozonych_rek(nr_pracownika, przelozony):
    if nr_pracownika == 1:
        return 0
    return 1 + licz_przelozonych_rek(przelozony[nr_pracownika], przelozony)
python

Odpowiedź: 22 2 (największa liczba przełożonych to 22, a taką liczbę przełożonych posiada dokładnie 2 pracowników).

Zadanie 5. Wyrażenie matematyczne (systemy liczbowe)

Zadanie 5 – wyrażenie w systemach liczbowych
Treść zadania z arkusza CKE

Krok 1: Lewa strona równania (System piątkowy)

Zajmijmy się najpierw pierwszą częścią: 1440₅ + x₅ = 427₁₀.

Naszym pierwszym celem jest zamiana liczby 1440₅ na system dziesiętny. Dokonujemy tego, mnożąc kolejne cyfry przez kolejne potęgi liczby 5, zaczynając od prawej strony (od 5⁰):

1 · 5³ + 4 · 5² + 4 · 5¹ + 0 · 5⁰ = 125 + 100 + 20 + 0 = 245₁₀

Teraz nasze równanie jest o wiele prostsze: 245₁₀ + x = 427₁₀. Zwykłe odejmowanie pozwala nam wyznaczyć x: x = 427 - 245 = 182₁₀.

Pozostało nam tylko zamienić otrzymany wynik z powrotem na system piątkowy (ponieważ autorzy proszą o odpowiedź w luku …₅). Dzielimy liczbę całkowicie przez 5 i spisujemy reszty z dzielenia:

  • 182 : 5 = 36, reszta 2
  • 36 : 5 = 7, reszta 1
  • 7 : 5 = 1, reszta 2
  • 1 : 5 = 0, reszta 1

Czytając reszty od dołu, otrzymujemy pierwszą szukaną liczbę: 1212₅.

Krok 2: Prawa strona równania (System trójkowy)

Teraz przechodzimy do drugiej części: 427₁₀ = y₃ - 110002₃.

Zamieniamy (110002)₃ na system dziesiętny — według klucza CKE otrzymujemy 272₁₀.

Równanie przyjmuje postać: 427₁₀ = y - 272₁₀. Stąd y = 427 + 272 = 699₁₀.

Zamieniamy 699₁₀ na system trójkowy poprzez kolejne dzielenia z resztą:

  • 699 : 3 = 233, reszta 0
  • 233 : 3 = 77, reszta 2
  • 77 : 3 = 25, reszta 2
  • 25 : 3 = 8, reszta 1
  • 8 : 3 = 2, reszta 2
  • 2 : 3 = 0, reszta 2

Zapisując reszty od dołu do góry, uzyskujemy: (100220)₃. Pełne uzupełnienie równania: (1440)₅ + (1212)₅ = (427)₁₀ = (100220)₃ - (110002)₃.

Programowanie vs. Obliczenia ręczne

Alternatywnym i znacznie szybszym sposobem byłoby użycie języka programowania (np. w Pythonie funkcja int('1440', 5) błyskawicznie zamienia system piątkowy na dziesiętny). Warto jednak biegle opanować obliczenia ręczne. Egzaminatorzy (jak udowodniła matura z 2025 roku) bardzo lubią zadania z pustymi lukami „w środku” operacji matematycznych, co wymusza pełne zrozumienie mechanizmu działań pisemnych.

Zadanie 6. Długości adresów IP

Zadanie 6 – długość adresów IP
Treść zadania z arkusza CKE

Adres IPv4

Wszyscy kojarzymy standardowe adresy IP, takie jak na przykład 192.168.0.1. Zapisujemy je jako cztery liczby oddzielone kropkami. Każda z tych liczb to jeden tzw. oktet, a jej maksymalna wartość wynosi 255. Liczba 255 zapisana w systemie binarnym to dokładnie osiem jedynek (11111111₂). Skoro jedna cyfra binarna zajmuje jeden bit, to każdy oktet ma ich dokładnie 8. Wykonując proste mnożenie (4 oktety · 8 bitów), otrzymujemy wynik: 32 bity.

Adres IPv6

W przypadku nowszego protokołu IPv6 mamy do czynienia z ośmioma grupami znaków oddzielonymi dwukropkami. Każda grupa składa się z czterech cyfr szesnastkowych (np. FFFF). Największa wartość w takiej grupie w systemie szesnastkowym to właśnie FFFF, co po zamianie na system binarny daje nam ciąg 16 jedynek, czyli 16 bitów. Osiem takich grup pomnożonych przez 16 bitów daje łącznie 128 bitów.

Podsumowując, w luki na arkuszu należało wpisać kolejno: 32 bity oraz 128 bitów.


Teoria Informatyki i Algorytmika

Solidne podstawy teoretyczne niezbędne na maturze

Systemy liczboweTeoria algorytmówZłożoność obliczeniowaSieci komputerowe
199 zł

jednorazowo


Zadanie 7. Staw (Arkusz kalkulacyjny)

Zadanie 7 – opis danych staw.txt
Treść zadania z arkusza CKE

Zadanie 7.1: Wykres kolumnowy – średnie miesięczne temperatury (0-3 pkt)

Zadanie 7.1
Treść zadania z arkusza CKE
Import danych w Excelu
Zakładka Dane → Z pliku tekstowego/CSV

Aby utworzyć zestawienie miesięczne, musimy najpierw wyciągnąć miesiąc z daty. Użyjemy do tego prostej funkcji =MIESIĄC() z naszą datą jako parametr.

Kolumna Miesiąc w Excelu
Formuła =MIESIĄC(A2) wyciąga numer miesiąca z daty

Teraz czas na główne obliczenia. Na szczęście Excel ma zaawansowaną funkcję =ŚREDNIA.WARUNKÓW(). Dzięki niej nie musimy pisać zagnieżdżonych funkcji =JEŻELI() – wystarczy wskazać trzy elementy: z czego liczymy średnią, gdzie szukamy warunku i jaki to konkretnie warunek.

Jako pierwszy argument podajemy zakres temperatur, z których liczymy średnią. Drugi to nasza nowa kolumna z miesiącami, a trzeci to konkretny numer miesiąca, dla którego w danym wierszu robimy obliczenie. Pamiętajmy też o zaokrągleniu w formule do jednego miejsca po przecinku.

Średnie temperatur miesięczne
Formuła =ZAOKR(ŚREDNIA.WARUNKÓW(B:B;D:D;F2);1)

Gdy zestawienie jest gotowe, zaznaczamy naszą tabelę, wchodzimy w zakładkę „Wstawianie” i w sekcji z wykresami wybieramy klasyczny wykres kolumnowy 2D.

Uwaga! Samo wstawienie wykresu to dopiero połowa sukcesu. Wytyczne w kluczu CKE wskazują wprost, że egzaminator nie może przyznać maksymalnej liczby punktów za zadanie z wykresem, jeśli brakuje odpowiedniego formatowania. Zadbaj o czytelne formatowanie, czyli dodaj odpowiedni tytuł wskazany w zadaniu, opisy osi oraz legendę (jeśli jest wymagana). Brak tych elementów to częsty błąd, który prowadzi do niepotrzebnej straty punktów.

Punkty za formatowanie

Co ciekawe, nawet jeśli dane przedstawione na wykresie byłyby niepoprawne, a formatowanie wykresu będzie dobrze zrobione, otrzymasz punkty właśnie za poprawne opisanie i sformatowanie osi oraz tytułu!

Jak to zrobić szybko i sprawnie? Zielony plusik w prawym górnym rogu wykresu pozwoli wybrać jego elementy. W tym zadaniu potrzebujemy tytuły osi i wykresu oraz etykiety danych.

Wykres kolumnowy średnich temperatur
Wykres z tytułem, opisanymi osiami i etykietami danych

Zmiana etykiet osi jest trochę bardziej wymagająca. Najpierw trzeba utworzyć je w osobnej kolumnie, a następnie w zakładce „Projekt wykresu” wybrać „Zaznacz dane”. Klikamy „Edytuj” i w okienku po prawej stronie zaznaczamy kolumnę z nazwami miesięcy.

Pełne rozwiązanie zadania 7.1
Dane, zestawienie miesięczne i sformatowany wykres kolumnowy

Tak przygotowany wykres zapewni Ci maksymalną liczbę punktów za to zadanie.

Zadanie 7.2: Najdłuższy ciąg kolejnych dni bez opadów (0-2 pkt)

Zadanie 7.2
Treść zadania z arkusza CKE

Zadanie wymaga od nas trochę więcej logiki niż poprzednie. Musimy policzyć spójne podciągi, ale z jednym ważnym zastrzeżeniem – licznik musi się resetować nie tylko wtedy, gdy spadnie deszcz, ale również wtedy, gdy zmieni się miesiąc.

Rozwiązanie warto zacząć od kolumny pomocniczej „Czy padało?”. Używamy tu prostej funkcji =JEŻELI(), która sprawdzi, czy wartość w kolumnie „Opady” jest równa 0. Jeśli tak – funkcja zwróci 0, co oznacza brak opadów. W przeciwnym wypadku otrzymamy 1, czyli potwierdzenie, że tego dnia padało.

Kolumna Padalo
Formuła =JEŻELI(C2>0;1;0) oznacza dni z opadami

Zanim przejdziemy do pisania głównej formuły na długość ciągu, spójrzmy na schemat logiczny. Musimy sprawdzić dwa kluczowe warunki: czy zmienił się miesiąc oraz czy w ogóle padało. Jeśli miesiąc jest nowy, sprawdzamy tylko bieżący dzień. Jeśli jednak jesteśmy w tym samym miesiącu, sprawdzamy, czy możemy wydłużyć wczorajszą passę bez deszczu o 1, czy musimy zresetować licznik do zera z powodu opadów.

W praktyce realizujemy to za pomocą zagnieżdżonej funkcji =JEŻELI(). Najpierw sprawdzamy zmianę miesiąca. Jeśli miesiąc się zmienił, sprawdzamy czy padało. Jeżeli nie, startujemy od 1. Jeśli tak – od 0. Natomiast jeżeli to ten sam miesiąc, sprawdzamy naszą kolumnę pomocniczą i gdy mamy tam 0, do wyniku z poprzedniego dnia dodajemy 1. W przeciwnym wypadku zostawiamy 0.

Kolumna Bez opadów
Formuła zliczająca ciąg kolejnych dni bez deszczu w obrębie miesiąca

Mając tak przygotowaną kolumnę z ciągami, wystarczy wyciągnąć wartość maksymalną dla każdego miesiąca. Ponownie z pomocą przychodzi funkcja warunkowa – tym razem =MAKS.WARUNKÓW(). Jako zakres wyszukiwania podajemy nasze wyliczone ciągi, jako kryterium – zakres z miesiącami, a jako wartość warunku – numer badanego miesiąca.

Wynik zadania 7.2
Formuła =MAKS.WARUNKÓW(G:G;D:D;K2) — najdłuższy ciąg bez opadów w każdym miesiącu

Informacja do zadań 7.3–7.4

Informacja do zadań 7.3–7.4
Treść zadania z arkusza CKE

Zadanie 7.3: Symulacja – dzień przekroczenia 75% powierzchni stawu (0-2 pkt)

Zadanie 7.3
Treść zadania z arkusza CKE

Budowę symulacji zaczynamy od wygenerowania osi czasu. Wpisujemy datę początkową 01.03.2023 w komórkę i przeciągamy ją w dół. Aby objąć cały badany okres 184 dni, musimy dojechać aż do odpowiednio odległego wiersza – Excel automatycznie uzupełni daty pomiędzy.

Oś czasu symulacji
Daty od 1 marca 2023 — przeciągnięcie w dół uzupełnia kolejne dni

Bardzo pomocna będzie kolumna z dniem tygodnia. Dlaczego? Bo właściciel odławia rzęsę tylko w piątki. Używamy funkcji =DZIEŃ.TYG(). Parametr 2 jest tu bardzo ważny – dzięki niemu poniedziałek to 1, a nasz kluczowy piątek to 5. To znacznie ułatwi pisanie warunku ubytku.

Kolumna Dzień tygodnia
Formuła =DZIEŃ.TYG() z parametrem 2 — piątek to 5

Przechodzimy do liczenia powierzchni zarośnięcia stawu przez rzęsę. Z treści zadania wiemy, że 1 marca rano staw był zarośnięty w 20%, czyli 20% z 10~000~m² równa się 2000~m². Na razie zostawiamy stan rano, ponieważ zależy on od reszty symulacji.

Sercem naszego modelu będzie formuła na ubytek rzęsy w ciągu dnia. Wiemy, że 80 amurów zjada łącznie 20~m² (80 razy wydajność jednego amura, czyli 0,25~m²). Do tego dochodzą piątkowe odłowienia właściciela. Jeśli w kolumnie z dniem tygodnia mamy piątkę, Excel odejmie łącznie 80~m², w pozostałe dni tylko 20~m².

Formuła ubytku rzęsy
W piątek odłowienie 80 m², w pozostałe dni 20 m²

Stan wieczorem to po prostu różnica stanu z rana i ubytku, który właśnie wyliczyliśmy. Teraz musimy wrócić do stanu rano kolejnego dnia. Co działo się w nocy? Rzęsa rosła. Stan rano to wczorajszy stan wieczorem pomnożony przez współczynnik wzrostu. Skoro przyrost wynosi 1,75%, to mnożymy przez 1,0175. Pamiętajmy, by tę formułę wpisać dopiero od kolejnego wiersza (czyli 2 marca), bo 1 marca mamy podaną wartość startową 2000~m².

Stan wieczorem
Formuła =C2-E2 — stan rano minus ubytek w ciągu dnia
Stan rano kolejnego dnia
Formuła =D2*1,0175 — wzrost rzęsy w nocy o 1,75%

Ostatni element to przeliczenie powierzchni na procenty. Dzielimy aktualny stan rano przez całkowitą powierzchnię stawu, czyli przez 10~000. Formatujemy komórkę jako procentową i możemy przystąpić do sprawdzania wyników.

Kolumna procentów zarośnięcia
Przeliczenie stanu rano na procent powierzchni stawu

Szybka weryfikacja ze wskazówką w treści zadania: 30 kwietnia rano mamy 25,79% – idealnie, nasz model działa bezbłędnie. Teraz szukamy momentu, w którym wartość przekracza 75%. Dzieje się to 14 sierpnia 2023 roku.

Ale uwaga! Data nie jest naszą finalną odpowiedzią – w zadaniu oczekują informacji, który to dzień symulacji z kolei. U nas to wiersz 168, czyli odejmując pierwszy wiersz nagłówków – 167 dzień symulacji. Zapisujemy wyniki do pliku.

Wiersz 168 symulacji — 14 sierpnia 2023
Pierwszy dzień, w którym zarośnięcie przekracza 75% — odpowiedź: 167. dzień symulacji

Zadanie 7.4: Symulacja – dodanie amurów do stawu (0-2 pkt)

Zadanie 7.4
Treść zadania z arkusza CKE
Liczba amurów w osobnej komórce
Parametr liczby ryb podpięty do formuły ubytku

Zanim zaczniemy testować różne wartości, dopiszmy jeszcze formułę =MAKS(), która szybko sprawdzi najwyższy zanotowany procent zarośnięcia w całym badanym okresie. Teraz zostaje już tylko podstawienie liczby, która sprawi, że maksimum zwróci mniej niż 50%, ale po zmniejszeniu populacji ryb o jeden otrzymamy wartość przekraczającą limit:

  • 80 amurów zarośnięcie dobija do 96%
  • 100 amurów zarośnięcie spada poniżej 30%
  • 93 amury wciąż jeszcze 52,50%
  • 94 amury 49,17% – zmniejszenie liczby amurów wyprowadza nas już poza limit 50%.
Wynik zadania 7.4
94 amury — maksymalne zarośnięcie 49,17%, poniżej limitu 50%

Na koniec zapisz odpowiedzi do pliku wyniki7.txt zgodnie z poleceniem arkusza. Gotowe — wszystkie podpunkty zadania 7 mamy za sobą.

Zadanie 8. Sieć sklepów (Bazy danych + SQL)

Zadanie 8 – opis plików
Treść zadania z arkusza CKE
Zadanie 8 – opis_transakcji i wyniki8.txt
Treść zadania z arkusza CKE

Bazy Danych i Arkusze Kalkulacyjne

MS Access, SQL i zaawansowany Excel na maturę

Projektowanie bazZapytania SQLFunkcje ExcelTabele przestawne
199 zł

jednorazowo


Uwaga na import danych!

Przy imporcie pliku transakcje.txt upewnij się, że pole z datą ma właściwy typ (Data i godzina) i jest w układzie DMR (dzień-miesiąc-rok). Z kolei w tabeli opis_transakcji.txt pole IdTransakcji powtarza się dla wielu wierszy, więc nie może być kluczem podstawowym tej tabeli!

Po wczytaniu danych wiążemy tabele relacjami. Klienci i Transakcje łączymy po polu IdKlienta, a Transakcje i Opis_transakcji po polu IdTransakcji (są to typowe relacje jeden-do-wielu).

Import tabeli Klienci
Kreator importu tekstu — tabela Klienci
Import tabeli Transakcje
Ustawienie typu Data i godzina w układzie DMR
Import Opis_transakcji
Access dodaje własny klucz podstawowy — IdTransakcji nie jest unikalne w tej tabeli
Relacje między tabelami
Połączenia Klienci ↔ Transakcje ↔ Opis_transakcji

Zadanie 8.1: Klient z największą liczbą transakcji (0-1 pkt)

Zadanie 8.1
Treść zadania z arkusza CKE
Kwerenda zadania 8.1
Grupowanie po kliencie i zliczanie transakcji
Wynik zadania 8.1
Klient z największą liczbą transakcji: Marcelino Kruk

Odpowiedź: Marcelino Kruk

Zadanie 8.2: Klienci, którzy nie kupili niczego (0-2 pkt)

Zadanie 8.2
Treść zadania z arkusza CKE
Uruchomienie kreatora kwerend
Tworzenie → Kreator kwerend wyszukujących niepasujące dane
Kreator — krok 1
Wybór tabeli Klienci jako źródła wyniku
Kreator — krok 2
Wybór tabeli Transakcje jako tabeli porównawczej
Kreator — krok 3
Łączenie pól IdKlienta <=> IdKlienta
Kreator — krok 4
Wybór pól Plec i IdKlienta do wyniku

Wskazujemy tabelę Klienci jako źródłową, a Transakcje jako porównawczą. Łączymy je po IdKlienta. Do wyników wyrzucamy IdKlienta oraz Plec. Otrzymujemy w ten sposób listę osób bez żadnych zakupów. Na podstawie tej kwerendy pomocniczej tworzymy kwerendę wynikową: grupujemy według płci (Plec) i zliczamy osoby (funkcja Policz na IdKlienta).

Kwerenda wynikowa zadania 8.2
Grupowanie po płci i zliczanie klientów bez zakupów
Wynik zadania 8.2
K = 689 kobiet, M = 651 mężczyzn bez żadnej transakcji

Odpowiedź: Kobiet (K): 689, Mężczyzn (M): 651.

Zadanie 8.3: Kasy samoobsługowe (0-2 pkt)

Zadanie 8.3
Treść zadania z arkusza CKE
Kwerenda pomocnicza zadania 8.3
Filtr Is Null na IdSprzedawcy i grupowanie po IdSklepu
Zliczanie sklepów z kasami samoobsługowymi
Policz na IdSklepu z kwerendy pomocniczej
Wynik — liczba sklepów
28 sklepów z transakcjami bez sprzedawcy
Suma kwot kas samoobsługowych
Suma([Cena]*[Liczba]) dla IdSprzedawcy Is Null
Wynik — łączna kwota
Łączna zapłata: 19443,29 zł

W kwerendzie wynikowej po prostu zliczamy rekordy z powyższego zestawienia. Otrzymujemy liczbę 28. Aby poznać łączną zapłatę, robimy drugą kwerendę: znów filtrujemy puste IdSprzedawcy, a kwotę obliczamy jako [Cena] * [Liczba] i sumujemy dla wszystkich odfiltrowanych rekordów.

Odpowiedź: Liczba sklepów: 28. Łączna kwota: 19443,29.

Zadanie 8.4: Sprzedawca w największej liczbie sklepów (0-2 pkt)

Zadanie 8.4
Treść zadania z arkusza CKE
Kwerenda pomocnicza zadania 8.4
Miesiąc z daty, unikalne pary sprzedawca–sklep, bez kas samoobsługowych
Wynik zadania 8.4
IdSprzedawcy 14 obsłużył najwięcej sklepów w styczniu

Odpowiedź: IdSprzedawcy: 14, miesiąc: 1 (styczeń).

Zadanie 8.5: Zapytanie SQL (0-2 pkt)

Zadanie 8.5 – tabele Produkty i Kategorie
Treść zadania z arkusza CKE
SELECT DISTINCT Produkty.IdProduktu, Produkty.Nazwa
FROM Produkty
INNER JOIN Kategorie ON Produkty.IdKategorii = Kategorie.IdKategorii
INNER JOIN opis_transakcji ON Produkty.IdProduktu = opis_transakcji.IdProduktu
WHERE Kategorie.NazwaKategorii = 'spozywcze'  
AND Produkty.Opis LIKE '%do ekspresu kolbowego%';
sql

Warto wiedzieć!

W przypadku zapytań w MS Access często zamiast symbolu % w klauzuli LIKE używa się gwiazdki *. Na maturze obie formy są akceptowane. Użycie klauzuli DISTINCT zabezpiecza nas przed wypisaniem tego samego produktu wielokrotnie, chociaż klucz CKE często toleruje odpowiedzi z duplikatami.


BESTSELLERPełny Kurs Maturalny z Informatyki

Kompletne przygotowanie - wszystkie moduły w jednym pakiecie

C++ i PythonBazy danychExcel zaawansowanyTeoria + egzaminy
519 zł

oszczędzasz 316 zł


Chcesz przećwiczyć podobne zadania na dziesiątkach arkuszy z poprzednich lat? W naszym kursie do matury z informatyki znajdziesz moduły z programowania, teorii, Excela, Accessa i SQL — wszystko krok po kroku, tak jak w tym artykule.

Tagi:

matura 2026
informatyka
cke
rekurencja
python
algorytmy
dodawanie
pary słów
grafy
systemy liczbowe
ipv4
excel
access
sql
bazy danych

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.