{"id":"informatyka-2019-maj-matura-rozszerzona/zad/2.2","paper_id":"informatyka-2019-maj-matura-rozszerzona","number":"2.2","points":2,"ptype":"open","subject":"informatyka","category":"matura","year":2019,"month":"maj","level":"rozszerzona","text":"Zadanie 2.2. (0-2)\nUzupełnij poniższą tabelę - przeanalizuj podane w niej wywołania funkcji pisz. Podaj napisy\nwypisywane w wyniku wywołania funkcji pisz z zadanymi parametrami oraz łączną liczbę\nwywołań tej funkcji.\nPierwsze wywołanie\nfunkcji pisz\nNapisy wypisane w wyniku wywołania\nfunkcji pisz\nŁączna liczba\nwywołań funkcji\npisz\npisz(\"\", 3, 2)\npisz(\"\", 2, 3)","answer":null,"answer_text":"Zadanie 2.2. (0-2)\nWymagania ogólne\nWymagania szczegółowe\nIII. Rozwiązywanie problemów\ni podejmowanie decyzji […]\nz zastosowaniem podejścia algorytmicznego.\n5. Rozwiązywanie problemów\ni podejmowanie decyzji […], stosowanie\npodejścia algorytmicznego.\nZdający:\n5) posługuje się podstawowymi technikami\nalgorytmicznymi;\n9) stosuje rekurencję w prostych sytuacjach\nproblemowych;\n11) opisuje podstawowe algorytmy\ni stosuje:\na) algorytmy na tekstach, […]\n16) opisuje własności algorytmów na\npodstawie ich analizy;\n17) ocenia zgodność algorytmu ze\nspecyfikacją problemu;\n18) oblicza liczbę operacji wykonywanych\nprzez algorytm.\nSchemat punktowania\n2 p. - za poprawną odpowiedź, w tym:\n1 p. - za każde poprawnie uzupełnione dwa pola tabeli.\nUwaga: teksty wypisane przez funkcję mogą być zapisane w jednym wierszu lub jeden pod\ndrugim - nie zmienia to oceny.\n0 p. - za podanie odpowiedzi błędnej albo brak odpowiedzi.\nPoprawna odpowiedź\nwywołanie\nfunkcji\ntekst wypisany przez\nfunkcję pisz()\nliczba wywołań\nfunkcji pisz()\npisz(\"\", 3, 2)\n000\n001\n010\n011\n100\n101\n110\n111\n15 (1+2+4+8)\npisz(\"\", 2, 3)\n00\n01\n02\n10\n11\n12\n20\n21\n22\n13 (1+3+9)","solution":"## Poprawna odpowiedź\n\n| Wywołanie | Wypisane napisy | Łączna liczba wywołań |\n| pisz(\"\", 3, 2) | **000, 001, 010, 011, 100, 101, 110, 111** | **15** |\n| pisz(\"\", 2, 3) | **00, 01, 02, 10, 11, 12, 20, 21, 22** | **13** |\n\n## Sposób 1 - analiza pisz(\"\", 3, 2)\n\n**Co wypisze?** Funkcja generuje wszystkie napisy długości n=3 nad alfabetem {0, 1} (bo k=2). Liczba liści = 2³ = 8 napisów.\n\nW porządku pre-order (najpierw i=0, potem i=1):\n\"\" → \"0\" → \"00\" → \"000\" (wypisz)\n\"001\" (wypisz)\n\"01\" → \"010\" (wypisz)\n\"011\" (wypisz)\n\"1\" → \"10\" → \"100\" (wypisz)\n\"101\" (wypisz)\n\"11\" → \"110\" (wypisz)\n\"111\" (wypisz)\n\nWypisane: **000, 001, 010, 011, 100, 101, 110, 111** (binarne liczby 0-7).\n\n**Liczba wywołań - liczenie po poziomach:**\n- poziom 0 (\"\"): 1 wywołanie\n- poziom 1 (\"0\", \"1\"): 2 wywołania\n- poziom 2 (\"00\", \"01\", \"10\", \"11\"): 4 wywołania\n- poziom 3 (liście, 8 napisów): 8 wywołań\n\nSuma: **1 + 2 + 4 + 8 = 15** wywołań.\n\n## Sposób 2 - analiza pisz(\"\", 2, 3)\n\nFunkcja generuje wszystkie napisy długości n=2 nad alfabetem {0, 1, 2} (k=3). Liczba liści = 3² = 9.\n\nW porządku pre-order (i=0, potem 1, potem 2):\n\"\" → \"0\" → \"00\" (wypisz)\n\"01\" (wypisz)\n\"02\" (wypisz)\n\"1\" → \"10\" (wypisz)\n\"11\" (wypisz)\n\"12\" (wypisz)\n\"2\" → \"20\" (wypisz)\n\"21\" (wypisz)\n\"22\" (wypisz)\n\nWypisane: **00, 01, 02, 10, 11, 12, 20, 21, 22**.\n\n**Liczba wywołań po poziomach:**\n- poziom 0: 1 wywołanie\n- poziom 1: 3 wywołania (\"0\", \"1\", \"2\")\n- poziom 2 (liście): 9 wywołań\n\nSuma: **1 + 3 + 9 = 13**.\n\n## Sposób 3 - implementacja Python (weryfikacja)\n\n```python\ndef pisz(s, n, k, wynik, licznik):\nlicznik[0] += 1\nif len(s) == n:\nwynik.append(s)\nreturn\nfor i in range(k):\npisz(s + str(i), n, k, wynik, licznik)\n\nlicznik = [0]; wynik = []\npisz(\"\", 3, 2, wynik, licznik)\nprint(wynik)\n# ['000', '001', '010', '011', '100', '101', '110', '111']\nprint(\"liczba wywołań:\", licznik[0]) # 15\n\nlicznik = [0]; wynik = []\npisz(\"\", 2, 3, wynik, licznik)\nprint(wynik)\n# ['00', '01', '02', '10', '11', '12', '20', '21', '22']\nprint(\"liczba wywołań:\", licznik[0]) # 13\n\n## Reference informatyczny - wzór na liczbę wywołań\n\n> Reference - Sumowanie szeregu geometrycznego:\n> - Liczba wywołań pisz(\"\", n, k) = 1 + k + k² + + kⁿ.\n> - To suma szeregu geometrycznego: **(kⁿ⁺¹ - 1) / (k - 1)** dla k ≠ 1.\n> - Dla n=3, k=2: (2⁴ - 1)/(2 - 1) = 15 ✓.\n> - Dla n=2, k=3: (3³ - 1)/(3 - 1) = 26/2 = 13 ✓.\n> - Liczba liści (wypisanych napisów) = **kⁿ**.\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 2.2, max 2 pkt):\n> - **2 pkt** - wszystkie 4 pola tabeli poprawne\n> - **1 pkt** - za każde 2 poprawnie uzupełnione pola\n> - **0 pkt** - błędna lub brak\n>\n> Uwaga: teksty wypisane mogą być w jednym wierszu lub jeden pod drugim.\n\n## Typowe pułapki\n\n- **Pomylenie kolejności wypisywania** - pre-order daje wzrost \"leksykograficzny\": 000 < 001 < 010 < 011\n- **Liczenie tylko liści (8 lub 9) zamiast wszystkich wywołań** - wynikają z tego błędne 8 (zamiast 15) lub 9 (zamiast 13).\n- **Liczenie tylko węzłów wewnętrznych** - pomijanie liści.\n- **Pomylenie kolejności n i k**: pisz(\"\", 3, 2) ≠ pisz(\"\", 2, 3).\n- **Brak wypisania niektórych ścieżek** - łatwo zgubić jakąś gałąź.\n\n## Złożoność obliczeniowa\n\n- Czas: **O((kⁿ⁺¹ - 1)/(k - 1))** = **Θ(kⁿ)** dla k > 1.\n- Pamięć stosu: O(n).\n- Dla pisz(\"\", 3, 2): 15 wywołań, 8 wypisań.\n- Dla pisz(\"\", 2, 3): 13 wywołań, 9 wypisań.","image":"img/informatyka-2019-maj-matura-rozszerzona/zad-2.2.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 2019 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 2.2. (0-2)<br>Uzupełnij poniższą tabelę - przeanalizuj podane w niej wywołania funkcji pisz. Podaj napisy<br>wypisywane w wyniku wywołania funkcji pisz z zadanymi parametrami oraz łączną liczbę<br>wywołań tej funkcji.<br>Pierwsze wywołanie<br>funkcji pisz<br>Napisy wypisane w wyniku wywołania<br>funkcji pisz<br>Łączna liczba<br>wywołań funkcji<br>pisz<br>pisz(&quot;&quot;, 3, 2)<br>pisz(&quot;&quot;, 2, 3)</p>","answer_text_html":"<p>Zadanie 2.2. (0-2)<br>Wymagania ogólne<br>Wymagania szczegółowe<br>III. Rozwiązywanie problemów<br>i podejmowanie decyzji […]<br>z zastosowaniem podejścia algorytmicznego.</p>\n<ol><li>Rozwiązywanie problemów</li></ol>\n<p>i podejmowanie decyzji […], stosowanie<br>podejścia algorytmicznego.<br>Zdający:</p>\n<ol><li>posługuje się podstawowymi technikami</li></ol>\n<p>algorytmicznymi;</p>\n<ol><li>stosuje rekurencję w prostych sytuacjach</li></ol>\n<p>problemowych;</p>\n<ol><li>opisuje podstawowe algorytmy</li></ol>\n<p>i stosuje:<br>a) algorytmy na tekstach, […]</p>\n<ol><li>opisuje własności algorytmów na</li></ol>\n<p>podstawie ich analizy;</p>\n<ol><li>ocenia zgodność algorytmu ze</li></ol>\n<p>specyfikacją problemu;</p>\n<ol><li>oblicza liczbę operacji wykonywanych</li></ol>\n<p>przez algorytm.<br>Schemat punktowania<br>2 p. - za poprawną odpowiedź, w tym:<br>1 p. - za każde poprawnie uzupełnione dwa pola tabeli.<br>Uwaga: teksty wypisane przez funkcję mogą być zapisane w jednym wierszu lub jeden pod<br>drugim - nie zmienia to oceny.<br>0 p. - za podanie odpowiedzi błędnej albo brak odpowiedzi.<br>Poprawna odpowiedź<br>wywołanie<br>funkcji<br>tekst wypisany przez<br>funkcję pisz()<br>liczba wywołań<br>funkcji pisz()<br>pisz(&quot;&quot;, 3, 2)<br>000<br>001<br>010<br>011<br>100<br>101<br>110<br>111<br>15 (1+2+4+8)<br>pisz(&quot;&quot;, 2, 3)<br>00<br>01<br>02<br>10<br>11<br>12<br>20<br>21<br>22<br>13 (1+3+9)</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p>| Wywołanie | Wypisane napisy | Łączna liczba wywołań |<br>| pisz(&quot;&quot;, 3, 2) | <strong>000, 001, 010, 011, 100, 101, 110, 111</strong> | <strong>15</strong> |<br>| pisz(&quot;&quot;, 2, 3) | <strong>00, 01, 02, 10, 11, 12, 20, 21, 22</strong> | <strong>13</strong> |</p>\n<h4>Sposób 1 - analiza pisz(&quot;&quot;, 3, 2)</h4>\n<p><strong>Co wypisze?</strong> Funkcja generuje wszystkie napisy długości n=3 nad alfabetem {0, 1} (bo k=2). Liczba liści = 2³ = 8 napisów.</p>\n<p>W porządku pre-order (najpierw i=0, potem i=1):<br>&quot;&quot; → &quot;0&quot; → &quot;00&quot; → &quot;000&quot; (wypisz)<br>&quot;001&quot; (wypisz)<br>&quot;01&quot; → &quot;010&quot; (wypisz)<br>&quot;011&quot; (wypisz)<br>&quot;1&quot; → &quot;10&quot; → &quot;100&quot; (wypisz)<br>&quot;101&quot; (wypisz)<br>&quot;11&quot; → &quot;110&quot; (wypisz)<br>&quot;111&quot; (wypisz)</p>\n<p>Wypisane: <strong>000, 001, 010, 011, 100, 101, 110, 111</strong> (binarne liczby 0-7).</p>\n<p><strong>Liczba wywołań - liczenie po poziomach:</strong></p>\n<ul><li>poziom 0 (&quot;&quot;): 1 wywołanie</li><li>poziom 1 (&quot;0&quot;, &quot;1&quot;): 2 wywołania</li><li>poziom 2 (&quot;00&quot;, &quot;01&quot;, &quot;10&quot;, &quot;11&quot;): 4 wywołania</li><li>poziom 3 (liście, 8 napisów): 8 wywołań</li></ul>\n<p>Suma: <strong>1 + 2 + 4 + 8 = 15</strong> wywołań.</p>\n<h4>Sposób 2 - analiza pisz(&quot;&quot;, 2, 3)</h4>\n<p>Funkcja generuje wszystkie napisy długości n=2 nad alfabetem {0, 1, 2} (k=3). Liczba liści = 3² = 9.</p>\n<p>W porządku pre-order (i=0, potem 1, potem 2):<br>&quot;&quot; → &quot;0&quot; → &quot;00&quot; (wypisz)<br>&quot;01&quot; (wypisz)<br>&quot;02&quot; (wypisz)<br>&quot;1&quot; → &quot;10&quot; (wypisz)<br>&quot;11&quot; (wypisz)<br>&quot;12&quot; (wypisz)<br>&quot;2&quot; → &quot;20&quot; (wypisz)<br>&quot;21&quot; (wypisz)<br>&quot;22&quot; (wypisz)</p>\n<p>Wypisane: <strong>00, 01, 02, 10, 11, 12, 20, 21, 22</strong>.</p>\n<p><strong>Liczba wywołań po poziomach:</strong></p>\n<ul><li>poziom 0: 1 wywołanie</li><li>poziom 1: 3 wywołania (&quot;0&quot;, &quot;1&quot;, &quot;2&quot;)</li><li>poziom 2 (liście): 9 wywołań</li></ul>\n<p>Suma: <strong>1 + 3 + 9 = 13</strong>.</p>\n<h4>Sposób 3 - implementacja Python (weryfikacja)</h4>\n<p>```python<br>def pisz(s, n, k, wynik, licznik):<br>licznik[0] += 1<br>if len(s) == n:<br>wynik.append(s)<br>return<br>for i in range(k):<br>pisz(s + str(i), n, k, wynik, licznik)</p>\n<p>licznik = [0]; wynik = []<br>pisz(&quot;&quot;, 3, 2, wynik, licznik)<br>print(wynik)</p>\n<h3>[&#x27;000&#x27;, &#x27;001&#x27;, &#x27;010&#x27;, &#x27;011&#x27;, &#x27;100&#x27;, &#x27;101&#x27;, &#x27;110&#x27;, &#x27;111&#x27;]</h3>\n<p>print(&quot;liczba wywołań:&quot;, licznik[0]) # 15</p>\n<p>licznik = [0]; wynik = []<br>pisz(&quot;&quot;, 2, 3, wynik, licznik)<br>print(wynik)</p>\n<h3>[&#x27;00&#x27;, &#x27;01&#x27;, &#x27;02&#x27;, &#x27;10&#x27;, &#x27;11&#x27;, &#x27;12&#x27;, &#x27;20&#x27;, &#x27;21&#x27;, &#x27;22&#x27;]</h3>\n<p>print(&quot;liczba wywołań:&quot;, licznik[0]) # 13</p>\n<h4>Reference informatyczny - wzór na liczbę wywołań</h4>\n<blockquote>Reference - Sumowanie szeregu geometrycznego:<br>- Liczba wywołań pisz(&quot;&quot;, n, k) = 1 + k + k² + + kⁿ.<br>- To suma szeregu geometrycznego: <strong>(kⁿ⁺¹ - 1) / (k - 1)</strong> dla k ≠ 1.<br>- Dla n=3, k=2: (2⁴ - 1)/(2 - 1) = 15 ✓.<br>- Dla n=2, k=3: (3³ - 1)/(3 - 1) = 26/2 = 13 ✓.<br>- Liczba liści (wypisanych napisów) = <strong>kⁿ</strong>.</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 2.2, max 2 pkt):<br>- <strong>2 pkt</strong> - wszystkie 4 pola tabeli poprawne<br>- <strong>1 pkt</strong> - za każde 2 poprawnie uzupełnione pola<br>- <strong>0 pkt</strong> - błędna lub brak<br><br>Uwaga: teksty wypisane mogą być w jednym wierszu lub jeden pod drugim.</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Pomylenie kolejności wypisywania</strong> - pre-order daje wzrost &quot;leksykograficzny&quot;: 000 &lt; 001 &lt; 010 &lt; 011</li><li><strong>Liczenie tylko liści (8 lub 9) zamiast wszystkich wywołań</strong> - wynikają z tego błędne 8 (zamiast 15) lub 9 (zamiast 13).</li><li><strong>Liczenie tylko węzłów wewnętrznych</strong> - pomijanie liści.</li><li><strong>Pomylenie kolejności n i k</strong>: pisz(&quot;&quot;, 3, 2) ≠ pisz(&quot;&quot;, 2, 3).</li><li><strong>Brak wypisania niektórych ścieżek</strong> - łatwo zgubić jakąś gałąź.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Czas: <strong>O((kⁿ⁺¹ - 1)/(k - 1))</strong> = <strong>Θ(kⁿ)</strong> dla k &gt; 1.</li><li>Pamięć stosu: O(n).</li><li>Dla pisz(&quot;&quot;, 3, 2): 15 wywołań, 8 wypisań.</li><li>Dla pisz(&quot;&quot;, 2, 3): 13 wywołań, 9 wypisań.</li></ul>"}]}