# Informatyka — zadanie 5.2

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2019-05/zad/5.2
> 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ść

Kontekst - patrz zadanie 5.1.

Na przykład dla danych:
dzień temperatura
34 3,7
35 3,4
**36 3,5**
**37 3,6**
**38 3,7**
39 3,5
pierwszym dniem ciągu spełniającym warunek zadania jest dzień 36, a ostatnim - 38.

Znajdź najdłuższy ciąg kolejnych dni, w których temperatura zmierzona każdego dnia jest wyższa niż temperatura dnia poprzedniego. Jest tylko jeden taki ciąg. Podaj numer pierwszego i numer ostatniego dnia w takim ciągu.

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

## Poprawna odpowiedź

**Najdłuższy ciąg dni o monotonicznie rosnącej temperaturze:**
- **Pierwszy dzień: 448**
- **Ostatni dzień: 455**

(Długość ciągu: 455 - 448 + 1 = **8 dni**)

## Sposób 1 - Python (algorytm okna o jednym przebiegu)

```python
# Wczytaj dane: lista (dzien, temperatura)
dane = []
with open('pogoda.txt', encoding='utf-8') as f:
f.readline() # nagłówek
for linia in f:
pola = linia.strip().split(';')
dzien = int(pola[0])
temp = float(pola[1].replace(',', '.'))
dane.append((dzien, temp))

naj_start = naj_end = 0
naj_dl = 1
biezacy_start = 0

for i in range(1, len(dane)):
if dane[i][1] > dane[i-1][1]:
# kontynuacja rosnącego ciągu
dl = i - biezacy_start + 1
if dl > naj_dl:
naj_dl = dl
naj_start = biezacy_start
naj_end = i
else:
# przerwanie - nowy ciąg startuje od i
biezacy_start = i

print(f'Pierwszy dzień: {dane[naj_start][0]}') # 448
print(f'Ostatni dzień: {dane[naj_end][0]}') # 455

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

**Pomocnicza kolumna F (długość bieżącego rosnącego ciągu):**
F2 = 1
F3 = JEŻELI(B3 > B2; F2 + 1; 1)
Skopiuj F3 w dół do F501.

**Znalezienie maksimum i jego pozycji:**
G1 = MAX(F2:F501) # długość najdłuższego ciągu (= 8)
G2 = PODAJ.POZYCJĘ(G1; F2:F501; 0) # wiersz końca ciągu
Numer pierwszego dnia = G2 - G1 + 1 + 1 (offset wiersza nagłówka).

Konkretnie: G1 = 8, G2 = 454 (indeks od 1 w pomocniczej kolumnie F2:F501), więc:
- ostatni dzień: 455 (numer dnia z kolumny A)
- pierwszy dzień: 448.

## Sposób 3 - implementacja Pascal

```pascal
program NajdluzszyRosnacyCiag;
var
f: TextFile;
linia: String;
temp: array[1 500] of Real;
i, start, najStart, najEnd, najDl, dl: Integer;
begin
AssignFile(f, 'pogoda.txt');
Reset(f);
ReadLn(f, linia); // nagłówek
for i := 1 to 500 do
begin
// parsowanie linii (pomijam dla zwięzłości)
// temp[i] :=
end;
CloseFile(f);

start := 1; najStart := 1; najEnd := 1; najDl := 1;
for i := 2 to 500 do
begin
if temp[i] > temp[i-1] then
begin
dl := i - start + 1;
if dl > najDl then
begin
najDl := dl; najStart := start; najEnd := i;
end;
end
else
start := i;
end;

WriteLn('Pierwszy: ', najStart); // 448
WriteLn('Ostatni: ', najEnd); // 455
end.

## Sposób 4 - implementacja C++

