Analiza arkusza maturalnego z informatyki maj 2025?
Analiza arkusza maturalnego z informatyki maj 2025 – rozwiązania zadań i pułapki CKE

Analiza arkusza maturalnego z informatyki maj 2025 – rozwiązania zadań i pułapki CKE

Wprowadzenie

Matura z informatyki w maju 2025 roku już za nami – a właściwie za tymi, którzy do niej przystąpili 14 maja o godzinie 9:00. Egzamin na poziomie rozszerzonym, trwający pełne 210 minut, po raz kolejny potwierdził, że informatyka to przedmiot wymagający nie tylko teorii, ale przede wszystkim praktycznych umiejętności. W tym roku Centralna Komisja Egzaminacyjna (CKE) przygotowała arkusz składający się z 7 głównych zadań (z podzadaniami), za które można było zdobyć maksymalnie 50 punktów. Tematyka była zróżnicowana: od algorytmiki i programowania, przez arkusze kalkulacyjne w Excelu, po bazy danych w Accessie i SQL.Według wstępnych szacunków, średni wynik maturzystów wyniesie około 38-40% – nieco wyżej niż w 2024 roku (36%), ale wciąż daleko od ideału. Dlaczego? Bo CKE, jak co roku, zasiała pułapki: niejasne sformułowania, nietypowe warianty zadań i presja czasu. W tym artykule przeanalizujemy cały arkusz krok po kroku: podamy pełne rozwiązania (z kodem w Pythonie i C++, przykładami Excela i SQL), wskażemy najczęstsze błędy oraz pułapki, które mogły kosztować cenne punkty. Jeśli przygotowujesz się do matury 2026, to lektura obowiązkowa – bo trendy z 2025 wskazują na rosnące znaczenie rekurencji i złożonych zapytań bazodanowych.

Wstęp: Struktura arkusza i ogólne wrażenia maturzystów

Arkusz maturalny z informatyki 2025 to klasyczna formuła 2023: połączenie zadań teoretycznych (zamkniętych i otwartych) z praktycznymi, wymagającymi użycia komputera. Zdający pracowali na autonomicznym stanowisku z preinstalowanym oprogramowaniem (Python 3, C++ via Dev-C++, MS Excel i Access). Brak dostępu do internetu i zewnętrznych źródeł – tylko dane z nośnika CKE. Opinie maturzystów? Mieszane. Na forach jak Arkusze.pl czy Facebookowych grupach 'Matura Informatyka 2025' dominują głosy: 'Klasyczna matura, ale Access zaskoczył trudnością – zazwyczaj 20 minut, tu ponad 30!' Inni narzekali na wykres w Excelu: 'Trudno zmieścić się w czasie, sumy po latach to koszmar'. Pozytywy? Łatwiejsze programowanie niż w 2024 i banalny algorytm do wklejenia. W porównaniu do poprzedniego roku, 2025 był nieco prostszy w części algorytmicznej, ale cięższy w bazach danych. Prognoza: wysoki odsetek (ok. 85%) zdawalności, ale mało setek – średnio 20-25 punktów.

Analiza wszystkich zadań:

Arkusz zachował formułę 2023: zadania teoretyczne (oznaczone symbolem, bez komputera) i praktyczne (z plikami źródłowymi). Wymagano zapisu odpowiedzi w plikach wynikiX.txt, z eksportami baz danych do *.sql. Brak internetu zmuszał do samodzielnego kodowania.Maturzyści narzekali na presję czasu w zadaniach z plikami (np. 2000 wierszy w zad. 2) i niejasne sformułowania (np. 'ładunek' w 6.5). Średni wynik 38-40% wynika z błędów w implementacjach iteracyjnych i SQL. Trendy: Mars jako motyw (zad. 3,6,7), rosnące znaczenie datetime i GCD. Na 2026: Ćwicz na dużych datasetach i testuj kody.

Zadanie 1: Funkcja Rekurencyjna (0–9 punktów)

Opis: Dana rekurencyjna funkcja przestaw(n), która zamienia miejscami pary cyfr liczby n od końca (np. 1234 → 2143). Używa mod 100, div 10 itp. Zadanie sprawdza zrozumienie rekurencji i iteracji.

Przykładowe kierunki PW i UW – informatyka i fizyka traktowane równorzędnie

nWynik działania funkcji przestawLiczba wywołań funkcji przestaw
3164981346893
43657688345667884
1540057101450075015
9988776655443219897867564534128

Obliczenia: Dla n=316498: pary 98→89, 64→46, 31→13 → 134689. Wywołania: Poziomy rekurencji dla par cyfr. Pułapki: Mylenie mod z div; zapominanie o bazie (n=0). Błąd: 20% maturzystów źle liczyło wywołania.

Rozwiązanie 1.2 (0–2): Oceń prawdziwość zdań o liczbie wywołań dla k-cyfrowej n.

  1. k/2 → F (nie dla nieparzystych k).
  2. (k+1) div 2 → P (ceil(k/2)).
  3. k/2 (parzyste), (k+1)/2 (nieparzyste) → P (to samo co 2).
  4. (k+1)/2 → F (bez div daje float).

Rozwiązanie 1.3 (0–4): Nierekurencyjna wersja funkcji (tylko arytmetyka, bez stringów).

Kod Python:

def przestaw(n):
    w = 0        # wynik końcowy
    m = 1        # mnożnik pozycji dziesiętnej (1, 10, 100, ...)
    while n > 0:
        a = n % 10 # ostatnia cyfra
        n = n // 10
       if n > 0:
        b = n % 10
        n = n // 10
        # dodajemy cyfry w odwrotnej kolejności (zamienione miejscami)
        w = w + a * m * 10 + b * m
        m *= 100 
       else: 
            #tylko jedna cyfra pozostała, bez pary 
            w += b * m 
     return w 
 # Test: przestaw(1234) → 2143

Pułapki: Użycie str() lub tablic (zakazane – 0 pkt). Błąd: Złe zarządzanie mnożnikiem m (40% strat). Poziom trudności: Łatwy/średni. Porównanie: Podobne do rekurencji z 2023, ale z zakazem stringów jak w 2022.

Zadanie 2: Zapis Symboliczny (0–10 punktów)

Import danych jest dla każdego zadania taki sam jak w zadaniu 2.1

Opis: Plik symbole.txt: 2000 wierszy po 12 znaków (o, +, *). Zadania: palindromy, kwadraty 3x3, konwersja do bazy 3.

Rozwiązanie 2.1 (0–2): Palindromy (napisy czytane tak samo od tyłu).

with open("symbole_2025.txt", "r") as dane:
  dane = [i.strip() for i in dane.readlines()]
  for i in range(len(dane)):
    if dane[i] == dane[i][::-1]:
      print(dane[i])

Wynik: ++o+o++o+o++ +*+**++**+*+ *+o++**++o+* *oo*o**o*oo* +*++*oo*++*+ +o++oooo++o+ Opis: Program odczytuje dane z pliku i wyszukuje wszystkie wiersze, które są palindromami – czyli odczytane od lewej i prawej strony wyglądają tak samo. Wypisuje każdy znaleziony palindrom w osobnej linii.

Rozwiązanie 2.2 (0–3): Liczba kwadratów 3x3 z identycznymi znakami w pliku z danymi. Podaj liczbę i pozycje środków.

licznik = 0
for i in range(1, len(dane)-1):
  for j in range(1, len(dane[i])-1):
    znak = dane[i][j]
    if (dane[i-1][j-1] == znak and                   # Lewy górny
        dane[i-1][j]   == znak and                   # Środek górny
        dane[i-1][j+1] == znak and                   # Prawy górny
        dane[i][j-1]   == znak and                   # Lewy środkowy
        dane[i][j+1]   == znak and                   # Prawy środkowy
        dane[i+1][j-1] == znak and                   # Lewy dolny
        dane[i+1][j]   == znak and                   # Środek dolny
        dane[i+1][j+1] == znak):                     # Prawy dolny
      licznik += 1
      print(i+1, j+1)
print(licznik)

Wynik: 3 kwadraty na pozycjach: 399 5, 546 2, 630 11. Opis: Program analizuje dane, sprawdzając, czy dany znak tworzy kwadrat 3×3 złożony z takich samych symboli. Zlicza i wypisuje współrzędne wszystkich znalezionych wzorów.

Rozwiązanie 2.3 (0–2): Największa liczba w pliku po zamianie symboli na system trójek (o=0, +=1, *=2). Podaj tą wartość w systemie dziesiątkowym i odpowiadający mu napis.

trojkowy = []
for i in range(len(dane)):
  zamieniony = ''
  for j in range(len(dane[i])):
    if dane[i][j] == 'o':
      zamieniony += '0'
    if dane[i][j] == '+':
      zamieniony += '1'
    if dane[i][j] == '*':
      zamieniony += '2'
  trojkowy.append([int(zamieniony, 3), dane[i]])
print(max(trojkowy))

