łatwyProgramowaniePythonC++

Dzielenie Całkowite i Modulo (%) na Maturze z Informatyki

10 min czytania
Python, C++
Zaktualizowano: 3.11.2025

Dzielenie całkowite i modulo to dwa absolutnie fundamentalne operatory arytmetyczne. To nie są skomplikowane algorytmy, to Twoje podstawowe 'narzędzia' do pracy na liczbach, tak jak młotek i gwóźdź dla stolarza. Pomyśl o tym jak o dzieleniu pizzy: masz 7 kawałków i 3 osoby. Dzielenie całkowite (`//` lub `int / int`) odpowiada na pytanie: 'Ile pełnych kawałków dostanie każda osoba?' (Odpowiedź: 2). Operator modulo (`%`) odpowiada na pytanie: 'Ile kawałków zostanie w pudełku?' (Odpowiedź: 1). Te dwie operacje są nierozłączne i stanowią podstawę do wszystkich zadań maturalnych związanych z analizą cyfr liczby, sprawdzaniem podzielności czy algorytmami teorii liczb (jak NWD).

Dlaczego to ważne? Na maturze *musisz* to znać. Nie ma wyjątku. Będziesz tego używać *wszędzie*: do sprawdzania, czy liczba jest parzysta (`n % 2 == 0`), do pobierania ostatniej cyfry liczby (`n % 10`), do usuwania ostatniej cyfry (`n // 10`), do implementacji NWD (`a % b`) czy do konwersji systemów liczbowych. To jest alfabet programowania.

Teoria

Dzielenie całkowite zwraca *iloraz* (quotient) z dzielenia, odrzucając całkowicie część ułamkową. Operator modulo zwraca *resztę* (remainder) z tego dzielenia. Dla dowolnych dodatnich liczb `a` i `b`, zawsze zachodzi zależność: `a = (a // b) * b + (a % b)`.

Jak to działa?

  1. Dzielenie Całkowite (Quotient):
  2. * Python: Używa operatora `//`. Przykład: `14 // 4` daje `3` (bo 4 mieści się w 14 trzy razy).
  3. * C++: Używa operatora `/`, *ale tylko jeśli obie liczby są typu `int`*. Przykład: `14 / 4` daje `3`.
  4. Modulo (Reszta z Dzielenia):
  5. * Python i C++: Używa operatora `%`. Przykład: `14 % 4` daje `2` (bo 14 = 3*4 + 2).
  6. Najważniejszy Wzorzec (Manipulacja Cyframi):
  7. * `n % 10` zawsze daje ostatnią cyfrę liczby `n` (np. `123 % 10` daje `3`).
  8. * `n // 10` (w C++ `n / 10`) zawsze usuwa ostatnią cyfrę z liczby `n` (np. `123 // 10` daje `12`).
  9. Sprawdzanie Podzielności:
  10. * `if n % 2 == 0:` (sprawdza, czy liczba jest parzysta).
  11. * `if n % k == 0:` (sprawdza, czy liczba `n` jest podzielna przez `k`).

Złożoność: Operatory arytmetyczne, takie jak `//`, `/` i `%`, są operacjami elementarnymi. Ich złożoność czasowa jest stała, czyli O(1).

Implementacja

Wzorzec: Sprawdzanie parzystości

Python
liczby = [4, 7, 10, 13]

for n in liczby:
    if n % 2 == 0:
        print(f"{n} jest parzyste")
    else:
        print(f"{n} jest nieparzyste")

# Wynik:
# 4 jest parzyste
# 7 jest nieparzyste
# 10 jest parzyste
# 13 jest nieparzyste

To najczęstsze użycie modulo. Jeśli reszta z dzielenia przez 2 (`n % 2`) jest równa 0, liczba jest parzysta. W przeciwnym wypadku jest nieparzysta.

Wzorzec: Sumowanie cyfr liczby

Python
def suma_cyfr(n):
    suma = 0
    liczba = abs(n) # Działamy na wartości dodatniej
    
    while liczba > 0:
        # 1. Pobierz ostatnią cyfrę
        cyfra = liczba % 10
        # 2. Dodaj ją do sumy
        suma += cyfra
        # 3. Usuń ostatnią cyfrę
        liczba = liczba // 10
        
    return suma

print(f"Suma cyfr liczby 12345: {suma_cyfr(12345)}")
# Wynik: 15 (bo 1+2+3+4+5)

To jest kanoniczny przykład użycia pary `% 10` i `// 10`. Pętla `while` działa, dopóki z liczby nie 'zetrzemy' wszystkich cyfr. W każdej iteracji wyciągamy ostatnią cyfrę (modulo) i skracamy liczbę (dzielenie).

Wzorzec: Sumowanie cyfr liczby

C++
#include <iostream>

using namespace std;

int suma_cyfr(int n) {
    int suma = 0;
    int liczba = abs(n);
    
    while (liczba > 0) {
        // 1. Pobierz ostatnią cyfrę
        int cyfra = liczba % 10;
        // 2. Dodaj ją do sumy
        suma += cyfra;
        // 3. Usuń ostatnią cyfrę (w C++ '/' na intach to dzielenie całk.)
        liczba = liczba / 10;
    }
    return suma;
}

int main() {
    cout << "Suma cyfr liczby 12345: " << suma_cyfr(12345) << endl;
    // Wynik: 15
    return 0;
}

Logika jest identyczna jak w Pythonie. Jedyna różnica to składnia. W C++ dzielenie dwóch liczb typu `int` za pomocą operatora `/` *automatycznie* daje wynik całkowity, więc `123 / 10` da `12`.

Pułapka: Dzielenie `int` vs `double`

C++
#include <iostream>

using namespace std;

int main() {
    // Dwa INTy dają INT (część ułamkowa jest obcinana)
    int a = 7;
    int b = 3;
    cout << "7 / 3 (int): " << a / b << endl; // Wynik: 2
    
    // Wystarczy JEDEN double, aby wynik był double
    double a_d = 7.0;
    cout << "7.0 / 3 (double): " << a_d / b << endl; // Wynik: 2.333...
    
    // Rzutowanie, aby wymusić dzielenie zmiennoprzecinkowe
    cout << "(double)7 / 3: " << (double)a / b << endl; // Wynik: 2.333...
    
    return 0;
}

To kluczowa różnica między C++ a Pythonem 3. W C++, typ operacji zależy od typów zmiennych. `int / int` daje `int`. `double / int` daje `double`. W Pythonie 3, `7 / 3` *zawsze* daje `2.333...`, a do dzielenia całkowitego *zawsze* musisz użyć `//`.

Przykładowe Zadania Maturalne

Matura 2026Zadanie Zadanie Typu Maturalnego 1

W pliku 'liczby.txt' znajduje się 200 liczb całkowitych (każda w nowej linii). Napisz program, który policzy, ile z tych liczb jest podzielnych bez reszty przez 5, ale niepodzielnych przez 10.

Wskazówka: Liczba jest podzielna przez 5, jeśli `liczba % 5 == 0`. Jest niepodzielna przez 10, jeśli `liczba % 10 != 0`. Musisz połączyć te dwa warunki operatorem `AND`.

Pokaż szkic rozwiązania
1. Otwórz plik 'liczby.txt'.
2. Zainicjuj `licznik = 0`.
3. Dla każdej linii w pliku:
   a. Wczytaj `liczba = int(linia.strip())`.
   b. Sprawdź warunek: `if (liczba % 5 == 0) and (liczba % 10 != 0):`
   c. `  licznik += 1`
4. Wypisz `licznik`.
Matura 2024Zadanie 3.1 (Matura Maj 2024)

Nieparzystym skrótem dodatniej liczby całkowitej n nazwiemy dodatnią liczbę całkowitą m, która powstaje przez usunięcie cyfr parzystych z zapisu dziesiętnego liczby n (np. dla 294762 skrótem jest 97). Napisz *funkcję*, która wyznaczy liczbę m. W zapisie funkcji możesz korzystać tylko z operacji arytmetycznych (bez konwersji na stringi).

Wskazówka: To zadanie to idealny przykład manipulacji cyframi. Musisz użyć pętli `while n > 0`. W każdej iteracji pobieraj ostatnią cyfrę (`cyfra = n % 10`). Sprawdzaj, czy jest nieparzysta (`cyfra % 2 != 0`). Jeśli tak, 'dopnij' ją na początek budowanej liczby `m` (używając mnożnika). Pamiętaj o 'skróceniu' liczby `n` (`n = n // 10`).

Pokaż szkic rozwiązania
1. Zdefiniuj funkcję `skrot(n)`:
   a. Zainicjuj wynik `m = 0`.
   b. Zainicjuj mnożnik pozycji: `mnoznik = 1`.
   c. Rozpocznij pętlę `while n > 0:`
   d.    Pobierz ostatnią cyfrę: `cyfra = n % 10`.
   e.    Skróć `n`: `n = n // 10` (lub `n / 10` w C++).
   f.    Sprawdź warunek: `if cyfra % 2 != 0:` (jeśli nieparzysta).
   g.       Dodaj cyfrę na *początek* budowanego wyniku: `m = cyfra * mnoznik + m`.
   h.       Zwiększ mnożnik dla następnej cyfry: `mnoznik = mnoznik * 10`.
   i. Zwróć `m`.