```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std;

int main() {
ifstream plik("pogoda.txt");
string linia;
getline(plik, linia); // nagłówek
vector<double> temp;
while (getline(plik, linia)) {
// parsowanie po średnikach
// temp.push_back( );
}

int start = 0, najStart = 0, najEnd = 0, najDl = 1;
for (int i = 1; i < (int)temp.size(); i++) {
if (temp[i] > temp[i-1]) {
int dl = i - start + 1;
if (dl > najDl) {
najDl = dl; najStart = start; najEnd = i;
}
} else start = i;
}
cout << "Pierwszy: " << najStart+1 << endl; // 448
cout << "Ostatni: " << najEnd+1 << endl; // 455
return 0;
}

## Reference informatyczny - najdłuższy podciąg rosnący kolejnych

> Reference - Klasa problemu "Longest run" (kolejne rosnące):
> - WAŻNE: To NIE jest LIS (Longest Increasing Subsequence). To **najdłuższy ciągły fragment rosnący** - wymaga ciągłości pozycji.
> - Algorytm: jedno-przebiegowy O(n) - utrzymuj długość bieżącego rosnącego ciągu, resetuj gdy warunek złamany.
> - Złożoność: O(n) czasu, O(1) pamięci.
> - LIS to zupełnie inny problem: dopuszcza wybór niesąsiednich elementów, rozwiązywany w O(n log n).

## Schemat oceniania CKE

> Klucz CKE (zadanie 5.2, max 2 pkt):
> - **2 pkt** - pełna odpowiedź, w tym:
> - 1 pkt - poprawny początek (448)
> - 1 pkt - poprawny koniec (455)
> - **0 pkt** - błędna lub brak

## Typowe pułapki

- **`>=` zamiast `>`** - treść mówi WYŻSZA niż poprzednia, czyli ostre `>`. Pominięcie tego daje dłuższe ciągi z plateau (nie rosnące).
- **Off-by-one przy resetowaniu start** - gdy warunek złamany, nowy ciąg startuje od `i` (NIE od `i+1`!), bo dzień `i` to potencjalny początek nowego ciągu.
- **Format dziesiętny** - temperatura ma postać `19,3` (przecinek!), w Pythonie zamień na `.` przed konwersją.
- **Włączenie nagłówka** - pomiń pierwszą linię.
- **"Najdłuższy" vs "pierwszy"** - jest TYLKO JEDEN najdłuższy w pliku, więc nie ma niejasności.

## Złożoność obliczeniowa

- Jedno-przebiegowy algorytm: **O(n)** czasu, O(1) pamięci.
- Dla 500 dni: ~500 operacji.
- Z parsowaniem CSV: O(n · k), gdzie k = długość linii.

## Linki

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

## Podobne zadania

- [Zadanie 1.1](https://matura.lol/question/informatyka-2023-maj-matura-stara-rozszerzona/zad/1.1) — Zadanie 1.1. (0-2) Uzupełnij poniższą tabelę - wpisz w odpowiednie pola: opisy dla podanych przykładów ciągu A, długości tych opisów oraz ciąg A, dla którego po
- [Zadanie 5.2](https://matura.lol/question/informatyka-2020-czerwiec-matura-rozszerzona-2/zad/5.2) — Kontekst - patrz zadanie 5.1 (pliki panstwa.txt, jezyki.txt, uzytkownicy.txt). Podaj liczbę języków, które nie są językami urzędowymi w żadnym państwie. Przy ro
- [Zadanie 5.2](https://matura.lol/question/informatyka-2020-lipiec-matura-rozszerzona-2/zad/5.2) — Zadanie 5.2. (0-2) Dwie pierwsze litery tablicy rejestracyjnej jednoznacznie identyfikują miasto, w którym pojazd został zarejestrowany. Ile jest miast, z który
- [Zadanie 5.2](https://matura.lol/question/informatyka-2019-maj-matura-rozszerzona-2/zad/5.2) — Kontekst - patrz zadanie 5.1. Na przykład dla danych: dzień temperatura 34 3,7 35 3,4 **36 3,5** **37 3,6** **38 3,7** 39 3,5 pierwszym dniem ciągu spełniającym

_Ostatnia aktualizacja danych: 2026-10-03_
