var w=0; var i=1; for (i = 1; i < 50; i++) { if (i%2 == 0) w += i; } Wynikiem działania przedstawionego fragmentu programu JavaScript jest wartość...
var w=0; var i=1; for (i = 1; i < 50; i++) { if (i%2 == 0) w += i; }Wynikiem działania przedstawionego fragmentu programu JavaScript jest wartość zmiennej w równa
A. sumie naturalnych liczb parzystych mniejszych od 50.
B. sumie naturalnych liczb nieparzystych większych od 50.
C. liczbie naturalnych liczb parzystych większych od 50.
D. liczbie naturalnych liczb nieparzystych mniejszych od 50.
Pytanie z egzaminu CKE, czerwiec 2021 (arkusz E.14-SG-21.06).
W tym fragmencie programu zmienna w pełni rolę akumulatora, czyli miejsca, do którego dopisywana jest kolejna wartość spełniająca warunek. Pętla for zaczyna pracę od i = 1 i wykonuje się tak długo, jak i < 50, więc sprawdzane są liczby od 1 do 49. Warunek i % 2 == 0 wykorzystuje operator modulo, czyli resztę z dzielenia. Jeżeli reszta z dzielenia przez 2 wynosi 0, liczba jest parzysta. Wtedy instrukcja w += i dodaje aktualną wartość i do zmiennej w. Ostatecznie więc program oblicza sumę liczb 2, 4, 6, ..., 48, czyli sumę naturalnych liczb parzystych mniejszych od 50. Dla kontroli można policzyć, że wynik liczbowy to 600. Moim zdaniem to bardzo typowy przykład z JavaScriptu, bo pokazuje naraz pętlę, instrukcję warunkową, operator modulo i skrócony zapis przypisania. W praktyce taki schemat przydaje się np. przy filtrowaniu danych w tablicy, sumowaniu tylko wybranych wartości z formularza albo zliczaniu produktów spełniających określony warunek. W nowoczesnym JavaScripcie częściej używa się let zamiast var, a do porównań dobrą praktyką jest stosowanie === zamiast ==, bo unika się wtedy niejawnej konwersji typów. Sama logika algorytmu jest jednak poprawna.
Najważniejsze jest dokładne prześledzenie zakresu pętli i warunku w instrukcji if, bo właśnie tu najczęściej robi się mały, ale dość kosztowny błąd. Pętla nie działa dla liczb większych od 50, ponieważ jej warunek to i < 50. Oznacza to, że ostatnią sprawdzaną wartością jest 49, a nie 50 ani żadna liczba powyżej tej granicy. Dlatego interpretowanie wyniku jako czegoś dotyczącego liczb większych od 50 nie pasuje do kodu. Program w ogóle nie wychodzi poza ten zakres, więc takie rozumowanie jest oderwane od działania pętli for. Trzeba też odróżnić sumowanie od liczenia elementów. Instrukcja w += i nie zwiększa zmiennej w o 1, tylko dodaje do niej aktualną wartość zmiennej i. Gdyby program miał liczyć, ile jest takich liczb, zapis wyglądałby raczej w++ albo w += 1. Tutaj w jest akumulatorem sumy, nie licznikiem ilości. Równie istotny jest operator modulo. Wyrażenie i % 2 == 0 wybiera liczby parzyste, bo tylko one po podzieleniu przez 2 dają resztę 0. Liczby nieparzyste miałyby resztę 1, więc warunek dla nich jest fałszywy i instrukcja dodawania nie zostaje wykonana. Z mojego doświadczenia uczniowie czasem widzą znak % i skupiają się tylko na tym, że jest tam liczba 2, ale nie analizują wyniku porównania. Poprawne czytanie takiego kodu powinno iść krok po kroku: inicjalizacja, warunek kontynuacji pętli, sprawdzenie parzystości, a dopiero potem aktualizacja sumy. To jest dobra praktyka przy analizie każdego krótkiego algorytmu w JavaScripcie.