KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2008

PYTANIE NR 24.
Instrukcje oznaczone literami X i Y w algorytmie znajdowania wartości średniej dodatnich elementów 10-cio elementowej tablicy liczb T[ ] to
Ilustracja przedstawia schemat blokowy algorytmu komputerowego.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W algorytmie średniej z dodatnich elementów indeks tablicy musi przesuwać się w każdej iteracji pętli, więc blok na wspólnej ścieżce po złączeniu gałęzi to i=i+1. Licznik elementów spełniających warunek zwiększa się tylko dla T[i]>0 na gałęzi "Tak", dlatego n=n+1 musi być przypisane do bloku warunkowego.

Pełne wyjaśnienie:

W tym algorytmie obliczana jest średnia arytmetyczna tylko z dodatnich elementów tablicy. Żeby to zrobić poprawnie, potrzebne są dwie niezależne czynności:

  • przejście po wszystkich elementach tablicy (sterowanie iteracją),
  • zliczenie i zsumowanie tylko tych elementów, które spełniają warunek T[i] > 0 (filtr).

Zmienna i pełni rolę iteratora (indeksu tablicy). Jeśli algorytm ma sprawdzić 10 elementów, to i musi zostać zwiększone w każdym obiegu pętli, niezależnie od tego, czy bieżący element jest dodatni, czy nie. Dlatego instrukcja i=i+1 musi znajdować się na głównej, wspólnej ścieżce pętli (po połączeniu gałęzi "Tak" i "Nie"). Gdyby inkrementacja indeksu była wykonywana tylko warunkowo, pętla mogłaby utknąć na tym samym elemencie i nie przejść przez całą tablicę.

Zmienna n jest licznikiem warunkowym: ma reprezentować liczbę elementów dodatnich. Ponieważ w późniejszym kroku obliczane jest Srednia = Suma : n, wartość n musi zliczać wyłącznie elementy spełniające kryterium dodatniości. To oznacza, że instrukcja n=n+1 musi być wykonywana tylko na gałęzi "Tak" po sprawdzeniu T[i] > 0. Wtedy Suma akumuluje tylko dodatnie wartości, a n jest właściwym dzielnikiem.

Dlaczego pozostałe propozycje są niepoprawne? Zamiana ról (zwiększanie n w każdej iteracji, a i tylko warunkowo) miesza sterowanie pętlą z filtrowaniem danych i prowadzi do błędnego przejścia po tablicy lub błędnego licznika. Dekrementacja n=n-1 jest sprzeczna z ideą "zliczania" dodatnich elementów i może dawać wartości ujemne, co czyni wynik średniej bezsensownym. Poprawny dobór instrukcji to więc: X: i=i+1 oraz Y: n=n+1.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Iterator pętli to zmienna sterująca przechodzeniem po kolejnych elementach tablicy (np. indeks i). Musi zmieniać się w każdym obiegu pętli, aby algorytm nie sprawdzał w kółko tego samego elementu i rzeczywiście przeszedł przez cały zakres danych.
Licznik n mówi, ile elementów spełniło warunek (tu: było dodatnich). Bez niego nie da się policzyć średniej z wybranej grupy, bo dzielnik musi odpowiadać liczbie elementów faktycznie zsumowanych. Inaczej wynik byłby zaniżony lub zawyżony.
Instrukcję n=n+1 wykonuje się tylko wtedy, gdy spełniony jest warunek selekcji (np. T[i] > 0). W schemacie blokowym oznacza to gałąź "Tak" po rombie z warunkiem. Dzięki temu licznik nie zlicza elementów odrzuconych.
Bo i odpowiada za przejście do następnego elementu tablicy. Jeśli inkrementacja byłaby tylko w gałęzi warunku, to przy niespełnieniu warunku indeks mógłby się nie zmienić i pętla sprawdzałaby wciąż ten sam element. To typowy błąd prowadzący do zapętlenia.
Wtedy n przestaje oznaczać liczbę elementów dodatnich, a zaczyna oznaczać liczbę wszystkich iteracji. Wzór Srednia = Suma : n będzie dzielił sumę tylko dodatnich wartości przez zbyt duży dzielnik, więc średnia wyjdzie błędna (zwykle zaniżona).
Element wykonywany w każdej iteracji leży na ścieżce wspólnej pętli (po połączeniu gałęzi "Tak" i "Nie") oraz na drodze prowadzącej do sprawdzenia warunku kontynuacji pętli. Jeśli blok jest tylko na jednej gałęzi rombu, to jest wykonywany warunkowo.
Zwykle występują trzy role: Suma (akumulator wartości spełniających warunek), i (indeks/iterator przejścia po tablicy) oraz n (licznik elementów przyjętych do obliczeń). Taki zestaw pozwala oddzielić sterowanie od filtrowania danych.
W praktyce nie, jeśli chcesz średnią tylko z elementów spełniających warunek. Można próbować dzielić przez stałą (np. 10), ale to nie jest średnia z dodatnich elementów, tylko średnia "z uwzględnieniem zer" dla odrzuconych. Poprawnie trzeba znać liczbę zaakceptowanych elementów.
Najczęstsze są: zamiana ról zmiennych (i z n), wykonywanie aktualizacji w złej gałęzi warunku, oraz brak rozróżnienia między operacją bezwarunkową (każda iteracja) a warunkową (tylko dla spełnionego kryterium). Pomaga śledzenie jednej iteracji "na sucho".
Ćwicz czytanie schematów: zaznacz, które bloki są w pętli, gdzie jest warunek selekcji i gdzie jest warunek zakończenia. Dla każdej zmiennej określ rolę: iterator, licznik, akumulator. Potem sprawdź, czy aktualizacja iteratora zachodzi zawsze, a licznika tylko warunkowo.
info

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

Specjaliści zwracają uwagę: "W algorytmie średniej z dodatnich elementów indeks tablicy musi przesuwać się w każdej iteracji pętli, więc blok na wspólnej ścieżce po złączeniu gałęzi to i=i+1."

Źródła:

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, "Wprowadzenie do algorytmów" (wydania polskie), rozdziały: podstawy analizy algorytmów, iteracje i przetwarzanie tablic
  • Robert Sedgewick, Kevin Wayne, "Algorytmy", część o tablicach i pętlach (iteracja oraz zliczanie elementów spełniających warunek)

Materiały:

  • Podręcznik do podstaw algorytmiki (pętle, warunki, tablice) na poziomie szkoły średniej
  • Materiały z informatyki: schematy blokowe i pseudokod (lekcje/rozdziały o strukturach sterujących)
  • Zadania maturalne/egzaminacyjne z analizy prostych algorytmów na tablicach

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego