KWALIFIKACJA INF2 + INF3 - CZERWIEC 2013

PYTANIE NR 24.
Jaki będzie wynik działania przedstawionego za pomocą schematu blokowego algorytmu dla całkowitych liczb dodatnich a i b?
Ilustracja przedstawia schemat blokowy algorytmu, który jest używany w kontekście egzaminu zawodowego dla technika
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Algorytm wczytuje a i b, a następnie dopóki spełnione jest a > b, wykonuje a = a − b. Gdy warunek przestaje być spełniony (a ≤ b), wyświetla aktualną wartość a. To dokładnie odpowiada reszcie z dzielenia a przez b uzyskanej metodą wielokrotnego odejmowania.

Pełne wyjaśnienie:

Na schemacie blokowym widać pętlę sterowaną warunkiem a > b. Po wczytaniu dodatnich liczb całkowitych a i b algorytm powtarza jedną operację: a = a − b, ale tylko wtedy, gdy a jest większe od b. Gdy w pewnym momencie otrzymamy a ≤ b, algorytm kończy pętlę i wyświetla a.

Taki mechanizm jest klasycznym sposobem obliczania reszty z dzielenia (modulo) bez użycia dzielenia: odejmujemy dzielnik b od dzielnej a tak długo, jak długo "mieści się" on w a. Ostatecznie pozostaje wartość mniejsza lub równa b, czyli właśnie to, co interpretujemy jako resztę po odjęciu wielokrotności b.

  • Dlaczego nie jest to iloraz? Iloraz wymagałby zliczania liczby odejmowań (np. zmiennej licznika). Tutaj nic nie jest zliczane, a na wyjściu pojawia się wyłącznie zredukowana wartość a.
  • Dlaczego nie jest to różnica a i b? Różnica byłaby pojedynczym odejmowaniem (a − b). Schemat wykonuje odejmowanie wielokrotnie w pętli, aż do spełnienia warunku stopu.
  • Dlaczego nie jest to NWD? W algorytmie Euklidesa (wersja odejmowaniowa) występuje rozgałęzienie: gdy a > b odejmuje się b od a, a gdy b > a odejmuje się a od b; pętla trwa zwykle do momentu a = b. Tutaj zmienia się tylko a, a b pozostaje stałe, a zakończenie następuje przy a ≤ b, co jest typowe dla obliczania reszty.

Wskazówka egzaminacyjna: zawsze sprawdź co jest wypisywane (tu: a) oraz jaki jest warunek pętli (tu: a > b). Te dwa elementy najczęściej pozwalają odróżnić modulo od NWD.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Reszta z dzielenia (modulo) to wartość, która pozostaje po podzieleniu liczby a przez b, gdy od a odejmiesz największą możliwą wielokrotność b. W wielu językach programowania odpowiada temu operator %, np. 17 % 5 = 2.
Metoda polega na odejmowaniu b od a tak długo, jak długo a jest większe (czasem: nie mniejsze) od b. Gdy odejmowanie nie jest już możliwe bez "zejścia poniżej" dzielnika, pozostała wartość a jest resztą z dzielenia.
W wersji odejmowaniowej algorytmu Euklidesa zmienia się raz a, raz b (zależnie od tego, która liczba jest większa), aż do równości. W pokazanym schemacie modyfikowana jest tylko zmienna a, a b jest stałe, więc wynik odpowiada redukcji a do reszty.
Pętla typu while to układ: decyzja z warunkiem (romb), gałąź "tak" prowadzi do operacji, a potem strzałka wraca do tej samej decyzji. Gałąź "nie" zwykle wychodzi z pętli do dalszych kroków (np. wyświetlenia wyniku i STOP).
Warunek a > b mówi, że odejmowanie ma sens tylko wtedy, gdy b "mieści się" w a. Gdy przestaje być spełniony (czyli a ≤ b), algorytm kończy pętlę i zwraca to, co zostało w a po odjęciu wielokrotności b.
W typowej definicji reszty z dzielenia dla dodatniego dzielnika wynik jest mniejszy od b. Jeśli schemat kończy przy a ≤ b, to dla przypadku a = b wypisałby a (czyli b). W praktyce często stosuje się warunek a ≥ b w pętli, aby w przypadku równości uzyskać 0.
Najczęstsze pomyłki to: automatyczne uznanie schematu za Euklidesa bez sprawdzenia, czy zmienia się także b; pomylenie reszty z ilorazem (brak licznika odejmowań!); oraz przeoczenie, co jest wypisywane na końcu. Pomaga szybki test na liczbach, np. 10 i 6.
Modulo bywa używane w aplikacjach webowych m.in. do cyklicznego wyboru elementów (np. kolor wiersza tabeli co drugi), rozkładania obciążenia na "koszyki" (haszowanie), wyznaczania indeksu w tablicy o stałym rozmiarze oraz w prostych mechanizmach rotacji i paginacji.
Wybierz mały przykład i wykonaj 2–3 iteracje w głowie. Jeśli algorytm tylko odejmuje b od a, to wynik będzie "tym, co zostało" z a. Dla 10 i 6 dostajesz 4, co pasuje do 10 % 6. NWD(10,6) byłby 2, więc widać różnicę.
Iloraz wymaga liczenia, ile razy odejmowano b (czyli osobnej zmiennej/inkrementacji), a reszta to końcowa wartość po odejmowaniach. Jeśli na wyjściu drukowana jest zmienna, która była zmniejszana (tu: a), a nie licznik, to zwykle chodzi o resztę.
info

Około 44% zdających odpowiada poprawnie na to pytanie. trudne

Eksperci podkreślają: "Algorytm wczytuje a i b, a następnie dopóki spełnione jest a > b, wykonuje a = a − b."

Źródła:

  • Wikipedia (PL): "Operacja modulo" — https://pl.wikipedia.org/wiki/Modulo (dostęp: 2026-02-27)
  • Wikipedia (PL): "Algorytm Euklidesa" — https://pl.wikipedia.org/wiki/Algorytm_Euklidesa (dostęp: 2026-02-27)
  • Khan Academy (EN): "The Euclidean algorithm" — https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm (dostęp: 2026-02-27)

Materiały:

  • Materiały z podstaw algorytmiki: schematy blokowe, instrukcje warunkowe i pętle
  • Notatki o arytmetyce modularnej i operatorze % w językach programowania
  • Ćwiczenia ze śledzenia wykonania algorytmów na przykładach (trace table)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego