PROGRAMOWANIE I ALGORYTMY

Trwa nabór 2026/27
Kurs maturalny z informatyki

Więcej szczegółów

Matura informatyka 2026 — rozwiązania, odpowiedzi i omówienie zadań


Matura z informatyki 2026 — omówienie zadań oraz rozwiązania

Omówienie matury z informatyki 2026 — 14 maja 2026

W dniu 14 maja 2026 roku odbył się egzamin maturalny z informatyki na poziomie rozszerzonym. Na tej stronie znajdziesz omówienie zadań maturalnych z informatyki 2026, przykładowe rozwiązania, odpowiedzi oraz komentarze do arkusza.

Co znajdziesz w omówieniu matury z informatyki 2026?

  • odpowiedzi do zadań z arkusza maturalnego z informatyki 2026,
  • omówienie zadań algorytmicznych i programistycznych,
  • rozwiązania w języku C++,
  • analizę zadań z baz danych, arkusza kalkulacyjnego i plików tekstowych,
  • link do arkusza PDF oraz plików z danymi,
  • komentarz egzaminatora do najczęstszych pułapek i sposobu punktowania.

Arkusz maturalny z informatyki 2026

Poniżej możesz pobrać arkusz maturalny z informatyki 2026 oraz pliki z danymi potrzebne do rozwiązania zadań praktycznych.

Pobierz arkusz maturalny z informatyki 2026 (PDF)
Pobierz pliki z danymi do matury z informatyki 2026 (ZIP)

Podgląd arkusza maturalnego:
Status: arkusz oraz pliki z danymi są już dostępne do pobrania.

Omówienie zadań maturalnych z informatyki 2026

Zadania algorytmiczne i programistyczne
Rozwiązania, analiza algorytmów, kod źródłowy oraz wyjaśnienie sposobu dochodzenia do wyniku.
Zadania z plikami tekstowymi
Omówienie wczytywania danych, przetwarzania plików i wyznaczania odpowiedzi.
Zadania z arkusza kalkulacyjnego
Wzory, zestawienia, tabele przestawne, wykresy i interpretacja wyników.
Zadania z baz danych i SQL
Zapytania SQL, relacje między tabelami oraz omówienie wyników.

Jak przygotować się do matury z informatyki?

Do matury z informatyki warto przygotowywać się przez systematyczne rozwiązywanie arkuszy z poprzednich lat. Szczególną uwagę należy zwrócić na programowanie, algorytmy, pracę na plikach, arkusz kalkulacyjny oraz bazy danych.

Na stronie algorytm.edu.pl znajdziesz również materiały pomocne w nauce programowania i przygotowaniu do matury z informatyki.

Odpowiedzi do matury z informatyki 2026


Odpowiedzi i rozwiązania zadań będą publikowane poniżej.

Zadanie 1. Rekurencja

Dana jest zdefiniowana rekurencyjnie funkcja A(m, n), gdzie m i n są dodatnimi liczbami całkowitymi.

A(m, n) =

