# Informatyka — zadanie 5.4

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2018-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 2018 (rozszerzona)
- rok: 2018
- poziom: rozszerzona
- typ: open
- punkty: 5
- działy: Programowanie i algorytmika

## Treść

Zadanie 5.4. (0-5)
Poniżej opisano cykl pracy zbiornika retencyjnego.
1) Na początku doby, zaraz po północy, wykonywany jest pomiar objętości wody w zbiorniku
i na jego podstawie realizuje się pozostałe działania.
2) Jeśli pomiar wskazuje w zbiorniku więcej niż 1 000 000 m3 wody, to nastąpiło tzw.
przepełnienie zbiornika. W takiej sytuacji, niezwłocznie po wykonaniu pomiaru
i stwierdzeniu przepełnienia, nadmiar wody powyżej 1 000 000 m3 jest wypuszczany ze
zbiornika.
MIN_1R
3) Codziennie rano (o godzinie 8) ze zbiornika wypuszcza się 2% objętości wody wykazanej
przez pomiar zaraz po północy. Ilość wypuszczanej wody zaokrągla się w górę do pełnych
metrów sześciennych.
Uwaga: pomiar wykonany po północy 2008-02-01 wskazał 338 406 m3 wody.
Uwzględnij opisany cykl pracy zbiornika retencyjnego oraz codzienne dopływy wody z Wirki
i przyjmij, że pomiar w dniu 2008-01-01 wskazywał 500 000 m3 wody, a następnie:
a) podaj dzień, w którym pierwszy raz wypuszczono nadmiar wody po przepełnieniu,
b) podaj, w ilu dniach z podanego okresu (tj. od 2008-01-01 do 2017-12-31) w zbiorniku
w momencie pomiaru znajdowało się co najmniej 800 000 m3 wody,
c) podaj, ile najwięcej wody znalazłoby się w podanym okresie (tj. od 2008-01-01 do
2017-12-31) w zbiorniku (w momencie pomiaru), gdyby całkowicie zrezygnować
z procedury wypuszczania nadmiaru wody powyżej 1 000 000 m3, a zbiornik miałby
nieograniczoną pojemność.
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(ach):
Wypełnia
egzaminator
Nr zadania
5.1.
5.2.
5.3.
5.4.
Maks. liczba pkt.
2
2
3
5
Uzyskana liczba pkt.
MIN_1R

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

## Poprawna odpowiedź

**a) Data pierwszego wypuszczenia nadmiaru: 2015-04-19**

**b) Liczba dni z ≥ 800 000 m³: 188 dni**

**c) Maksimum bez wypuszczania nadmiaru: 1 399 242 m³**

## Sposób 1 - symulacja krok po kroku

**Reguły cyklu pracy zbiornika:**
1. Pomiar po północy: V_pomiar = V_z_poprzedniego_dnia + dopływ_z_poprzedniej_doby.
2. Jeśli V_pomiar > 1 000 000 → przepełnienie → V := 1 000 000 (nadmiar wypuszczony tego dnia).
3. Rano (8:00) wypuszczane 2% pomiaru, zaokrąglone w górę: V := V_pomiar - ⌈0.02 · V_pomiar⌉.
4. Następnie w ciągu doby wpływa dopływ z bieżącej daty (do następnego pomiaru).

**WAŻNE - niejasność interpretacji:** Treść mówi, że pomiar 2008-02-01 to 338 406. Sprawdźmy logikę:
- 2008-01-01: pomiar = 500 000.
- 2008-01-01 rano: wypuść 2% = 10 000 → V = 490 000.
- 2008-01-01 doba: dopływ 2275 → V_koniec_doby = 492 275.
- 2008-01-02 pomiar = 492 275.

Kontynuując 31 dni do 2008-02-01 osiągamy 338 406 (zgadzane się z treścią).

## Sposób 2 - implementacja Python

```python
import math

# Wczytaj dane
linie = []
with open('woda.txt', encoding='utf-8') as f:
for linia in f:
cz = linia.strip().split('\t')
if len(cz) == 2:
data, dop = cz
linie.append((data, int(dop)))

# Symulacja
V = 500000 # stan początkowy 2008-01-01
liczba_dni_ge_800k = 0
data_przepelnienie = None
max_V_pomiar = 0 # dla podpunktu c)
V_bez_limitu = 500000 # symulacja bez procedury wypuszczania nadmiaru
max_V_bez_limitu = 0

for data, dop in linie:
# pomiar po północy = V (z końca poprzedniej doby)
V_pomiar = V
# podpunkt b): czy >= 800 000
if V_pomiar >= 800000:
liczba_dni_ge_800k += 1
# podpunkt a): czy przepełnienie
if V_pomiar > 1000000 and data_przepelnienie is None:
data_przepelnienie = data
# 1) wypuszczenie nadmiaru
if V_pomiar > 1000000:
V_pomiar = 1000000
# 2) wypuszczenie 2% (zaokr. w górę)
wypust = math.ceil(0.02 * V_pomiar)
V_po_wypuszczeniu = V_pomiar - wypust
# 3) doba: dopływ
V = V_po_wypuszczeniu + dop
# symulacja bez limitu (podpunkt c)
V_bez_pomiar = V_bez_limitu
if V_bez_pomiar > max_V_bez_limitu:
max_V_bez_limitu = V_bez_pomiar
wypust_bl = math.ceil(0.02 * V_bez_pomiar)
V_bez_limitu = V_bez_pomiar - wypust_bl + dop

print(f"a) Pierwsze wypuszczenie: {data_przepelnienie}") # 2015-04-19
print(f"b) Dni z V >= 800000: {liczba_dni_ge_800k}") # 188
print(f"c) Max V (bez limitu): {max_V_bez_limitu}") # 1399242

## Sposób 3 - arkusz kalkulacyjny

**Konstrukcja:**
1. Kolumny A (data), B (dopływ).
2. C2 = 500000 (stan początkowy 2008-01-01).
3. C3 i niżej - pomiar = wartość z poprzedniego dnia po wszystkich operacjach.
4. D = `=JEŻELI(C2>1000000; 1000000; C2)` (po wypuszczeniu nadmiaru).
5. E = `=ZAOKR.GÓRA(D2*0,02; 0)` (wypust 2%).
6. F = `=D2 - E2 + B2` (stan na koniec doby).
7. C3 = `=F2` - pomiar następnego dnia.

**Pytania:**
- a) Najmniejszy wiersz z C > 1 000 000 → data w A.
- b) `=LICZ.JEŻELI(C:C; ">=800000")` → 188.
- c) Druga symulacja bez kroku 4 (bez przepełnienia) → MAX → 1 399 242.

## Sposób 4 - C++

```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;

