Przejdź do głównej treści

Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji

Zawód: Technik programista

Kategorie: Programowanie Projektowanie aplikacji

Wskaż fragment kodu, który stanowi realizację przedstawionego algorytmu w języku C++.

Kod 1
do {
  suma = suma + i;
} while (suma <= liczba);
cout << suma;
Kod 2
if (suma <= liczba) {
  suma = suma + i;
  i++;
}
else
  cout << suma;
Kod 3
for (i = suma; i <= liczba; i++)
  suma = suma + i;
else
  cout << suma;
Kod 4
while (suma <= liczba) {
  suma = suma + i;
  i++;
}
cout << suma;
Ilustracja do pytania z kwalifikacji INF.04
kod 2
kod 1
kod 3
kod 4
Kod 4 najlepiej odwzorowuje pokazany schemat blokowy, bo używa pętli while, czyli pętli z warunkiem sprawdzanym przed wejściem do bloku instrukcji. Na diagramie najpierw jest decyzja suma <= liczba. Jeśli warunek jest spełniony, wykonywane są dwie operacje: suma = suma + i oraz i++. Potem sterowanie wraca z powrotem do sprawdzenia warunku. Jeśli warunek nie jest spełniony, program przechodzi do wypisania wartości zmiennej suma. Dokładnie tak działa fragment: while (suma <= liczba) { suma = suma + i; i++; } cout << suma;. Z mojego doświadczenia to jest bardzo typowy zapis algorytmu iteracyjnego, gdzie narastająco zwiększamy sumę i licznik. W praktyce podobny schemat stosuje się np. przy sumowaniu kolejnych liczb, szukaniu momentu przekroczenia limitu albo obliczaniu progów w prostych symulacjach. Dobrą praktyką jest też użycie nawiasów klamrowych przy pętli, nawet gdy instrukcji byłoby mało, bo kod jest wtedy czytelniejszy i mniej podatny na pomyłki. Trzeba też pamiętać o wcześniejszej inicjalizacji zmiennych suma, i oraz liczba, bo bez tego program może działać losowo albo wpaść w pętlę nieskończoną.
W tym zadaniu trzeba bardzo uważnie porównać kolejność operacji z diagramu blokowego. Schemat pokazuje klasyczną pętlę z warunkiem na początku: najpierw sprawdzamy, czy suma <= liczba, dopiero potem ewentualnie wykonujemy dodawanie i zwiększenie licznika. To ważny szczegół, bo w C++ konstrukcje while, do while, if oraz for mają różne znaczenie i nie można ich wybierać tylko po tym, że „gdzieś tam jest warunek”. Fragment z do while nie pasuje, ponieważ ciało pętli wykona się co najmniej raz, nawet wtedy, gdy warunek od początku jest fałszywy. Na diagramie tak nie jest. Dodatkowo brakuje tam instrukcji i++, więc zmienna sterująca nie zmienia się zgodnie z algorytmem, co w praktyce często prowadzi do złych wyników albo nawet zapętlenia. Konstrukcja z if również nie realizuje algorytmu, bo if wykonuje blok tylko jeden raz, a nie powtarza go wielokrotnie. Gałąź else wypisze wynik tylko przy pojedynczym sprawdzeniu warunku, bez powrotu do decyzji. To typowy błąd myślowy: warunek z rombu na schemacie kojarzy się z if, ale strzałka wracająca do góry oznacza pętlę. Fragment z for też nie jest poprawny. Po pierwsze, zapis else po pętli for nie jest w C++ poprawną konstrukcją składniową. Po drugie, inicjalizacja i = suma zmienia sens algorytmu, bo diagram zakłada użycie aktualnych wartości zmiennych, a nie ustawianie licznika na wartość sumy. Moim zdaniem najprostsza metoda analizy takich zadań to śledzenie przepływu sterowania: warunek, blok instrukcji, powrót do warunku, a na końcu wypisanie wyniku. Wtedy od razu widać, że potrzebna jest pętla while z dodawaniem, inkrementacją i wypisaniem po zakończeniu pętli.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.