{ m gdy n = 1
A(2 · m, n / 2) gdy n > 1 oraz n jest podzielne przez 2
2 · A(m, (n − 1) / 2) + m gdy n > 1 oraz n nie jest podzielne przez 2

Zadanie 1.1. (0–3)

Obliczenie wartości funkcji A(3, 9) wprost z definicji wymaga trzech wywołań rekurencyjnych: A(3, 4), A(6, 2), A(12, 1), ponieważ:

A(3, 9) = 2 · A(3, 4) + 3 = 2 · A(6, 2) + 3 = 2 · A(12, 1) + 3 = 2 · 12 + 3 = 27

Uzupełnij poniższą tabelę. Podaj liczbę wywołań rekurencyjnych funkcji A oraz wypisz wywołania rekurencyjne wraz z ich argumentami — w ostatnim wierszu podaj tylko liczbę wywołań rekurencyjnych.

m n liczba wywołań rekurencyjnych funkcji A wywołania rekurencyjne funkcji A
3 9 3 A(3, 4), A(6, 2), A(12, 1)
25 25 5 A(26, 24), A(27, 23), A(28, 22), A(29, 21), A(210, 20)
10 15 3 A(10, 7), A(10, 3), A(10, 1)
1 2100 + 1 100

Zadanie 1.2. (0–1)

Uzupełnij poniższą tabelę. Podaj wartości funkcji A(m, n) dla zadanych argumentów m i n:

m n A(m, n)
1 777 777
2 · 106 256 · 106 512 · 1012 = 512 000 000 000 000

Uwaga: W swoich odpowiedziach możesz zapisać wynik podobnie jak wartości w pierwszych dwóch kolumnach, z wykorzystaniem operatorów mnożenia i potęgowania.

Zadanie 1.3. (0–3)

Uzupełnij tabelę. W drugiej kolumnie podaj liczbę wywołań rekurencyjnych funkcji A dla każdej wartości n podanej w tabeli. W trzeciej kolumnie podaj wyrażenie, którego wartość jest równa drugiemu argumentowi funkcji w i-tym wywołaniu rekurencyjnym.

n – drugi argument wywołania funkcji liczba wywołań rekurencyjnych wartość drugiego argumentu A w i-tym wywołaniu rekurencyjnym
8 3 8 / 2i
2k k 2k − i
2k − 1 k − 1 2k − i − 1

gdzie k jest pewną liczbą całkowitą dodatnią większą od 2.

Zadanie 2. Dodawanie

Rozważamy dodawanie pisemne dwóch liczb zapisanych w systemie dziesiętnym. Podczas dodawania kolejnych cyfr od prawej do lewej może pojawić się przeniesienie do następnej kolumny.

Przeniesienie: 1 1 1 1
Liczba a: 2 7 7 3 2
Liczba b: + 7 2 6 1 9
1 0 0 3 5 1

W tym przykładzie mamy 4 przeniesienia.

W powyższym przykładzie podczas dodawania pojawiają się 4 przeniesienia.

Zadanie 2.1. (0–1)

Dla podanych par liczb a i b określ, ile razy pojawi się przeniesienie podczas ich dodawania pisemnego.

Liczba A Liczba B Liczba przeniesień
37932 12528 3
88765 11111 0
456789 222222 3

Zadanie 2.2. (0–4)

Napisz algorytm, który dla dwóch dodatnich liczb całkowitych a i b, mających taką samą liczbę cyfr, oblicza liczbę przeniesień powstających podczas ich dodawania pisemnego.

Przykład:
Dla liczb 27732 i 72619 wynikiem jest 4.

Algorytm powinien działać na liczbach całkowitych, bez zamiany liczb na napisy oraz bez używania tablic lub list. Wystarczy analizować kolejne cyfry od końca, używając reszty z dzielenia przez 10 oraz dzielenia całkowitego przez 10.

Idea rozwiązania

Przechodzimy po cyfrach od prawej do lewej. W każdej kolumnie dodajemy: cyfrę liczby a, cyfrę liczby b oraz ewentualne przeniesienie z poprzedniej kolumny. Jeśli suma jest większa lub równa 10, zwiększamy licznik przeniesień i ustawiamy przeniesienie na 1. W przeciwnym razie przeniesienie wynosi 0.

Rozwiązanie w Pythonie

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


# przykład
print(liczba_przeniesien(27732, 72619))  # 4

Rozwiązanie w C++

#include <iostream>
using namespace std;

int liczba_przeniesien(long long a, long long b)
{
    int p = 0;
    int przeniesienie = 0;

    while (a > 0)
    {
        int cyfra_a = a % 10;
        int cyfra_b = b % 10;

        int suma = cyfra_a + cyfra_b + przeniesienie;

        if (suma >= 10)
        {
            p++;
            przeniesienie = 1;
        }
        else
        {
            przeniesienie = 0;
        }

        a /= 10;
        b /= 10;
    }

    return p;
}

int main()
{
    cout << liczba_przeniesien(27732, 72619) << endl; // 4
    return 0;
}
Odpowiedź: algorytm zlicza przeniesienia, sprawdzając w każdej kolumnie, czy suma dwóch cyfr oraz poprzedniego przeniesienia jest co najmniej równa 10.

Zadanie 3. Pary słów

W pliku tekstowym pary.txt znajduje się 500 par słów złożonych z liter alfabetu angielskiego: a, b, ..., z. Każda para słów jest zapisana w osobnym wierszu. Słowa w wierszu są oddzielone pojedynczym odstępem, a długość każdego z nich nie przekracza 50 znaków.

Pierwszych pięć wierszy pliku pary.txt zawiera następujące pary słów:

bcba babb
abaa ccc
bcb abbba
bca cdd
aadc ddcdccaba

Napisz program, który znajdzie odpowiedzi do podanych zadań. Odpowiedzi do poszczególnych zadań zapisz w pliku wyniki3.txt. Każdą odpowiedź poprzedź numerem oznaczającym zadanie.

Uwaga: Program powinien ostatecznie działać na pliku pary.txt. Plik pary_przyklad.txt służy tylko do sprawdzania poprawności działania programu.

Zadanie 3.1. (0–2)

Niech f(s) oznacza sumę kodów ASCII znaków występujących w słowie s. Podaj parę słów s1, s2 występujących w jednym wierszu pliku pary.txt, dla których wartość |f(s1) − f(s2)| jest największa, oraz podaj tę wartość.

Przykład:

Dla pary słów oko i pies mamy:
f(oko) = 111 + 107 + 111 = 329
f(pies) = 112 + 105 + 101 + 115 = 433
|f(oko) − f(pies)| = 104

Dla pliku pary.txt poprawną odpowiedzią jest:
gpeeazeugmvsbzwsrxfplqdbakoxxe lhpbmoirdm 2206

Zadanie 3.2. (0–3)

Wspólną liczbę wystąpień litery x w słowach s1, s2 oznaczamy przez:

W(x, s1, s2) = minimum(d(x, s1), d(x, s2))

gdzie d(x, s) oznacza liczbę wystąpień litery x w słowie s.

Podaj parę słów występujących w jednym wierszu w pliku pary.txt, dla której suma wspólnych wystąpień wszystkich liter jest największa, oraz podaj tę sumę.

Przykład:

Dla pary słów adabbcdde i aadabbbccdc wspólne liczby wystąpień liter wynoszą:
a: 2, b: 2, c: 1, d: 2, e: 0
Suma wspólnych wystąpień wynosi 7.

Dla pliku pary.txt poprawną odpowiedzią jest:
aacbcccaacacbcabac cccccaaaacaccbabcba 18

Zadanie 3.3. (0–4)

Prefiksosufiksem pary słów s1, s2 nazywamy słowo, które jest początkiem s1 oraz końcem s2 albo początkiem s2 oraz końcem s1.

Podaj wszystkie pary słów z pliku pary.txt, dla których najdłuższy prefiksosufiks ma co najmniej 5 liter. Dla każdej takiej pary podaj długość najdłuższego prefiksosufiksu.

Przykład 1:

Dla pary aabbbca caacaab prefiksosufiksy to:

  • aab — początek pierwszego słowa i koniec drugiego,
  • ca — początek drugiego słowa i koniec pierwszego.

Najdłuższy prefiksosufiks ma długość 3, więc para nie spełnia warunków zadania.

Przykład 2:

Dla pary abbaabaa baabaabba prefiksosufiksy to:

  • a — początek pierwszego słowa i koniec drugiego,
  • abba — początek pierwszego słowa i koniec drugiego,
  • baa — początek drugiego słowa i koniec pierwszego,
  • baabaa — początek drugiego słowa i koniec pierwszego.

Najdłuższy prefiksosufiks ma długość 6, więc para spełnia warunki zadania.

Dla pliku pary_przyklad.txt poprawną odpowiedzią jest:
bbbbaabbababbaaaa baaaaabaaabbbabab 5
aababbbababbbbbbaab bbbbaabbababababa 7
aaaababaaaabbbb aabbbbbabbbaaaa 6
bbbbabaaabbbabb aaababaabbbbbbba 5
ccccabacbba acbbabcbcbcbaa 5
caabbccabccc cabccccabbaac 6
abaacabcccccabbbc abbbcbbbbbcabaca 5

Rozwiązanie w Pythonie

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):
        # początek s1 i koniec s2
        if s1[:dl] == s2[-dl:]:
            najlepszy = dl

        # początek s2 i koniec s1
        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))


# Zadanie 3.1
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)


# Zadanie 3.2
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)


# Zadanie 3.3
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")

Rozwiązanie w C++

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;

int suma_ascii(string s)
{
    int suma = 0;

    for (char znak : s)
        suma += int(znak);

    return suma;
}

int suma_wspolnych_wystapien(string s1, string s2)
{
    int licznik1[26] = {};
    int licznik2[26] = {};

    for (char znak : s1)
        licznik1[znak - 'a']++;

    for (char znak : s2)
        licznik2[znak - 'a']++;

    int wynik = 0;

    for (int i = 0; i < 26; i++)
        wynik += min(licznik1[i], licznik2[i]);

    return wynik;
}

int najdluzszy_prefiksosufiks(string s1, string s2)
{
    int najlepszy = 0;
    int maks = min(s1.size(), s2.size());

    for (int dl = 1; dl <= maks; dl++)
    {
        bool pierwszy = true;
        bool drugi = true;

        // początek s1 i koniec s2
        for (int i = 0; i < dl; i++)
        {
            if (s1[i] != s2[s2.size() - dl + i])
                pierwszy = false;
        }

        // początek s2 i koniec s1
        for (int i = 0; i < dl; i++)
        {
            if (s2[i] != s1[s1.size() - dl + i])
                drugi = false;
        }

        if (pierwszy || drugi)
            najlepszy = dl;
    }

    return najlepszy;
}

