Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki

int fun1(int tab[]) { int wynik = 0; for (int i = 0; i < 6; i++) wynik += tab[i]; return wynik; } Którą wartość zwróci funkcja zapisana językiem C++,...

int fun1(int tab[]) {
   int wynik = 0;
   for (int i = 0; i < 6; i++)
      wynik += tab[i];
   return wynik;
}
Którą wartość zwróci funkcja zapisana językiem C++, jeżeli jej parametrem wejściowym jest tablica wypełniona w następujący sposób: tablica[6] = {3, 4, 2, 4, 10, 0};?
A. 23
B. 0
C. 10
D. 960

Pytanie z egzaminu CKE, czerwiec 2023 (arkusz EE.09-SG-23.06).

Funkcja zwraca 23, ponieważ jej zadaniem jest zsumowanie sześciu elementów tablicy. Zmienna wynik na początku ma wartość 0, a pętla for wykonuje się dla i równych 0, 1, 2, 3, 4 i 5. To ważne, bo w C++ indeksowanie tablic zaczyna się od zera, więc tab[0] to pierwszy element, a tab[5] to szósty element. W kolejnych obiegach pętli wykonywane jest dodawanie: 0 + 3 = 3, potem +4 = 7, +2 = 9, +4 = 13, +10 = 23, +0 = 23. Instrukcja return wynik oddaje więc właśnie wartość 23. Moim zdaniem to bardzo klasyczny przykład funkcji agregującej dane, czyli takiej, która przetwarza wiele wartości i zwraca jeden wynik, np. sumę punktów, cen produktów albo liczby odwiedzin. W praktycznym C++ dobrą praktyką byłoby nie wpisywać na sztywno liczby 6, tylko przekazać rozmiar tablicy jako drugi parametr albo użyć std::array lub std::vector. Dzięki temu kod jest bezpieczniejszy i mniej podatny na wyjście poza zakres tablicy, co w C++ potrafi narobić naprawdę dziwnych błędów.
W tej funkcji kluczowe jest zauważenie operatora += oraz zakresu działania pętli. Zapis wynik += tab[i] oznacza dokładnie tyle, co wynik = wynik + tab[i], czyli aktualna suma jest powiększana o kolejny element tablicy. To nie jest mnożenie, nie jest wybieranie największej wartości i nie jest też zwracanie ostatniego elementu. Jeżeli ktoś otrzymuje 960, to najpewniej potraktował dane jak iloczyn 3 · 4 · 2 · 4 · 10, dodatkowo pomijając końcowe 0. To zupełnie inna operacja niż ta zapisana w kodzie, bo w programie nie ma operatora *= ani mnożenia. Wynik 10 zwykle bierze się z myślenia, że funkcja ma znaleźć największy element tablicy albo że szczególnie ważna jest wartość tab[4]. Kod jednak nigdzie nie porównuje elementów, więc nie szuka maksimum. Wartość 0 może wynikać z zasugerowania się ostatnim elementem tablicy albo z początkowej wartości zmiennej wynik. Trzeba jednak pamiętać, że wynik jest modyfikowany w każdej iteracji pętli, więc nie zostaje zerem. Z mojego doświadczenia najczęstszy błąd przy takich zadaniach to pominięcie faktu, że pętla i < 6 wykona się aż sześć razy, od indeksu 0 do 5. W C++ to standardowy sposób przechodzenia po tablicy, ale trzeba pilnować granic, bo tablica o rozmiarze 6 nie ma elementu tab[6].

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.