{"id":"informatyka-2017-maj-matura-rozszerzona/zad/6.1","paper_id":"informatyka-2017-maj-matura-rozszerzona","number":"6.1","points":2,"ptype":"open","subject":"informatyka","category":"matura","year":2017,"month":"maj","level":"rozszerzona","text":"Zadanie 6. Piksele\n\nW pliku dane.txt znajduje się 200 wierszy. Każdy wiersz zawiera 320 liczb naturalnych z przedziału od 0 do 255, oddzielonych znakami pojedynczego odstępu (spacjami). Przedstawiają one jasności kolejnych pikseli czarno-białego obrazu o wymiarach 320 na 200 pikseli (od 0 - czarny do 255 - biały).\n\nNapisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki6.txt, a każdą odpowiedź poprzedź numerem oznaczającym odpowiednie zadanie.\n\nUwaga: plik przyklad.txt zawiera dane przykładowe spełniające warunki zadania (obraz ma takie same rozmiary). Odpowiedzi dla danych z pliku przyklad.txt są podane pod poleceniami.\n\nPodaj jasność najjaśniejszego i jasność najciemniejszego piksela.\n\nDla danych z pliku przyklad.txt wynikiem jest 255 (najjaśniejszy) i 0 (najciemniejszy).","answer":null,"answer_text":null,"solution":"## Poprawna odpowiedź\n\n**Dla `dane.txt`:**\n- Najjaśniejszy piksel: **221**\n- Najciemniejszy piksel: **7**\n\n**Dla `przyklad.txt`:**\n- Najjaśniejszy: 255\n- Najciemniejszy: 0\n\n## Sposób 1 - Python (najprostszy)\n\nWczytujemy plik, zbieramy wszystkie 320×200 = 64 000 wartości i obliczamy min/max.\n\n```python\nwith open('dane.txt') as f:\nwszystkie = []\nfor linia in f:\nwszystkie.extend(int(x) for x in linia.split())\n\nprint('Najjasniejszy:', max(wszystkie)) # 221\nprint('Najciemniejszy:', min(wszystkie)) # 7\n\nLub jednolinijkowo z generator expression (oszczędniejsze pamięciowo):\n```python\nwith open('dane.txt') as f:\npikse = [int(x) for linia in f for x in linia.split()]\nprint(max(pikse), min(pikse))\n\n## Sposób 2 - C++\n\n```cpp\n#include <iostream>\n#include <fstream>\n#include <climits>\nusing namespace std;\n\nint main() {\nifstream plik(\"dane.txt\");\nint x, najw = INT_MIN, najm = INT_MAX;\nwhile (plik >> x) {\nif (x > najw) najw = x;\nif (x < najm) najm = x;\n}\ncout << \"Najjasniejszy: \" << najw << endl;\ncout << \"Najciemniejszy: \" << najm << endl;\nreturn 0;\n}\n// Najjasniejszy: 221\n// Najciemniejszy: 7\n\n## Sposób 3 - Pascal\n\n```pascal\nprogram NajPiksel;\nvar\nf: TextFile;\nx, najw, najm: Integer;\nbegin\nAssignFile(f, 'dane.txt');\nReset(f);\nnajw := 0;\nnajm := 255;\nwhile not Eof(f) do\nbegin\nRead(f, x);\nif x > najw then najw := x;\nif x < najm then najm := x;\nend;\nCloseFile(f);\nWriteln('Najjasniejszy: ', najw);\nWriteln('Najciemniejszy: ', najm);\nend.\n\n## Reference algorytmiczny - min/max w pojedynczym przebiegu\n\n> Reference - Wyznaczenie min i max:\n> - Pojedynczy przebieg O(n), wystarczy 2n-2 porównań naiwnie, optymalnie 3n/2.\n> - Inicjalizacja: dla max → najmniejsza wartość (lub pierwszy element), dla min → największa (lub pierwszy).\n> - Python: wbudowane `max()` i `min()` - czas O(n), kod 1-linijkowy.\n> - C++: `*max_element( )` i `*min_element( )` z `<algorithm>`.\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 6.1, max 2 pkt):\n> - **2 pkt** - prawidłowa pełna odpowiedź:\n> - **1 pkt** za podanie wartości najjaśniejszego piksela (221).\n> - **1 pkt** za podanie wartości najciemniejszego piksela (7).\n> - **0 pkt** - odpowiedź błędna lub brak.\n\n## Typowe pułapki\n\n- **Wczytywanie nie obejmuje wszystkich pikseli** - uważać czy plik kończy się znakiem nowej linii po ostatniej linii (whitespace tokenizery zwykle radzą sobie z tym).\n- **Inicjalizacja max/min** - jeśli inicjalizujesz `najw = 0`, a wszystkie wartości są >= 0, to OK. Lepiej `najw = INT_MIN` (lub pierwszą wczytaną wartość).\n- **Mylenie kolumn/wierszy** - zadanie pyta o WARTOŚCI pikseli, nie ich pozycje. Nie potrzeba pamiętać współrzędnych.\n- **Format wyjścia** - \"najjasniejszy: 221, najciemniejszy: 7\" w pliku wyniki6.txt, poprzedzony numerem zadania (6.1).\n\n## Złożoność obliczeniowa\n\n- Wczytanie: O(n) gdzie n = 64 000 pikseli.\n- Min/max: O(n) w jednym przebiegu.\n- **Całkowita: O(n)**, czyli liniowa.","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>Zadanie 6. Piksele</p>\n<p>W pliku dane.txt znajduje się 200 wierszy. Każdy wiersz zawiera 320 liczb naturalnych z przedziału od 0 do 255, oddzielonych znakami pojedynczego odstępu (spacjami). Przedstawiają one jasności kolejnych pikseli czarno-białego obrazu o wymiarach 320 na 200 pikseli (od 0 - czarny do 255 - biały).</p>\n<p>Napisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki6.txt, a każdą odpowiedź poprzedź numerem oznaczającym odpowiednie zadanie.</p>\n<p>Uwaga: plik przyklad.txt zawiera dane przykładowe spełniające warunki zadania (obraz ma takie same rozmiary). Odpowiedzi dla danych z pliku przyklad.txt są podane pod poleceniami.</p>\n<p>Podaj jasność najjaśniejszego i jasność najciemniejszego piksela.</p>\n<p>Dla danych z pliku przyklad.txt wynikiem jest 255 (najjaśniejszy) i 0 (najciemniejszy).</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>Dla <code>dane.txt</code>:</strong></p>\n<ul><li>Najjaśniejszy piksel: <strong>221</strong></li><li>Najciemniejszy piksel: <strong>7</strong></li></ul>\n<p><strong>Dla <code>przyklad.txt</code>:</strong></p>\n<ul><li>Najjaśniejszy: 255</li><li>Najciemniejszy: 0</li></ul>\n<h4>Sposób 1 - Python (najprostszy)</h4>\n<p>Wczytujemy plik, zbieramy wszystkie 320×200 = 64 000 wartości i obliczamy min/max.</p>\n<p>```python<br>with open(&#x27;dane.txt&#x27;) as f:<br>wszystkie = []<br>for linia in f:<br>wszystkie.extend(int(x) for x in linia.split())</p>\n<p>print(&#x27;Najjasniejszy:&#x27;, max(wszystkie)) # 221<br>print(&#x27;Najciemniejszy:&#x27;, min(wszystkie)) # 7</p>\n<p>Lub jednolinijkowo z generator expression (oszczędniejsze pamięciowo):<br>```python<br>with open(&#x27;dane.txt&#x27;) as f:<br>pikse = [int(x) for linia in f for x in linia.split()]<br>print(max(pikse), min(pikse))</p>\n<h4>Sposób 2 - C++</h4>\n<p>```cpp<br>#include &lt;iostream&gt;<br>#include &lt;fstream&gt;<br>#include &lt;climits&gt;<br>using namespace std;</p>\n<p>int main() {<br>ifstream plik(&quot;dane.txt&quot;);<br>int x, najw = INT_MIN, najm = INT_MAX;<br>while (plik &gt;&gt; x) {<br>if (x &gt; najw) najw = x;<br>if (x &lt; najm) najm = x;<br>}<br>cout &lt;&lt; &quot;Najjasniejszy: &quot; &lt;&lt; najw &lt;&lt; endl;<br>cout &lt;&lt; &quot;Najciemniejszy: &quot; &lt;&lt; najm &lt;&lt; endl;<br>return 0;<br>}<br>// Najjasniejszy: 221<br>// Najciemniejszy: 7</p>\n<h4>Sposób 3 - Pascal</h4>\n<p>```pascal<br>program NajPiksel;<br>var<br>f: TextFile;<br>x, najw, najm: Integer;<br>begin<br>AssignFile(f, &#x27;dane.txt&#x27;);<br>Reset(f);<br>najw := 0;<br>najm := 255;<br>while not Eof(f) do<br>begin<br>Read(f, x);<br>if x &gt; najw then najw := x;<br>if x &lt; najm then najm := x;<br>end;<br>CloseFile(f);<br>Writeln(&#x27;Najjasniejszy: &#x27;, najw);<br>Writeln(&#x27;Najciemniejszy: &#x27;, najm);<br>end.</p>\n<h4>Reference algorytmiczny - min/max w pojedynczym przebiegu</h4>\n<blockquote>Reference - Wyznaczenie min i max:<br>- Pojedynczy przebieg O(n), wystarczy 2n-2 porównań naiwnie, optymalnie 3n/2.<br>- Inicjalizacja: dla max → najmniejsza wartość (lub pierwszy element), dla min → największa (lub pierwszy).<br>- Python: wbudowane <code>max()</code> i <code>min()</code> - czas O(n), kod 1-linijkowy.<br>- C++: <code><em>max_element( )</code> i <code></em>min_element( )</code> z <code>&lt;algorithm&gt;</code>.</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 6.1, max 2 pkt):<br>- <strong>2 pkt</strong> - prawidłowa pełna odpowiedź:<br>- <strong>1 pkt</strong> za podanie wartości najjaśniejszego piksela (221).<br>- <strong>1 pkt</strong> za podanie wartości najciemniejszego piksela (7).<br>- <strong>0 pkt</strong> - odpowiedź błędna lub brak.</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Wczytywanie nie obejmuje wszystkich pikseli</strong> - uważać czy plik kończy się znakiem nowej linii po ostatniej linii (whitespace tokenizery zwykle radzą sobie z tym).</li><li><strong>Inicjalizacja max/min</strong> - jeśli inicjalizujesz <code>najw = 0</code>, a wszystkie wartości są &gt;= 0, to OK. Lepiej <code>najw = INT_MIN</code> (lub pierwszą wczytaną wartość).</li><li><strong>Mylenie kolumn/wierszy</strong> - zadanie pyta o WARTOŚCI pikseli, nie ich pozycje. Nie potrzeba pamiętać współrzędnych.</li><li><strong>Format wyjścia</strong> - &quot;najjasniejszy: 221, najciemniejszy: 7&quot; w pliku wyniki6.txt, poprzedzony numerem zadania (6.1).</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Wczytanie: O(n) gdzie n = 64 000 pikseli.</li><li>Min/max: O(n) w jednym przebiegu.</li><li><strong>Całkowita: O(n)</strong>, czyli liniowa.</li></ul>"}]}