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?
- Prześledź algorytm "na sucho" dla małych wartości: n=0, n=1, n=2, n=3.
- Sprawdź, czy wynik startuje od 1 i czy mnożenie wykonuje się odpowiednią liczbę razy.
- Upewnij się, że zmienna sterująca zmienia się w stronę warunku stopu (np. maleje do 1).
- 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.