Przedstawiony kod źródłowy, zapisany w języku C++, ma za zadanie dla wprowadzanych dowolnych całkowitych liczb różnych od zera wypisać:
int main() { int liczba; cin >> liczba; while (liczba != 0) { if ((liczba % 2) == 0) cout << liczba << endl; cin >> liczba; } return 0; }
A. liczby pierwsze
Źle. Test liczby pierwszej wymaga sprawdzenia wielu dzielników, a tu jest tylko reszta z dzielenia przez 2.
B. wszystkie liczby
Źle. Wypisanie poprzedza warunek if, więc nie każda liczba trafia na ekran.
C. jedynie liczby parzyste
Dobrze. Warunek liczba % 2 == 0 przepuszcza tylko liczby parzyste.
D. wyłącznie liczby nieparzyste
Źle. Liczby nieparzyste dają resztę 1 (lub -1), więc warunek == 0 je pomija.
Pytanie z egzaminu CKE, styczeń 2020 (arkusz EE.09-SG-20.01).
Program wypisuje jedynie liczby parzyste. Pętla
while (liczba != 0) wczytuje kolejne liczby, dopóki użytkownik nie poda zera. Warunek if ((liczba % 2) == 0) sprawdza resztę z dzielenia przez 2: reszta 0 oznacza liczbę parzystą i tylko wtedy wykonuje się cout << liczba << endl;. Liczby nieparzyste dają resztę różną od zera i są pomijane. Do zapamiętania: % 2 == 0 to test parzystości, % 2 != 0 nieparzystości. Operator % z innym dzielnikiem sprawdza podzielność, na przykład liczba % 3 == 0 wybiera wielokrotności trzech. Zero nie zostanie wypisane, bo kończy pętlę, zanim dojdzie do sprawdzenia warunku. Przykład: dla danych 3, 8, -4, 7, 0 program wypisze 8 i -4.Najczęstszy błąd to przeoczenie warunku
if w pętli. Wypisanie wszystkich liczb wymagałoby instrukcji cout bez żadnego warunku, a tu stoi ona wewnątrz if. Liczby nieparzyste dają przy dzieleniu przez 2 resztę różną od zera, więc warunek (liczba % 2) == 0 jest dla nich fałszywy - zostałyby wypisane dopiero przy teście != 0. Liczby pierwsze wymagają sprawdzenia dzielników od 2 do pierwiastka z liczby, zwykle w dodatkowej pętli, a tu jest tylko jedno dzielenie przez 2. Jedyna liczba, która jest jednocześnie pierwsza i parzysta, to 2, ale program wypisze też 4, 6 czy 100. Wynik to zatem wyłącznie liczby parzyste, w tym ujemne, bo na przykład -4 % 2 daje 0. Ciekawa jest też rola zera: kończy ono wczytywanie i samo nie jest wypisywane, choć jest liczbą parzystą - pętla przerywa się, zanim dojdzie do warunku if.