{"id":"informatyka-2016-maj-matura-rozszerzona/zad/2.3","paper_id":"informatyka-2016-maj-matura-rozszerzona","number":"2.3","points":3,"ptype":"open","subject":"informatyka","category":"matura","year":2016,"month":"maj","level":"rozszerzona","text":"Zadanie 2.3. (0-3)\nTablica A[1 100] zawiera wszystkie liczby całkowite z przedziału <1, 100> w następującej\nkolejności:\nA = [10, 20, 30, , 100, 9, 19, 29, , 99, 8, 18, 28, , 98, , 1, 11, 21, , 91].\n(najpierw rosnąco wszystkie liczby kończące się na 0, potem rosnąco liczby kończące się\nna 9, potem na 8 itd.)\nPodaj wartość zmiennej w oraz wartości trzech pierwszych elementów tablicy A (A[1], A[2],\nA[3]), po wykonaniu funkcji przestaw(A).\nMiejsce na obliczenia.\nOdp. w =\nA[1] = , A[2] = A[3] =\nWypełnia\negzaminator\nNr zadania\n2.1.\n2.2.\n2.3.\nMaks. liczba pkt.\n2\n1\n3\nUzyskana liczba pkt.\nMIN_1R","answer":null,"answer_text":"Zadanie 2.3. (0-3)\nIII. Rozwiązywanie problemów i\npodejmowanie decyzji […], z zastosowaniem\npodejścia algorytmicznego.\n5. Rozwiązywanie problemów i podejmowanie\ndecyzji […], stosowanie podejścia algorytmicznego.\nZdający:\n2) stosuje podejście algorytmiczne do rozwiązywania\nproblemu;\n7) opracowuje i przeprowadza wszystkie etapy\nprowadzące do otrzymania poprawnego rozwiązania\nproblemu: od sformułowania specyfikacji problemu\npo testowanie rozwiązania;\n11) opisuje podstawowe algorytmy i stosuje: […]\nb) algorytmy wyszukiwania i porządkowania\n(sortowania);\n17) Zdający ocenia zgodność algorytmu ze\nspecyfikacją problemu.\nSchemat punktowania\n3 p. - za odpowiedź poprawną, w tym:\n- 1 p. - za poprawną wartość w\n- 2 p. - za poprawne wszystkie trzy wartości A[1], A[2] i A[3].\n0 p. - za odpowiedź błędną albo brak odpowiedzi.\nPoprawna odpowiedź\nw = 10\nA[1] = 9\nA[2] = 8\nA[3] = 7\nUwaga\nZa poprawne dwie z trzech wartości A[1], A[2] i A[3] - 1 punkt.","solution":"## Poprawna odpowiedź\n\n**w = 10**\n\n**A[1] = 9, A[2] = 8, A[3] = 7**\n\n## Sposób 1 - analiza struktury tablicy\n\n**Struktura tablicy A[1 100]:**\n- A[1 10] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] (kończące się na 0)\n- A[11 20] = [9, 19, 29, 39, 49, 59, 69, 79, 89, 99] (kończące się na 9)\n- A[21 30] = [8, 18, 28, 38, 48, 58, 68, 78, 88, 98] (kończące się na 8)\n- A[91 100] = [1, 11, 21, 31, 41, 51, 61, 71, 81, 91] (kończące się na 1)\n\n**Klucz = A[1] = 10.**\n\n**Ile elementów A[2 100] jest mniejszych od 10?** To liczby ze zbioru {1, 2, 3, 4, 5, 6, 7, 8, 9} = **9 elementów**.\n\n**Pozycje tych 9 elementów w tablicy:**\n- 9 → A[11] (pierwszy element grupy kończących się na 9, czyli najmniejsza wartość w tej grupie)\n- 8 → A[21]\n- 7 → A[31]\n- 6 → A[41]\n- 5 → A[51]\n- 4 → A[61]\n- 3 → A[71]\n- 2 → A[81]\n- 1 → A[91]\n\n## Sposób 2 - symulacja kluczowych kroków\n\nIterujemy k od 2 do 100. Pierwsze 9 elementów mniejszych od 10 napotykamy na pozycjach 11, 21, 31, 41, 51, 61, 71, 81, 91.\n\n**Krok dla k = 11 (A[11] = 9 < 10):** zamień(A[1], A[11]). Stan przed: A[1]=10, A[2 10]=[20,30, ,100], A[11]=9. Stan po:\n- A[1] = **9**\n- A[11] = 10\n- w → 2\n\n**Krok dla k = 21 (A[21] = 8 < 10):** zamień(A[2], A[21]). Przed: A[2] = 20, A[21] = 8. Po:\n- A[2] = **8**\n- A[21] = 20\n- w → 3\n\n**Krok dla k = 31 (A[31] = 7 < 10):** zamień(A[3], A[31]). Przed: A[3] = 30, A[31] = 7. Po:\n- A[3] = **7**\n- A[31] = 30\n- w → 4\n\nKolejne zamiany umieszczają 6, 5, 4, 3, 2, 1 na pozycjach A[4] A[9], a w rośnie do 10.\n\n**Po wszystkich 9 zamianach: w = 10.**\n\n## Sposób 3 - implementacja Python (weryfikacja)\n\n```python\n# Konstrukcja tablicy A\nA = []\nfor ostatnia_cyfra in [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]:\nfor tens in range(0, 10):\nliczba = tens * 10 + ostatnia_cyfra\nif liczba == 0:\nliczba = 100 # przyjmujemy 100 w grupie \"kończą się na 0\"\nA.append(liczba)\n\n# Sprawdźmy pierwszych 11 elementów\nprint(A[:11]) # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 9]\n\n# Wykonaj funkcję przestaw\nklucz = A[0]\nw = 0\nfor k in range(1, len(A)):\nif A[k] < klucz:\nA[w], A[k] = A[k], A[w]\nw += 1\n\nprint(\"w =\", w + 1) # w w pseudokodzie indeksowany od 1\nprint(\"A[1 3] =\", A[0], A[1], A[2]) # 9 8 7\n\nWynik:\nw = 10\nA[1 3] = 9 8 7\n\n## Reference informatyczny - partycja Lomuto na konkretnej tablicy\n\n> Reference - Stan końcowy partycji `przestaw`:\n> - Po pętli `w - 1` to liczba elementów `A[2 n]` mniejszych od klucza.\n> - Zatem **w = (liczba mniejszych) + 1**.\n> - Tutaj: 9 mniejszych → **w = 10**.\n> - W lewej części A[1 w-1] = A[1 9] znajdują się wszystkie elementy < klucza, w **kolejności, w jakiej zostały napotkane** podczas iteracji.\n> - Bo iterujemy k = 11, 21, 31, , 91 i wstawiamy 9, 8, 7, , 1 - **kolejność: 9, 8, 7, 6, 5, 4, 3, 2, 1**.\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 2.3, max 3 pkt):\n> - **1 pkt** za poprawną wartość w = 10\n> - **2 pkt** za poprawne wszystkie trzy A[1], A[2], A[3] (= 9, 8, 7)\n> - **Uwaga: 2 z 3 wartości A[1] A[3] dają 1 pkt**\n> - **0 pkt** za odpowiedź błędną\n\n## Typowe pułapki\n\n- **Pomylenie kolejności kończących się na cyfry** - w pseudokodzie problemu cyfry są: 0, 9, 8, 7, (NIE rosnąco 1, 2, 3, ).\n- **Liczenie elementów ≤ 10** zamiast < 10 - to dałoby 10 elementów, ale klucz 10 nie jest < 10, więc i tak 9.\n- **Założenie, że tablica jest pomieszana losowo** - tu jest deterministyczna struktura ułożona w bloki.\n- **Pomyłka z wartościami zamienianymi** - pierwsza zamiana to A[1]↔A[11], wstawiająca 9 na pozycję 1 (nie A[2]↔A[11]).\n- **Off-by-one w w**: w startuje od 1; po każdej zamianie rośnie o 1. Po 9 zamianach w = 1 + 9 = 10.\n\n## Złożoność obliczeniowa\n\n- Algorytm O(n) = O(100) operacji.\n- Liczba zamian: 9 (= liczba elementów < klucza).","image":"img/informatyka-2016-maj-matura-rozszerzona/zad-2.3.webp","solution_image":null,"topics":null,"page_from":5,"source":"ocr","answer_source":null,"answer_text_source":"ocr","solution_source":"maturazai","text_source":"ocr","source_label":"Informatyka · Matura · maj 2016 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 2.3. (0-3)<br>Tablica A[1 100] zawiera wszystkie liczby całkowite z przedziału &lt;1, 100&gt; w następującej<br>kolejności:<br>A = [10, 20, 30, , 100, 9, 19, 29, , 99, 8, 18, 28, , 98, , 1, 11, 21, , 91].<br>(najpierw rosnąco wszystkie liczby kończące się na 0, potem rosnąco liczby kończące się<br>na 9, potem na 8 itd.)<br>Podaj wartość zmiennej w oraz wartości trzech pierwszych elementów tablicy A (A[1], A[2],<br>A[3]), po wykonaniu funkcji przestaw(A).<br>Miejsce na obliczenia.<br>Odp. w =<br>A[1] = , A[2] = A[3] =<br>Wypełnia<br>egzaminator<br>Nr zadania<br>2.1.<br>2.2.<br>2.3.<br>Maks. liczba pkt.<br>2<br>1<br>3<br>Uzyskana liczba pkt.<br>MIN_1R</p>","answer_text_html":"<p>Zadanie 2.3. (0-3)<br>III. Rozwiązywanie problemów i<br>podejmowanie decyzji […], z zastosowaniem<br>podejścia algorytmicznego.</p>\n<ol><li>Rozwiązywanie problemów i podejmowanie</li></ol>\n<p>decyzji […], stosowanie podejścia algorytmicznego.<br>Zdający:</p>\n<ol><li>stosuje podejście algorytmiczne do rozwiązywania</li></ol>\n<p>problemu;</p>\n<ol><li>opracowuje i przeprowadza wszystkie etapy</li></ol>\n<p>prowadzące do otrzymania poprawnego rozwiązania<br>problemu: od sformułowania specyfikacji problemu<br>po testowanie rozwiązania;</p>\n<ol><li>opisuje podstawowe algorytmy i stosuje: […]</li></ol>\n<p>b) algorytmy wyszukiwania i porządkowania<br>(sortowania);</p>\n<ol><li>Zdający ocenia zgodność algorytmu ze</li></ol>\n<p>specyfikacją problemu.<br>Schemat punktowania<br>3 p. - za odpowiedź poprawną, w tym:</p>\n<ul><li>1 p. - za poprawną wartość w</li><li>2 p. - za poprawne wszystkie trzy wartości A[1], A[2] i A[3].</li></ul>\n<p>0 p. - za odpowiedź błędną albo brak odpowiedzi.<br>Poprawna odpowiedź<br>w = 10<br>A[1] = 9<br>A[2] = 8<br>A[3] = 7<br>Uwaga<br>Za poprawne dwie z trzech wartości A[1], A[2] i A[3] - 1 punkt.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>w = 10</strong></p>\n<p><strong>A[1] = 9, A[2] = 8, A[3] = 7</strong></p>\n<h4>Sposób 1 - analiza struktury tablicy</h4>\n<p><strong>Struktura tablicy A[1 100]:</strong></p>\n<ul><li>A[1 10] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] (kończące się na 0)</li><li>A[11 20] = [9, 19, 29, 39, 49, 59, 69, 79, 89, 99] (kończące się na 9)</li><li>A[21 30] = [8, 18, 28, 38, 48, 58, 68, 78, 88, 98] (kończące się na 8)</li><li>A[91 100] = [1, 11, 21, 31, 41, 51, 61, 71, 81, 91] (kończące się na 1)</li></ul>\n<p><strong>Klucz = A[1] = 10.</strong></p>\n<p><strong>Ile elementów A[2 100] jest mniejszych od 10?</strong> To liczby ze zbioru {1, 2, 3, 4, 5, 6, 7, 8, 9} = <strong>9 elementów</strong>.</p>\n<p><strong>Pozycje tych 9 elementów w tablicy:</strong></p>\n<ul><li>9 → A[11] (pierwszy element grupy kończących się na 9, czyli najmniejsza wartość w tej grupie)</li><li>8 → A[21]</li><li>7 → A[31]</li><li>6 → A[41]</li><li>5 → A[51]</li><li>4 → A[61]</li><li>3 → A[71]</li><li>2 → A[81]</li><li>1 → A[91]</li></ul>\n<h4>Sposób 2 - symulacja kluczowych kroków</h4>\n<p>Iterujemy k od 2 do 100. Pierwsze 9 elementów mniejszych od 10 napotykamy na pozycjach 11, 21, 31, 41, 51, 61, 71, 81, 91.</p>\n<p><strong>Krok dla k = 11 (A[11] = 9 &lt; 10):</strong> zamień(A[1], A[11]). Stan przed: A[1]=10, A[2 10]=[20,30, ,100], A[11]=9. Stan po:</p>\n<ul><li>A[1] = <strong>9</strong></li><li>A[11] = 10</li><li>w → 2</li></ul>\n<p><strong>Krok dla k = 21 (A[21] = 8 &lt; 10):</strong> zamień(A[2], A[21]). Przed: A[2] = 20, A[21] = 8. Po:</p>\n<ul><li>A[2] = <strong>8</strong></li><li>A[21] = 20</li><li>w → 3</li></ul>\n<p><strong>Krok dla k = 31 (A[31] = 7 &lt; 10):</strong> zamień(A[3], A[31]). Przed: A[3] = 30, A[31] = 7. Po:</p>\n<ul><li>A[3] = <strong>7</strong></li><li>A[31] = 30</li><li>w → 4</li></ul>\n<p>Kolejne zamiany umieszczają 6, 5, 4, 3, 2, 1 na pozycjach A[4] A[9], a w rośnie do 10.</p>\n<p><strong>Po wszystkich 9 zamianach: w = 10.</strong></p>\n<h4>Sposób 3 - implementacja Python (weryfikacja)</h4>\n<p>```python</p>\n<h3>Konstrukcja tablicy A</h3>\n<p>A = []<br>for ostatnia_cyfra in [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]:<br>for tens in range(0, 10):<br>liczba = tens * 10 + ostatnia_cyfra<br>if liczba == 0:<br>liczba = 100 # przyjmujemy 100 w grupie &quot;kończą się na 0&quot;<br>A.append(liczba)</p>\n<h3>Sprawdźmy pierwszych 11 elementów</h3>\n<p>print(A[:11]) # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 9]</p>\n<h3>Wykonaj funkcję przestaw</h3>\n<p>klucz = A[0]<br>w = 0<br>for k in range(1, len(A)):<br>if A[k] &lt; klucz:<br>A[w], A[k] = A[k], A[w]<br>w += 1</p>\n<p>print(&quot;w =&quot;, w + 1) # w w pseudokodzie indeksowany od 1<br>print(&quot;A[1 3] =&quot;, A[0], A[1], A[2]) # 9 8 7</p>\n<p>Wynik:<br>w = 10<br>A[1 3] = 9 8 7</p>\n<h4>Reference informatyczny - partycja Lomuto na konkretnej tablicy</h4>\n<blockquote>Reference - Stan końcowy partycji <code>przestaw</code>:<br>- Po pętli <code>w - 1</code> to liczba elementów <code>A[2 n]</code> mniejszych od klucza.<br>- Zatem <strong>w = (liczba mniejszych) + 1</strong>.<br>- Tutaj: 9 mniejszych → <strong>w = 10</strong>.<br>- W lewej części A[1 w-1] = A[1 9] znajdują się wszystkie elementy &lt; klucza, w <strong>kolejności, w jakiej zostały napotkane</strong> podczas iteracji.<br>- Bo iterujemy k = 11, 21, 31, , 91 i wstawiamy 9, 8, 7, , 1 - <strong>kolejność: 9, 8, 7, 6, 5, 4, 3, 2, 1</strong>.</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 2.3, max 3 pkt):<br>- <strong>1 pkt</strong> za poprawną wartość w = 10<br>- <strong>2 pkt</strong> za poprawne wszystkie trzy A[1], A[2], A[3] (= 9, 8, 7)<br>- <strong>Uwaga: 2 z 3 wartości A[1] A[3] dają 1 pkt</strong><br>- <strong>0 pkt</strong> za odpowiedź błędną</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Pomylenie kolejności kończących się na cyfry</strong> - w pseudokodzie problemu cyfry są: 0, 9, 8, 7, (NIE rosnąco 1, 2, 3, ).</li><li><strong>Liczenie elementów ≤ 10</strong> zamiast &lt; 10 - to dałoby 10 elementów, ale klucz 10 nie jest &lt; 10, więc i tak 9.</li><li><strong>Założenie, że tablica jest pomieszana losowo</strong> - tu jest deterministyczna struktura ułożona w bloki.</li><li><strong>Pomyłka z wartościami zamienianymi</strong> - pierwsza zamiana to A[1]↔A[11], wstawiająca 9 na pozycję 1 (nie A[2]↔A[11]).</li><li><strong>Off-by-one w w</strong>: w startuje od 1; po każdej zamianie rośnie o 1. Po 9 zamianach w = 1 + 9 = 10.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Algorytm O(n) = O(100) operacji.</li><li>Liczba zamian: 9 (= liczba elementów &lt; klucza).</li></ul>"}]}