Pętla for
Ostatnio zmodyfikowano 2017-02-03 23:57
milmega Temat założony przez niniejszego użytkownika |
Pętla for » 2017-02-03 20:00:04 Zadanie: system informatyczny obsługujący rajdy samochodowe, oblicza średnią prędkość samochodu na trasie. Uzupełnij funkcję float average_speed( int check_points ), tak aby zwracała średnią prędkość samochodu w km/h. Przez parametr check_points przekazywana jest do funkcji liczba przejechanych przez samochód odcinków. Zawarta w API systemu funkcja int get_time( int check_point) zwraca czas w sekundach pokonania przez samochód odcinka o numerze check_point, funkcja int get_length( int check_point) zwraca długość w metrach tego odcinka.
Dziękuje z góry za każdą pomoc! |
|
Gibas11 |
» 2017-02-03 20:12:47 Przeiteruj po przedziale [0, check_points), zlicz sobie sumy czasów i długości a potem podziel jedno przez drugie, pomnóż przez 3.6 (przejście z m/s na km/h) i zwróć wynik, to chyba tyle. |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-02-03 20:20:37 Napisałem coś takiego, ale jest źle.
#include <rajdy.h>
float average_speed(int check_points) { float total_length = 0.0; float total_time = 0.0; for(int i = 0; i <= check_points; ++i) { total_length += get_length(i) * 1000; total_time += get_time(i) * 3600; } return (total_length / total_time) * check_points; } |
|
Gibas11 |
» 2017-02-03 20:25:13 Wstawiaj kod w znaczniki [cpp]…[/cpp]. W pętli miałeś być w zakresie [0, check_points), zmień i <= check_points na i < check_points . I po co Ci * check_points ? |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-02-03 20:30:51 Zmieniłem <= na < i usunąłem *check_points. W testach zadania nadal wyrzuca mi takie oto błędy: (wynik po prawej to wynik taki jak powinien być) FAILED average_speed( 5 ) { return 8.85; } == 127.51 FAILED average_speed( 10 ) { return 8.95; } == 123.10 FAILED average_speed( 15 ) { return 10.33; } == 139.46 FAILED average_speed( 20 ) { return 11.33; } == 146.07 FAILED average_speed( 50 ) { return 11.17; } == 146.47 FAILED average_speed( 100 ) { return 10.61; } == 138.44 FAILED average_speed( 130 ) { return 10.40; } == 135.17 |
|
Gibas11 |
» 2017-02-03 20:34:15 Mnożyć przez 3.6 powinieneś wynik na końcu, robiąc to *1000 i *3600 psujesz proporcje i wynik wychodzi hardo inny, jak to poprawisz to wszystko powinno być już dobrze (chyba). //edit: Ewentualnie to mnożenie w pętli zamień na dzielenie, wtedy też powinno zadziałać. |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-02-03 20:38:18 czyli obie linijki zamiast 1000 i 3600 to obie pomnozyc przez 3.6? |
|
Gibas11 |
» 2017-02-03 20:39:41 Nie, wtedy wynik byłby w metrach na sekundę. for( int i = 0; i < check_points; ++i ) { total_length += get_length( i ); total_time += get_time( i ); } return( total_length / total_time ) * 3.6f;
|
|
« 1 » 2 3 |