int main()
{
    ifstream wejscie("pary.txt");
    ofstream wynik("wyniki3.txt");

    vector<pair<string, string>> pary;
    string s1, s2;

    while (wejscie >> s1 >> s2)
        pary.push_back({s1, s2});

    // Zadanie 3.1
    int max_roznica = -1;
    string odp31_s1, odp31_s2;

    for (auto para : pary)
    {
        string a = para.first;
        string b = para.second;

        int roznica = abs(suma_ascii(a) - suma_ascii(b));

        if (roznica > max_roznica)
        {
            max_roznica = roznica;
            odp31_s1 = a;
            odp31_s2 = b;
        }
    }

    // Zadanie 3.2
    int max_suma = -1;
    string odp32_s1, odp32_s2;

    for (auto para : pary)
    {
        string a = para.first;
        string b = para.second;

        int suma = suma_wspolnych_wystapien(a, b);

        if (suma > max_suma)
        {
            max_suma = suma;
            odp32_s1 = a;
            odp32_s2 = b;
        }
    }

    // Zapis wyników
    wynik << "3.1\\n";
    wynik << odp31_s1 << " " << odp31_s2 << " " << max_roznica << "\\n\\n";

    wynik << "3.2\\n";
    wynik << odp32_s1 << " " << odp32_s2 << " " << max_suma << "\\n\\n";

    wynik << "3.3\\n";

    for (auto para : pary)
    {
        string a = para.first;
        string b = para.second;

        int dl = najdluzszy_prefiksosufiks(a, b);

        if (dl >= 5)
            wynik << a << " " << b << " " << dl << "\\n";
    }

    return 0;
}

Zadanie 4. Korporacja

W korporacji pracuje n osób, które na potrzeby zadania ponumerujemy liczbami 1, 2, ..., n. Pracownik numer 1 jest prezesem korporacji, a każdy z pozostałych pracowników ma dokładnie jednego bezpośredniego przełożonego.

Numer bezpośredniego przełożonego pracownika x jest zawsze mniejszy od numeru tego pracownika. Prezes korporacji nie ma żadnego przełożonego.

Przełożonym pracownika jest jego bezpośredni przełożony oraz każdy przełożony tego bezpośredniego przełożonego. Jeśli x jest przełożonym pracownika y, to y jest podwładnym pracownika x.

Przykład 1.

W przykładowej hierarchii:

  • pracownik 1 jest prezesem,
  • bezpośrednim przełożonym pracowników 2 i 4 jest pracownik 1,
  • bezpośrednim przełożonym pracowników 3, 5 i 6 jest pracownik 2,
  • bezpośrednim przełożonym pracownika 7 jest pracownik 3,
  • bezpośrednim przełożonym pracownika 8 jest pracownik 4.

Przełożonymi pracownika 7 są pracownicy 3, 2 i 1. Bezpośrednim przełożonym pracownika 7 jest pracownik 3. Podwładnymi pracownika 2 są pracownicy 3, 5, 6 i 7.

Zadanie 4.1. (0–1)

Dla każdego pracownika z przykładowej hierarchii określ, ilu ma on bezpośrednich podwładnych oraz ilu ma wszystkich podwładnych.

Numer pracownika Liczba bezpośrednich podwładnych Liczba wszystkich podwładnych
127
234
311
411
500
600
700
800

Informacja do zadań 4.2–4.4

Dany jest plik korpo.txt zawierający n = 50 000 liczb, który opisuje strukturę korporacji.

W pierwszym wierszu znajduje się liczba 0, oznaczająca brak przełożonego dla prezesa korporacji, który ma numer 1. W i-tym wierszu pliku, dla 2 ≤ i ≤ 50 000, znajduje się numer pracownika, który jest bezpośrednim przełożonym pracownika i.

Odpowiedzi do zadań zapisz w pliku wyniki4.txt, poprzedzając każdą odpowiedź numerem odpowiedniego zadania.

Zadanie 4.2. (0–2)

Na podstawie danych zapisanych w pliku korpo.txt podaj, ilu pracowników nie jest przełożonym żadnego pracownika.

Poprawna odpowiedź:
25113

Zadanie 4.3. (0–2)

Podaj, który pracownik spośród zapisanych w pliku korpo.txt ma najwięcej bezpośrednich podwładnych. Podaj numer tego pracownika oraz liczbę jego bezpośrednich podwładnych.

Poprawna odpowiedź:
2 19

Osoba 2, 19 bezpośrednich podwładnych.

Zadanie 4.4. (0–3)

Policz, ilu najwięcej przełożonych ma jeden pracownik. Podaj tę liczbę oraz podaj, ilu pracowników ma taką liczbę przełożonych.

Poprawna odpowiedź:
22 2

Największa liczba przełożonych: 22
Liczba pracowników: 2

Idea rozwiązania

Wczytujemy tablicę przelozony, w której przelozony[i] oznacza bezpośredniego przełożonego pracownika i.

  • W zadaniu 4.2 szukamy pracowników, którzy nie pojawiają się jako przełożeni żadnego innego pracownika.
  • W zadaniu 4.3 zliczamy, ilu bezpośrednich podwładnych ma każdy pracownik.
  • W zadaniu 4.4 obliczamy głębokość każdego pracownika w drzewie hierarchii, czyli liczbę jego przełożonych.

Rozwiązanie w Pythonie

# Zadanie 4. Korporacja

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

n = len(dane)

# pracownicy numerowani są od 1, więc dodajemy fikcyjne pole na indeksie 0
przelozony = [0] + dane

# liczba bezpośrednich podwładnych każdego pracownika
bezposredni = [0] * (n + 1)

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


# Zadanie 4.2
liczba_bez_podwladnych = 0

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


# Zadanie 4.3
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


