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: Algorytmy i podstawy informatyki

Jaką wartość zwróci funkcja zao zdefiniowana w języku C++, wywołana z argumentem 3.7?

int zao(float x){
   return (x * 2);
}
A. 6
Źle. 6 wyszłoby po obcięciu argumentu do 3, a parametr float przechowuje 3.7.
B. 7.4
Źle. 7.4 to wartość wyrażenia, ale funkcja typu int nie zwraca części ułamkowej.
C. 8
Źle. Konwersja do int nie zaokrągla w górę, tylko obcina ułamek.
D. 7
Dobrze. 3.7 * 2 = 7.4, a typ zwracany int odcina część ułamkową do 7.

Poprawny wynik to 7. Funkcja mnoży argument przez 2, więc wyrażenie x * 2 daje 7.4. Typ zwracany zadeklarowano jednak jako int, dlatego przy instrukcji return wartość zmiennoprzecinkowa jest niejawnie konwertowana na liczbę całkowitą. Taka konwersja nie zaokrągla, tylko odcina część ułamkową, więc z 7.4 zostaje 7.

Do zapamiętania: konwersja float lub double na int obcina wynik w stronę zera, więc 7.9 też dałoby 7, a -7.9 dałoby -7. Jeśli funkcja ma zwracać ułamek, jej typ musi być zmiennoprzecinkowy, np. float zao(float x). Do zaokrąglania służy funkcja round() z biblioteki cmath.

Wynik 7.4 to poprawna wartość samego mnożenia, ale funkcja typu int nie może zwrócić części ułamkowej - przy zwracaniu zostanie ona odcięta. To najczęstszy błąd: obliczenie wyrażenia i pominięcie typu zwracanego, który stoi na samym początku definicji funkcji.

Wynik 8 dałoby zaokrąglenie w górę, a konwersja do int nie zaokrągla w górę, tylko obcina. Zresztą 7.4 nawet przy zwykłym zaokrąglaniu dałoby 7. Wynik 6 powstałby, gdyby argument przed mnożeniem obcięto do 3 - tak się jednak nie dzieje, bo parametr x jest typu float i przechowuje pełne 3.7. Analizując funkcję, warto przejść trzy kroki: jaki typ ma parametr, ile wynosi wyrażenie po return i do jakiego typu zostanie przekonwertowany wynik.

Takie obcinanie jest częstym źródłem błędów w programach liczących, np. ceny czy średnie ocen.

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.