Przeczytaj
Zadanie 1. Ogródki działkowe
W Heksagonalni znajduje się wiele ogródków działkowych. Właścicielem jednego z nich jest pan Uniksowy.
Zadanie 1.1
Pan Uniksowy chce zadbać o trawnik na swojej działce, dlatego postanowił kupić nawóz. Preparat sprzedawany jest w opakowaniach po 5 litrów. 1 litr nawozu wystarczy na 5 mIndeks górny 22 trawy. Aby wiedzieć, ile preparatu potrzebuje, pan Uniksowy musi obliczyć powierzchnię działki.
Działka pana Uniksowego od północy graniczy z rzeką, której bieg można opisać funkcją:
Od zachodu działkę ogranicza prosta x = 0, od wschodu prosta x = 2, natomiast od południa prosta pomiędzy punktami (0, 0) oraz (2, 0).
Skorzystaj z metody prostokątówmetody prostokątów, za punkt przecięcia wykresu z podstawą prostokąta przyjmij środek podstawy prostokąta.
Przyjmij, że odległość między punktami układu współrzędnych równa 1 odpowiada 10 m na działce, czyli kwadrat ograniczony punktami (-1, -1) oraz (1, 1) reprezentuje działkę o długości boku 20 m oraz powierzchni 400 mIndeks górny 22.
W pliku precyzja.txt
znajdują się liczby całkowite dodatnie oznaczające, na ile prostokątów należy podzielić działkę.
precyzja.txt
Jeśli w pierwszym wierszu pliku precyzja.txt
znajduje się liczba 4, to powinniśmy podzielić działkę na 4 prostokąty:
Oblicz, ile opakowań nawozu potrzebuje pan Uniksowy, aby użyźnić trawę na całej działce w zależności od liczby prostokątów z pliku precyzja.txt
.
Wyniki zapisz do pliku nawoz.txt
, gdzie liczba opakowań nawozu w każdym wierszu będzie odpowiadać liczbie prostokątów przyjętej do obliczeń z danego wiersza pliku precyzja.txt
Do oceny oddajesz:
plik
nawoz.txt
zawierający odpowiedź (liczba pełnych opakowań nawozu, odpowiadająca przyjętej liczbie prostokątów z danej linii plikuprecyzja.txt
)plik(i) z komputerową realizacją zadania (kodem programu)
Przedstaw rozwiązanie zadania w postaci programu w języku C++, Java lub Python. Odpowiedź do zadania znajdziesz pod omówieniem rozwiązania zapisanego za pomocą pseudokodu.
Rozwiązanie
W rozwiązaniu skorzystamy z metody prostokątów bez niedomiaru i nadmiaru (obliczając wartość funkcji dla środka podstawy każdego prostokąta), wczytując liczbę prostokątów z pliku precyzja.txt
.
Tworzymy zmienne, w których zapisujemy początek i koniec przedziału. Następnie obliczamy podstawę każdego prostokąta, czyli: (koniec - początek) / precyzja[i]
.
Sumujemy wysokości kolejnych prostokątów. Na koniec mnożymy sumę przez podstawę, dzięki czemu otrzymujemy wynik.
W pseudokodzie wykorzystaliśmy operatory div
oraz mod
:
div
– operator dzielenia całkowitego;mod
– operator modulo (oblicza resztę z dzielenia).
Definiujemy funkcję, która dla wybranej odciętej zwraca wartość bezwzględną rzędnej dla podanej w poleceniu funkcji, korzystając z funkcji potęgi oraz funkcji modułu. [linie kodu od 1 do 13]
Wczytujemy dane z pliku
precyzja.txt
. [linia kodu 15]Zapisujemy wartości początkowe zmiennych. [linie kodu od 16 do 17]
Zapisujemy dane do odpowiednich zmiennych (jeden litr nawozu starcza na 5 mIndeks górny 22 działki, zatem jedno 5‑litrowe opakowanie starczy na 25 mIndeks górny 22). [linie kodu od 18 do 19]
Na podstawie wzoru na pole prostokąta (podstawa razy wysokość), obliczamy pole powierzchni w następujący sposób:
Korzystając z zależności:
możemy wyłączyć przed nawias wspólny czynnik (podstawę) i przekształcić wzór w następujący sposób:
Obliczamy sumę kolejnych wysokości (punkt () *
podstawa
wyznacza środek podstawy -tego prostokąta; jego wysokość jest wartością funkcji w tym punkcie).Na koniec mnożymy otrzymaną sumę przez podstawę, a wcześniej oba czynniki przez 10 (ponieważ zarówno podstawa, jak i suma wysokości są wyrażone w jednostce odległości układu współrzędnych, która odpowiada odległości 10 m na działce), otrzymując przybliżone pole powierzchni obszaru ograniczonego wykresem funkcji. [linie kodu od 22 do 27]
Obliczamy liczbę pełnych opakowań preparatu. Jeśli obliczone pole działki jest podzielne przez 25, za liczbę pełnych opakowań bierzemy wynik dzielenia przez 25. Możemy skorzystać z funkcji
mod
, która zwraca resztę z dzielenia. Jeżeli reszta jest niezerowa, kupujemy jedno opakowanie więcej. Skorzystamy wtedy z funkcjidiv
, zwracającej część całkowitą dzielenia pierwszego argumentu przez drugi. Otrzymaną liczbę pełnych opakowań preparatu zapisujemy do pliku. [linie kodu od 29 do 32]Dopisujemy wynik do pliku
nawoz.txt
. [linia kodu 34]Powtarzamy obliczenia dla różnych liczb prostokątów.
Poprawne rozwiązanie
Liczba prostokątów | Liczba opakowań nawozu |
---|---|
10 | 14 |
20 | 14 |
50 | 14 |
100 | 14 |
200 | 14 |
500 | 14 |
1000 | 14 |
2000 | 14 |
5000 | 14 |
10000 | 14 |
Zadanie 1.2
Co roku po drugiej stronie rzeki pan Uniksowy – za zgodą właściciela nieużywanej działki – kosi trawę dla swoich zwierząt.
W miesiącu, w którym koszona jest trawa, zwierzęta karmione są wyłącznie nią, natomiast pozostałości są suszone oraz magazynowane w szopie.
Obszar działki znajdującej się za rzeką od południa ogranicza funkcja:
Od zachodu działkę ogranicza prosta x = 0, od wschodu prosta x = 2, natomiast od północy prosta pomiędzy punktami (0, 4) oraz (2, 4).
Obszar przeznaczony do koszenia zaznaczony jest fioletowym kolorem:
Skorzystaj z metody trapezówmetody trapezów.
Przyjmij, że odległość między punktami układu współrzędnych równa 1 odpowiada
10 m na działce, czyli kwadrat ograniczony punktami (-1, -1) oraz (1, 1) reprezentuje działkę o długości boku 20 m oraz powierzchni 400 mIndeks górny 22.
W wyniku skoszenia metra kwadratowego działki uzyskiwane jest 1,43 kg trawy.
Pan Uniksowy kosi działkę przez 10 dni, każdego dnia kosząc 10% powierzchni działki. W tym okresie zwierzęta zjadają 15 kg trawy każdego dnia.
Codziennie trawa niezjedzona przez zwierzęta magazynowana jest w szopie, tracąc przez noc swojej masy w wyniku parowania.
W pliku precyzja.txt
znajdują się liczby całkowite dodatnie oznaczające, na ile trapezów należy podzielić działkę.
precyzja.txt
Jeśli w pierwszym wierszu pliku precyzja.txt
znajduje się liczba 8, to powinniśmy podzielić pole pod działką sąsiada na 8 trapezów:
Oblicz, ile trawy, zaokrąglonej do pełnych kilogramów w dół, będzie w szopie 11 dnia rano (czyli po nocnym odparowaniu wody – ale przed posiłkiem zwierząt), w zależności od ilości trapezów z pliku precyzja.txt
.
Wyniki zapisz do pliku trawa.txt
, gdzie ilość trawy w każdym wierszu będzie odpowiadać liczbie trapezów przyjętej do obliczeń z danego wiersza pliku precyzja.txt
Do oceny oddajesz:
plik
trawa.txt
zawierający odpowiedź (liczba kilogramów zmagazynowanej trawy zaokrąglona do pełnych kilogramów w dół, która będzie zmagazynowana w szopie 11. dnia rano, odpowiadająca przyjętej liczbie trapezów z danej linii plikuprecyzja.txt
)plik(i) z komputerową realizacją zadania (kodem programu)
Przedstaw rozwiązanie zadania w postaci programu w języku C++, Java lub Python. Odpowiedź do zadania znajdziesz pod omówieniem pseudokodu.
Rozwiązanie
Aby porównać obie metody, rozwiązując zadanie 1.2, skorzystamy z metody trapezów, wczytując, na ile trapezów należy podzielić działkę z pliku precyzja.txt
.
Metoda trapezów charakteryzuje się większą precyzją niż metoda prostokątów.
Pola kolejnych trapezów możemy obliczyć, korzystając ze wzoru:
Możemy zauważyć, że wszystkie trapezy – oprócz brzegowych – dzielą obie swoje wysokości ze swoimi sąsiadami, więc zsumujemy je dwukrotnie. Dodatkowo wszystkie trapezy mają taką samą podstawę. Analogicznie do metody prostokątów możemy przekształcić wzór, wyłączając podstawę poza nawias. Aby obliczyć całkowite pole, sumujemy wszystkie wysokości trapezów (wysokości brzegowe, ponieważ nie są liczone podwójne, dzielimy przez 2), a następnie mnożymy przez podstawę:
W analizowanym przykładzie obliczamy pole obszaru ograniczonego od dołu wykresem funkcji i od góry prostą . Możemy zatem je wyznaczyć, obliczając pole obszaru ograniczonego wykresem funkcji i prostą , a następnie odjąć tę wartość od pola powierzchni obu działek, czyli prostokąta wyznaczonego w układzie współrzędnych punktami (0,0) oraz (2,4). Nie zapominamy o przeliczeniu otrzymanego pola na mIndeks górny 22 według podanego w zadaniu przelicznika (1 jednostka długości w układzie współrzędnych odpowiada 10 m długości na działce).
Definiujemy funkcję, która dla wybranej odciętej zwraca wartość bezwzględną rzędnej dla podanej w poleceniu funkcji, korzystając z funkcji potęgi oraz funkcji modułu. [linie kodu od 1 do 13]
Wczytujemy dane z pliku
precyzja.txt
. [linia kodu 15]Zapisujemy początkowe wartości zmiennych. [linie kodu od 16 do 19]
Zapisujemy do zmiennych dane z zadania. [linie kodu od 20 do 25]
Obliczamy pole powierzchni obszaru nad wykresem funkcji tak, jak jest to opisane w rozwiązaniu. [linie kodu od 28 do 35]
Aby obliczyć liczbę kilogramów trawy dla każdego dnia, do masy posiadanych zapasów należy dodać liczbę kilogramów skoszonej w danym dniu trawy, odjąć masę trawy zjadanej przez zwierzęta oraz odjąć masy trawy (skutek parowania).
Dodajemy masę skoszonej trawy przez pana Uniksowego (pole działki dzielimy przez liczbę dni, przez które pan Uniskowy kosi trawę).
Odejmujemy masę trawy, jaką zjadają zwierzęta.
Odejmujemy nocny ubytek trawy magazynowanej w szopie.
[linie kodu od 37 do 41]
Jeżeli wynik nie jest liczbą całkowitą, to zaokrąglamy go w dół za pomocą operacji dzielenia całkowitoliczbowego przez jeden. [linie kodu od 43 do 44]
Zapisujemy wynik do pliku
trawa.txt
. [linia kodu 46]Powtarzamy obliczenia dla różnych liczb trapezów.
Poprawne rozwiązanie
Liczba trapezów | Liczba kilogramów zmagazynowanej trawy |
---|---|
10 | 136 |
20 | 135 |
50 | 135 |
100 | 135 |
200 | 135 |
500 | 135 |
1000 | 135 |
2000 | 135 |
5000 | 135 |
10000 | 135 |
Odpowiedzi
Zadanie 1.1
Zadanie 1.2
Słownik
metoda szacowania wartości pola powierzchni pod wykresem funkcji za pomocą sumy pól prostokątów, będących przybliżeniem obszaru ograniczonego wykresem funkcji i osią OX
metoda szacowania wartości pola powierzchni pod wykresem funkcji za pomocą sumy pól trapezów, będących przybliżeniem obszaru ograniczonego wykresem funkcji i osią OX
zbiór wszystkich punktów płaszczyzny o współrzędnych
w prostokątnym układzie współrzędnych, gdzie należy do dziedziny tej funkcji, natomiast jest wartością funkcji dla argumentu