Wynik: 531246 ******o++o. Opis: Program zamienia symbole o, + i * na cyfry 0, 1 i 2, tworząc liczby w systemie trójkowym. Następnie oblicza ich wartości dziesiętne i wypisuje największą z nich wraz z oryginalnym ciągiem.

Rozwiązanie 2.4 (0–3): Oblicz sumę wszystkich liczb z pliku. Podaj jej wartość w zapisie dziesiętnym oraz w zapisie trójkowym z użyciem symboli: o, +, *.

suma = 0
for i in range(len(trojkowy)):
  suma += trojkowy[i][0]
print(suma)
symbolicznie = ''
def przeliczanie(a):
  wynik = ''
  while a > 0:
    wynik = str(a % 3) + wynik
    a = a // 3
  return wynik
trojkowym = przeliczanie(suma)
for i in range(len(trojkowym)):
  if trojkowym[i] == '0':
    symbolicznie += 'o'
  if trojkowym[i] == '1':
    symbolicznie += '+'
  if trojkowym[i] == '2':
    symbolicznie += '*'
print(symbolicznie)

Wynik: 527865439 ++oo*+oo*++ooo*o*++ Opis: Program sumuje wszystkie liczby utworzone z symboli o, + i *, a wynik przelicza z powrotem na zapis symboliczny. Ostatecznie wyświetla sumę w formie ciągu znaków.

Zadanie 3: Dron (0–6 punktów)

Import danych jest dla każdego zadania taki sam jak w zadaniu 3.1

Opis: Plik dron.txt: 100 przesunięć [A, B]. Start (0,0), analiza trajektorii.

Rozwiązanie 3.1 (0–2): Liczba przesunięć gdzie NWD(|A|,|B|)>1.

with open("dron_2025.txt", "r") as dane:
  dane = [i.strip().split() for i in dane.readlines()]
  def nwd(a, b):
    while b != 0:
      r = a % b
      a = b
      b = r
    return a
  licznik = 0
  for i in range(len(dane)):
    if nwd(abs(int(dane[i][0])), abs(int(dane[i][1]))) > 1:
      licznik += 1
  print(licznik)

Wynik: 40 Opis: Program wczytuje współrzędne z pliku dron_2025.txt i dla każdej pary liczb oblicza największy wspólny dzielnik. Zlicza wszystkie przypadki, w których NWD obu liczb jest większe niż 1.

Rozwiązanie 3.2 a) Liczba punktów wewnątrz kwadratu 0<x<5000, 0<y<5000 (bez granic). (0-2)

torLotu = [[0,0]]

for i in range(len(dane)):
  poprzedni = torLotu[-1]
  aktualny = dane[i]
  nowy = [int(poprzedni[0]) + int(aktualny[0]), int(poprzedni[1]) + int(aktualny[1])]
  torLotu.append(nowy)

licznik = 0
for punkt in torLotu:
  if 0 < punkt[0] < 5000 and 0 < punkt[1] < 5000:
    licznik += 1

# print(licznik)

Wynik: 24 - Program oblicza kolejne pozycje drona, sumując kolejno współrzędne z pliku. Następnie zlicza wszystkie punkty, które znajdują się w obrębie kwadratu o wymiarach 5000×5000.

Rozwiązanie 3.2 b) Podaj trzy różne, takie, że jeden z nich jest środkiem odcinka o końcach w pozostałych dwóch. (0-2)

for k in range(1, len(torLotu)):
  for i in range(1, len(torLotu)):
    for j in range(i+1, len(torLotu)):
      if k != i and k != j and torLotu[k][0] == (torLotu[i][0]+torLotu[j][0])//2 and torLotu[k][1] == (torLotu[i][1]+torLotu[j][1])//2:
        print(torLotu[k], torLotu[i], torLotu[j])

Wynik: (5832, 1801), (7410, 1990), (8988, 2179) - Program sprawdza wszystkie kombinacje punktów toru lotu drona i wypisuje te, w których jeden punkt znajduje się dokładnie w środku odcinka łączącego dwa inne punkty. Dzięki temu można łatwo zidentyfikować położenia środkowe między punktami toru.

Zadanie 4: (0–1 punkt) Program typu keylogger służy do:

Rozwiązanie: D – przechwytywania i gromadzenia informacji o naciśniętych klawiszach.

Zadanie 5: _______________________

______________________________________

Zadanie 6: Martianeum (0–8 punktów)

Podział znajdujący się poniżej i ukazane funkcje pokazują jak zrobić kolumny w excelu by uzyskać poprawne odpowiedzi. Funckje są dla danych znajdujących się w pliku do importu załączonego do arkusza.

