{"id":"informatyka-2019-maj-matura-rozszerzona/zad/5.1","paper_id":"informatyka-2019-maj-matura-rozszerzona","number":"5.1","points":2,"ptype":"open","subject":"informatyka","category":"matura","year":2019,"month":"maj","level":"rozszerzona","text":"Zadanie 5. Chmury\n\nNaukowcy ś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.\n\nW 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:\n- numer dnia (od 1 do 500),\n- zmierzoną temperaturę (z dokładnością do jednego miejsca po przecinku, temperatura nigdy nie spada poniżej zera),\n- wielkość opadu, jaki miał miejsce tego dnia (w milimetrach, zaokrąglony do liczby całkowitej),\n- kategorię chmur (C, S lub 0 - jeśli dzień był bezchmurny),\n- wielkość chmur (od 1 do 5 lub 0 - jeśli dzień był bezchmurny).\n\nDane oddzielone są średnikami, pierwszy wiersz jest wierszem nagłówkowym.\n\nPrzykład:\nDzien;Temperatura;Opad;Kategoria_chmur;Wielkosc_chmur\n1;19;0;0;0\n2;22;1;C;1\n3;23,6;4;C;1\n\nW 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.\n\nPodaj liczbę dni o temperaturze większej lub równej 20 stopni i jednocześnie o opadzie mniejszym lub równym 5 mm.","answer":null,"answer_text":null,"solution":"## Poprawna odpowiedź\n\n**Liczba dni: 63**\n\n## Sposób 1 - Python z czytaniem CSV\n\n```python\nlicznik = 0\nwith open('pogoda.txt', encoding='utf-8') as f:\nnaglowek = f.readline() # pomijamy nagłówek\nfor linia in f:\npola = linia.strip().split(';')\n# pola: Dzien, Temperatura, Opad, Kategoria_chmur, Wielkosc_chmur\ntemperatura = float(pola[1].replace(',', '.'))\nopad = int(pola[2])\nif temperatura >= 20 and opad <= 5:\nlicznik += 1\n\nprint(licznik) # 63\n\n**WAŻNE:** w pliku CSV polski format dziesiętny (`19,3` zamiast `19.3`) - trzeba zamienić `,` na `.` przed `float()`.\n\n## Sposób 2 - arkusz kalkulacyjny (LibreOffice/Excel)\n\nW arkuszu (np. komórka G2):\n=LICZ.WARUNKI(B2:B501; \">=20\"; C2:C501; \"<=5\")\n\nGdzie:\n- `B2:B501` - kolumna temperatury (500 dni + nagłówek)\n- `C2:C501` - kolumna opadu\n- Pierwszy warunek: temperatura ≥ 20\n- Drugi warunek: opad ≤ 5\n\n**Wynik: 63**\n\nAlternatywnie z formułą tablicową:\n=SUMA((B2:B501>=20)*(C2:C501<=5)) {wciśnij Ctrl+Shift+Enter}\n\n## Sposób 3 - SQL (po imporcie pogoda.txt do bazy)\n\n```sql\nSELECT COUNT(*) AS liczba_dni\nFROM pogoda\nWHERE Temperatura >= 20 AND Opad <= 5;\n-- Wynik: 63\n\n## Sposób 4 - implementacja Pascal\n\n```pascal\nprogram CieplyMaloOpadu;\nvar\nf: TextFile;\nlinia: String;\nlicznik, dzien, opad, wielkosc: Integer;\ntemp: Real;\nkat: Char;\nbegin\nAssignFile(f, 'pogoda.txt');\nReset(f);\nReadLn(f, linia); // nagłówek\nlicznik := 0;\nwhile not Eof(f) do\nbegin\nReadLn(f, linia);\n// (parsowanie CSV ; pominięte dla zwięzłości)\nif (temp >= 20) and (opad <= 5) then licznik := licznik + 1;\nend;\nCloseFile(f);\nWriteLn('Liczba dni: ', licznik);\nend.\n\n## Reference informatyczny - analiza danych w arkuszu\n\n> Reference - Funkcje warunkowe w arkuszu kalkulacyjnym:\n> - `=LICZ.JEŻELI(zakres; kryterium)` - liczy komórki spełniające 1 warunek.\n> - `=LICZ.WARUNKI(zakres1; kryt1; zakres2; kryt2; )` - wielowarunkowe.\n> - `=SUMA.JEŻELI(zakres; kryt; suma_zakres)` - suma B gdy A spełnia warunek.\n> - `=SUMA.WARUNKÓW(suma_z; zakres1; kryt1; )` - suma wielowarunkowa.\n>\n> Excel angielski:\n> - COUNTIF, COUNTIFS, SUMIF, SUMIFS - odpowiedniki polskie.\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 5.1, max 2 pkt):\n> - **2 pkt** - poprawna odpowiedź (63)\n> - **1 pkt** - odpowiedź wynikająca z nierówności ostrych zamiast nieostrych:\n> - 51 (obie nierówności ostre - temp > 20, opad < 5)\n> - 59 (temp ostre, opad nieostre)\n> - 54 (temp nieostre, opad ostre)\n> - **0 pkt** - błędna lub brak\n\n## Typowe pułapki\n\n- **`>` zamiast `>=`** - TREŚĆ wyraźnie pisze \"większej lub równej\" (≥) i \"mniejszej lub równej\" (≤). Pominięcie równości = zła odpowiedź.\n- **Format dziesiętny w CSV** - w polskim CSV jest `,` zamiast `.`. W Python: `replace(',', '.')` przed `float()`.\n- **Pomylenie kolumn** - opad to kolumna 3 (indeks 2), kategoria chmur to kol. 4.\n- **Liczenie nagłówka** - pierwszy wiersz to nazwy pól, nie dane.\n- **Pominięcie warunku `<=`** - pisanie `< 5` zamiast `<= 5` daje 54 zamiast 63.\n\n## Złożoność obliczeniowa\n\n- Przegląd 500 wierszy: **O(n) = O(500)** - natychmiastowe.\n- Pamięć: O(1) (streaming) lub O(n) jeśli ładujemy całość.","image":null,"solution_image":null,"topics":null,"page_from":null,"source":"maturazai","answer_source":null,"answer_text_source":null,"solution_source":"maturazai","text_source":"maturazai","source_label":"Informatyka · Matura · maj 2019 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 5. Chmury</p>\n<p>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.</p>\n<p>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:</p>\n<ul><li>numer dnia (od 1 do 500),</li><li>zmierzoną temperaturę (z dokładnością do jednego miejsca po przecinku, temperatura nigdy nie spada poniżej zera),</li><li>wielkość opadu, jaki miał miejsce tego dnia (w milimetrach, zaokrąglony do liczby całkowitej),</li><li>kategorię chmur (C, S lub 0 - jeśli dzień był bezchmurny),</li><li>wielkość chmur (od 1 do 5 lub 0 - jeśli dzień był bezchmurny).</li></ul>\n<p>Dane oddzielone są średnikami, pierwszy wiersz jest wierszem nagłówkowym.</p>\n<p>Przykład:<br>Dzien;Temperatura;Opad;Kategoria_chmur;Wielkosc_chmur<br>1;19;0;0;0<br>2;22;1;C;1<br>3;23,6;4;C;1</p>\n<p>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.</p>\n<p>Podaj liczbę dni o temperaturze większej lub równej 20 stopni i jednocześnie o opadzie mniejszym lub równym 5 mm.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>Liczba dni: 63</strong></p>\n<h4>Sposób 1 - Python z czytaniem CSV</h4>\n<p>```python<br>licznik = 0<br>with open(&#x27;pogoda.txt&#x27;, encoding=&#x27;utf-8&#x27;) as f:<br>naglowek = f.readline() # pomijamy nagłówek<br>for linia in f:<br>pola = linia.strip().split(&#x27;;&#x27;)</p>\n<h3>pola: Dzien, Temperatura, Opad, Kategoria_chmur, Wielkosc_chmur</h3>\n<p>temperatura = float(pola[1].replace(&#x27;,&#x27;, &#x27;.&#x27;))<br>opad = int(pola[2])<br>if temperatura &gt;= 20 and opad &lt;= 5:<br>licznik += 1</p>\n<p>print(licznik) # 63</p>\n<p><strong>WAŻNE:</strong> w pliku CSV polski format dziesiętny (<code>19,3</code> zamiast <code>19.3</code>) - trzeba zamienić <code>,</code> na <code>.</code> przed <code>float()</code>.</p>\n<h4>Sposób 2 - arkusz kalkulacyjny (LibreOffice/Excel)</h4>\n<p>W arkuszu (np. komórka G2):<br>=LICZ.WARUNKI(B2:B501; &quot;&gt;=20&quot;; C2:C501; &quot;&lt;=5&quot;)</p>\n<p>Gdzie:</p>\n<ul><li><code>B2:B501</code> - kolumna temperatury (500 dni + nagłówek)</li><li><code>C2:C501</code> - kolumna opadu</li><li>Pierwszy warunek: temperatura ≥ 20</li><li>Drugi warunek: opad ≤ 5</li></ul>\n<p><strong>Wynik: 63</strong></p>\n<p>Alternatywnie z formułą tablicową:<br>=SUMA((B2:B501&gt;=20)*(C2:C501&lt;=5)) {wciśnij Ctrl+Shift+Enter}</p>\n<h4>Sposób 3 - SQL (po imporcie pogoda.txt do bazy)</h4>\n<p>```sql<br>SELECT COUNT(*) AS liczba_dni<br>FROM pogoda<br>WHERE Temperatura &gt;= 20 AND Opad &lt;= 5;<br>-- Wynik: 63</p>\n<h4>Sposób 4 - implementacja Pascal</h4>\n<p>```pascal<br>program CieplyMaloOpadu;<br>var<br>f: TextFile;<br>linia: String;<br>licznik, dzien, opad, wielkosc: Integer;<br>temp: Real;<br>kat: Char;<br>begin<br>AssignFile(f, &#x27;pogoda.txt&#x27;);<br>Reset(f);<br>ReadLn(f, linia); // nagłówek<br>licznik := 0;<br>while not Eof(f) do<br>begin<br>ReadLn(f, linia);<br>// (parsowanie CSV ; pominięte dla zwięzłości)<br>if (temp &gt;= 20) and (opad &lt;= 5) then licznik := licznik + 1;<br>end;<br>CloseFile(f);<br>WriteLn(&#x27;Liczba dni: &#x27;, licznik);<br>end.</p>\n<h4>Reference informatyczny - analiza danych w arkuszu</h4>\n<blockquote>Reference - Funkcje warunkowe w arkuszu kalkulacyjnym:<br>- <code>=LICZ.JEŻELI(zakres; kryterium)</code> - liczy komórki spełniające 1 warunek.<br>- <code>=LICZ.WARUNKI(zakres1; kryt1; zakres2; kryt2; )</code> - wielowarunkowe.<br>- <code>=SUMA.JEŻELI(zakres; kryt; suma_zakres)</code> - suma B gdy A spełnia warunek.<br>- <code>=SUMA.WARUNKÓW(suma_z; zakres1; kryt1; )</code> - suma wielowarunkowa.<br><br>Excel angielski:<br>- COUNTIF, COUNTIFS, SUMIF, SUMIFS - odpowiedniki polskie.</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 5.1, max 2 pkt):<br>- <strong>2 pkt</strong> - poprawna odpowiedź (63)<br>- <strong>1 pkt</strong> - odpowiedź wynikająca z nierówności ostrych zamiast nieostrych:<br>- 51 (obie nierówności ostre - temp &gt; 20, opad &lt; 5)<br>- 59 (temp ostre, opad nieostre)<br>- 54 (temp nieostre, opad ostre)<br>- <strong>0 pkt</strong> - błędna lub brak</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong><code>&gt;</code> zamiast <code>&gt;=</code></strong> - TREŚĆ wyraźnie pisze &quot;większej lub równej&quot; (≥) i &quot;mniejszej lub równej&quot; (≤). Pominięcie równości = zła odpowiedź.</li><li><strong>Format dziesiętny w CSV</strong> - w polskim CSV jest <code>,</code> zamiast <code>.</code>. W Python: <code>replace(&#x27;,&#x27;, &#x27;.&#x27;)</code> przed <code>float()</code>.</li><li><strong>Pomylenie kolumn</strong> - opad to kolumna 3 (indeks 2), kategoria chmur to kol. 4.</li><li><strong>Liczenie nagłówka</strong> - pierwszy wiersz to nazwy pól, nie dane.</li><li><strong>Pominięcie warunku <code>&lt;=</code></strong> - pisanie <code>&lt; 5</code> zamiast <code>&lt;= 5</code> daje 54 zamiast 63.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Przegląd 500 wierszy: <strong>O(n) = O(500)</strong> - natychmiastowe.</li><li>Pamięć: O(1) (streaming) lub O(n) jeśli ładujemy całość.</li></ul>"}]}