ł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 = 34 + 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