# Informatyka — zadanie 5.1

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

## Treść

Zadanie 5. Chmury

Naukowcy śledzą zmiany pogody na odległej planecie. Chmury występujące na niebie tej planety podzielono na dwie kategorie, nazwane przez analogię do ziemskich cirrusami (C) i stratusami (S). W każdej z kategorii chmury są klasyfikowane względem wielkości od 1 do 5. Mamy zatem chmury dziesięciu rodzajów: C1, C2, C3, C4 i C5 oraz S1, S2, S3, S4 i S5. Na tej planecie w jednym dniu mogą występować chmury tylko jednego rodzaju.

W każdym z 500 kolejnych dni stacja badawcza umiejscowiona na planecie mierzyła temperaturę w stopniach oraz określała rodzaj chmur. Dane te zawarte są w kolejnych wierszach pliku pogoda.txt. Każdy wiersz pliku pogoda.txt zawiera kolejno:
- numer dnia (od 1 do 500),
- zmierzoną temperaturę (z dokładnością do jednego miejsca po przecinku, temperatura nigdy nie spada poniżej zera),
- wielkość opadu, jaki miał miejsce tego dnia (w milimetrach, zaokrąglony do liczby całkowitej),
- kategorię chmur (C, S lub 0 - jeśli dzień był bezchmurny),
- wielkość chmur (od 1 do 5 lub 0 - jeśli dzień był bezchmurny).

Dane oddzielone są średnikami, pierwszy wiersz jest wierszem nagłówkowym.

Przykład:
Dzien;Temperatura;Opad;Kategoria_chmur;Wielkosc_chmur
1;19;0;0;0
2;22;1;C;1
3;23,6;4;C;1

W dniu 301. kamera na stacji badawczej się zepsuła i od tego dnia stacja raportowała wszystkie dni jako „bezchmurne”, temperatura i opady jednak dalej były poprawnie mierzone.

Podaj liczbę dni o temperaturze większej lub równej 20 stopni i jednocześnie o opadzie mniejszym lub równym 5 mm.

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

## Poprawna odpowiedź

**Liczba dni: 63**

## Sposób 1 - Python z czytaniem CSV

```python
licznik = 0
with open('pogoda.txt', encoding='utf-8') as f:
naglowek = f.readline() # pomijamy nagłówek
for linia in f:
pola = linia.strip().split(';')
# pola: Dzien, Temperatura, Opad, Kategoria_chmur, Wielkosc_chmur
temperatura = float(pola[1].replace(',', '.'))
opad = int(pola[2])
if temperatura >= 20 and opad <= 5:
licznik += 1

print(licznik) # 63

**WAŻNE:** w pliku CSV polski format dziesiętny (`19,3` zamiast `19.3`) - trzeba zamienić `,` na `.` przed `float()`.

## Sposób 2 - arkusz kalkulacyjny (LibreOffice/Excel)

W arkuszu (np. komórka G2):
=LICZ.WARUNKI(B2:B501; ">=20"; C2:C501; "<=5")

Gdzie:
- `B2:B501` - kolumna temperatury (500 dni + nagłówek)
- `C2:C501` - kolumna opadu
- Pierwszy warunek: temperatura ≥ 20
- Drugi warunek: opad ≤ 5

**Wynik: 63**

Alternatywnie z formułą tablicową:
=SUMA((B2:B501>=20)*(C2:C501<=5)) {wciśnij Ctrl+Shift+Enter}

## Sposób 3 - SQL (po imporcie pogoda.txt do bazy)

```sql
SELECT COUNT(*) AS liczba_dni
FROM pogoda
WHERE Temperatura >= 20 AND Opad <= 5;
-- Wynik: 63

## Sposób 4 - implementacja Pascal

```pascal
program CieplyMaloOpadu;
var
f: TextFile;
linia: String;
licznik, dzien, opad, wielkosc: Integer;
temp: Real;
kat: Char;
begin
AssignFile(f, 'pogoda.txt');
Reset(f);
ReadLn(f, linia); // nagłówek
licznik := 0;
while not Eof(f) do
begin
ReadLn(f, linia);
// (parsowanie CSV ; pominięte dla zwięzłości)
if (temp >= 20) and (opad <= 5) then licznik := licznik + 1;
end;
CloseFile(f);
WriteLn('Liczba dni: ', licznik);
end.

## Reference informatyczny - analiza danych w arkuszu

> Reference - Funkcje warunkowe w arkuszu kalkulacyjnym:
> - `=LICZ.JEŻELI(zakres; kryterium)` - liczy komórki spełniające 1 warunek.
> - `=LICZ.WARUNKI(zakres1; kryt1; zakres2; kryt2; )` - wielowarunkowe.
> - `=SUMA.JEŻELI(zakres; kryt; suma_zakres)` - suma B gdy A spełnia warunek.
> - `=SUMA.WARUNKÓW(suma_z; zakres1; kryt1; )` - suma wielowarunkowa.
>
> Excel angielski:
> - COUNTIF, COUNTIFS, SUMIF, SUMIFS - odpowiedniki polskie.

## Schemat oceniania CKE

> Klucz CKE (zadanie 5.1, max 2 pkt):
> - **2 pkt** - poprawna odpowiedź (63)
> - **1 pkt** - odpowiedź wynikająca z nierówności ostrych zamiast nieostrych:
> - 51 (obie nierówności ostre - temp > 20, opad < 5)
> - 59 (temp ostre, opad nieostre)
> - 54 (temp nieostre, opad ostre)
> - **0 pkt** - błędna lub brak

## Typowe pułapki

- **`>` zamiast `>=`** - TREŚĆ wyraźnie pisze "większej lub równej" (≥) i "mniejszej lub równej" (≤). Pominięcie równości = zła odpowiedź.
- **Format dziesiętny w CSV** - w polskim CSV jest `,` zamiast `.`. W Python: `replace(',', '.')` przed `float()`.
- **Pomylenie kolumn** - opad to kolumna 3 (indeks 2), kategoria chmur to kol. 4.
- **Liczenie nagłówka** - pierwszy wiersz to nazwy pól, nie dane.
- **Pominięcie warunku `<=`** - pisanie `< 5` zamiast `<= 5` daje 54 zamiast 63.

## Złożoność obliczeniowa

- Przegląd 500 wierszy: **O(n) = O(500)** - natychmiastowe.
- Pamięć: O(1) (streaming) lub O(n) jeśli ładujemy całość.

## Linki

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

## Podobne zadania

- [Zadanie 5.1](https://matura.lol/question/informatyka-2019-maj-matura-rozszerzona-2/zad/5.1) — Zadanie 5. Chmury Naukowcy śledzą zmiany pogody na odległej planecie. Chmury występujące na niebie tej planety podzielono na dwie kategorie, nazwane przez analo

_Ostatnia aktualizacja danych: 2026-10-03_
