KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2014

PYTANIE NR 10.
Które typy bloków należy umieścić w wyróżnionych miejscach algorytmu, aby algorytm był poprawny i wyznaczał największy wspólny dzielnik?
Ilustracja przedstawia schemat blokowy algorytmu, który ma na celu wyznaczenie największego wspólnego dzielnika (NWD) dwóch
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawny algorytm wyznaczania NWD musi iteracyjnie przekształcać parę liczb tak, aby nie zmieniać ich największego wspólnego dzielnika, aż do spełnienia warunku stopu (np. jedna liczba równa 0 lub obie równe). Wskazany wariant bloków realizuje właściwy warunek i aktualizację wartości, więc zwraca NWD.

Pełne wyjaśnienie:

NWD (największy wspólny dzielnik) dwóch liczb dodatnich to największa liczba całkowita, która dzieli je obie bez reszty. Kluczowe w zadaniach z uzupełnianiem schematu algorytmu jest rozpoznanie poprawnej iteracji i poprawnego warunku zakończenia.

Najczęściej w takich pytaniach chodzi o algorytm Euklidesa w jednym z dwóch równoważnych wariantów:

  • Wariant z resztą (modulo): powtarzaj, dopóki druga liczba nie będzie równa 0; w kroku podstawienia ustaw (a, b) = (b, a mod b). Wynik to ostatnia niezerowa wartość.
  • Wariant z odejmowaniem: powtarzaj, dopóki a ≠ b; odejmuj mniejszą liczbę od większej. Gdy a = b, ta wartość jest NWD.

Dlaczego wskazany wariant jest poprawny? Ponieważ zawiera elementy konieczne dla algorytmu NWD:

  • pętlę, która gwarantuje wielokrotne wykonywanie kroków aż do osiągnięcia warunku stopu,
  • warunek stopu zgodny z teorią (0 w wariancie modulo albo równość w wariancie odejmowania),
  • aktualizację zmiennych, która zachowuje NWD (inwariant: NWD(a, b) nie zmienia się po przejściu do (b, a mod b) ani po odjęciu mniejszej od większej).

Typowe błędne uzupełnienia schematu (co reprezentują odpowiedzi niepoprawne) to m.in.:

  • zły warunek zakończenia (np. przerwanie za wcześnie, zanim jedna z wartości osiągnie 0 albo zanim wartości się zrównają),
  • nieprawidłowe podstawienie (np. nadpisanie a przed obliczeniem reszty, co psuje kolejny krok),
  • operacja, która nie zachowuje NWD (np. przypadkowe dzielenie, zamiana na średnią, błędne odejmowanie bez rozróżnienia większej i mniejszej liczby).

W przygotowaniu do egzaminu warto umieć rozpoznać, że poprawny schemat NWD zawsze sprowadza problem do coraz mniejszych liczb, a jednocześnie nie "gubi" wspólnego dzielnika. To pozwala szybko ocenić, czy wstawione bloki tworzą logiczną, skończoną procedurę.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
NWD (największy wspólny dzielnik) to największa liczba całkowita dzieląca dwie liczby bez reszty. W programowaniu używa się go m.in. do skracania ułamków, normalizacji proporcji, sprawdzania względnej pierwszości oraz w zadaniach z arytmetyki modularnej.
W wersji z modulo wykonujesz iteracje: dopóki b ≠ 0, podstawiasz (a, b) = (b, a mod b). Reszta z dzielenia jest mniejsza od dzielnika, więc wartości maleją i algorytm zawsze się kończy. Wynik to ostatnia niezerowa wartość.
To działa, bo wspólne dzielniki liczb a i b są takie same jak wspólne dzielniki b i a mod b. Jeśli liczba dzieli a i b, to dzieli też a − k·b, czyli resztę. Dzięki temu NWD się nie zmienia, a liczby stają się mniejsze.
Zależy od wariantu. W wersji z modulo pętla kończy się, gdy druga liczba osiągnie 0. W wersji z odejmowaniem kończy się, gdy obie liczby staną się równe. Ważne, by warunek stopu był logiczny i gwarantował zwrócenie właściwej wartości.
Najczęściej myli się warunek stopu (za wczesne przerwanie), wykonuje błędne podstawienia (nadpisanie zmiennej przed użyciem) albo stosuje operacje, które nie zachowują NWD. Warto sprawdzać, czy po każdym kroku sensownie "zmniejszasz problem".
Nie musi. Można użyć wariantu z odejmowaniem, który nie wymaga modulo, ale zwykle działa wolniej (więcej iteracji). W zadaniach egzaminacyjnych oba warianty mogą być poprawne, o ile schemat ma właściwy warunek stopu i poprawnie aktualizuje wartości.
Poprawny warunek odnosi się do stanu końcowego algorytmu: albo b = 0 (wariant modulo), albo a = b (wariant odejmowania). Warunek typu "a > b" bywa używany pomocniczo do wyboru, którą wartość zmniejszać, ale sam nie powinien kończyć algorytmu.
Najczęściej używa się dwóch zmiennych, np. a i b, przechowujących aktualne wartości. W wersji z modulo potrzebujesz też chwilowo wartości reszty albo wykonujesz podstawienia sekwencyjnie. Kluczowe jest, aby nie "zgubić" starego a przed wyliczeniem reszty.
W wersji z modulo wartość a mod b jest zawsze mniejsza od b, więc druga liczba w parze maleje do 0 w skończonej liczbie kroków. W wersji z odejmowaniem zmniejszasz większą liczbę, więc suma wartości maleje. W obu przypadkach nie da się iterować w nieskończoność.
Przećwicz oba warianty algorytmu Euklidesa i naucz się wskazywać warunek stopu oraz poprawne podstawienia. Rozwiązuj zadania, w których trzeba uzupełniać brakujące bloki, i sprawdzaj na prostych danych (np. 12 i 18), czy algorytm zwraca poprawny wynik.
info

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

Eksperci podkreślają: "Wskazany wariant bloków realizuje właściwy warunek i aktualizację wartości, więc zwraca NWD."

Źródła:

  • Wikipedia (PL): "Największy wspólny dzielnik" – https://pl.wikipedia.org/wiki/Najwi%C4%99kszy_wsp%C3%B3lny_dzielnik (dostęp: 2026-02-27)
  • Wikipedia (PL): "Algorytm Euklidesa" – https://pl.wikipedia.org/wiki/Algorytm_Euklidesa (dostęp: 2026-02-27)
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, "Wprowadzenie do algorytmów", rozdziały wprowadzające o algorytmach i podstawowych procedurach arytmetycznych (wydanie zależne od szkoły; źródło książkowe)

Materiały:

  • Materiały szkolne z podstaw algorytmiki: pętle, warunki, schematy blokowe
  • Opis algorytmu Euklidesa (wariant z resztą i wariant z odejmowaniem) z przykładami
  • Zadania praktyczne: implementacja funkcji NWD w wybranym języku (np. JavaScript/PHP/Python)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego