Jaki będzie wynik działania programu napisanego w JavaScript, umieszczonego w ramce, po wprowadzeniu wartości 4?
| var n, i; var a = 1; n = prompt("Podaj n:", ""); for (i=n; i>=2; i--) a*=i; document.write("Wynik ",a); |
A. 64
B. 12
C. 256
D. 24
Poprawna odpowiedź to 24. Po wprowadzeniu 4 zmienna n ma wartość pobraną z okna prompt. Pętla for startuje od i = n i wykonuje się tak długo, jak i >= 2. Zmienna a ma początkowo wartość 1, a instrukcja a *= i oznacza skrócony zapis a = a * i. Kolejne mnożenia to: 1 × 4 = 4, 4 × 3 = 12, 12 × 2 = 24. Gdy i zostaje zmniejszone do 1, warunek i >= 2 jest fałszywy i pętla kończy działanie. Program wypisuje więc Wynik 24. Taki schemat pętli służy między innymi do obliczania silni, czyli iloczynu liczb od n do 1.
W tym programie nie jest obliczana potęga liczby 4, lecz iloczyn kolejnych wartości zmiennej i. Poprawna odpowiedź to 24, ponieważ pętla wykonuje mnożenia przez 4, potem przez 3, a na końcu przez 2. Wynik 64 oznaczałby 4³, czyli sytuację, w której trzy razy mnożona byłaby ta sama wartość 4, a nie malejące i. Wynik 12 powstałby po wykonaniu tylko mnożeń 4 × 3, na przykład przy warunku i > 2 zamiast i >= 2. Wynik 256 odpowiadałby 4⁴, czyli czterokrotnemu mnożeniu przez 4, czego ten kod nie robi. Typowy błąd polega na potraktowaniu pętli jako potęgowania albo na pominięciu ostatniego przebiegu dla i = 2. Operator *= mnoży aktualną wartość zmiennej a przez bieżącą wartość i, a instrukcja i-- po każdym przebiegu zmniejsza i o 1.