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

Słowa kluczowe: Deklaracja funkcji w C++ Operator *= w C++ Potęgowanie iteracyjne Pętla for w C++

long int fun1(int a, int b) { long int wynik = 1; for (int i = 0; i < b; i++) wynik *= a; return wynik; } Którą wartość zwróci funkcja zapisana w...

long int fun1(int a, int b)
{
    long int wynik = 1;
    for (int i = 0; i < b; i++)
        wynik *= a;
    return wynik;
}
Którą wartość zwróci funkcja zapisana w języku C++, jeżeli jej parametrami są a = 2 oraz b = 5?
A. 25
B. 10
C. 7
D. 32
Ta funkcja działa jak proste potęgowanie całkowite. Zmienna wynik startuje od wartości 1, a pętla for wykonuje się dopóki i < b. Dla b = 5 oznacza to dokładnie pięć obiegów pętli: dla i = 0, 1, 2, 3 oraz 4. W każdym obiegu wykonywana jest instrukcja wynik *= a, czyli skrócony zapis wynik = wynik * a. Przy a = 2 dostajemy kolejno: 1 * 2 = 2, potem 4, 8, 16 i na końcu 32. Funkcja zwraca więc 32, czyli 2⁵. Moim zdaniem to bardzo dobry przykład na zrozumienie, że pętla nie musi tylko dodawać wartości, może też wykonywać mnożenie, budować iloczyn albo symulować potęgowanie. W praktycznym programowaniu taki schemat pojawia się np. przy obliczeniach matematycznych, szyfrowaniu, generowaniu kombinacji albo analizie złożoności algorytmów. Warto też pamiętać o dobrej praktyce: long int ma ograniczony zakres, więc dla dużych a i b może dojść do przepełnienia. W profesjonalnym kodzie często stosuje się typy o jasno określonym rozmiarze, np. int64_t, oraz sprawdza poprawność danych wejściowych.
Jeżeli wynik był inny niż 32, to najczęściej problem wynika z pomylenia działania pętli z pojedynczym działaniem arytmetycznym. Ta funkcja nie liczy a + b ani a * b. Wartość 10 mogłaby się pojawić, gdyby potraktować parametry jako zwykłe mnożenie 2 * 5, ale kod robi coś innego: mnoży zmienną wynik przez a tyle razy, ile wynosi b. To subtelna, ale bardzo ważna różnica w analizie algorytmów. Wartość 7 pasuje do dodawania parametrów, czyli 2 + 5, jednak w funkcji nie ma instrukcji dodawania do wyniku. Operator *= oznacza mnożenie z przypisaniem, a nie zwiększanie wartości o a. Z kolei 25 wygląda jak obliczenie 5², czyli zamiana miejscami podstawy i wykładnika. Tutaj podstawą jest a, a liczba powtórzeń wynika z b, więc liczone jest 2⁵, nie 5². Trzeba też uważnie patrzeć na warunek pętli i < b. Start od i = 0 nie oznacza, że pętla wykona się sześć razy; dla b = 5 wykona się pięć razy, bo ostatnią poprawną wartością i jest 4. Z mojego doświadczenia takie błędy często biorą się z czytania kodu „na oko”, bez rozpisania kolejnych wartości zmiennych. Dobra praktyka przy takich zadaniach to zrobić krótką tabelkę: numer obiegu, wartość i oraz aktualny wynik. Wtedy od razu widać, że funkcja realizuje potęgowanie całkowite dla nieujemnego b.

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.