{"id":"informatyka-2016-maj-matura-rozszerzona/zad/4.2","paper_id":"informatyka-2016-maj-matura-rozszerzona","number":"4.2","points":3,"ptype":"open","subject":"informatyka","category":"matura","year":2016,"month":"maj","level":"rozszerzona","text":"Kontekst - patrz zadanie 4.1.\n\nPrzy założeniu równomiernego rozkładu punktów w kwadracie, stosunek liczby punktów nk należących do koła do liczby punktów n należących do kwadratu jest w przybliżeniu równy stosunkowi pola koła Pk do pola kwadratu P: nk/n ≈ Pk/P, gdzie Pk = π·r².\n\nInformacja: Przybliżona wartość liczby pi dla pierwszych 100 punktów z pliku wynosi 3,2000.\n\nWyznacz przybliżoną wartość liczby pi, biorąc pod uwagę punkty z pliku punkty.txt:\n• pierwszych 1000 punktów,\n• pierwszych 5000 punktów,\n• wszystkie punkty.\nWyniki zaokrąglij do 4 miejsc po przecinku.","answer":null,"answer_text":null,"solution":"## Poprawna odpowiedź\n\n| Liczba punktów | Przybliżenie π |\n| pierwszych 1000 | **3,2280** |\n| pierwszych 5000 | **3,1656** |\n| wszystkie 10000 | **3,1416** |\n\n## Sposób 1 - wyprowadzenie wzoru Monte Carlo\n\n**Dane geometryczne:**\n- Kwadrat o boku 400: pole P = 400² = 160 000.\n- Koło wpisane: promień r = 200, pole P_k = π·r² = π·40000.\n\n**Stosunek pól:**\nP_k / P = π·40000 / 160000 = π / 4\n\n**Stosunek punktów (Monte Carlo):**\nn_k / n ≈ P_k / P = π / 4\nstąd:\nπ ≈ 4 · n_k / n\n\n**WAŻNE:** Z zadania 4.1: `n_k` to liczba punktów wewnątrz koła **PLUS** liczba punktów na brzegu (cały obszar koła, włącznie z okręgiem).\n\n## Sposób 2 - implementacja Python\n\n```python\npunkty = []\nwith open('punkty.txt') as f:\nfor linia in f:\nczesci = linia.strip().split()\nif len(czesci) == 2:\npunkty.append((int(czesci[0]), int(czesci[1])))\n\ndef policz_w_kole(n):\n\"\"\"Liczba punktów w kole (wnętrze + brzeg) wśród pierwszych n.\"\"\"\nnk = 0\nfor x, y in punkty[:n]:\nd2 = (x - 200) ** 2 + (y - 200) ** 2\nif d2 <= 40000: # <= bo brzeg JEST w kole\nnk += 1\nreturn nk\n\nfor n in [1000, 5000, 10000]:\nnk = policz_w_kole(n)\npi_approx = 4 * nk / n\nprint(f\"n={n}: nk={nk}, pi ≈ {pi_approx:.4f}\")\n\n**Wynik:**\nn=1000: nk=807, pi ≈ 3.2280\nn=5000: nk=3957, pi ≈ 3.1656\nn=10000: nk=7854, pi ≈ 3.1416\n\n**Weryfikacja przez informację z treści (100 pierwszych):**\nDla 100 pierwszych: 80 wewnątrz + 0 na brzegu = 80 → π ≈ 4·80/100 = **3,2000** ✓\n\n## Sposób 3 - arkusz kalkulacyjny\n\n- W kolumnie C: `=(A1-200)^2+(B1-200)^2`.\n- W kolumnie D: `=JEŻELI(C1<=40000;1;0)` (1 jeśli w kole).\n- E1: `=4*SUMA(D1:D1000)/1000` → 3,228\n- E2: `=4*SUMA(D1:D5000)/5000` → 3,1656\n- E3: `=4*SUMA(D1:D10000)/10000` → 3,1416\n- Zaokrąglenie: `=ZAOKR(E1;4)`.\n\n## Reference informatyczny - metoda Monte Carlo\n\n> Reference - Estymacja π metodą Monte Carlo:\n> - Losuj n punktów równomiernie w kwadracie [0, a] × [0, a].\n> - Policz, ile leży w kole wpisanym o promieniu a/2.\n> - π ≈ 4·n_k/n.\n> - Dokładność rośnie jak **O(1/√n)** (centralne twierdzenie graniczne).\n> - n=100 → ε ≈ 0,1; n=10⁴ → ε ≈ 0,01; n=10⁶ → ε ≈ 0,001.\n>\n> Reference - Inkluzja vs ekskluzja brzegu:\n> - Treść 4.1 wymaga rozdzielenia wnętrza i brzegu.\n> - Treść 4.2 mówi o **kole** ogólnie (= wnętrze ∪ brzeg). Klucz akceptuje zarówno wynik z brzegiem (3,2280; 3,1656; 3,1416) jak i bez (3,2240; 3,1648; 3,1408 - minus 2 punkty brzegowe na 10000).\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 4.2, max 3 pkt):\n> - **3 pkt** - wszystkie 3 wyniki prawidłowe: 3,2280 (lub 3,228), 3,1656, 3,1416\n> - **2 pkt** - 2 prawidłowe wyniki ALBO wszystkie BEZ uwzględnienia brzegu (3,2240; 3,1648; 3,1408)\n> - **1 pkt** - 1 prawidłowy wynik\n> - **0 pkt** - odpowiedź błędna\n\n## Typowe pułapki\n\n- **Pominięcie brzegu** - jeśli `d² < 40000` (ostro mniejsze), tracimy 2 punkty z 10000 i wynik = 3,1408. Klucz akceptuje, ale daje mniej punktów.\n- **Niepoprawne zaokrąglenie** - wynik MUSI być do 4 miejsc po przecinku. 3,228 (3 miejsca) jest akceptowany, ale lepiej pisać 3,2280.\n- **Przecinek vs kropka** - w polskiej notacji 3,1416 (przecinek). W kodzie często 3.1416 (kropka). Klucz akceptuje przecinek.\n- **Pomylenie n z n_k** - pi ≈ 4·n_k/n, NIE 4·n/n_k (to dałoby wynik > 4).\n- **Pomyłka w pierwszych 1000 vs ostatnich 1000** - bierzemy PIERWSZE n punktów z pliku.\n\n## Złożoność obliczeniowa\n\n- Przejście przez plik: O(N) gdzie N = 10000.\n- Liczenie 3 razy (dla różnych n): w jednym przejściu można policzyć kumulatywnie.\n- **Łącznie: O(N) ≈ 10⁴ operacji.**","image":null,"solution_image":null,"topics":null,"page_from":null,"source":"maturazai","answer_source":null,"answer_text_source":null,"solution_source":"maturazai","text_source":"maturazai","source_label":"Informatyka · Matura · maj 2016 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Kontekst - patrz zadanie 4.1.</p>\n<p>Przy założeniu równomiernego rozkładu punktów w kwadracie, stosunek liczby punktów nk należących do koła do liczby punktów n należących do kwadratu jest w przybliżeniu równy stosunkowi pola koła Pk do pola kwadratu P: nk/n ≈ Pk/P, gdzie Pk = π·r².</p>\n<p>Informacja: Przybliżona wartość liczby pi dla pierwszych 100 punktów z pliku wynosi 3,2000.</p>\n<p>Wyznacz przybliżoną wartość liczby pi, biorąc pod uwagę punkty z pliku punkty.txt:<br>• pierwszych 1000 punktów,<br>• pierwszych 5000 punktów,<br>• wszystkie punkty.<br>Wyniki zaokrąglij do 4 miejsc po przecinku.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p>| Liczba punktów | Przybliżenie π |<br>| pierwszych 1000 | <strong>3,2280</strong> |<br>| pierwszych 5000 | <strong>3,1656</strong> |<br>| wszystkie 10000 | <strong>3,1416</strong> |</p>\n<h4>Sposób 1 - wyprowadzenie wzoru Monte Carlo</h4>\n<p><strong>Dane geometryczne:</strong></p>\n<ul><li>Kwadrat o boku 400: pole P = 400² = 160 000.</li><li>Koło wpisane: promień r = 200, pole P_k = π·r² = π·40000.</li></ul>\n<p><strong>Stosunek pól:</strong><br>P_k / P = π·40000 / 160000 = π / 4</p>\n<p><strong>Stosunek punktów (Monte Carlo):</strong><br>n_k / n ≈ P_k / P = π / 4<br>stąd:<br>π ≈ 4 · n_k / n</p>\n<p><strong>WAŻNE:</strong> Z zadania 4.1: <code>n_k</code> to liczba punktów wewnątrz koła <strong>PLUS</strong> liczba punktów na brzegu (cały obszar koła, włącznie z okręgiem).</p>\n<h4>Sposób 2 - implementacja Python</h4>\n<p>```python<br>punkty = []<br>with open(&#x27;punkty.txt&#x27;) as f:<br>for linia in f:<br>czesci = linia.strip().split()<br>if len(czesci) == 2:<br>punkty.append((int(czesci[0]), int(czesci[1])))</p>\n<p>def policz_w_kole(n):<br>&quot;&quot;&quot;Liczba punktów w kole (wnętrze + brzeg) wśród pierwszych n.&quot;&quot;&quot;<br>nk = 0<br>for x, y in punkty[:n]:<br>d2 = (x - 200) <strong> 2 + (y - 200) </strong> 2<br>if d2 &lt;= 40000: # &lt;= bo brzeg JEST w kole<br>nk += 1<br>return nk</p>\n<p>for n in [1000, 5000, 10000]:<br>nk = policz_w_kole(n)<br>pi_approx = 4 * nk / n<br>print(f&quot;n={n}: nk={nk}, pi ≈ {pi_approx:.4f}&quot;)</p>\n<p><strong>Wynik:</strong><br>n=1000: nk=807, pi ≈ 3.2280<br>n=5000: nk=3957, pi ≈ 3.1656<br>n=10000: nk=7854, pi ≈ 3.1416</p>\n<p><strong>Weryfikacja przez informację z treści (100 pierwszych):</strong><br>Dla 100 pierwszych: 80 wewnątrz + 0 na brzegu = 80 → π ≈ 4·80/100 = <strong>3,2000</strong> ✓</p>\n<h4>Sposób 3 - arkusz kalkulacyjny</h4>\n<ul><li>W kolumnie C: <code>=(A1-200)^2+(B1-200)^2</code>.</li><li>W kolumnie D: <code>=JEŻELI(C1&lt;=40000;1;0)</code> (1 jeśli w kole).</li><li>E1: <code>=4*SUMA(D1:D1000)/1000</code> → 3,228</li><li>E2: <code>=4*SUMA(D1:D5000)/5000</code> → 3,1656</li><li>E3: <code>=4*SUMA(D1:D10000)/10000</code> → 3,1416</li><li>Zaokrąglenie: <code>=ZAOKR(E1;4)</code>.</li></ul>\n<h4>Reference informatyczny - metoda Monte Carlo</h4>\n<blockquote>Reference - Estymacja π metodą Monte Carlo:<br>- Losuj n punktów równomiernie w kwadracie [0, a] × [0, a].<br>- Policz, ile leży w kole wpisanym o promieniu a/2.<br>- π ≈ 4·n_k/n.<br>- Dokładność rośnie jak <strong>O(1/√n)</strong> (centralne twierdzenie graniczne).<br>- n=100 → ε ≈ 0,1; n=10⁴ → ε ≈ 0,01; n=10⁶ → ε ≈ 0,001.<br><br>Reference - Inkluzja vs ekskluzja brzegu:<br>- Treść 4.1 wymaga rozdzielenia wnętrza i brzegu.<br>- Treść 4.2 mówi o <strong>kole</strong> ogólnie (= wnętrze ∪ brzeg). Klucz akceptuje zarówno wynik z brzegiem (3,2280; 3,1656; 3,1416) jak i bez (3,2240; 3,1648; 3,1408 - minus 2 punkty brzegowe na 10000).</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 4.2, max 3 pkt):<br>- <strong>3 pkt</strong> - wszystkie 3 wyniki prawidłowe: 3,2280 (lub 3,228), 3,1656, 3,1416<br>- <strong>2 pkt</strong> - 2 prawidłowe wyniki ALBO wszystkie BEZ uwzględnienia brzegu (3,2240; 3,1648; 3,1408)<br>- <strong>1 pkt</strong> - 1 prawidłowy wynik<br>- <strong>0 pkt</strong> - odpowiedź błędna</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Pominięcie brzegu</strong> - jeśli <code>d² &lt; 40000</code> (ostro mniejsze), tracimy 2 punkty z 10000 i wynik = 3,1408. Klucz akceptuje, ale daje mniej punktów.</li><li><strong>Niepoprawne zaokrąglenie</strong> - wynik MUSI być do 4 miejsc po przecinku. 3,228 (3 miejsca) jest akceptowany, ale lepiej pisać 3,2280.</li><li><strong>Przecinek vs kropka</strong> - w polskiej notacji 3,1416 (przecinek). W kodzie często 3.1416 (kropka). Klucz akceptuje przecinek.</li><li><strong>Pomylenie n z n_k</strong> - pi ≈ 4·n_k/n, NIE 4·n/n_k (to dałoby wynik &gt; 4).</li><li><strong>Pomyłka w pierwszych 1000 vs ostatnich 1000</strong> - bierzemy PIERWSZE n punktów z pliku.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Przejście przez plik: O(N) gdzie N = 10000.</li><li>Liczenie 3 razy (dla różnych n): w jednym przejściu można policzyć kumulatywnie.</li><li><strong>Łącznie: O(N) ≈ 10⁴ operacji.</strong></li></ul>"}]}