Przejdź do treści głównej
INF.04Pytanie #302 z 856podstawy-skladni-i-typy-danych

Kod przedstawia operacje na 1000-elementowej tablicy wypełnionej liczbami całkowitymi. Aby zoptymalizować kod, nie tracąc na jego czytelności, należy

Opcje odpowiedzi:
A
zmniejszyć o połowę liczbę iteracji pętli
B
pętlę for zamienić na pętlę while
C
wynik metody Pow wyliczyć przed pętlą
Prawidłowa
D
zapisać kod bez pętli
Reklama

Wyjaśnienie i uzasadnienie dydaktyczne

Poprawna odpowiedź: C

Uzasadnienie i szersze wyjaśnienie:

Obecnie, wewnątrz pętli for, w każdej z 1000 iteracji, wykonywana jest operacja int j = Math.Pow(4, 3);. Wywołanie metody Pow (potęgowanie) jest operacją stosunkowo kosztowną obliczeniowo. Co najważniejsze, wynik tej operacji (4³ = 64) jest zawsze taki sam w każdej iteracji, ponieważ argumenty są stałe.

Powtarzanie tego samego, niezmiennego obliczenia 1000 razy jest nieefektywne. Optymalizacja polega na wyniesieniu niezmiennika pętli poza pętlę. Należy obliczyć potęgę tylko raz, przed rozpoczęciem pętli, a w jej wnętrzu używać już gotowego wyniku.

Zoptymalizowany kod wyglądałby tak:

CSHARP
int j = (int)Math.Pow(4, 3); // Wyliczenie tylko raz
for(int i=0; i < 1000; i++) {
    tablica[i] = j * tablica[i];
}

Ta prosta zmiana znacząco zwiększa wydajność kodu, eliminując 999 zbędnych wywołań funkcji Pow.

Dlaczego pozostałe odpowiedzi są nieprawidłowe?

  • A: Zmniejszenie liczby iteracji zmieniłoby logikę programu – operacja nie zostałaby wykonana dla wszystkich elementów tablicy.
  • B: Zamiana pętli for na while nie przyniesie żadnej korzyści wydajnościowej; obie pętle są w tym przypadku równoważne.
  • D: Operacja musi być wykonana dla każdego z 1000 elementów, więc pętla jest niezbędna.

Chcesz poćwiczyć całą kwalifikację INF.04?

Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.

Rozwiąż w Quizie

Pojęcia z tego pytania

Cały słownik INF04
Reklama

Podobne pytania z działu „Podstawy skladni i typy danych”

Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 54 pytań z tego działu.