# Zadanie 4.4
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 = 0
for pracownik in range(1, n + 1):
    if liczba_przelozonych[pracownik] == max_przelozonych:
        ilu_ma_max += 1


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")

Rozwiązanie w C++

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

int main()
{
    ifstream wejscie("korpo.txt");
    ofstream wynik("wyniki4.txt");

    vector<int> dane;
    int x;

    while (wejscie >> x)
        dane.push_back(x);

    int n = dane.size();

    vector<int> przelozony(n + 1);

    for (int i = 1; i <= n; i++)
        przelozony[i] = dane[i - 1];

    vector<int> bezposredni(n + 1, 0);

    for (int pracownik = 2; pracownik <= n; pracownik++)
    {
        int szef = przelozony[pracownik];
        bezposredni[szef]++;
    }

    // Zadanie 4.2
    int liczba_bez_podwladnych = 0;

    for (int pracownik = 1; pracownik <= n; pracownik++)
    {
        if (bezposredni[pracownik] == 0)
            liczba_bez_podwladnych++;
    }

    // Zadanie 4.3
    int max_bezposrednich = -1;
    int pracownik_max = -1;

    for (int pracownik = 1; pracownik <= n; pracownik++)
    {
        if (bezposredni[pracownik] > max_bezposrednich)
        {
            max_bezposrednich = bezposredni[pracownik];
            pracownik_max = pracownik;
        }
    }

    // Zadanie 4.4
    vector<int> liczba_przelozonych(n + 1, 0);

    for (int pracownik = 2; pracownik <= n; pracownik++)
    {
        liczba_przelozonych[pracownik] =
            liczba_przelozonych[przelozony[pracownik]] + 1;
    }

    int max_przelozonych = 0;

    for (int pracownik = 1; pracownik <= n; pracownik++)
    {
        if (liczba_przelozonych[pracownik] > max_przelozonych)
            max_przelozonych = liczba_przelozonych[pracownik];
    }

    int ilu_ma_max = 0;

    for (int pracownik = 1; pracownik <= n; pracownik++)
    {
        if (liczba_przelozonych[pracownik] == max_przelozonych)
            ilu_ma_max++;
    }

    wynik << "4.2\\n";
    wynik << liczba_bez_podwladnych << "\\n\\n";

    wynik << "4.3\\n";
    wynik << pracownik_max << " " << max_bezposrednich << "\\n\\n";

    wynik << "4.4\\n";
    wynik << max_przelozonych << " " << ilu_ma_max << "\\n";

    return 0;
}

Zadanie 5. Systemy pozycyjne

Zadanie 5. (0–2)

Poniżej zapisano wyrażenie matematyczne zawierające liczby zapisane w systemach: piątkowym, dziesiętnym i trójkowym.

W miejsce kropek wpisz odpowiednie liczby zapisane w systemie piątkowym i trójkowym, tak aby obie równości były prawdziwe.

(1440)5 +  5 = (427)10 =  3 − (110002)3

Poprawna odpowiedź

(1440)5 + (1212)5 = (427)10 = (1000220)3 − (110002)3

Krótkie sprawdzenie

Liczbę (1440)5 zamieniamy na system dziesiętny:

(1440)5 = 1 · 53 + 4 · 52 + 4 · 51 + 0 = 245

Skoro wynik ma być równy 427, druga liczba w systemie piątkowym musi mieć wartość:

427 − 245 = 182 = (1212)5

Z kolei:

(110002)3 = 1 · 35 + 1 · 34 + 0 · 33 + 0 · 32 + 0 · 31 + 2 = 326

Aby po odjęciu otrzymać 427, pierwsza liczba w systemie trójkowym musi mieć wartość:

427 + 326 = 753 = (1000220)3

Zadanie 6. Adresy IP

Zadanie 6. (0–1)

Uzupełnij zdania dotyczące długości adresów IP w wersji 4 oraz w wersji 6.

Adres IP w wersji 4 ma długość   bity.

