Python | Matura Informatyka cke 2016 cz.1

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, a odpowiedzi tutaj.

Opis zadania

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 postacii 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ąć 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 zakrą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. pi1000 – 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.

Wykres i wypisanie

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 artykułu :). Zachęcam do sprawdzenia innych moich postów na blogu.

shop
Otwórz Sklep Play

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