Częste Błędy

Python: Użycie `/` zamiast `//` do skracania liczb

W Pythonie 3, `123 / 10` daje `12.3` (float), a nie `12`. Jeśli użyjesz tego w pętli do sumowania cyfr, program się 'wysypie' lub da zły wynik.

Poprawka: Do operacji na cyfrach (skracania liczby) *zawsze* używaj operatora dzielenia całkowitego: `//`. `123 // 10` da `12`.

C++: Dzielenie `int / int` oczekując `double`

Uczeń chce policzyć średnią: `int suma = 10; int ilosc = 4; double srednia = suma / ilosc;`. Oczekuje `2.5`, ale dostaje `2.0`, bo `suma / ilosc` jest dzieleniem `int/int` i wynik (2) jest obliczany *przed* przypisaniem do `double`.

Poprawka: Rzutuj przynajmniej jedną ze stron na `double` *przed* dzieleniem: `double srednia = (double)suma / ilosc;`.

Błędna kolejność operacji na cyfrach

W pętli `while n > 0:`, uczeń najpierw skraca liczbę (`n = n // 10`), a *dopiero potem* próbuje pobrać cyfrę (`cyfra = n % 10`). To powoduje utratę ostatniej cyfry.

Poprawka: Zawsze *najpierw* pobieraj resztę (`% 10`), a *potem* skracaj liczbę (`// 10`).

Błąd `ZeroDivisionError` (Dzielenie przez zero)

Próba wykonania `x % 0` lub `x // 0` (lub `x / 0`). To zawsze powoduje krytyczny błąd programu.

Poprawka: Jeśli dzielnik (`b` w `a % b`) pochodzi od użytkownika lub z pliku, zawsze dodaj warunek `if b != 0:` przed wykonaniem operacji.

Kluczowe Wnioski

  • `%` (Modulo) to operator reszty z dzielenia (np. `7 % 3` to `1`).
  • `//` (Python) lub `int / int` (C++) to operator dzielenia całkowitego (np. `7 // 3` to `2`).
  • Są to Twoje podstawowe narzędzia do zadań z teorią liczb.
  • Wzorzec maturalny nr 1: `n % 2 == 0` sprawdza parzystość.
  • Wzorzec maturalny nr 2: `cyfra = n % 10` (pobierz ostatnią cyfrę) i `n = n // 10` (usuń ostatnią cyfrę).
  • Uważaj na różnice: w Pythonie `/` daje `float`, `//` daje `int`. W C++ `int / int` daje `int`, a `double / int` daje `double`.

Najczęściej Zadawane Pytania

Jaka jest dokładnie różnica między `/` a `//` w Pythonie?

Operator `/` (dzielenie 'prawdziwe') zawsze zwraca liczbę zmiennoprzecinkową (`float`), np. `10 / 5` da `2.0`, a `7 / 3` da `2.333...`. Operator `//` (dzielenie całkowite) zawsze zwraca liczbę całkowitą (`int`), obcinając resztę, np. `7 // 3` da `2`.

Dlaczego `5 / 2` w C++ daje 2?

Ponieważ w C++ typ operacji zależy od typów argumentów. `5` to `int` i `2` to `int`, więc kompilator wykonuje dzielenie *całkowitoliczbowe* (obcina resztę). Aby dostać `2.5`, przynajmniej jedna z liczb musi być `float` lub `double`, np. `5.0 / 2`.

Jak pobrać pierwszą cyfrę liczby (np. '1' z 123)?

To jest trudniejsze. Musisz użyć pętli `while`, aby dowiedzieć się, jak duża jest liczba (przez ile trzeba ją podzielić). Prostszym sposobem na maturze jest konwersja na string i wzięcie pierwszego znaku: `pierwsza_cyfra = int(str(n)[0])`.

Co robi modulo dla liczb ujemnych?

Zachowanie zależy od języka (np. w C++ zależy od implementacji, w Pythonie wynik ma znak dzielnika). Na maturze 99.9% czasu pracujesz na liczbach naturalnych (dodatnich), więc nie musisz się tym przejmować. Jeśli masz wątpliwości, pracuj na wartości bezwzględnej: `abs(n) % 10`.

Chcesz opanować wszystkie tematy maturalne?

Dołącz do kursu i zyskaj dostęp do interaktywnych lekcji, edytora kodu i setek zadań.

Powiązane Tematy