Adres IP w wersji 6 ma długość   bitów.

Poprawna odpowiedź

Adres IP w wersji 4 ma długość 32 bity.

Adres IP w wersji 6 ma długość 128 bitów.

Zadanie 7. Staw

Pan Iksiński stał się właścicielem stawu o powierzchni całkowitej 10 000 m2. Pierwszą rośliną, którą postanowił w nim umieścić, jest rzęsa wodna, która osiąga wysoką skuteczność rozmnażania wegetatywnego, tzn. przy odpowiedniej temperaturze i wielkości opadów potrafi znacząco zwiększyć rozmiar zajmowanej powierzchni.

W pliku staw.txt są zawarte następujące informacje, rozdzielone znakami tabulacji:

  • Data – data pomiaru,
  • Temp – temperatura w danym dniu w °C, zaokrąglona do jednego miejsca po przecinku,
  • Opady – wielkość opadu w mm, zaokrąglona do liczby całkowitej.

Plik zawiera dane z całego 2022 roku. Z wykorzystaniem danych zawartych w pliku oraz dostępnych narzędzi informatycznych wykonaj podane zadania. Wyniki zapisz w pliku tekstowym wyniki7.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania.

Pobierz arkusz z rozwiązaniem zadania 7 (Excel)

Zadanie 7.1. (0–3)

Utwórz zestawienie średnich miesięcznych temperatur w zaokrągleniu do jednego miejsca po przecinku. Na podstawie wykonanego zestawienia utwórz wykres kolumnowy, porównujący te wartości. Pamiętaj o czytelnym opisie wykresu: tytuł wykresu, opisy osi oraz oznaczenie miesięcy na osi X.

Poprawna odpowiedź

Etykiety wierszy Średnia z temp
11,1
24,1
34,1
47,4
515,9
620,5
720,4
821,1
913,7
1012,5
115,2
121,6

Na podstawie zestawienia należy utworzyć wykres kolumnowy porównujący średnie temperatury miesięczne.

Zadanie 7.2. (0–2)

Dla każdego miesiąca wyznacz długość najdłuższego ciągu kolejnych dni bez opadów w tym miesiącu, czyli takich dni, dla których wartość opadów jest równa 0.

Poprawna odpowiedź

Etykiety wierszy Maksimum z dł. ciągu zer w miesiącu
111
27
320
48
520
611
710
88
914
1015
1110
1210

Informacja do zadań 7.3–7.4

Na potrzeby zadania przyjmujemy, że w kolejnym roku przez 184 dni, od 1 marca 2023 do 31 sierpnia 2023, temperatury i opady utrzymywały się na stałym poziomie, co pozwalało na regularny wzrost rzęsy wodnej w tempie rozrostu 1,75% dziennie. Przyrost rzęsy następował w nocy, a pomiar zarośnięcia stawu – rano.

1 marca 2023 rano staw był zarośnięty rzęsą w 20%, tj. rzęsa wodna zajmowała 2000 m2.

Ponieważ staw nie powinien być zarośnięty w całości, właściciel postanowił pozbywać się nadmiaru rzęsy. Do zbiornika wpuścił 80 amurów białych, z których każdy zjadał w ciągu dnia 0,25 m2 rzęsy wodnej. Dodatkowo co piątek w ciągu dnia odławiał 60 m2 rzęsy wodnej.

Uwaga: 30 kwietnia rano staw był zarośnięty w 25,79%.

Zadanie 7.3. (0–2)

Podaj, w którym dniu, licząc od 1 marca 2023, pomiar wykazał, że rzęsa wodna po raz pierwszy zajęła więcej niż 75% powierzchni stawu.

Poprawna odpowiedź

167 lub 2023-08-14

Zadanie 7.4. (0–2)

Podaj, jaka jest najmniejsza liczba amurów białych, jaką musi wpuścić właściciel, by rzęsa wodna w całym badanym okresie zajmowała maksymalnie 50% powierzchni stawu.

