KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2014

PYTANIE NR 12.
Przedstawiony na rysunku algorytm będzie działał poprawnie (algorytm obliczania silni), gdy w wyróżnionych miejscach zastosujemy bloki
Ilustracja przedstawia schemat blokowy algorytmu obliczania silni liczby naturalnej.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Silnia jest obliczana poprawnie w algorytmie iteracyjnym, gdy występuje inicjalizacja wyniku, pętla z właściwym warunkiem stopu oraz w każdej iteracji mnożenie przez kolejne wartości i zmiana zmiennej sterującej (tak, by pętla się zakończyła). Zestaw bloków wskazany jako poprawny zapewnia tę logikę.

Pełne wyjaśnienie:

Algorytm obliczania silni (n!) w wersji iteracyjnej powinien spełniać kilka warunków poprawności niezależnie od tego, czy jest zapisany jako schemat blokowy, pseudokod czy kod w języku programowania.

Co musi się pojawić w poprawnym schemacie?

  • Wejście: wczytanie wartości n (zwykle liczby całkowitej nieujemnej).
  • Inicjalizacja: ustawienie zmiennej wyniku na wartość neutralną mnożenia, czyli 1. Bez tego wynik bywa losowy albo błędny.
  • Pętla: powtarzanie operacji, dopóki spełniony jest warunek kontynuacji (np. dopóki n>1) albo aż do spełnienia warunku stopu (np. n=1).
  • Krok w pętli: aktualizacja wyniku przez mnożenie oraz aktualizacja zmiennej sterującej (np. zmniejszanie n). To gwarantuje, że pętla zbliża się do zakończenia.
  • Wyjście: wypisanie/zwrot obliczonego wyniku.

Dlaczego tylko jeden zestaw bloków jest poprawny? Ponieważ nawet drobna zmiana w jednym z wyróżnionych miejsc może powodować typowe usterki: pętlę nieskończoną (gdy brakuje zmiany licznika), pominięcie mnożenia, błędny warunek (np. odwrócony) albo niepoprawną obsługę przypadków brzegowych.

Jak samodzielnie weryfikować takie zadania na egzaminie?

  1. Prześledź algorytm "na sucho" dla małych wartości: n=0, n=1, n=2, n=3.
  2. Sprawdź, czy wynik startuje od 1 i czy mnożenie wykonuje się odpowiednią liczbę razy.
  3. Upewnij się, że zmienna sterująca zmienia się w stronę warunku stopu (np. maleje do 1).
  4. Sprawdź, czy wyjście następuje po zakończeniu pętli, a nie w jej wnętrzu.

Odpowiedzi niepoprawne w tego typu pytaniach zwykle odpowiadają konkretnym błędom: brak inicjalizacji, zły warunek w rombie decyzyjnym, aktualizacja niewłaściwej zmiennej lub operacja arytmetyczna inna niż mnożenie. To sprawia, że algorytm nie oblicza silni albo działa tylko dla części danych.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Silnia (n!) to iloczyn kolejnych liczb całkowitych od 1 do n. W informatyce pojawia się m.in. w kombinatoryce (liczba permutacji), analizie złożoności i zadaniach algorytmicznych. Ważne są też przypadki brzegowe: 0! = 1 i 1! = 1.
Najprościej: ustaw wynik=1, a potem w pętli mnoż wynik przez kolejne wartości i aktualizuj licznik (np. zmniejszaj n). Pętla powinna zakończyć się dla n=1 (lub gdy n spadnie do 0). Kluczowe są: inicjalizacja, warunek pętli i zmiana zmiennej sterującej.
W silni wykonujesz mnożenia, więc potrzebujesz elementu neutralnego mnożenia. Jeśli ustawisz wynik=0, całe wyrażenie będzie zawsze 0. Jeśli nie ustawisz wyniku wcale, dostaniesz wartość przypadkową. Dlatego w schemacie blokowym zwykle jest blok procesu ustawiający wynik na 1.
Szukaj rombu (bloku decyzyjnego) sprawdzającego wartość licznika, np. czy n > 1 lub czy n = 1. Poprawny warunek musi powodować zakończenie po wykonaniu odpowiedniej liczby mnożeń. Jeśli warunek jest odwrócony, algorytm może zakończyć się od razu albo wejść w pętlę nieskończoną.
Najczęściej: brak zmiany zmiennej sterującej (np. n nie jest zmniejszane), aktualizacja złej zmiennej (zmieniasz wynik zamiast n) albo warunek w rombie nigdy nie stanie się fałszywy. Na egzaminie warto sprawdzić, czy w pętli jest krok typu n=n-1 (lub równoważny).
Tak: rekurencja zwykle ma postać n! = n·(n-1)!, z warunkiem bazowym 0!=1. Iteracja używa pętli i zmiennej wyniku. Różnica praktyczna: rekurencja zużywa stos wywołań (ryzyko przepełnienia dla dużych n), a iteracja jest prostsza i częściej preferowana w zadaniach egzaminacyjnych.
Zawsze, gdy dopuszczalne jest n jako liczba nieujemna. Poprawny algorytm powinien zwrócić 1 dla n=0. W schemacie blokowym można to osiągnąć przez odpowiedni warunek pętli (np. wykonuj pętlę tylko gdy n>1). Jeśli pętla startuje od n i schodzi do 1, dla n=0 nie powinna wykonać się ani razu.
Weź małe dane (np. n=3) i przejdź po strzałkach: zapisz wartości zmiennych po każdym bloku procesu. Sprawdź, czy po każdym obiegu pętli licznik zmienia się w dobrą stronę i czy wynik jest mnożony. Na końcu porównaj z oczekiwanym 3! = 6. To szybko ujawnia złe warunki i brak aktualizacji.
Silnia rośnie bardzo szybko (jest iloczynem wielu liczb), więc łatwo o przekroczenie zakresu typu liczbowego (przepełnienie). W praktyce trzeba dobierać odpowiedni typ danych (np. większy zakres) albo ograniczać n. W zadaniach schematów blokowych zwykle pomija się ten aspekt, ale warto o nim pamiętać.
Najczęściej sprawdzane są: poprawne użycie bloku decyzji (warunek), sensowna pętla (wejście/wyjście z pętli), inicjalizacja zmiennych oraz kolejność operacji w blokach procesu. W zadaniach o silni dochodzi wymóg mnożenia i pewność, że algorytm działa także dla małych wartości n.
info

To pytanie poprawnie rozwiązuje 52% zdających egzamin. trudne

W praktyce zawodowej kluczowe jest to, że zestaw bloków wskazany jako poprawny zapewnia tę logikę.

Źródła:

  • Wikipedia (PL): "Silnia" — definicja i przykłady, https://pl.wikipedia.org/wiki/Silnia - dostęp 2026-02-28
  • Wikipedia (PL): "Schemat blokowy" — podstawowe elementy i zastosowanie, https://pl.wikipedia.org/wiki/Schemat_blokowy - dostęp 2026-02-28
  • Khan Academy: "Factorial" (wprowadzenie do pojęcia i obliczeń), https://www.khanacademy.org/math/pre-algebra/x9e81a4f98389efdf:factors-multiples/x9e81a4f98389efdf:factorials/v/factorial - dostęp 2026-02-28

Materiały:

  • Materiały do algorytmiki podstawowej (schematy blokowe, pętle, warunki) dla poziomu technikum
  • Zadania treningowe z analizą schematów blokowych i pseudokodu (silnia, suma, minimum/maksimum)
  • Dokumentacja/lekcje dotyczące instrukcji iteracyjnych i warunkowych w wybranym języku (np. JavaScript, PHP, Python)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego