# Informatyka — zadanie 5.4

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2019-05/zad/5.4
> 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: 4
- działy: Programowanie i algorytmika

## Treść

Zadanie 5.4. (0-4)
Profesor George Nubis przedstawił teorię, według której chmury określonej wielkości
i kategorii rozwijają się w następujący sposób:
• jeśli w danym dniu nie ma chmur, nazajutrz na pewno pojawią się chmury o wielkości 1,
• chmury po trzech dniach samoczynnie przechodzą w chmury o wyższym numerze, aż
do numeru 5,
• chmury o wielkości 5 zanikają wtedy, gdy spadnie w ciągu dnia co najmniej 20 mm
deszczu, a wówczas następny dzień jest bezchmurny,
• powstanie chmur kategorii C lub S zależy od temperatury powietrza w dniu ich
tworzenia się. Jeśli temperatura w dniu pojawienia się chmur jest nie mniejsza niż 10
stopni, to powstają chmury kategorii C (o wielkości 1), w przeciwnym wypadku -
chmury kategorii S (o wielkości 1).
Uwaga: Przez pierwszych 20 dni teoria zgodziła się dokładnie z obserwacjami. Użyj tej
informacji, aby sprawdzić swoje obliczenia.
Załóż, że chmury rozwijałyby się przez cały czas (500 dni) według teorii profesora i że dzień
pierwszy był bezchmurny (wielkość chmur 0), a następnie:
a) podaj liczbę dni (spośród wszystkich 500) z chmurami wielkości 0, 1, 2, 3, 4 i 5 - dla
każdej wielkości oddzielnie (przyjmij, że wielkość opadu w danym dniu jest taka, jaką
zapisano w pliku z danymi),
b) dla pierwszych 300 dni pomiaru podaj, ile wśród nich było takich, w których teorię
profesora Nubisa dotyczącą wielkości chmur potwierdzały odczyty z kamery,
c) dla pierwszych 300 dni pomiaru podaj, ile wśród nich było takich, w których teorię
profesora Nubisa dotyczącą kategorii chmur potwierdzały odczyty z kamery.
Do oceny oddajesz:
• plik tekstowy wyniki5.txt zawierający odpowiedzi do poszczególnych zadań
(odpowiedź do każdego zadania powinna być poprzedzona jego numerem)
• plik zawierający wykres do zadania 5.3 o nazwie:
• plik(i) zawierający(e) komputerową realizację Twoich obliczeń o nazwie(nazwach):
Wypełnia
egzaminator
Nr zadania
5.1.
5.2.
5.3
5.4.
Maks. liczba pkt.
2
2
3
4
Uzyskana liczba pkt.
MIN_1R

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

## Poprawna odpowiedź

**a) Liczba dni z chmurami każdej wielkości (500 dni, teoria prof. Nubisa):**

| Wielkość | Liczba dni |
| 0 | **34** |
| 1 | **102** |
| 2 | **102** |
| 3 | **102** |
| 4 | **100** |
| 5 | **60** |

**b) Liczba dni z pierwszych 300, gdzie teoria potwierdza WIELKOŚĆ chmur: 296**

**c) Liczba dni z pierwszych 300, gdzie teoria potwierdza KATEGORIĘ chmur (C/S): 286**

## Sposób 1 - symulacja w Python

**Reguły teorii profesora Nubisa:**
1. Dzień 1: bezchmurnie (wielkość = 0).
2. Jeśli wczoraj nie było chmur → dziś wielkość = 1.
3. Chmury "żyją" 3 dni na danej wielkości, potem przechodzą o jeden wyżej (do max 5).
4. Chmury 5 zanikają (→ 0) gdy spadnie ≥ 20 mm w danym dniu.
5. Kategoria (C/S): zależy od temperatury w dniu pojawienia się chmur:
- temp ≥ 10°C → cirrus (C)
- temp < 10°C → stratus (S)
- Kategoria UTRZYMUJE SIĘ przez cały okres istnienia chmur.

```python
# Wczytaj dane
dni = [] # (dzien, temp, opad, kat_obs, wiel_obs)
with open('pogoda.txt', encoding='utf-8') as f:
f.readline()
for linia in f:
pola = linia.strip().split(';')
dni.append({
'dzien': int(pola[0]),
'temp': float(pola[1].replace(',', '.')),
'opad': int(pola[2]),
'kat_obs': pola[3],
'wiel_obs': int(pola[4]) if pola[4].isdigit() else 0,
})

# Symulacja teorii profesora
teoria_wiel = [] # wielkość chmur każdego dnia wg teorii
teoria_kat = [] # kategoria chmur (C/S/0)
wielkosc = 0 # dzień 1 - bezchmurny
kategoria = '0'
dni_na_wielkosci = 0 # licznik dni na obecnej wielkości

for i, d in enumerate(dni):
if i == 0:
# dzień 1: bezchmurnie
teoria_wiel.append(0)
teoria_kat.append('0')
continue
# Reguły ewolucji (na podstawie poprzedniego dnia):
poprzedni_w = teoria_wiel[i-1]
poprzedni_k = teoria_kat[i-1]
poprzedni_opad = dni[i-1]['opad']
if poprzedni_w == 0:
# wczoraj bezchmurne - dziś wielkość 1, kategoria wg dzisiejszej temp
nowa_w = 1
nowa_k = 'C' if d['temp'] >= 10 else 'S'
dni_na_wielkosci = 1
elif poprzedni_w == 5 and poprzedni_opad >= 20:
# opadało ≥20mm → dziś bezchmurnie
nowa_w = 0
nowa_k = '0'
dni_na_wielkosci = 0
else:
# kontynuacja: jeśli na obecnej wielkości jest już 3. dzień → następna wielkość
if dni_na_wielkosci >= 3 and poprzedni_w < 5:
nowa_w = poprzedni_w + 1
dni_na_wielkosci = 1
else:
nowa_w = poprzedni_w
dni_na_wielkosci += 1
nowa_k = poprzedni_k
teoria_wiel.append(nowa_w)
teoria_kat.append(nowa_k)

# a) zliczenia
from collections import Counter
print('a)', Counter(teoria_wiel))
# Counter({1: 102, 2: 102, 3: 102, 4: 100, 5: 60, 0: 34})

# b) dni z pierwszych 300, gdzie wielkość zgadza się z obserwacją
zgodne_w = sum(1 for i in range(300) if teoria_wiel[i] == dni[i]['wiel_obs'])
print('b)', zgodne_w) # 296

# c) dni z pierwszych 300, gdzie kategoria zgadza się z obserwacją
zgodne_k = sum(1 for i in range(300) if teoria_kat[i] == dni[i]['kat_obs'])
print('c)', zgodne_k) # 286

## Sposób 2 - alternatywa: arkusz kalkulacyjny

W arkuszu dodaj kolumny pomocnicze:
- **G (wielkość teoretyczna)** - formuła z `JEŻELI` na podstawie G poprzedniego dnia i opadu.
- **H (kategoria teoretyczna)** - `JEŻELI(G_wczoraj=0; JEŻELI(B_dziś≥10; "C"; "S"); H_wczoraj)`.
- **I (zgodność wielkości)** - `JEŻELI(G_dziś=E_dziś; 1; 0)`.
- **J (zgodność kategorii)** - `JEŻELI(H_dziś=D_dziś; 1; 0)`.

Następnie:
- `LICZ.JEŻELI(G2:G501; 0)` daje liczbę dni z wielkością 0, itd.
- `SUMA(I2:I301)` daje punkt b).
- `SUMA(J2:J301)` daje punkt c).

## Reference informatyczny - symulacja state machine

> Reference - Symulacja "automatu stanowego":
> - Stan: (wielkość, kategoria, dni_na_wielkosci).
> - Przejścia: deterministyczne reguły na podstawie poprzedniego stanu + dane środowiskowe (temp, opad).
> - Implementacja iteracyjna: tabela kolejnych stanów dni.
> - Złożoność: O(n) - n = 500 dni.
>
> Reference - Walidacja teorii vs obserwacja:
> - Porównaj predykcję (teoria) z obserwacją (dane z kamery) per dzień.
> - Licznik zgodności = ile dni pasuje.

## Schemat oceniania CKE

> Klucz CKE (zadanie 5.4, max 4 pkt):
> - **2 pkt** - zestawienie a) (lub 1 pkt jeśli max 2 błędne wartości)
> - **1 pkt** - odpowiedź b) (296)
> - **1 pkt** - odpowiedź c) (286)
> - **0 pkt** - błędna albo brak

## Typowe pułapki

- **Pomylenie reguły "3 dni"** - chmura przechodzi PO 3 dniach (4. dzień to nowa wielkość), NIE w trakcie 3 dni.
- **Brak warunku "opad ≥ 20" dla rozpadu 5 → 0** - chmury 5 nie znikają same, potrzebują deszczu.
- **Kategoria zmienia się każdego dnia** - BŁĄD! Kategoria ustala się przy POWSTANIU chmur (wielkość 1) i utrzymuje przez całą "żywotność".
- **Temperatura dnia tworzenia (wielkość 1)** - używamy temp tego dnia, NIE poprzedniego.
- **Liczenie 500 dni dla b) i c)** - pytanie wyraźnie mówi o pierwszych 300.
- **Pierwszy dzień bezchmurny** - zaczynamy od stanu (0, brak kategorii).

## Złożoność obliczeniowa

- Symulacja: **O(n)** = O(500).
- Porównanie z obserwacjami: O(n).
- Pamięć: O(n) dla tabel stanów.
- Łącznie ~1500 operacji - natychmiastowe.

## Linki

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

## Podobne zadania

- [Zadanie 5.4](https://matura.lol/question/informatyka-2019-maj-matura-rozszerzona-2/zad/5.4) — Zadanie 5.4. (0-4) Profesor George Nubis przedstawił teorię, według której chmury określonej wielkości i kategorii rozwijają się w następujący sposób: • jeśli w
- [Zadanie 5.5](https://matura.lol/question/informatyka-2026-maj-matura-stara-rozszerzona-2/zad/5.5) — Zadanie 5.5. (0-2) Podaj, jaka jest najmniejsza liczba amurów białych, jaką musi wpuścić właściciel, by rzęsa wodna w całym badanym okresie zajmowała maksymalni

_Ostatnia aktualizacja danych: 2026-10-03_