int main() {
ifstream f("woda.txt");
double V = 500000;
int liczba_ge_800k = 0;
string data_przep = "";
double V_bez = 500000, max_bez = 0;
string data, dopStr;
while (f >> data >> dopStr) {
int dop = stoi(dopStr);
double V_pomiar = V;
if (V_pomiar >= 800000) liczba_ge_800k++;
if (V_pomiar > 1000000 && data_przep.empty()) data_przep = data;
if (V_pomiar > 1000000) V_pomiar = 1000000;
double wypust = ceil(0.02 * V_pomiar);
V = V_pomiar - wypust + dop;
// symulacja bez limitu
double Vb_pomiar = V_bez;
if (Vb_pomiar > max_bez) max_bez = Vb_pomiar;
double wypust_b = ceil(0.02 * Vb_pomiar);
V_bez = Vb_pomiar - wypust_b + dop;
}
cout << "a) " << data_przep << " b) " << liczba_ge_800k << " c) " << max_bez << endl;
return 0;
}

## Reference informatyczny - symulacja krok po kroku

> Reference - Symulacja stanu z regułami:
> - Iteruj po krokach czasowych.
> - W każdym kroku: zapisz stan, zastosuj reguły w określonej kolejności.
> - Akumuluj statystyki (liczniki, maksima) w trakcie iteracji.
>
> Reference - Zaokrąglenie w górę:
> - **Python**: `math.ceil(x)` lub `-(-x // 1)`.
> - **C++**: `ceil(x)` (z `<cmath>`).
> - **Pascal**: `Ceil(x)` (z `Math`).
> - **Arkusz**: `=ZAOKR.GÓRA(x; 0)`.
>
> Reference - Stan zbiornika:
> - Volume balance: V_next = V_current - wypust + dopływ.
> - Constraint: V ≤ pojemność maksymalna (1 mln tu).

## Schemat oceniania CKE

> Klucz CKE (zadanie 5.4, max 5 pkt):
> - **2 pkt** za podpunkt a) - data 2015-04-19
> - **1 pkt** za podpunkt b) - 188 dni
> - **2 pkt** za podpunkt c) - 1 399 242 m³
> - **0 pkt** - błędne lub brak

## Typowe pułapki

- **Kolejność operacji** - kluczowa! Pomiar PRZED wypuszczeniem nadmiaru PRZED wypuszczeniem 2% PRZED dopływem.
- **Zaokrąglenie 2% w dół zamiast w górę** - daje minimalnie inne wyniki kumulatywnie.
- **Pomiar bieżącego dnia vs koniec poprzedniego** - pomiar TO STAN po dobie poprzedniej (= V z końca poprzedniej iteracji).
- **Mylenie "przepełnienie" z "wypuszczeniem 2%"** - to dwie różne operacje. Wypuszczenie nadmiaru tylko gdy > 1 000 000.
- **Granica `>=` vs `>`** - treść: "więcej niż 1 000 000" = `> 1 000 000`. Pomiar równy 1 000 000 NIE jest przepełnieniem.
- **Off-by-one przy liczbie dni** - `>=` 800 000 ("co najmniej"), nie `>`.

## Złożoność obliczeniowa

- Symulacja: O(N) gdzie N = 3653.
- Pamięć: O(1) (zmienne, brak tablic).
- **Łącznie: O(N) ≈ 3653 iteracji.**

## Linki

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

## Podobne zadania

- [Zadanie 5.4](https://matura.lol/question/informatyka-2018-maj-matura-rozszerzona-2/zad/5.4) — Zadanie 5.4. (0-5) Poniżej opisano cykl pracy zbiornika retencyjnego. 1) Na początku doby, zaraz po północy, wykonywany jest pomiar objętości wody w zbiorniku i
- [Zadanie 4.4](https://matura.lol/question/informatyka-2018-maj-matura-stara-rozszerzona-2/zad/4.4) — Zadanie 4.4. (0-4) Pewien inwestor giełdowy gra na giełdzie tylko akcjami firmy C i stosuje opisaną poniżej strategię inwestowania: Na starcie inwestor dysponuj
- [Zadanie 6.5](https://matura.lol/question/informatyka-2025-czerwiec-matura-stara-rozszerzona-2/zad/6.5) — Zadanie 6.5. (0-3) Za możliwość przesłania wytworzonej, ale niewykorzystanej energii do zakładu energetycznego i późniejszego jej pobrania w dowolnym momencie p
- [Zadanie 6](https://matura.lol/question/informatyka-2007-maj-matura-rozszerzona-2/zad/6) — Zadanie 6. (20 pkt) System audio-tele zarejestrował numery telefonów komórkowych osób, które telefonowały pod wskazany numer, aby otrzymać nagrodę. Wiele osób, 

_Ostatnia aktualizacja danych: 2026-10-03_