Poprawna odpowiedź

94

Zadanie 8. Sieć sklepów

W trzech plikach tekstowych o nazwach klienci.txt, transakcje.txt, opis_transakcji.txt zapisano dane o sprzedaży towarów w pewnej sieci sklepów w porach wieczornych pierwszych dni miesiąca.

Dane obejmują informacje od 1. do 3. dnia miesiąca w miesiącach od stycznia do czerwca 2025 roku w godzinach od 22:00 do 23:59. Pierwszy wiersz każdego z plików jest wierszem nagłówkowym, a dane w wierszach rozdzielono tabulatorami.

Pobierz bazę danych z rozwiązaniem zadania 8 (Access)

Opis danych

Plik klienci.txt zawiera informacje o zarejestrowanych klientach: IdKlienta, Imie, Nazwisko, Plec.

Plik transakcje.txt zawiera informacje o dokonanych transakcjach: IdTransakcji, DataTransakcji, IdKlienta, IdSklepu, IdSprzedawcy. Jeśli klient korzystał z kasy samoobsługowej, pole IdSprzedawcy jest puste.

Plik opis_transakcji.txt zawiera informacje o produktach zakupionych w danej transakcji: IdTransakcji, IdProduktu, Cena, Liczba.

Zadanie 8.1. (0–1)

Podaj imię i nazwisko klienta, który dokonał łącznie najwięcej transakcji w całym analizowanym okresie.

Poprawna odpowiedź

Marcelino Kruk

Zadanie 8.2. (0–2)

Podaj, ile kobiet (K) oraz ilu mężczyzn (M) spośród klientów sieci sklepów nie kupiło niczego w całym analizowanym okresie.

Poprawna odpowiedź

K – 689 i M – 651

Zadanie 8.3. (0–2)

Podaj liczbę różnych sklepów, w których dokonano transakcji w kasach samoobsługowych, oraz podaj, ile zapłacono łącznie za zakupy w tych kasach.

Poprawna odpowiedź

28 sklepów, kwota: 19443,29

Zadanie 8.4. (0–2)

Niektórzy sprzedawcy pracowali w różnych sklepach sieci w ciągu miesiąca. Podaj IdSprzedawcy, który obsługiwał klientów w największej liczbie różnych sklepów w jednym miesiącu, oraz podaj ten miesiąc — nazwę lub numer.

Poprawna odpowiedź

14, styczeń

Zadanie 8.5. (0–2)

Do bazy danych utworzonej na podstawie opisanych wcześniej plików dodano dwie kolejne tabele: Produkty i Kategorie, w których zapisano informacje o sprzedawanych produktach.

Tabela Kategorie zawiera pola: IdKategorii oraz NazwaKategorii.

Tabela Produkty zawiera pola: IdProduktu, IdKategorii, Nazwa, Opis.

Napisz w języku SQL zapytanie, w wyniku którego zostaną wypisane wszystkie zakupione produkty — IdProduktu i Nazwa — z kategorii „spozywcze”, zawierające w opisie fragment: „do ekspresu kolbowego”.

Poprawne rozwiązanie w SQL Access

SELECT DISTINCT
    Produkty.IdProduktu,
    Produkty.Nazwa
FROM
    (Kategorie
    INNER JOIN Produkty
        ON Kategorie.IdKategorii = Produkty.IdKategorii)
    INNER JOIN opis_transakcji
        ON Produkty.IdProduktu = opis_transakcji.IdProduktu
WHERE
    Kategorie.NazwaKategorii = "spozywcze"
    AND Produkty.Opis LIKE "*do ekspresu kolbowego*";

Użycie DISTINCT usuwa powtórzenia, ponieważ ten sam produkt mógł zostać kupiony w wielu transakcjach.

Omówienie przygotowuje Marcin Kasprowicz — czynny egzaminator maturalny z informatyki oraz twórca serwisu algorytm.edu.pl.

Zapraszam — Marcin Kasprowicz