# Informatyka — zadanie 5.3

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2019-05/zad/5.3
> Wersja Markdown strony zadania (dla asystentów AI). Przy cytowaniu podaj matura.lol i link powyżej.

- arkusz: Informatyka · Matura · maj 2019 (rozszerzona)
- rok: 2019
- poziom: rozszerzona
- typ: open
- punkty: 3
- działy: Arkusz kalkulacyjny

## Treść

Kontekst - patrz zadanie 5.1.

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.

## Rozwiązanie — maturazai.pl (AI)

## Poprawna odpowiedź

**Średni opad dla każdego rodzaju chmur (pierwsze 300 dni):**

| Rodzaj chmury | Średnie opady (mm) |
| C1 | **3,45** |
| C2 | **7,28** |
| C3 | **9,05** |
| C4 | **11,58** |
| C5 | **19,40** |
| S1 | **3,73** |
| S2 | **6,52** |
| S3 | **10,29** |
| S4 | **15,00** |
| S5 | **19,64** |

**Obserwacje:**
- Im większa chmura (1→5), tym większy średni opad.
- Stratusy (S) lekko intensywniejsze niż cirrusy (C) - przy tej samej wielkości.
- Największe opady dla C5 i S5 (~19-20 mm).

## Sposób 1 - Python z agregacją (rekomendowane)

```python
from collections import defaultdict
import matplotlib.pyplot as plt

sumy = defaultdict(float)
licznosc = defaultdict(int)

with open('pogoda.txt', encoding='utf-8') as f:
f.readline() # nagłówek
for _ in range(300):
linia = f.readline().strip()
pola = linia.split(';')
opad = int(pola[2])
kategoria = pola[3]
wielkosc = pola[4]
if kategoria == '0' or wielkosc == '0':
continue # pomijamy dni bezchmurne
rodzaj = f'{kategoria}{wielkosc}'
sumy[rodzaj] += opad
licznosc[rodzaj] += 1

rodzaje = ['C1','C2','C3','C4','C5','S1','S2','S3','S4','S5']
srednie = [round(sumy[r] / licznosc[r], 2) for r in rodzaje]

for r, s in zip(rodzaje, srednie):
print(f'{r}: {s}')

# Wykres kolumnowy
plt.figure(figsize=(10,6))
kolory = ['#4488dd']*5 + ['#dd4488']*5
plt.bar(rodzaje, srednie, color=kolory)
plt.title('Średni opad dla każdego rodzaju chmur (pierwsze 300 dni)')
plt.xlabel('Rodzaj chmury (kategoria + wielkość)')
plt.ylabel('Średni opad [mm]')
plt.grid(axis='y', alpha=0.3)
for i, v in enumerate(srednie):
plt.text(i, v + 0.3, f'{v:.2f}', ha='center', fontsize=10)
plt.tight_layout()
plt.savefig('wykres_chmury.png', dpi=100)
plt.show()

## Sposób 2 - arkusz kalkulacyjny

**Krok 1: utwórz kolumnę pomocniczą F (rodzaj chmur).**
F2 = JEŻELI(D2="0"; ""; D2 & E2)
Skopiuj F3:F301 (pierwsze 300 dni).

**Krok 2: tabela średnich.**
W komórkach G2:G11 wpisz nazwy: C1, C2, , S5.
W H2 (średni opad dla C1):
=ZAOKR(ŚREDNIA.JEŻELI(F2:F301; G2; C2:C301); 2)
Skopiuj H2:H11.

**Krok 3: wykres kolumnowy.**
Zaznacz G1:H11 → Wstaw → Wykres → Kolumnowy.
Dodaj tytuł "Średnie opady dla rodzajów chmur (dni 1-300)", osie: X = "Rodzaj chmury", Y = "Opad [mm]".

## Sposób 3 - SQL

```sql
SELECT
Kategoria_chmur || Wielkosc_chmur AS Rodzaj,
ROUND(AVG(Opad), 2) AS Sredni_opad
FROM pogoda
WHERE Dzien <= 300 AND Kategoria_chmur <> '0'
GROUP BY Kategoria_chmur, Wielkosc_chmur
ORDER BY Rodzaj;

