Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pętla for

Ostatnio zmodyfikowano 2017-02-03 23:57
Autor Wiadomość
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!
P-157288
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.
P-157290
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;
}
P-157293
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
?
P-157295
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
P-157297
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ć.
P-157298
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?
P-157299
Gibas11
» 2017-02-03 20:39:41
Nie, wtedy wynik byłby w metrach na sekundę.
C/C++
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;
P-157301
« 1 » 2 3
  Strona 1 z 3 Następna strona