Zadanie 1: Szyfrowanie - Matura z Informatyki 2026, czerwiec

W zadaniu mamy do czynienia z nietypowym algorytmem szyfrującym, który działa poprzez przestawianie kolejności liter w tekście. Liczba użytych zmiennych może sugerować, że algorytm jest skomplikowany, jednak jego działanie da się zrozumieć poprzez analizę kolejnych kroków. Aby najlepiej uchwycić jego logikę, warto prześledzić przykłady z zadania 1.1, rozbijając cały przebieg programu na pojedyncze iteracje pętli.
Zadanie 1.1: Szyfrogram dla podanych tekstów i kluczy

Mamy do uzupełnienia tabelę z kolumnami: liczba znaków n, tekst jawny, klucz k oraz szyfrogram.
Na każdym arkuszu maturalnym pojawia się zadanie polegające na analizie algorytmu oraz przedstawieniu jego działania na przykładach. Tak jest również w tym przypadku. Zadanie można rozwiązać na dwa sposoby:
1. Metodą komputerową - przepisujemy kod do wybranego, dozwolonego na maturze języka programowania, uruchamiamy program dla danych z tabeli, a następnie uzupełniamy ją otrzymanymi wynikami. Jest to szybki sposób, który pozwala rozwiązać problem bez większego wysiłku.
2. Metodą ręczną - na kartce odtwarzamy kolejne iteracje pętli, na bieżąco aktualizując wartości zmiennych. Ostatecznie otrzymujemy taki sam wynik jak w przypadku działania programu. Choć ta metoda jest bardziej czasochłonna, umożliwia dokładne zrozumienie działania algorytmu, co jest kluczowe przy rozwiązywaniu kolejnych podpunktów.
Ma to duże znaczenie, ponieważ bardzo często w zadaniu 1.2 lub 1.3 pojawiają się pytania sprawdzające właśnie zrozumienie działania kodu.
Dlatego zamiast od razu przenosić wszystko do programu, przejdźmy drogę zrozumienia krok po kroku, analizując algorytm „ręcznie”.
Analiza algorytmu dla pierwszego tekstu
Zacznijmy od obliczenia a i c.

Mając te zmienne, możemy przejść do sedna algorytmu - pętli przechodzącej po kolejnych wartościach od 1 do n.



Dalej według tego schematu tablica S dla następnych i będzie się zmieniała w następujący sposób:


Po przeanalizowaniu działania algorytmu na przykładzie łatwo zauważyć jego główną zasadę: algorytm dzieli znaki tekstu na dwie grupy - te stojące na pozycjach będących wielokrotnością klucza k oraz całą resztę - i zapisuje je w szyfrogramie w dwóch różnych miejscach: „od przodu” i „od tyłu” tablicy S.
To właśnie ta nietypowa logika powoduje, że szyfrogram jest przestawieniem liter. W rezultacie tablica S zostaje podzielona na dwie sekcje:
Sekcja I (końcowa część S): zawiera znaki z pozycji będących wielokrotnością k, w kolejności rosnącej.
Sekcja II (początkowa część S): zawiera wszystkie pozostałe znaki, ale zapisane od końca do początku.

Następny wiersz tabeli (drugi tekst)
Przy szyfrowaniu drugiego tekstu można postąpić w analogiczny sposób.

Zadanie 1.2: Klucz k, dla którego szyfrogram i tekst jawny są identyczne

W tym podpunkcie musimy ustalić wartość klucza k, dla której tekst jawny i szyfrogram są identyczne. Kiedy może do tego dojść?
Aby szyfrogram był taki sam jak tekst jawny, każda litera musiałaby trafić dokładnie na tę samą pozycję, na której znajduje się w tablicy T. Wiemy jednak, że algorytm zapisuje znaki w niezmienionej kolejności tylko w sekcji I - czyli dla tych pozycji, które są wielokrotnością klucza k.
Oznacza to, że każda pozycja od 1 do n musiałaby być wielokrotnością k.
Jedyną wartością, która to umożliwia, jest k = 1.
Ten podpunkt okazał się niemal „darmowym” punktem na maturze - wystarczyło wcześniej dokładnie przeanalizować algorytm. To właśnie pokazuje, jak ważne jest zrozumienie jego działania, a nie tylko mechaniczne wykonywanie obliczeń.
Zadanie 1.3: Klucz k, dla którego szyfrogram to tekst od końca

W tym podpunkcie szukamy takiej wartości klucza k, dla której szyfrogram zawsze jest tekstem jawnym zapisanym od końca.
Aby tak się stało, każdy znak musi trafić do sekcji II, czyli tej części tablicy S, która zapisuje znaki w odwrotnej kolejności. Oznacza to, że żadna pozycja nie może być wielokrotnością k, bo wtedy znak trafiłby do sekcji I i zaburzył odwrócenie tekstu.
Jedynym sposobem, aby i mod k ≠ 0 dla każdej pozycji i od 1 do n, jest ustawienie k > n. Wtedy żadna liczba z zakresu 1..n nie jest wielokrotnością k, więc cały tekst zostaje zapisany od końca. Warto zauważyć, że warunek k > n oznacza również, że poprawną wartością klucza jest k = n + 1.
Zadanie 2: Algorytm - Matura z Informatyki 2026, czerwiec

W zadaniu należy przeanalizować daną tablicę liczb całkowitych i określić, dla jak największej wartości k jej początkowy fragment jest taki sam jak końcowy fragment o tej samej długości. Mówimy wtedy, że tablica jest k-podobna. Wartość k może wynosić od 0 do n-1, gdzie n oznacza liczbę elementów tablicy. Należy więc porównywać początek tablicy z jej końcem i znaleźć największą wartość k, dla której oba fragmenty są identyczne.
Można szybko zauważyć, że zadanie to jest bardzo podobne do zadania 3.3 z matury z maja 2026 roku, dotyczącego prefiksów i sufiksów. Tym razem jednak musimy samodzielnie przeanalizować działanie programu, krok po kroku, bez jego uruchamiania.
Zadanie 2.1: Największe k, dla którego T jest k-podobna

