Matura Informatyka 2016

Kliknij i wspomóż mnie :)

Python

W tym artykule rozwiązuję zadanie 4 Liczba PI z arkusza maturalnego z informatyki. Trudność zadania polega na przełożeniu podejścia matematycznego na kod.

Arkusz z zadaniem można znaleźć tutaj:

Arkusz matura 2016

Interpretacja danych

W kartezjańskim układzie współrzędnych na płaszczyźnie narysowano kwadrat o boku długości 400 i środku symetrii w punkcie (200;200).
Boki kwadratu są równoległe do osi układu współrzędnych. W kwadrat wpisano koło. Następnie wylosowano 10 000 punktów należących do kwadratu.
Współrzędne (x,y) punktów zostały zapisane w pliku punkty.txt, każdy punkt w osobnym wierszu. Wiersz ma postać dwóch liczb całkowitych z zakresu <0;400>, rozdzielonych pojedynczym znakiem odstępu.

Jako, że zawsze będziemy operować na 2 współrzędnych warto dane popakować w klasę Point dla spójności oraz czytelności kodu.

Funkcja getPoints() interpretuje dane do postaci obiektu. Po wywołaniu funkcji otrzymujemy globalną zmienną dostępną później w kodzie.

Punkty na okręgu i w kole

Wypisz współrzędne tych punktów, które należą do brzegu koła (okręgu), oraz podaj liczbę punktów należących do wnętrza koła (brzeg koła nie należy do wnętrza koła).

Wskazówka: Równanie okręgu o środku w punkcie `S = (a, b)` promieniu `r > 0` ma postać:

`(x - a)^2 + (y - b)^2 = r^2`

Pierwsze zadanie jest po prostu przełożeniem wzoru na kod. Jeżeli współrzędne spełniają równanie, a wnioskując z treści wiemy, że promień wynosi 200 to zostają one wypisane.

Mamy też dodatkowo sprawdzić, które punkty należą do koła. Działanie jest właściwie analogiczne z tym, że znak równości zamieniamy na znak mniejszości.

Stosunek punktów

Przy założeniu równomiernego rozkładu punktów w kwadracie, stosunek liczby punktów `n_k` należących do koła do liczby punktów `n` należących do kwadratu jest w przybliżeniu równy stosunkowi pola koła `P_k` do pola kwadratu `P`:

`n_k/n \approx P_k / P`

W odpowiedzi mamy podać wyniki dla pierwszych 1000, 5000 oraz 10000 punktów z zaokrągleniem do 4 miejsc po przecinku.

Funkcja powyżej mimo, iż wydaje się podobna to jednak posiada parametr amount, który określa dla jakiej próbki ma zostać zwrócona liczba punktów.

Zmienna ratio określa stosunek ilości punktów koła do punktów kwadratu.

Pole koła otrzymujemy poprze iloczyn pola kwadratu i stosunku.

Mając pole koła możemy łatwo otrzymać pi za pomocą dzielenia przez `r^2`, a później przez rozmiar próbki.

Błąd bezwzględny

Błąd bezwzględny przybliżonej wartości liczby pi, wyznaczonej z `n` punktów, definiujemy następująco: `E_n = \abs{pi–pi_n}` gdzie:

π – wartość liczby pi, będąca wynikiem standardowej funkcji z narzędzia informatycznego, z którego korzystasz

`pi_n` – przybliżona wartość liczby pi wyznaczona z `n` kolejnych punktów, poczynając od pierwszego punktu z pliku punkty.txt, np. `pi_1000` – liczba wyznaczona z pierwszego tysiąca punktów.

Oblicz n ε dla n = 1, 2, 3, …, 1700. Na podstawie powyższego zestawienia utwórz wykres liniowy ilustrujący zmiany dokładności wyznaczanej liczby pi.

Wykorzystując już napisaną funkcję countPI obliczamy błąd bezwzględny i zapisujemy do pliku w celu utworzenia wykresu.

Python wartości typu float zapisze z kropką. Niestety excel preferuje przecinki, dla tego podmieniamy je i zapisujemy plik z parametrem a czyli dodawania, a nie nadpisywania pliku.

Otrzymane wyniki wkleiłem do excel'a i na ich podstawie narysowałem wykres. Na sam koniec zostało już tylko uruchomić funkcje i porównać wyniki z odpowiedziami.

Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊

O mnie

Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.

Zobacz więcej

Najnowsze posty

Kliknij i wspomóż mnie :)

Zostańmy w kontakcie

* Wymagane
Kliknij i wspomóż mnie :)
shop
Otwórz Sklep Play

Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.