U prethodnoj lekciji upoznali smo osnovne aritmetičke operatore u C++ jeziku:
+-*/%
Od svih ovih operatora, jedan često zbunjuje početnike više od ostalih:
modulo operator (%)
Na prvi pogled izgleda neobično.
Nije sabiranje.
Nije deljenje.
Nije množenje.
Ali u stvarnom programiranju modulo operator je izuzetno važan.
Koristi se u:
- proveri parnosti brojeva
- radu sa ciklusima
- kalendarima
- igrama
- validaciji podataka
- raspoređivanju zadataka
- algoritmima
- kriptografiji
- obradi nizova
Ako dobro razumete modulo operator, rešićete veliki broj tipičnih zadataka mnogo lakše.
U ovoj lekciji naučićemo:
- šta je modulo operator,
- kako radi,
- matematičku logiku iza njega,
- tipične zadatke,
- česte greške,
- i praktične primere.
Šta je modulo operator?
Modulo operator:
%
vraća:
ostatak pri celobrojnom deljenju
Primer:
10 % 3
Prvo:
koliko puta 3 staje u 10?
Odgovor:
3 puta
Jer:
3 × 3 = 9
Koliko ostaje?
1
Zato:
10 % 3 = 1

Još primera
8 % 2
Koliko puta 2 staje u 8?
4 puta
Ostatak:
0
Rezultat:
8 % 2 = 0
17 % 5
Koliko puta 5 staje u 17?
3 puta
Jer:
15
Ostatak:
2
Rezultat:
17 % 5 = 2
25 % 7
7 ide:
3 puta
Jer:
21
Ostatak:
4
Rezultat:
25 % 7 = 4
Vizuelna logika
Formula:
broj = (delilac × količnik) + ostatak
Primer:
17 = (5 × 3) + 2
Dakle:
17 % 5 = 2
To je suština modulo operatora.
Kada je rezultat 0?
Ako je broj potpuno deljiv.
Primer:
12 % 3 = 0
Jer:
12 / 3 = 4
bez ostatka.
To je veoma korisno.

Provera parnog broja
Najpoznatiji primer.
Ako broj delimo sa 2:
paran broj daje ostatak:
0
neparan:
1
Primer:
int broj = 14;
if (broj % 2 == 0) {
cout << "Paran broj";
}
Jer:
14 % 2 = 0
Primer neparnog:
13 % 2 = 1
Tipičan zadatak — paran ili neparan
#include <iostream>
using namespace std;
int main() {
int broj;
cout << "Unesi broj: ";
cin >> broj;
if (broj % 2 == 0) {
cout << "Broj je paran";
}
else {
cout << "Broj je neparan";
}
return 0;
}
Ovo je klasičan ispitni zadatak.
Deljivost sa brojem
Modulo se koristi za proveru deljivosti.
Pravilo:
Ako:
broj % n == 0
onda je broj deljiv sa:
n
Primer:
if (broj % 5 == 0)
broj je deljiv sa 5.
Primer:
if (broj % 10 == 0)
broj je deljiv sa 10.
Tipičan zadatak — deljivost sa 3
int broj;
cin >> broj;
if (broj % 3 == 0) {
cout << "Deljiv sa 3";
}
Tipičan zadatak — deljiv sa 3 i 5
if (broj % 3 == 0 && broj % 5 == 0)
Primer:
15
Rezultat:
tačno.
Jer:
15 % 3 = 0
15 % 5 = 0

Poslednja cifra broja
Veoma koristan trik.
Ako želimo poslednju cifru:
broj % 10
Primer:
123 % 10
Rezultat:
3
Jer:
123 = 120 + 3
Primer:
9876 % 10
Rezultat:
6
Tipičan zadatak — izdvajanje poslednje cifre
int broj = 548;
int poslednja = broj % 10;
cout << poslednja;
Rezultat:
8
Poslednje dve cifre
broj % 100
Primer:
12345 % 100
Rezultat:
45
Sat i kružni sistemi
Modulo je odličan za kružne sisteme.
Primer sat:
Ako je:
23 sata
dodamo:
3 sata
dobijamo:
26
Ali na satu:
2
Račun:
(23 + 3) % 24
Rezultat:
2
Veoma korisno.
Naizmenični obrasci
Primer:
želimo:
0 1 0 1 0 1
Koristimo:
i % 2
Primer:
for (int i = 0; i < 6; i++) {
cout << i % 2;
}
Rezultat:
010101
Tipičan zadatak — svaka treća iteracija
Primer:
if (i % 3 == 0)
Koristi se za:
- raspored
- bojenje tabela
- ponavljanje događaja

Sabiranje cifara
Primer:
Broj:
572
Poslednja cifra:
572 % 10 = 2
Skidanje poslednje cifre:
572 / 10 = 57
Ponovo:
57 % 10 = 7
Ovo je osnova mnogih algoritama.
Primer programa
#include <iostream>
using namespace std;
int main() {
int broj = 572;
while (broj > 0) {
cout << broj % 10 << endl;
broj = broj / 10;
}
return 0;
}
Rezultat:
2
7
5
Da li modulo radi sa decimalama?
Ne na ovaj način.
Pogrešno:
5.5 % 2
Greška.
Operator % radi sa celobrojnim tipovima.
Za decimalne brojeve postoje druge metode.
Negativni brojevi
Primer:
-7 % 3
Rezultat može zavisiti od implementacije i pravila jezika, pa početnicima nije preporučljivo da se oslanjaju na negativni modulo dok ne savladaju osnove.
Najčešće greške početnika
1. Mešanje modulo i deljenja
Pogrešno razumevanje:
10 % 3
nije:
3.33
Već:
1
2. Korišćenje decimalnih brojeva
Pogrešno:
5.2 % 2
3. Pogrešna logika parnosti
Ispravno:
broj % 2 == 0
Ne:
broj / 2 == 0
4. Zaboravljanje operatora poređenja
Pogrešno:
if (broj % 2)
Iako tehnički radi u nekim kontekstima, početnicima je jasnije:
if (broj % 2 == 0)
5. Deljenje nulom
Pogrešno:
broj % 0
Runtime greška.
Praktični primer — FizzBuzz
Klasičan zadatak:
Ako je broj deljiv sa 3:
ispiši:
Fizz
Ako sa 5:
Buzz
Ako sa oba:
FizzBuzz
if (broj % 3 == 0 && broj % 5 == 0)
Ovo je poznat intervju zadatak.
Gde se modulo koristi?
Veoma često:
- validacija brojeva
- rasporedi
- kružni sistemi
- igre
- algoritmi
- nizovi
- hash funkcije
- kriptografija
- rad sa datumima i vremenom
Rezime
Modulo operator:
%
vraća:
ostatak pri deljenju
Najčešće upotrebe:
- paran/neparan broj
- deljivost
- poslednja cifra
- ciklični obrasci
- sat i vreme
- algoritmi nad ciframa
Ovo je jedan od najkorisnijih operatora u C++.
Mini test
- Šta vraća
%?
a) količnik
b) ostatak - Koliko je:
10 % 3
a) 3
b) 1
- Kako proveriti paran broj?
a)
broj % 2 == 0
b)
broj / 2 == 0
- Poslednja cifra broja?
a)
broj % 10
b)
broj / 10
- Koliko je:
23 + 3 = ?
(23 + 3) % 24
a) 2
b) 26
Zadaci za vežbu
- Proveri paran/neparan broj.
- Proveri deljivost sa 5.
- Izdvoji poslednju cifru.
- Napravi obrazac 010101.
- Reši FizzBuzz.
Domaći zadatak
Napravi program koji:
- unosi broj
- proverava da li je paran
- proverava deljivost sa 3 i 5
- prikazuje poslednju cifru
- prikazuje poslednje dve cifre