Rozważmy wszystkie wartości k mniejsze od n i sprawdźmy, dla których z nich tablica T = [1, 2, 3, 4] jest k-podobna. Na początku możemy przyjąć k = 0, ponieważ zgodnie z treścią zadania każda tablica jest 0-podobna.
![Matura z informatyki 2026, czerwiec, formuła 2023, poziom rozszerzony - rozwiązanie zadania 2.1: analiza k-podobieństwa tablicy T = [1, 2, 3, 4] dla k = 0, k = 1 i k = 2](https://kursmaturainformatyka.b-cdn.net/images/_blog/arkusze-matura-informatyka-2026-rozszerzenie-czerwiec-formula-2023-10-czerwca-2026-formula-2023-zadanie-2-1-k-podobna-analiza-tablicy-k-0-k-2-slajd.jpg?v=4&width=1024&quality=95&format=webp)
![Matura z informatyki 2026, czerwiec, formuła 2023, poziom rozszerzony - rozwiązanie zadania 2.1: analiza k-podobieństwa tablicy T = [1, 2, 3, 4] dla k = 3, największe k wynosi 0](https://kursmaturainformatyka.b-cdn.net/images/_blog/arkusze-matura-informatyka-2026-rozszerzenie-czerwiec-formula-2023-10-czerwca-2026-formula-2023-zadanie-2-1-k-podobna-tablica-k-3-najwieksze-k-0-slajd.jpg?v=4&width=1024&quality=95&format=webp)
Analogiczne rozumowanie można przeprowadzić dla tablicy T = [3, 5, 3, 5, 3, 5, 3, 5, 3, 5]. Oczywiście nie ma potrzeby rozpisywania tego w tak formalny sposób. Można od razu zauważyć, że za każdym razem wybieramy początkowy oraz końcowy fragment tablicy o długości k, a następnie sprawdzamy, czy oba fragmenty są identyczne.
![Matura z informatyki 2026, czerwiec, formuła 2023, poziom rozszerzony - zadanie 2.1: tabela k-podobieństwa tablicy [3, 5, …] dla k = 1 do k = 4](https://kursmaturainformatyka.b-cdn.net/images/_blog/arkusze-matura-informatyka-2026-rozszerzenie-czerwiec-formula-2023-10-czerwca-2026-formula-2023-zadanie-2-1-k-podobna-tablica-35-analiza-k-1-k-4-slajd.jpg?v=4&width=1024&quality=95&format=webp)
![Matura z informatyki 2026, czerwiec, formuła 2023, poziom rozszerzony - zadanie 2.1: tabela k-podobieństwa tablicy [3, 5, …] dla k = 5 do k = 8](https://kursmaturainformatyka.b-cdn.net/images/_blog/arkusze-matura-informatyka-2026-rozszerzenie-czerwiec-formula-2023-10-czerwca-2026-formula-2023-zadanie-2-1-k-podobna-tablica-35-analiza-k-5-k-8-slajd.jpg?v=4&width=1024&quality=95&format=webp)
![Matura z informatyki 2026, czerwiec, formuła 2023, poziom rozszerzony - zadanie 2.1: analiza k = 9 i największe k = 8 dla tablicy [3, 5, …]](https://kursmaturainformatyka.b-cdn.net/images/_blog/arkusze-matura-informatyka-2026-rozszerzenie-czerwiec-formula-2023-10-czerwca-2026-formula-2023-zadanie-2-1-k-podobna-tablica-3535-k-9-nie-najwieksze-k-8-slajd.jpg?v=4&width=1024&quality=95&format=webp)
Zadanie 2.2: Algorytm największego k, dla którego T jest k-podobna

W tym zadaniu nie potrzebujemy żadnych wyszukanych operacji. Cała magia polega na porównywaniu elementów tablicy - nic więcej. Użyjemy tylko:
- zwykłych porównań ==,
- indeksowania tablicy,
- prostych pętli,
- ewentualnie odejmowania, żeby policzyć odpowiednie pozycje.
Czyli absolutne podstawy z pierwszych lekcji o tablicach.
Konstrukcja algorytmu
Najprościej jest sprawdzać kolejne wartości k od największego możliwego do najmniejszego. Dlaczego od największego? Bo zadanie każe znaleźć największe takie k - więc jeśli zaczniemy od góry, to pierwsze trafienie kończy robotę.
Jak to wygląda krok po kroku?
- Ustawiamy k = n - 1, bo k musi być mniejsze niż długość tablicy.
- Dla danego k porównujemy wszystkie elementy o indeksach i ≤ k zgodnie z zasadą: T[i] = T[n - k + i], dla i = 1, 2, ..., k.
- Jeśli wszystkie pary są równe → znaleźliśmy największe k, zwracamy wynik.
- Jeśli nie → zmniejszamy k o 1 i próbujemy ponownie.
- Jeśli dojdziemy do k = 0 → każda tablica jest 0-podobna, więc zwracamy 0.
Zadanie 3: Pary - Matura z Informatyki 2026, czerwiec

Zadanie 3.1: Kolejne identyczne np-pary znaków

Musimy zliczyć wszystkie sytuacje, w których dwie kolejne np-pary są identyczne. Np-para to po prostu dwa znaki, gdzie pierwszy stoi na pozycji nieparzystej, a drugi na parzystej - innymi słowy analizujemy tekst „dwójkami”: 1-2, 3-4, 5-6 itd. Żeby zrobić to w sposób czytelny i uporządkowany, podzielimy zadanie na dwie funkcje: pierwszą odpowiedzialną za podział tekstu na np-pary oraz drugą zliczającą liczbę przypadków, w których kolejne pary są takie same.
Najpierw tworzymy funkcję utworz_np_pary, która z podanego napisu wyciąga wszystkie np-pary. Jej działanie jest bardzo proste: przechodzimy po tekście co 2 znaki i zapisujemy dwuznakowe fragmenty w liście np_pary. Dzięki temu otrzymujemy pełną sekwencję np-par, którą później możemy analizować.
Następnie tworzymy funkcję policz_powtorzenia_np_par, która sprawdza każdą parę wraz z następną, aby ustalić, czy są identyczne. Jeśli tak jest, funkcja zwiększa licznik o 1. Warto podkreślić, że na początku licznik ustawiamy na 0, ponieważ startujemy bez żadnych znalezionych powtórzeń - dopiero analiza kolejnych par pozwala nam ten licznik zwiększać i ostatecznie zwrócić wynik mówiący o tym, ile takich powtórzeń wystąpiło w całym napisie.
Rozwiązanie - zadanie 3.1 (Python):
Zadanie 3.2: Najdłuższy parzyście pierwszy fragment

W zadaniu 3.2 musimy znaleźć najdłuższy fragment napisu, który składa się z całych np-par i którego suma kodów ASCII wszystkich znaków jest liczbą pierwszą.
Najpierw potrzebujemy funkcji obliczającej sumę kodów ASCII dla dowolnego fragmentu tekstu. Jej działanie jest bardzo proste: przechodzimy po każdym znaku w napisie i dodajemy jego kod ASCII, uzyskany przez funkcję ord, do zmiennej suma. Dzięki temu możemy szybko sprawdzać dowolny fragment bez powtarzania kodu.
Kolejnym elementem jest funkcja sprawdzająca, czy dana liczba jest liczbą pierwszą. Tutaj wystarczy klasyczne podejście: odrzucamy liczby mniejsze niż 2, a następnie testujemy kolejne dzielniki, zaczynając od 2 aż do tej liczby pomniejszonej o 1. Jeśli żaden z nich nie dzieli naszej sumy, oznacza to, że mamy liczbę pierwszą.
Gdy mamy już te dwie pomocnicze funkcje, możemy przejść do właściwego zadania. Musimy wygenerować wszystkie możliwe fragmenty napisu, które składają się z pełnych np-par, czyli mają długość parzystą i zaczynają się na początku pary. W praktyce oznacza to, że iterujemy po napisie co dwa znaki i dla każdego takiego miejsca tworzymy fragmenty o długości 2, 4, 6, 8… aż do końca tekstu.
Każdy z tych fragmentów sprawdzamy: najpierw obliczamy jego sumę ASCII, potem sprawdzamy, czy ta suma jest liczbą pierwszą. Jeśli tak, porównujemy długość fragmentu z aktualnie najlepszym wynikiem.
Na początku najlepszy fragment ustawiamy jako pusty napis, ponieważ nie mamy jeszcze żadnego kandydata - dopiero analiza kolejnych fragmentów pozwala nam znaleźć ten właściwy. Gdy trafimy na fragment spełniający warunki i dłuższy od poprzedniego, zapisujemy go jako nowy najlepszy wynik. Po przejściu całego napisu otrzymujemy najdłuższy parzyście pierwszy fragment.
Rozwiązanie - zadanie 3.2 (Python):
Zadanie 3.3: Napis z np-par uporządkowanych według liczby wystąpień

W zadaniu 3.3 musimy policzyć, ile razy każda np-para występuje w napisie, a następnie ustawić wszystkie np-pary w kolejności rosnącej według liczby ich wystąpień. Na końcu łączymy je w jeden napis, w którym każda para pojawia się dokładnie raz. Ponieważ w danych nie ma dwóch par o tej samej liczbie wystąpień, wynik jest jednoznaczny i nie wymaga dodatkowych kryteriów sortowania.
Najpierw wyciągamy wszystkie np-pary z napisu. Robimy to tak samo jak wcześniej: używając funkcji utworz_np_pary, przechodzimy po tekście co dwa znaki i zapisujemy dwuznakowe fragmenty. Dzięki temu mamy pełną listę par, które później będziemy analizować.
Kolejna funkcja, zlicz_wystapienia_np_par, zajmuje się policzeniem, ile razy każda np-para występuje w napisie. Wykorzystujemy tutaj słownik, w którym kluczem jest para znaków, a wartością liczba jej wystąpień. Przechodzimy przez listę np-par i dla każdej zwiększamy licznik. Jeśli dana para pojawia się po raz pierwszy, dodajemy ją do słownika z wartością 0, a następnie zwiększamy tę wartość o 1. Po zakończeniu pętli mamy pełną informację o tym, jak często występuje każda para - to kluczowy element zadania.
Następnie przechodzimy do funkcji posortuj_babelkowo_pary, która odpowiada za ustawienie np-par w kolejności rosnącej według liczby ich wystąpień. Implementujemy klasyczne i każdemu znane sortowanie bąbelkowe.
W naszym przypadku porównujemy liczby wystąpień dwóch par i zamieniamy je, jeśli pierwsza występuje częściej niż druga. Po kilku przejściach lista ustawia się w odpowiedniej kolejności, a my otrzymujemy uporządkowane np-pary zgodnie z wymaganiami zadania.
Ostatnia funkcja, uporzadkuj_np_pary, łączy wszystkie poprzednie kroki w jedną całość. Najpierw wyciągamy np-pary z napisu, potem zliczamy ich wystąpienia, a następnie tworzymy listę samych par bez powtórzeń, którą przekazujemy do sortowania bąbelkowego. Gdy lista jest już uporządkowana, budujemy wynikowy napis, dopisując kolejne pary do zmiennej wynik. W ten sposób powstaje finalny tekst, w którym każda np-para pojawia się dokładnie raz, ustawiona zgodnie z rosnącą liczbą wystąpień.
Rozwiązanie - zadanie 3.3 (Python):
Tym samym zakończyliśmy zadanie 3. Możemy umieścić nasze odpowiedzi w pliku wyniki3.txt i przejść do kolejnego zadania.

Zadanie 4: Miasta na mapie - Matura z Informatyki 2026, czerwiec

Zadanie 4.1: Miasto o największej liczbie mieszkańców

W zadaniu 4.1 musimy znaleźć miasto o największej liczbie mieszkańców. Każdy wiersz pliku zawiera trzy informacje: współrzędną X, współrzędną Y oraz populację wyrażoną w tysiącach mieszkańców. Interesuje nas wyłącznie trzecia wartość, czyli wielkość miasta. Ponieważ w pliku jest dokładnie jedno miasto o największej liczbie mieszkańców, zadanie sprowadza się do przejrzenia wszystkich wierszy i zapamiętania tego, które ma największą wartość w kolumnie populacji.
Najpierw wczytujemy plik linia po linii. Każdą linię dzielimy na trzy zmienne (x, y i populacja), a trzecią z nich zamieniamy na liczbę całkowitą. W trakcie przeglądania danych utrzymujemy dwie zmienne: najwieksza_populacja przechowującą największą dotychczas znalezioną populację i numer_miasta przechowującą numer miasta, które tę populację posiada. Na początku ustawiamy największą populację na wartość 0, aby każde poprawne miasto mogło ją zastąpić. Numer miasta zwiększamy przy każdym odczytanym wierszu, dzięki czemu wiemy, które miasto aktualnie analizujemy.
Dla każdego wiersza sprawdzamy, czy populacja jest większa niż ta zapisana w zmiennej najwieksza_populacja. Jeśli tak, aktualizujemy zarówno największą populację, jak i numer miasta. Po przejściu całego pliku mamy jednoznacznie wybrane miasto o największej liczbie mieszkańców. Na końcu wypisujemy jego numer oraz populację w tysiącach, zgodnie z wymaganiami zadania.
Rozwiązanie - zadanie 4.1 (Python):
Zadanie 4.2: Najmniejsza odległość między miastami

W zadaniu 4.2 musimy znaleźć najmniejszą odległość między dwoma miastami oraz wypisać wszystkie pary miast, które mają dokładnie taką odległość. Każde miasto ma współrzędne X i Y, a odległość między dwoma miastami liczymy według wzoru podanego w treści: jest to suma wartości bezwzględnych różnic współrzędnych.
Ponieważ w pliku znajduje się 1000 miast, musimy porównać każde miasto z każdym innym, ale pamiętając, że para 1-2 jest tym samym co 2-1, więc nie powinniśmy liczyć jej dwa razy.
Najpierw wczytujemy wszystkie miasta z pliku i zapisujemy je w liście jako trójki: numer miasta, współrzędna X oraz współrzędna Y. Dzięki temu później możemy łatwo odwoływać się do ich położenia i numerów. Następnie przechodzimy przez wszystkie możliwe pary miast, ale w taki sposób, aby każdą parę sprawdzić tylko raz - najczęściej robi się to, zaczynając drugą pętlę od elementu o indeksie o 1 większym niż pierwszy. Dla każdej pary obliczamy odległość według wzoru i porównujemy ją z aktualnie najmniejszą znalezioną odległością.
Na początku ustawiamy najmniejszą odległość na bardzo dużą wartość, aby pierwsza poprawnie obliczona odległość mogła ją zastąpić. Wiemy, że współrzędne wszystkich miast mieszczą się w zakresie od -250 do 250 na obu osiach. Oznacza to, że dwa miasta mogą być maksymalnie oddalone o 500 jednostek w poziomie i 500 w pionie. W związku z tym wystarczy na początku ustawić zmienną na wartość większą niż 1000, ponieważ żadna rzeczywista odległość między miastami nie przekracza tej granicy.
Jeśli obliczona odległość jest mniejsza niż dotychczasowa, aktualizujemy najmniejszą odległość i jednocześnie czyścimy listę par, ponieważ znaleźliśmy nową, lepszą wartość. Jeśli obliczona odległość jest równa najmniejszej, dopisujemy parę miast do listy wynikowej. W ten sposób po przejściu wszystkich par mamy zarówno najmniejszą odległość, jak i wszystkie pary miast, które ją osiągają.
Na końcu wypisujemy najpierw wartość najmniejszej odległości, a potem każdą parę w osobnym wierszu, zgodnie z wymaganiami zadania.
Rozwiązanie - zadanie 4.2 (Python):
Zadanie 4.3: Aglomeracja - bok kwadratu i liczba mieszkańców

W zadaniu 4.3 musimy znaleźć największą możliwą aglomerację, czyli największy kwadrat o bokach równoległych do osi układu współrzędnych, którego lewy dolny róg znajduje się w punkcie (0, 0), a prawy górny róg w punkcie (k, k), gdzie k jest dodatnią liczbą całkowitą. Wewnątrz takiego kwadratu mogą znajdować się tylko miasta położone w pierwszej ćwiartce, czyli takie, których współrzędne X i Y są dodatnie. Zadanie polega na tym, aby znaleźć największą wartość k, dla której gęstość zaludnienia w tym kwadracie jest większa niż 2. Gęstość obliczamy jako liczbę mieszkańców (w tysiącach) podzieloną przez pole kwadratu, czyli k². Jeśli gęstość jest większa niż 2, to taki kwadrat spełnia warunki zadania. Musimy znaleźć największy taki kwadrat oraz policzyć liczbę mieszkańców w jego wnętrzu.
W pierwszym kroku przygotowujemy funkcję wczytaj_miasta_z_pierwszej_cwiartki, która ma wczytać miasta z pliku, ale tylko te, które mogą należeć do aglomeracji. Zgodnie z definicją z zadania, interesują nas wyłącznie miasta położone w pierwszej ćwiartce układu współrzędnych, czyli takie, których współrzędne X i Y są dodatnie. Dlatego przechodzimy przez każdą linię pliku, rozdzielamy ją na współrzędne i populację, a następnie sprawdzamy, czy obie współrzędne są większe od zera. Jeśli tak, zapisujemy miasto na liście miasta w postaci trójki liczb. W ten sposób otrzymujemy listę miast, które faktycznie mogą znaleźć się w kwadracie aglomeracji.
Kolejna funkcja, policz_populacje_w_kwadracie, odpowiada za policzenie populacji w kwadracie o zadanym boku k. Przechodzimy przez wszystkie miasta z pierwszej ćwiartki i dla każdego sprawdzamy, czy jego współrzędne mieszczą się w zakresie (0, k). Jeśli zarówno X, jak i Y są mniejsze niż k, oznacza to, że miasto znajduje się wewnątrz kwadratu o wierzchołkach (0,0) i (k,k). W takim przypadku dodajemy jego populację do sumy. Po przejściu wszystkich miast otrzymujemy liczbę mieszkańców znajdujących się w tym obszarze.
Najważniejsza część znajduje się w funkcji znajdz_najwieksza_aglomeracje. Tutaj analizujemy kolejne wartości k z przedziału [1, 250]. Dla każdej wartości k obliczamy populację w kwadracie, a następnie wyliczamy gęstość zaludnienia, dzieląc populację przez pole kwadratu, czyli k². Jeśli gęstość jest większa niż 2, oznacza to, że kwadrat spełnia warunki zadania i zapisujemy go jako aktualnie najlepszy. Dzięki temu po przejściu całego zakresu mamy największą wartość k, dla której gęstość była wystarczająco duża, oraz liczbę mieszkańców w tym kwadracie.
Na końcu wypisujemy najpierw długość boku kwadratu tworzącego aglomerację, a następnie sumaryczną liczbę jej mieszkańców, zgodnie z wymaganiami zadania.
Rozwiązanie - zadanie 4.3 (Python):
Ostateczne wyniki zapisane w pliku wyniki4.txt prezentują się następująco.

Zadanie 5: Równości w systemach liczbowych - Matura z Informatyki 2026, czerwiec

Jest to standardowe zadanie z systemów liczbowych (niemal identyczne jak na maturze majowej), w którym wykorzystujemy dodawanie i odejmowanie liczb w różnych systemach: szóstkowym, trójkowym i dziesiętnym. Aby znaleźć brakujące liczby, zaczynamy od podzielenia wskazanego równania na dwa osobne wyrażenia:
1251₆ + ……₆ = 500₁₀
500₁₀ = …..₃ − 110102₃.
Skupmy się najpierw na pierwszym wyrażeniu: 1251₆ + ……₆ = 500₁₀.
Szukamy liczby w systemie szóstkowym, którą należy dodać do liczby 1251₆, aby otrzymać 500₁₀. Chcemy stworzyć proste równanie z jedną niewiadomą w systemie dziesiętnym, a następnie zamienimy otrzymaną liczbę na system szóstkowy.
Zamieniamy liczbę 1251₆ na system dziesiętny, czyli każdą cyfrę mnożymy przez szóstkę podniesioną do odpowiedniej potęgi.

Skoro 1251₆ wynosi 319₁₀, traktujemy nasze wyrażenie jak równanie matematyczne z jedną niewiadomą: 319₁₀ + x = 500₁₀. Zatem nasza pierwsza szukana liczba wynosi x = 181₁₀.
Ale to nie wszystko, bo w zadaniu mamy wskazane, że ma być to liczba w systemie szóstkowym, zatem teraz zamieniamy 181₁₀ na system szóstkowy, dzieląc 181 przez 6. Dla każdego dzielenia zapisujemy resztę i odczytujemy reszty „od dołu”. Szukaną liczbą jest 501₆.

Teraz rozpatrzmy drugie wyrażenie: 500₁₀ = …..₃ − 110102₃.
Szukamy liczby w systemie trójkowym, od której po odjęciu 110102₃ otrzymamy liczbę 500₁₀. Schemat jest analogiczny jak przy pierwszym wyrażeniu. Tworzymy równanie z jedną niewiadomą w jednym systemie, czyli w systemie dziesiętnym, a następnie otrzymaną liczbę zamieniamy na system trójkowy.
Zamieniamy liczbę 110102₃ na system dziesiętny, czyli analogicznie jak wcześniej, mnożymy każdą z cyfr, z których składa się liczba 110102 w systemie trójkowym, przez 3, oczywiście podniesioną do odpowiedniej potęgi. Otrzymujemy 335₁₀.

Otrzymujemy równanie 500₁₀ = x − 335₁₀. Po przeniesieniu i dodaniu liczb otrzymujemy wynik x = 835₁₀.
Teraz zamieniamy 835₁₀ na system trójkowy, czyli 835 dzielimy przez 3 tak długo, aż dojdziemy do zera. Dla każdego dzielenia zapisujemy resztę i odczytujemy reszty „od dołu” - jest to nasza druga szukana liczba: 835₁₀ = 1010221₃.

Zadanie 6: Uwierzytelnianie dwuskładnikowe - prawda czy fałsz - Matura z Informatyki 2026, czerwiec

Jest to zadanie z teorii informatyki, które pojawia się w każdym arkuszu maturalnym - zazwyczaj za 1 punkt, czyli 2% ostatecznego wyniku. Niemniej jednak o każdy punkt warto walczyć. Cały punkt dostajesz tylko za oba trafienia.
Zdanie 1 - P. „Stosowanie uwierzytelniania dwuskładnikowego nie gwarantuje braku dostępu dla osób niepowołanych.” To prawda. 2FA mocno utrudnia włamanie (hasło + drugi składnik), ale nie zamyka wszystkich dróg. Ktoś może wyłudzić od Ciebie i hasło, i kod (phishing), przejąć kartę SIM przy kodach SMS, ukraść sesję po zalogowaniu albo dostać się do telefonu z aplikacją TOTP. Zdanie mówi „nie gwarantuje” - i dokładnie tak jest: to dodatkowa warstwa, nie absolutna blokada.
Zdanie 2 - F. „Stosowanie uwierzytelniania dwuskładnikowego jest możliwe tylko na urządzeniach wyposażonych w kamerę i w mikrofon.” To fałsz. Drugi składnik wcale nie musi być twarzą ani głosem. Kod z SMS-a, z aplikacji, z maila, kody zapasowe albo mały klucz na USB też załatwiają sprawę - i żadne z tych rozwiązań nie wymaga kamery ani mikrofonu. Łatwo pomyśleć, że 2FA to tylko Face ID albo głos, a tu stoi „tylko na urządzeniach z kamerą i mikrofonem”, więc zaznaczasz F.
Zadanie 7: Recykling - Matura z Informatyki 2026, czerwiec

Szybki rzut oka na dane. W pliku dostawy.txt mamy numer dostawy, datę, dostawcę oraz liczbę kilogramów dostarczonego materiału.
Zadanie 7.1: Dzień z największą łączną dostawą materiału

Jak każde zadanie w arkuszu kalkulacyjnym, rozpoczynamy od wczytania danych. Wchodzimy w zakładkę „Dane” i wybieramy „Z pliku tekstowego/CSV”. Excel powinien sam rozpoznać odpowiedni format, ale warto upewnić się, że ogranicznikiem jest tabulator, a daty są poprawnie wykryte. Klikamy „Załaduj” i mamy bazę do pracy.

Aby znaleźć datę, w której dostarczono do magazynu największą liczbę kilogramów, najpierw musimy dla każdej daty poznać łączną liczbę dostarczonych kilogramów. Dlatego skorzystamy z tabeli przestawnej. Najpierw zaznaczamy całą tabelę, a następnie przechodzimy do zakładki „Wstawianie”, gdzie wybieramy opcję „Tabela przestawna”. W oknie wystarczy kliknąć „OK” - przeniesie nas wtedy do nowego arkusza z pustą tabelką.

Po prawej stronie, w zakładce „Pola tabeli przestawnej”, wybieramy to, co nas interesuje, czyli datę oraz liczbę kilogramów. Excel od razu uzupełnia tabelę o sumę dostarczonych kilogramów dla każdego dnia.

Następnie, żeby uzyskać największą sumę dostaw w dniu, należy posortować tabelę malejąco. Klikamy prawym przyciskiem na dowolną komórkę w kolumnie z sumą, wybieramy „Sortuj” i „Sortuj od największych do najmniejszych”. Wiersz, który teraz znajduje się na początku tabeli, jest naszą odpowiedzią.

Zadanie 7.2: Dostawca dwa razy tego samego dnia

W zadaniu 7.2 również najwygodniej będzie skorzystać z tabeli przestawnej. Tworzymy ją tak jak w poprzednim podpunkcie, jednak teraz w „Pola tabeli przestawnej” wybieramy nr dostawy, datę oraz dostawcę. Ważne, żeby w kategorii „wiersze” dostawca znajdował się nad datą - umożliwia odpowiednie grupowanie wyników.

Żeby nie sumować ze sobą numerów dostaw, tylko je zliczyć, klikamy na „Suma z Nr_dostawy” i w ustawieniach zmieniamy „Liczba” zamiast „Suma”.

W kolejnym kroku skorzystamy z funkcji LICZ.JEŻELI(), jednak nie zadziała ona od razu prawidłowo, jeżeli w jej zakresie będą znajdować się sumy częściowe dla każdego dostawcy. Dlatego ukrywamy je przed skorzystaniem z funkcji. Możemy to zrobić poprzez kliknięcie prawym przyciskiem na dowolną komórkę z nazwą dostawcy i wybraniem opcji „Suma częściowa Dostawca”.

Teraz używamy funkcji LICZ.JEŻELI(). Jako pierwszy argument zaznaczamy całą kolumnę z liczbą dostaw dla poszczególnych dostawców w poszczególnych dniach, a jako drugi argument ustawiamy liczbę 2 (ponieważ szukamy tylko dostawców, którzy w jednym dniu wykonali dokładnie 2 dostawy do magazynu). Po wciśnięciu Enter otrzymujemy odpowiedź do zadania.

Zadanie 7.3: Kilogramy według miesięcy i wykres kolumnowy

W zadaniu 7.3 musimy dla każdego miesiąca podać, ile łącznie dostarczono w nim materiału do magazynu oraz stworzyć wykres kolumnowy. Ponieważ będziemy musieli dla każdego miesiąca zsumować dostawy, możemy użyć tabeli przestawnej tak jak w podpunktach 7.1 i 7.2. W „Polach tabeli przestawnej” wybieramy liczbę kilogramów oraz miesiące. Żeby wybrać miesiące, najpierw zaznacz też pole „Data”. Potem możesz je odznaczyć.

Ponieważ tabela przestawna będzie częścią naszej końcowej odpowiedzi, musimy zadbać o jasne nazewnictwo. Nazwę kolumny „Etykiety wierszy” zmieniamy poprzez kliknięcie lewym przyciskiem na komórkę, a kolumny „Suma z liczba_kg” przez kliknięcie prawym przyciskiem i zmianę nazwy w ustawieniach. Możemy również usunąć sumę końcową przez kliknięcie prawym przyciskiem na komórkę i wybranie pozycji „Usuń sumę końcową”.


To zestawienie to jednak dopiero połowa sukcesu - należy jeszcze utworzyć na jego podstawie wykres kolumnowy. Robimy to poprzez zaznaczenie całej tabeli i wybranie wykresu kolumnowego w zakładce „Wstawianie”.

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.

Co ciekawe, nawet jeśli dane przedstawione na wykresie byłyby niepoprawne, a formatowanie wykresu byłoby dobrze zrobione, otrzymasz punkty właśnie za formatowanie wykresu.
Jak to zrobić szybko i sprawnie? Zielony plusik w prawym górnym rogu wykresu pozwoli wybrać jego elementy. Polecenie może nie wymieniać osi wprost, ale zasady oceniania punktują opis wykresu i osi - dodaj je zawsze.

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

Zadanie 7.4: Największy stan magazynu na koniec dnia

Przechodzimy teraz do symulacji - jest to nieodłączny element zadania w arkuszu kalkulacyjnym na każdej maturze z informatyki.
Budowę symulacji zaczynamy od przygotowania tabeli opisującej łączną dostawę w każdym dniu. Taką tabelę stworzyliśmy już przy okazji zadania 7.1, tyle że z sortowaniem malejącym. Zróbmy ją ponownie bez tego sortowania - dzięki temu uzyskamy łączną dostawę kg dla każdego dnia w kolejności chronologicznej.
Następnie do tabeli dodajemy kolumny: stan magazynu rano, liczba pobranych kilogramów, stan magazynu po pobraniu oraz stan magazynu wieczorem (po dostawie).
Z treści zadania wiemy, że 2 stycznia rano (przed dostawami) w magazynie znajdowało się 5000 kg materiału. Tę wartość wpisujemy tylko w pierwszym dniu - w kolejnych dniach stan magazynu rano bierzemy ze stanu wieczorem z dnia poprzedniego.
Liczba pobranych kilogramów będzie wyliczana zgodnie z zasadą: jeżeli w magazynie znajduje się nie więcej niż 3900 kg materiału, pobieramy całość. W przeciwnym przypadku pobieramy jedynie 3900 kg, a reszta pozostaje w magazynie. Warunek ten można zrealizować w Excelu, używając funkcji JEŻELI().

Stan magazynu po pobraniu to nic innego jak różnica między stanem magazynu rano a liczbą pobranych kilogramów. Z kolei stan magazynu wieczorem to suma stanu magazynu po pobraniu i dostawy.

W kolejnych dniach symulacji stan magazynu rano będzie równy stanowi magazynu wieczorem z poprzedniego dnia, dlatego wystarczy zastosować odpowiednie odwołanie do tej komórki.
Gdy wszystkie wzory są już przygotowane, przeciągamy je do końca tabeli i w ten sposób otrzymujemy pełną symulację. Teraz możemy przejść do właściwej realizacji zadania 7.4.

W zadaniu 7.4 musimy ustalić, jaki był największy stan magazynu po dostawie oraz wskazać dzień, w którym wystąpił.
Aby znaleźć największą wartość w kolumnie „stan magazynu wieczorem”, skorzystamy z funkcji MAX().

Aby odnaleźć dzień, w którym stan magazynu wieczorem wynosił 11224 kg, możemy użyć formatowania warunkowego dostępnego w zakładce „Narzędzia główne”. Wybieramy „Reguły wyróżniania komórek”, a następnie „Równe…”. W okienku, które się pojawi, odwołujemy się do komórki zawierającej wynik funkcji MAX() i klikamy „OK”. Następnie przewijamy tabelę w dół, aż znajdziemy komórkę zaznaczoną na czerwono - jest to wiersz z dniem, którego szukamy.


Zadanie 7.5: Wydajność przetwórni przy pełnej mocy każdego dnia

Z przygotowanymi formułami z poprzedniego podpunktu to zadanie jest już formalnością. Wystarczy manipulować dzienną wydajnością w naszej formule tak, aby znaleźć wartość, dla której każdego dnia przetwarzana jest liczba kilogramów równa wydajności. Modyfikujemy więc formułę liczącą pobierane kilogramy tak, aby wydajność była pobierana z jednej, konkretnej komórki - dzięki temu możemy w ułamku sekundy testować kolejne warianty.

Następnie dodajemy kolumnę pomocniczą, która sprawdza, czy w danym dniu pobrano mniej kilogramów, niż wynosi maksymalna wydajność. Jeżeli w jakimkolwiek wierszu pojawi się wynik „TAK”, oznacza to, że ustawiona wydajność jest nadal zbyt wysoka.

Aby szybko sprawdzać, czy dana wydajność jest za wysoka, korzystamy z funkcji LICZ.JEŻELI(), która zlicza, ile razy pobrano mniej kilogramów, niż wynosi maksymalna wydajność. Gdy funkcja zwróci 0, oznacza to, że znaleźliśmy odpowiednią wartość. Pamiętajmy jednak, że musimy znaleźć maksymalną wydajność, dla której wynik funkcji nadal wynosi 0.


Na końcu możemy jeszcze rzucić okiem, jak wyglądałby wypełniony plik wyniki7.txt z odpowiedziami do zadania. I gotowe! Wszystkie zadania dotyczące arkusza kalkulacyjnego mamy wykonane. :)

Zadanie 8: Oceny - Matura z Informatyki 2026, czerwiec

Zadanie należało zacząć od wczytania danych z plików tekstowych dołączonych do arkusza. Są to trzy zbiory rekordów: uczniowie.txt, nauczyciele.txt oraz oceny.txt - zwykle każdy importujemy do osobnej tabeli (np. Uczniowie, Nauczyciele, Oceny).
Przy imporcie oceny.txt warto upewnić się, że pole z datą ma właściwy typ (Data i godzina) oraz że daty są odczytywane w układzie RMD (rok-miesiąc-dzień), zgodnie z arkuszem. W większości przypadków Access ustawi to poprawnie w kreatorze, ale ten krok warto zweryfikować przy pierwszym imporcie (także w zapisanej specyfikacji).


Po wczytaniu danych trzeba było jeszcze powiązać tabele relacjami zgodnie ze schematem z arkusza: między innymi Uczniowie → Oceny po Id_Ucznia oraz Nauczyciele → Oceny po Id_Naucz (typowe powiązania jeden-do-wielu). Poniżej przykład takiego układu w oknie relacji Access.

Teraz jesteśmy gotowi do realizacji właściwych zadań.
Zadanie 8.1: Średnia ocen z matematyki kobiet i mężczyzn

W zadaniu należy obliczyć średnią ocen z matematyki wszystkich uczniów, osobno dla kobiet i mężczyzn. Musimy wykorzystać wszystkie trzy tabele, aby wyciągnąć z nich informacje o przedmiocie, płci i ocenach.
Najpierw w kryteriach dla pola Przedmiot wpisujemy „matematyka”, aby ograniczyć nasze zestawienie wyłącznie do tego przedmiotu. W kwerendzie stosujemy Grupuj według dla pola Plec, a dla pola Ocena wybieramy funkcję Średnia - dzięki temu otrzymamy osobne średnie dla kobiet i mężczyzn.

Pozostaje już tylko zmienić we właściwościach pola Ocena format na „Stałoprzecinkowy” oraz ustawić liczbę miejsc dziesiętnych na 2. Dzięki temu wynik spełnia wszystkie wymagania polecenia.

Zadanie 8.2: Nauczyciele bez ocen niedostatecznych w grudniu 2023

W zadaniu musimy znaleźć nauczycieli, którzy w grudniu 2023 roku nie wystawili ani jednej oceny niedostatecznej (1).
Od razu nasuwa się pomysł użycia kwerendy wyszukującej niepasujące dane. Jednak aby móc z niej skorzystać, musimy najpierw stworzyć kwerendę pomocniczą, w której znajdą się wszystkie oceny niedostateczne wystawione w grudniu 2023 wraz z identyfikatorami nauczycieli, którzy je wystawili.
Aby utworzyć zestawienie ocen niedostatecznych z grudnia, używamy w kryteriach funkcji Between #1.12.2023# And #31.12.2023#. Dodatkowo w kryteriach pola Ocena wpisujemy „1” i dodajemy pole Id_Naucz z tabeli Nauczyciele. Na koniec zapisujemy kwerendę pomocniczą, aby móc wykorzystać ją przy tworzeniu kwerendy wynikowej (my zapisaliśmy ją jako POM_8_2).

Na podstawie tego zestawienia tworzymy kwerendę wynikową - wyszukującą niepasujące dane.
Jak utworzyć kwerendę wyszukującą niepasujące dane?
W oknie Nowa kwerenda wybieramy Kreator kwerend wyszukujących niepasujące dane. Kreator prowadzi przez wybór tabeli „źródłowej”, tabeli porównawczej oraz przez dopasowanie klucza.

Interesują nas nauczyciele bez żadnej „jedynki” w grudniu - jako pierwszą wskazujemy więc tabelę Nauczyciele, ponieważ to z niej pochodzą rekordy, które mają trafić do kwerendy wynikowej (o ile nie mają dopasowania po drugiej stronie).

Kwerendą z pokrewnymi rekordami jest POM_8_2, ponieważ tam znajdują się wszystkie oceny niedostateczne wystawione w grudniu przez poszczególnych nauczycieli.

W obu tabelach łączymy dane po polu Id_Naucz.

W wyniku kreatora chcemy zobaczyć jedynie Id_Naucz, więc je wybieramy.

Po zakończeniu pracy kreatora zapisujemy kwerendę wynikową - w arkuszu pojawia się lista nauczycieli bez wpisów w POM_8_2.

Zadanie 8.3: Najrzadsza ocena w każdym miesiącu

W tym zadaniu musimy stworzyć zestawienie, w którym dla każdego miesiąca znajdziemy ocenę wystawioną najmniejszą liczbę razy oraz podamy tę liczbę.
Najpierw tworzymy kwerendę pomocniczą, w której dla każdego miesiąca ustalimy, ile razy poszczególne oceny zostały w nim wystawione. Aby wyodrębnić z dat miesiące, używamy funkcji Month(). Następnie stosujemy Grupuj według dla miesięcy i ocen, a dla pola Id_Oceny wybieramy funkcję Policz. My nazwaliśmy tę kwerendę POM_8_3_1.

Następnie, na podstawie właśnie utworzonej kwerendy POM_8_3_1, tworzymy kolejną kwerendę pomocniczą, aby znaleźć minimalną liczbę wystawień konkretnej oceny w każdym miesiącu. W tym celu stosujemy funkcję Minimum dla pola PoliczOfId_Oceny z POM_8_3_1. Gotową kwerendę nazywamy POM_8_3_2.

Na sam koniec wystarczy połączyć kwerendy POM_8_3_1 i POM_8_3_2 relacją między polami PoliczOfId_Oceny i MinimumOfPoliczOfId_Oceny oraz miesiącami. Dzięki temu otrzymamy dla każdego miesiąca te oceny, które miały najmniejszą liczbę wystawień spośród wszystkich ocen.

To był ostatni podpunkt rozwiązywany w Microsoft Access, więc po wpisaniu odpowiedzi z 8.1-8.3 możemy zerknąć, jak wygląda przykładowa zawartość pliku wyniki8.txt.

Zadanie 8.4: SQL: liczba ocen dla każdej kategorii

W podpunktach SQL zadania z baz danych zawsze czeka to samo wyzwanie - napisać zapytanie „na kartce”. W tym roku nie było wyjątku.
Musimy napisać zapytanie SQL, które zwróci nazwę kategorii oraz liczbę wystawionych ocen w tej kategorii. Czyli chcemy policzyć, ile ocen przypada na każdą kategorię (np. ile było sprawdzianów, kartkówek itd.). Do tego będą nam potrzebne tabele:
- Kategorie - żeby pobrać nazwy kategorii (
Nazwa_Kategorii), - Oceny - bo to tutaj znajdują się wszystkie wystawione oceny wraz z
Id_Kategorii.
Do połączenia tabel użyjemy INNER JOIN - interesują nas tylko rekordy występujące w obu tych tabelach.
Jak policzyć liczbę ocen? Wystarczy użyć funkcji agregującej COUNT() i pogrupować wyniki po nazwie kategorii.
Zadanie 8.5: SQL: uczeń z największą liczbą szóstek ze sprawdzianów

Szukamy jednego ucznia - tego, który ma najwięcej szóstek w kategorii sprawdzian.
W zapytaniu musimy ponownie użyć tabel:
- Oceny - bo tu są wszystkie oceny, ich wartości oraz
Id_Ucznia, - Kategorie - żeby wybrać tylko oceny ze sprawdzianów.
Używamy INNER JOIN, bo interesują nas tylko oceny, które mają przypisaną kategorię.
W warunkach (WHERE) wpisujemy:
- Ocena = 6 - tylko celujące,
- Kategorie.Nazwa_Kategorii = „sprawdzian” - tylko sprawdziany.
Jak znaleźć ucznia z największą liczbą takich ocen?
Najpierw trzeba policzyć, ile takich ocen ma każdy uczeń:
- grupujemy po
Id_Ucznia, - liczymy oceny funkcją
COUNT().
Potem wybieramy ucznia z największą liczbą - używamy ORDER BY … DESC i TOP 1 po SELECT.