Rozwiązanie 6.1 (0–2): Podaj łączną masę ładunków drona oraz łączną masę martianeum wydobytego przez stację.

[E] stan poczatkowy[F] wydobycie[G] stan po wydobyciu[H] wysylanie
0=JEŻELI(D2>0,99;C2*D2;0)=E2+F2=JEŻELI(G2>=100;100;0)
=G2-H2=JEŻELI(D3>0,99;C3*(D3/100);0)=E3+F3=JEŻELI(G3>=100;100;0)
=G3-H3=JEŻELI(D4>0,99;C4*(D4/100);0)=E4+F4=JEŻELI(G4>=100;100;0)

Wynik to: masa drona: 41498,2 oraz masa wydobycia: 3092,2943 - By uzyskać wynik końcowy używamy funkcji: SUMA(C:C) oraz SUMA(F:F).

Zadanie 7: Poszukiwanie Wody na Marsie (0–10 punktów)

Importujemy dane i robimy relacje dla plików laziki.txt, obszary.txt, pomiary.txt

Rozwiązanie 7.1 (0–2): Podaj nazwę obszaru, na którym znaleziono łącznie we wszystkich pomiarach najwięcej m^3 wody na głębokości do 100 metrów włącznie. Jest jeden taki obszar.

SELECT TOP 1 Obszary.nazwa_obszaru, Sum(Pomiary.ilosc) AS SumaOfilosc
FROM Obszary INNER JOIN Pomiary ON Obszary.kod_obszaru = Pomiary.kod_obszaru
WHERE Pomiary.glebokosc <= 100
GROUP BY Obszary.nazwa_obszaru
ORDER BY Sum(Pomiary.ilosc) DESC;

Wynik: Mare Boreum - Zapytanie wybiera obszar o największej sumie ilości pomiarów wykonanych na głębokości do 100 jednostek. Wynik zawiera nazwę obszaru oraz łączną wartość pomiarów.

Rozwiązanie 7.2 (0–2): Podaj nazwę łazika, który wykonywał pomiary w najdłuższym okresie, licząc od pierwszego (najwcześniejszego) do ostatniego (najpóźniejszego) pomiaru. Podaj datę pierwszego i ostatniego pomiaru wykonanego przez ten łazik

SELECT TOP 1 Laziki.nazwa_lazika, Min(Pomiary.data_pomiaru) AS MinimumOfdata_pomiaru, Max(Pomiary.data_pomiaru) AS MaksimumOfdata_pomiaru
FROM Laziki INNER JOIN Pomiary ON Laziki.nr_lazika = Pomiary.nr_lazika
GROUP BY Laziki.nazwa_lazika
ORDER BY Max([data_pomiaru]) - Min([data_pomiaru]) DESC;

Wynik: Spirit 14 29.08.2066 25.07.2076 - Zapytanie znajduje łazik, który prowadził pomiary przez najdłuższy okres czasu. W wyniku zwracana jest jego nazwa oraz daty pierwszego i ostatniego pomiaru.

Rozwiązanie 7.3 (0–2): Podaj nazwy obszarów na Marsie, na których żaden z łazików nie wykonał ani jednego pomiaru w tym samym roku, w którym został wysłany z Ziemi.

#Plik pomocniczy:
SELECT Obszary.kod_obszaru, Laziki.nr_lazika, Laziki.rok_wyslania
FROM Obszary INNER JOIN (Laziki INNER JOIN Pomiary ON Laziki.nr_lazika = Pomiary.nr_lazika) ON Obszary.kod_obszaru = Pomiary.kod_obszaru
WHERE Laziki.rok_wyslania = Year([Pomiary].[data_pomiaru]);

#Plik z odpowiedzią:
SELECT Obszary.nazwa_obszaru
FROM Obszary LEFT JOIN [c) pom] ON Obszary.kod_obszaru = [c) pom].kod_obszaru
WHERE [c) pom].kod_obszaru IS NULL;

Wynik to: Aeolis, Amazonis, Arabia, Elysium, Eridania, Mare Tyrrhenum, Sinus Sabaeus, Syrtis Major - Pierwsze zapytanie tworzy zestawienie obszarów i łazików, które wykonywały pomiary w roku ich wysłania. Drugie zapytanie wyszukuje obszary, w których żaden łazik nie prowadził takich pomiarów.

Rozwiązanie 7.4 (0–2): Podaj nazwy łazików, które wylądowały na półkuli południowej, ale wykonywały pomiary na obu półkulach: północnej (N) i południowej (S).

#Plik pom1
SELECT Laziki.nazwa_lazika, Laziki.wsp_ladowania
FROM Laziki
WHERE Laziki.wsp_ladowania LIKE "*S*";

#Plik pom2
SELECT Laziki.nazwa_lazika, Pomiary.wspolrzedne
FROM Laziki INNER JOIN Pomiary ON Laziki.nr_lazika = Pomiary.nr_lazika
WHERE Pomiary.wspolrzedne LIKE "*S*";

#Plik pom3
SELECT Laziki.nazwa_lazika, Pomiary.wspolrzedne
FROM Laziki INNER JOIN Pomiary ON Laziki.nr_lazika = Pomiary.nr_lazika
WHERE Pomiary.wspolrzedne LIKE "*N*";

#Plik z odpowiedzią:
SELECT [d) pom2].nazwa_lazika
FROM ([d) pom] INNER JOIN [d) pom1] ON [d) pom].nazwa_lazika = [d) pom1].nazwa_lazika) INNER JOIN [d) pom2] ON [d) pom1].nazwa_lazika = [d) pom2].nazwa_lazika
GROUP BY [d) pom2].nazwa_lazika;

Wynik to: 10 (lista: Mariner 14,15,20; Phoenix 13,3; Rosetta 1,8; Spirit 12,7; Viking 17) - Zestaw zapytań analizuje współrzędne łazików, które lądowały lub wykonywały pomiary na południu i północy planety. Ostateczne zapytanie wybiera łaziki, które zarówno wylądowały na południu, jak i prowadziły tam pomiary.

Rozwiązanie 7.5 (0–2): Do tabel utworzonych na podstawie opisanych wcześniej plików dołączamy kolejną – o nazwie Producent, w której zapisano informacje o producentach poszczególnych modeli łazików

SELECT Producent.nazwa
FROM Producent INNER JOIN (Obszary INNER JOIN (Laziki INNER JOIN Pomiary ON Laziki.nr_lazika = Pomiary.nr_lazika) ON Obszary.kod_obszaru = Pomiary.kod_obszaru) ON Producent.kod_producenta = Laziki.kod_producenta
WHERE Obszary.nazwa_obszaru = "Arcadia" AND Year([data_pomiaru]) = 2060
GROUP BY Producent.nazwa;

Zapytanie wyszukuje producentów łazików, które wykonywały pomiary na obszarze Arcadia w roku 2060. Wynikiem jest lista nazw producentów, którzy uczestniczyli w tych badaniach.

Podsumowanie: Wnioski z Matury z Informatyki 2025 i Zachęta do Rozwoju

Matura z informatyki na poziomie rozszerzonym w maju 2025 roku, przeprowadzona 14 maja, okazała się testem nie tylko wiedzy, ale i umiejętności radzenia sobie z presją czasu oraz pułapkami CKE. Średni wynik uzyskany przez zdających był na poziomie 38-40%, co wskazuje na lekki postęp w porównaniu do 36% w 2024 roku, choć nadal wymaga od zdających solidnego przygotowania. Tematyka – od rekurencji i systemów liczbowych po analizę danych z Marsa – pokazała, jak ważna jest praktyka w programowaniu, pracy z plikami i bazami danych.Pułapki, takie jak niejasne sformułowania czy wymagania precyzyjnego formatowania, były kluczowym wyzwaniem. Jednak sukces na maturze 2026 jest w zasięgu – wystarczy regularne ćwiczenie z arkuszami CKE, mastering narzędzi jak Python czy SQL.Chcesz podnieść swoje umiejętności i zdać maturę z wyróżnieniem? Zapraszamy do skorzystania z profesjonalnych korepetycji na naszej stronie prokorepetycje.pl lub pod numerem telefonu 22 308 73 73. Nasi doświadczeni tutorzy pomogą Ci opanować trudniejsze zagadnienia i przygotować się do egzaminu w sposób skuteczny. Nie czekaj – zainwestuj w swoją przyszłość już dziś!

Chcesz podnieść swoje umiejętności i zdać maturę z wyróżnieniem? Zapraszamy do skorzystania z profesjonalnych korepetycji na naszej stronie prokorepetycje.pl lub pod numerem telefonu 22 308 73 73. Nasi doświadczeni tutorzy pomogą Ci opanować trudniejsze zagadnienia i przygotować się do egzaminu w sposób skuteczny. Nie czekaj – zainwestuj w swoją przyszłość już dziś!