{"id":"informatyka-2019-maj-matura-rozszerzona/zad/5.3","paper_id":"informatyka-2019-maj-matura-rozszerzona","number":"5.3","points":3,"ptype":"open","subject":"informatyka","category":"matura","year":2019,"month":"maj","level":"rozszerzona","text":"Kontekst - patrz zadanie 5.1.\n\nDla pierwszych 300 dni pomiaru oblicz, z dokładnością do dwóch miejsc po przecinku, średni opad dla każdego rodzaju chmur (kategoria + wielkość, czyli C1, C2, C3, C4, C5, S1, S2, S3, S4, S5). Przedstaw wyniki na wykresie kolumnowym, pamiętając o czytelnym opisie wykresu.","answer":null,"answer_text":null,"solution":"## Poprawna odpowiedź\n\n**Średni opad dla każdego rodzaju chmur (pierwsze 300 dni):**\n\n| Rodzaj chmury | Średnie opady (mm) |\n| C1 | **3,45** |\n| C2 | **7,28** |\n| C3 | **9,05** |\n| C4 | **11,58** |\n| C5 | **19,40** |\n| S1 | **3,73** |\n| S2 | **6,52** |\n| S3 | **10,29** |\n| S4 | **15,00** |\n| S5 | **19,64** |\n\n**Obserwacje:**\n- Im większa chmura (1→5), tym większy średni opad.\n- Stratusy (S) lekko intensywniejsze niż cirrusy (C) - przy tej samej wielkości.\n- Największe opady dla C5 i S5 (~19-20 mm).\n\n## Sposób 1 - Python z agregacją (rekomendowane)\n\n```python\nfrom collections import defaultdict\nimport matplotlib.pyplot as plt\n\nsumy = defaultdict(float)\nlicznosc = defaultdict(int)\n\nwith open('pogoda.txt', encoding='utf-8') as f:\nf.readline() # nagłówek\nfor _ in range(300):\nlinia = f.readline().strip()\npola = linia.split(';')\nopad = int(pola[2])\nkategoria = pola[3]\nwielkosc = pola[4]\nif kategoria == '0' or wielkosc == '0':\ncontinue # pomijamy dni bezchmurne\nrodzaj = f'{kategoria}{wielkosc}'\nsumy[rodzaj] += opad\nlicznosc[rodzaj] += 1\n\nrodzaje = ['C1','C2','C3','C4','C5','S1','S2','S3','S4','S5']\nsrednie = [round(sumy[r] / licznosc[r], 2) for r in rodzaje]\n\nfor r, s in zip(rodzaje, srednie):\nprint(f'{r}: {s}')\n\n# Wykres kolumnowy\nplt.figure(figsize=(10,6))\nkolory = ['#4488dd']*5 + ['#dd4488']*5\nplt.bar(rodzaje, srednie, color=kolory)\nplt.title('Średni opad dla każdego rodzaju chmur (pierwsze 300 dni)')\nplt.xlabel('Rodzaj chmury (kategoria + wielkość)')\nplt.ylabel('Średni opad [mm]')\nplt.grid(axis='y', alpha=0.3)\nfor i, v in enumerate(srednie):\nplt.text(i, v + 0.3, f'{v:.2f}', ha='center', fontsize=10)\nplt.tight_layout()\nplt.savefig('wykres_chmury.png', dpi=100)\nplt.show()\n\n## Sposób 2 - arkusz kalkulacyjny\n\n**Krok 1: utwórz kolumnę pomocniczą F (rodzaj chmur).**\nF2 = JEŻELI(D2=\"0\"; \"\"; D2 & E2)\nSkopiuj F3:F301 (pierwsze 300 dni).\n\n**Krok 2: tabela średnich.**\nW komórkach G2:G11 wpisz nazwy: C1, C2, , S5.\nW H2 (średni opad dla C1):\n=ZAOKR(ŚREDNIA.JEŻELI(F2:F301; G2; C2:C301); 2)\nSkopiuj H2:H11.\n\n**Krok 3: wykres kolumnowy.**\nZaznacz G1:H11 → Wstaw → Wykres → Kolumnowy.\nDodaj tytuł \"Średnie opady dla rodzajów chmur (dni 1-300)\", osie: X = \"Rodzaj chmury\", Y = \"Opad [mm]\".\n\n## Sposób 3 - SQL\n\n```sql\nSELECT\nKategoria_chmur || Wielkosc_chmur AS Rodzaj,\nROUND(AVG(Opad), 2) AS Sredni_opad\nFROM pogoda\nWHERE Dzien <= 300 AND Kategoria_chmur <> '0'\nGROUP BY Kategoria_chmur, Wielkosc_chmur\nORDER BY Rodzaj;\n\n## Reference informatyczny - agregacja danych i wykres kolumnowy\n\n> Reference - Agregacja:\n> - **GROUP BY** w SQL, **ŚREDNIA.JEŻELI** w arkuszu, **defaultdict** w Python.\n> - **ZAOKR(x, n)** zaokrągla do n miejsc po przecinku.\n>\n> Reference - Wykres kolumnowy:\n> - Oś X: kategorie (rodzaje chmur).\n> - Oś Y: wartość liczbowa (średnia).\n> - **Wymagania CKE:**\n> - Tytuł wykresu.\n> - Opis osi X i Y (etykiety).\n> - Legenda jeśli kilka serii.\n> - Czytelność (kolory, font).\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 5.3, max 3 pkt):\n> - **1 pkt** - prawidłowe wyniki w zestawieniu danych\n> - **1 pkt** - odpowiednia dokładność (2 miejsca po przecinku)\n> - **1 pkt** - prawidłowy wykres (kolumnowy + opisy)\n> - **0 pkt** - błędna lub brak\n>\n> **Uwaga:** zestawienie dla 500 dni zamiast 300 → max 2 pkt.\n\n## Typowe pułapki\n\n- **Liczenie wszystkich 500 dni zamiast pierwszych 300** - wynika z pominięcia warunku `Dzien <= 300`.\n- **Włączenie dni bezchmurnych (\"00\")** - treść mówi o RODZAJACH chmur, więc 0 (brak chmur) NIE jest jednym z rodzajów.\n- **Złe zaokrąglenie** - `round()` w Python z bankers rounding (ROUND_HALF_EVEN) różni się czasem od standardowego.\n- **Brak opisów osi/tytułu** - w CKE wykres BEZ opisu = 0 punktów za wykres.\n- **Wykres słupkowy zamiast kolumnowego** - \"słupkowy\" (poziome słupki) vs \"kolumnowy\" (pionowe kolumny).\n\n## Złożoność obliczeniowa\n\n- Czytanie 300 wierszy: O(n).\n- Agregacja per rodzaj (max 10 kategorii): O(n).\n- Generowanie wykresu: O(k) gdzie k = 10 słupków.\n- **Łącznie: O(n) ≈ 300 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 2019 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Kontekst - patrz zadanie 5.1.</p>\n<p>Dla pierwszych 300 dni pomiaru oblicz, z dokładnością do dwóch miejsc po przecinku, średni opad dla każdego rodzaju chmur (kategoria + wielkość, czyli C1, C2, C3, C4, C5, S1, S2, S3, S4, S5). Przedstaw wyniki na wykresie kolumnowym, pamiętając o czytelnym opisie wykresu.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>Średni opad dla każdego rodzaju chmur (pierwsze 300 dni):</strong></p>\n<p>| Rodzaj chmury | Średnie opady (mm) |<br>| C1 | <strong>3,45</strong> |<br>| C2 | <strong>7,28</strong> |<br>| C3 | <strong>9,05</strong> |<br>| C4 | <strong>11,58</strong> |<br>| C5 | <strong>19,40</strong> |<br>| S1 | <strong>3,73</strong> |<br>| S2 | <strong>6,52</strong> |<br>| S3 | <strong>10,29</strong> |<br>| S4 | <strong>15,00</strong> |<br>| S5 | <strong>19,64</strong> |</p>\n<p><strong>Obserwacje:</strong></p>\n<ul><li>Im większa chmura (1→5), tym większy średni opad.</li><li>Stratusy (S) lekko intensywniejsze niż cirrusy (C) - przy tej samej wielkości.</li><li>Największe opady dla C5 i S5 (~19-20 mm).</li></ul>\n<h4>Sposób 1 - Python z agregacją (rekomendowane)</h4>\n<p>```python<br>from collections import defaultdict<br>import matplotlib.pyplot as plt</p>\n<p>sumy = defaultdict(float)<br>licznosc = defaultdict(int)</p>\n<p>with open(&#x27;pogoda.txt&#x27;, encoding=&#x27;utf-8&#x27;) as f:<br>f.readline() # nagłówek<br>for _ in range(300):<br>linia = f.readline().strip()<br>pola = linia.split(&#x27;;&#x27;)<br>opad = int(pola[2])<br>kategoria = pola[3]<br>wielkosc = pola[4]<br>if kategoria == &#x27;0&#x27; or wielkosc == &#x27;0&#x27;:<br>continue # pomijamy dni bezchmurne<br>rodzaj = f&#x27;{kategoria}{wielkosc}&#x27;<br>sumy[rodzaj] += opad<br>licznosc[rodzaj] += 1</p>\n<p>rodzaje = [&#x27;C1&#x27;,&#x27;C2&#x27;,&#x27;C3&#x27;,&#x27;C4&#x27;,&#x27;C5&#x27;,&#x27;S1&#x27;,&#x27;S2&#x27;,&#x27;S3&#x27;,&#x27;S4&#x27;,&#x27;S5&#x27;]<br>srednie = [round(sumy[r] / licznosc[r], 2) for r in rodzaje]</p>\n<p>for r, s in zip(rodzaje, srednie):<br>print(f&#x27;{r}: {s}&#x27;)</p>\n<h3>Wykres kolumnowy</h3>\n<p>plt.figure(figsize=(10,6))<br>kolory = [&#x27;#4488dd&#x27;]<em>5 + [&#x27;#dd4488&#x27;]</em>5<br>plt.bar(rodzaje, srednie, color=kolory)<br>plt.title(&#x27;Średni opad dla każdego rodzaju chmur (pierwsze 300 dni)&#x27;)<br>plt.xlabel(&#x27;Rodzaj chmury (kategoria + wielkość)&#x27;)<br>plt.ylabel(&#x27;Średni opad [mm]&#x27;)<br>plt.grid(axis=&#x27;y&#x27;, alpha=0.3)<br>for i, v in enumerate(srednie):<br>plt.text(i, v + 0.3, f&#x27;{v:.2f}&#x27;, ha=&#x27;center&#x27;, fontsize=10)<br>plt.tight_layout()<br>plt.savefig(&#x27;wykres_chmury.png&#x27;, dpi=100)<br>plt.show()</p>\n<h4>Sposób 2 - arkusz kalkulacyjny</h4>\n<p><strong>Krok 1: utwórz kolumnę pomocniczą F (rodzaj chmur).</strong><br>F2 = JEŻELI(D2=&quot;0&quot;; &quot;&quot;; D2 &amp; E2)<br>Skopiuj F3:F301 (pierwsze 300 dni).</p>\n<p><strong>Krok 2: tabela średnich.</strong><br>W komórkach G2:G11 wpisz nazwy: C1, C2, , S5.<br>W H2 (średni opad dla C1):<br>=ZAOKR(ŚREDNIA.JEŻELI(F2:F301; G2; C2:C301); 2)<br>Skopiuj H2:H11.</p>\n<p><strong>Krok 3: wykres kolumnowy.</strong><br>Zaznacz G1:H11 → Wstaw → Wykres → Kolumnowy.<br>Dodaj tytuł &quot;Średnie opady dla rodzajów chmur (dni 1-300)&quot;, osie: X = &quot;Rodzaj chmury&quot;, Y = &quot;Opad [mm]&quot;.</p>\n<h4>Sposób 3 - SQL</h4>\n<p>```sql<br>SELECT<br>Kategoria_chmur || Wielkosc_chmur AS Rodzaj,<br>ROUND(AVG(Opad), 2) AS Sredni_opad<br>FROM pogoda<br>WHERE Dzien &lt;= 300 AND Kategoria_chmur &lt;&gt; &#x27;0&#x27;<br>GROUP BY Kategoria_chmur, Wielkosc_chmur<br>ORDER BY Rodzaj;</p>\n<h4>Reference informatyczny - agregacja danych i wykres kolumnowy</h4>\n<blockquote>Reference - Agregacja:<br>- <strong>GROUP BY</strong> w SQL, <strong>ŚREDNIA.JEŻELI</strong> w arkuszu, <strong>defaultdict</strong> w Python.<br>- <strong>ZAOKR(x, n)</strong> zaokrągla do n miejsc po przecinku.<br><br>Reference - Wykres kolumnowy:<br>- Oś X: kategorie (rodzaje chmur).<br>- Oś Y: wartość liczbowa (średnia).<br>- <strong>Wymagania CKE:</strong><br>- Tytuł wykresu.<br>- Opis osi X i Y (etykiety).<br>- Legenda jeśli kilka serii.<br>- Czytelność (kolory, font).</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 5.3, max 3 pkt):<br>- <strong>1 pkt</strong> - prawidłowe wyniki w zestawieniu danych<br>- <strong>1 pkt</strong> - odpowiednia dokładność (2 miejsca po przecinku)<br>- <strong>1 pkt</strong> - prawidłowy wykres (kolumnowy + opisy)<br>- <strong>0 pkt</strong> - błędna lub brak<br><br><strong>Uwaga:</strong> zestawienie dla 500 dni zamiast 300 → max 2 pkt.</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Liczenie wszystkich 500 dni zamiast pierwszych 300</strong> - wynika z pominięcia warunku <code>Dzien &lt;= 300</code>.</li><li><strong>Włączenie dni bezchmurnych (&quot;00&quot;)</strong> - treść mówi o RODZAJACH chmur, więc 0 (brak chmur) NIE jest jednym z rodzajów.</li><li><strong>Złe zaokrąglenie</strong> - <code>round()</code> w Python z bankers rounding (ROUND_HALF_EVEN) różni się czasem od standardowego.</li><li><strong>Brak opisów osi/tytułu</strong> - w CKE wykres BEZ opisu = 0 punktów za wykres.</li><li><strong>Wykres słupkowy zamiast kolumnowego</strong> - &quot;słupkowy&quot; (poziome słupki) vs &quot;kolumnowy&quot; (pionowe kolumny).</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Czytanie 300 wierszy: O(n).</li><li>Agregacja per rodzaj (max 10 kategorii): O(n).</li><li>Generowanie wykresu: O(k) gdzie k = 10 słupków.</li><li><strong>Łącznie: O(n) ≈ 300 operacji</strong>.</li></ul>"}]}