Sprawdź się
Zadanie 3. Turniej pływacki
Co roku w Różniczkowalii organizowany jest konkurs, którego celem jest wyłonienie najlepszego pływaka. Okazuje się jednak, że każdy zawodnik jest tak samo sprawny.
W związku z tym wszyscy uczestnicy konkursu mogliby dopłynąć do mety w tym samym momencie. Aby wyłonić zwycięzcę, opracowano specjalną metodę:
każdy ma za zadanie przepłynąć wzdłuż rzeki,
pole zakreślane przez drogę pływaków względem brzegu ma być jak najmniejsze,
zabronione jest wychodzenie na brzeg w trakcie zawodów (jeśli się to zrobi, następuje dyskwalifikacja z zawodów),
pływacy startują z linii
x = 0
, a finiszują na liniix = 5.
Dzięki tym kilku zasadom rywalizacja z roku na rok staje się coraz bardziej zacięta.
Plik dane.txt
zawiera 25 wierszy ze współczynnikami funkcji opisujących drogi przepłynięte przez kolejnych zawodników. Każdy wiersz pliku zawiera 4 liczby rzeczywiste, będące współczynnikami funkcji wielomianowej trzeciego stopnia, oddzielone pojedynczym znakiem odstępu – tak jak przedstawiono to w Przykładzie 1.
Zapis w pliku:
Oznacza funkcje:
dane.txt
Po przeprowadzeniu konkurencji okazało się, że woda uszkodziła część danych.
Oto wskazówki dotyczące danych:
Współczynnik przy najwyższej potędze, tj.
xIndeks górny 33
, w każdej funkcji nie był mniejszy niż 0. Te, które są mniejsze, w rzeczywistości powinny być liczbą przeciwną (np. -2 → 2, -1,7 → 1,7).Suma wszystkich współczynników nie może być większa niż 16. Wszystkie funkcje z większą sumą należały do zdyskwalifikowanych zawodników.
Korzystając z wybranego języka programowania, napisz program, który uzupełni uszkodzone dane, a następnie wyznaczy zwycięzcę i wypisze jego numer wiersza.
Wiersze, podobnie jak tablice w komputerze, numerujemy począwszy od zera.
Do obliczenia pola powierzchni przyjmij różną liczbę prostokątów (za punkt przecięcia wykresu z podstawą prostokąta przyjmij środek podstawy prostokąta) lub trapezów, na które podzielisz pole pod drogą pływaków.
Plik precyzja.txt
zawiera 5 liczb naturalnych oznaczających liczbę prostokątów lub trapezów, każda wartość w osobnej linii.
precyzja.txt
Jeśli w wierszu pliku precyzja.txt
znajduje się liczba 10, to powinniśmy podzielić pole pod przepłyniętą drogą na 10 prostokątów:
Lub 10 trapezów:
Do oceny oddajesz:
plik
zwyciezcy.txt
zawierający odpowiedź (5 liczb całkowitych, każda w osobnej linii, określających numer zwycięzcy zawodów dla odpowiadającej liczby prostokątów lub trapezów z plikuprecyzja.txt
)plik(i) z komputerową realizacją zadania (kodem programu)
Przedstaw rozwiązanie zadania, pisząc program w języku C++, Java lub Python. Rozwiązanie zadania zarówno dla metody prostokątów jak i trapezów znajdziesz pod sekcją ćwiczeń.
Ćwiczenia dla przykładowych danych oraz rozwiązania zostały zaimplementowane w oparciu o metodę trapezów. Wyniki w przypadku użycia metody prostokątów mogą się nieznacznie różnić.
C++
Java
Python
Poprawne rozwiązanie (metoda prostokątów)
Liczba prostokątów | Numer zawodnika |
---|---|
5 | 12 |
10 | 12 |
50 | 12 |
100 | 12 |
2000 | 12 |
Poprawne rozwiązanie (metoda trapezów)
Liczba trapezów | Numer zawodnika |
---|---|
5 | 5 |
10 | 12 |
50 | 12 |
100 | 12 |
2000 | 12 |
ODPOWIEDŹ DO ZADANIA:
Metoda prostokątów:
Metoda trapezów: