{"id":"informatyka-2017-maj-matura-rozszerzona/zad/5.3","paper_id":"informatyka-2017-maj-matura-rozszerzona","number":"5.3","points":3,"ptype":"open","subject":"informatyka","category":"matura","year":2017,"month":"maj","level":"rozszerzona","text":"Kontekst - patrz zadanie 5.1.\n\nPodaj liczby meczów wyjazdowych - wygranych, przegranych i zremisowanych - przez drużynę Galop Kucykowo.","answer":null,"answer_text":null,"solution":"## Poprawna odpowiedź\n\n**Mecze wyjazdowe Galop Kucykowo:**\n- Wygrane: **579**\n- Przegrane: **452**\n- Zremisowane: **170**\n\n## Sposób 1 - interpretacja danych\n\n**Kolumna `Gdzie`** w `wyniki.txt`:\n- **W** = swoim boisku (u siebie, Galop Kucykowo gra W swoim Kucykowie)\n- **D** = na boisku przeciwnika (wyjazdowy)\n\n**UWAGA - KLUCZOWA INTERPRETACJA:** Treść mówi o meczach **WYJAZDOWYCH**, czyli `Gdzie = 'D'` (na wyjeździe).\n\n**Definicja wyniku:**\n- Wygrana: Bramki_zdobyte > Bramki_stracone\n- Przegrana: Bramki_zdobyte < Bramki_stracone\n- Remis: Bramki_zdobyte = Bramki_stracone\n\n## Sposób 2 - SQL\n\n```sql\nSELECT\nSUM(CASE WHEN Bramki_zdobyte > Bramki_stracone THEN 1 ELSE 0 END) AS Wygrane,\nSUM(CASE WHEN Bramki_zdobyte < Bramki_stracone THEN 1 ELSE 0 END) AS Przegrane,\nSUM(CASE WHEN Bramki_zdobyte = Bramki_stracone THEN 1 ELSE 0 END) AS Remisy\nFROM wyniki\nWHERE Gdzie = 'D';\n\nWynik: 579 | 452 | 170\n\nLub jako 3 oddzielne zapytania:\n```sql\nSELECT COUNT(*) FROM wyniki WHERE Gdzie = 'D' AND Bramki_zdobyte > Bramki_stracone; -- 579\nSELECT COUNT(*) FROM wyniki WHERE Gdzie = 'D' AND Bramki_zdobyte < Bramki_stracone; -- 452\nSELECT COUNT(*) FROM wyniki WHERE Gdzie = 'D' AND Bramki_zdobyte = Bramki_stracone; -- 170\n\n## Sposób 3 - Python\n\n```python\nwygrane = przegrane = remisy = 0\nwith open('wyniki.txt', encoding='utf-8') as f:\nnext(f)\nfor line in f:\nparts = line.strip().split('\\t')\ngdzie = parts[2]\nbz = int(parts[5])\nbs = int(parts[6])\nif gdzie == 'D':\nif bz > bs:\nwygrane += 1\nelif bz < bs:\nprzegrane += 1\nelse:\nremisy += 1\n\nprint(\"Wygrane:\", wygrane) # 579\nprint(\"Przegrane:\", przegrane) # 452\nprint(\"Remisy:\", remisy) # 170\n\n## Sposób 4 - arkusz kalkulacyjny\n\n1. W kolumnie H: `=JEŻELI(F2>G2; \"W\"; JEŻELI(F2<G2; \"P\"; \"R\"))` - kategoryzacja wyniku.\n2. **LICZ.WARUNKI** dla wyjazdowych:\n- Wygrane: `=LICZ.WARUNKI(C:C; \"D\"; H:H; \"W\")` → 579\n- Przegrane: `=LICZ.WARUNKI(C:C; \"D\"; H:H; \"P\")` → 452\n- Remisy: `=LICZ.WARUNKI(C:C; \"D\"; H:H; \"R\")` → 170\n\n## Reference algorytmiczny - CASE WHEN i agregaty\n\n> Reference - kategoryzacja w SQL:\n> - `CASE WHEN warunek THEN wartość ELSE inna_wartość END` - odpowiednik if-else.\n> - `SUM(CASE WHEN THEN 1 ELSE 0 END)` = liczba wierszy spełniających warunek (alternatywa do COUNT z WHERE).\n> - Filtr w SQL może też być wieloma zapytaniami z COUNT + różne WHERE.\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 5.3, max 3 pkt):\n> - **3 pkt** - wszystkie 3 liczby poprawne (po 1 pkt za wiersz)\n> - **2 pkt** - odpowiedź BEZ filtru wyjazdowych (910, 352, 1185)\n> - **0 pkt** - inna błędna lub brak\n\n## Typowe pułapki\n\n- **Brak filtru `Gdzie = 'D'`** - najczęstszy błąd. Liczba meczów wyjazdowych ≠ wszystkich meczów.\n- **Pomylenie W/D** - D może być interpretowane różnie. Tu **D = wyjazdowy** (na boisku przeciwnika). Sprawdzenie: zwykle drużyna ma zbliżoną liczbę meczów u siebie i na wyjeździe. Można też zweryfikować po przykładzie z treści zadania 5.1.\n- **Zwracanie tylko jednego wiersza zamiast 3** - wyjście musi mieć 3 osobne liczby (wygrane/przegrane/remisy).\n- **Pomylenie remisu z brakiem bramek** - remis to bramki_zdobyte = bramki_stracone (mogą być 3-3, 0-0, itd.).\n\n## Złożoność obliczeniowa\n\n- SQL: O(n) z filtrem WHERE i agregatem.\n- Python: O(n) z pojedynczym przejściem pliku.","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 2017 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Kontekst - patrz zadanie 5.1.</p>\n<p>Podaj liczby meczów wyjazdowych - wygranych, przegranych i zremisowanych - przez drużynę Galop Kucykowo.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>Mecze wyjazdowe Galop Kucykowo:</strong></p>\n<ul><li>Wygrane: <strong>579</strong></li><li>Przegrane: <strong>452</strong></li><li>Zremisowane: <strong>170</strong></li></ul>\n<h4>Sposób 1 - interpretacja danych</h4>\n<p><strong>Kolumna <code>Gdzie</code></strong> w <code>wyniki.txt</code>:</p>\n<ul><li><strong>W</strong> = swoim boisku (u siebie, Galop Kucykowo gra W swoim Kucykowie)</li><li><strong>D</strong> = na boisku przeciwnika (wyjazdowy)</li></ul>\n<p><strong>UWAGA - KLUCZOWA INTERPRETACJA:</strong> Treść mówi o meczach <strong>WYJAZDOWYCH</strong>, czyli <code>Gdzie = &#x27;D&#x27;</code> (na wyjeździe).</p>\n<p><strong>Definicja wyniku:</strong></p>\n<ul><li>Wygrana: Bramki_zdobyte &gt; Bramki_stracone</li><li>Przegrana: Bramki_zdobyte &lt; Bramki_stracone</li><li>Remis: Bramki_zdobyte = Bramki_stracone</li></ul>\n<h4>Sposób 2 - SQL</h4>\n<p>```sql<br>SELECT<br>SUM(CASE WHEN Bramki_zdobyte &gt; Bramki_stracone THEN 1 ELSE 0 END) AS Wygrane,<br>SUM(CASE WHEN Bramki_zdobyte &lt; Bramki_stracone THEN 1 ELSE 0 END) AS Przegrane,<br>SUM(CASE WHEN Bramki_zdobyte = Bramki_stracone THEN 1 ELSE 0 END) AS Remisy<br>FROM wyniki<br>WHERE Gdzie = &#x27;D&#x27;;</p>\n<p>Wynik: 579 | 452 | 170</p>\n<p>Lub jako 3 oddzielne zapytania:<br>```sql<br>SELECT COUNT(*) FROM wyniki WHERE Gdzie = &#x27;D&#x27; AND Bramki_zdobyte &gt; Bramki_stracone; -- 579<br>SELECT COUNT(*) FROM wyniki WHERE Gdzie = &#x27;D&#x27; AND Bramki_zdobyte &lt; Bramki_stracone; -- 452<br>SELECT COUNT(*) FROM wyniki WHERE Gdzie = &#x27;D&#x27; AND Bramki_zdobyte = Bramki_stracone; -- 170</p>\n<h4>Sposób 3 - Python</h4>\n<p>```python<br>wygrane = przegrane = remisy = 0<br>with open(&#x27;wyniki.txt&#x27;, encoding=&#x27;utf-8&#x27;) as f:<br>next(f)<br>for line in f:<br>parts = line.strip().split(&#x27;\\t&#x27;)<br>gdzie = parts[2]<br>bz = int(parts[5])<br>bs = int(parts[6])<br>if gdzie == &#x27;D&#x27;:<br>if bz &gt; bs:<br>wygrane += 1<br>elif bz &lt; bs:<br>przegrane += 1<br>else:<br>remisy += 1</p>\n<p>print(&quot;Wygrane:&quot;, wygrane) # 579<br>print(&quot;Przegrane:&quot;, przegrane) # 452<br>print(&quot;Remisy:&quot;, remisy) # 170</p>\n<h4>Sposób 4 - arkusz kalkulacyjny</h4>\n<ol><li>W kolumnie H: <code>=JEŻELI(F2&gt;G2; &quot;W&quot;; JEŻELI(F2&lt;G2; &quot;P&quot;; &quot;R&quot;))</code> - kategoryzacja wyniku.</li><li><strong>LICZ.WARUNKI</strong> dla wyjazdowych:</li></ol>\n<ul><li>Wygrane: <code>=LICZ.WARUNKI(C:C; &quot;D&quot;; H:H; &quot;W&quot;)</code> → 579</li><li>Przegrane: <code>=LICZ.WARUNKI(C:C; &quot;D&quot;; H:H; &quot;P&quot;)</code> → 452</li><li>Remisy: <code>=LICZ.WARUNKI(C:C; &quot;D&quot;; H:H; &quot;R&quot;)</code> → 170</li></ul>\n<h4>Reference algorytmiczny - CASE WHEN i agregaty</h4>\n<blockquote>Reference - kategoryzacja w SQL:<br>- <code>CASE WHEN warunek THEN wartość ELSE inna_wartość END</code> - odpowiednik if-else.<br>- <code>SUM(CASE WHEN THEN 1 ELSE 0 END)</code> = liczba wierszy spełniających warunek (alternatywa do COUNT z WHERE).<br>- Filtr w SQL może też być wieloma zapytaniami z COUNT + różne WHERE.</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 5.3, max 3 pkt):<br>- <strong>3 pkt</strong> - wszystkie 3 liczby poprawne (po 1 pkt za wiersz)<br>- <strong>2 pkt</strong> - odpowiedź BEZ filtru wyjazdowych (910, 352, 1185)<br>- <strong>0 pkt</strong> - inna błędna lub brak</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Brak filtru <code>Gdzie = &#x27;D&#x27;</code></strong> - najczęstszy błąd. Liczba meczów wyjazdowych ≠ wszystkich meczów.</li><li><strong>Pomylenie W/D</strong> - D może być interpretowane różnie. Tu <strong>D = wyjazdowy</strong> (na boisku przeciwnika). Sprawdzenie: zwykle drużyna ma zbliżoną liczbę meczów u siebie i na wyjeździe. Można też zweryfikować po przykładzie z treści zadania 5.1.</li><li><strong>Zwracanie tylko jednego wiersza zamiast 3</strong> - wyjście musi mieć 3 osobne liczby (wygrane/przegrane/remisy).</li><li><strong>Pomylenie remisu z brakiem bramek</strong> - remis to bramki_zdobyte = bramki_stracone (mogą być 3-3, 0-0, itd.).</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>SQL: O(n) z filtrem WHERE i agregatem.</li><li>Python: O(n) z pojedynczym przejściem pliku.</li></ul>"}]}