## Reference informatyczny - agregacja danych i wykres kolumnowy

> Reference - Agregacja:
> - **GROUP BY** w SQL, **ŚREDNIA.JEŻELI** w arkuszu, **defaultdict** w Python.
> - **ZAOKR(x, n)** zaokrągla do n miejsc po przecinku.
>
> Reference - Wykres kolumnowy:
> - Oś X: kategorie (rodzaje chmur).
> - Oś Y: wartość liczbowa (średnia).
> - **Wymagania CKE:**
> - Tytuł wykresu.
> - Opis osi X i Y (etykiety).
> - Legenda jeśli kilka serii.
> - Czytelność (kolory, font).

## Schemat oceniania CKE

> Klucz CKE (zadanie 5.3, max 3 pkt):
> - **1 pkt** - prawidłowe wyniki w zestawieniu danych
> - **1 pkt** - odpowiednia dokładność (2 miejsca po przecinku)
> - **1 pkt** - prawidłowy wykres (kolumnowy + opisy)
> - **0 pkt** - błędna lub brak
>
> **Uwaga:** zestawienie dla 500 dni zamiast 300 → max 2 pkt.

## Typowe pułapki

- **Liczenie wszystkich 500 dni zamiast pierwszych 300** - wynika z pominięcia warunku `Dzien <= 300`.
- **Włączenie dni bezchmurnych ("00")** - treść mówi o RODZAJACH chmur, więc 0 (brak chmur) NIE jest jednym z rodzajów.
- **Złe zaokrąglenie** - `round()` w Python z bankers rounding (ROUND_HALF_EVEN) różni się czasem od standardowego.
- **Brak opisów osi/tytułu** - w CKE wykres BEZ opisu = 0 punktów za wykres.
- **Wykres słupkowy zamiast kolumnowego** - "słupkowy" (poziome słupki) vs "kolumnowy" (pionowe kolumny).

## Złożoność obliczeniowa

- Czytanie 300 wierszy: O(n).
- Agregacja per rodzaj (max 10 kategorii): O(n).
- Generowanie wykresu: O(k) gdzie k = 10 słupków.
- **Łącznie: O(n) ≈ 300 operacji**.

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2019-05/zad/5.3)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2019-05%2Fzad%2F5.3)

## Podobne zadania

- [Zadanie 7](https://matura.lol/question/informatyka-2026-maj-matura-rozszerzona/zad/7) — Zadanie 7. Staw Pan Iksinski stal sie wlascicielem stawu o powierzchni calkowitej 10 000 m2. Pierwsza roslina, ktora postanowil w nim umiescic, jest rzesa wodna
- [Zadanie 5.2](https://matura.lol/question/informatyka-2022-czerwiec-matura-rozszerzona-2/zad/5.2) — Zadanie 5.2. (0-4) Wylicz dzienną sprzedaż lodów, kukurydzy i hot-dogów zgodnie ze wzorem pani Ani przedstawionym na początku zadania. Następnie sporządź zestaw
- [Zadanie 6.1](https://matura.lol/question/informatyka-2018-maj-matura-stara-podstawowa-2/zad/6.1) — Zadanie 6.1. (0-4) Dla każdego miesiąca 2017 roku podaj łączną liczbę kilogramów dostarczonej makulatury. Do swojego zestawienia utwórz wykres kolumnowy, prezen
- [Zadanie 5.2](https://matura.lol/question/informatyka-2017-czerwiec-matura-rozszerzona-2/zad/5.2) — Zadanie 5.2. (0-4) Pole Marka_i_model każdego samochodu zawiera dwie informacje: nazwę marki i model, oddzielone pojedynczym znakiem odstępu. Wyłuskaj nazwę mar

_Ostatnia aktualizacja danych: 2026-10-03_
