
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.
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.
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.
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.
| n | Wynik działania funkcji przestaw | Liczba wywołań funkcji przestaw |
|---|---|---|
| 316498 | 134689 | 3 |
| 43657688 | 34566788 | 4 |
| 154005710 | 145007501 | 5 |
| 998877665544321 | 989786756453412 | 8 |
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.
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) → 2143Puł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.
Opis: Plik symbole.txt: 2000 wierszy po 12 znaków (o, +, *). Zadania: palindromy, kwadraty 3x3, konwersja do bazy 3.
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.
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.
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.
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.
Opis: Plik dron.txt: 100 przesunięć [A, B]. Start (0,0), analiza trajektorii.
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.
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.
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.
Rozwiązanie: D – przechwytywania i gromadzenia informacji o naciśniętych klawiszach.
______________________________________
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.
| [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).
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.
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.
#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.
#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.
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.
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ś!