{"id":"informatyka-2010-maj-matura-rozszerzona/zad/1","paper_id":"informatyka-2010-maj-matura-rozszerzona","number":"1","points":null,"ptype":"open","subject":"informatyka","category":"matura","year":2010,"month":"maj","level":"rozszerzona","text":"Zadanie 1. Szyfr przestawieniowy (7 pkt)\nSzyfrowanie przestawieniowe jest klasyczną metodą szyfrowania polegającą na zmianie\nkolejności liter w szyfrowanym tekście. Często używa się reguł zamiany opartych na różnych\nfigurach geometrycznych - w tym zadaniu użyjemy kwadratu. Szyfrowanie będzie polegało\nna wprowadzeniu tekstu do kwadratowej tablicy szyfrującej o wymiarach n\nn\n× po kolei\nwierszami, a następnie odczytaniu tekstu z tablicy kolumnami od lewej do prawej. Wymiar n\ntablicy jest najmniejszą liczbą, przy której tekst zmieści się w całości w kwadracie n n\n× .\nW przypadku, gdy tekst jest krótszy i nie wypełnia wszystkich pól tablicy, puste pola\nuzupełnia się znakami odstępu. W tym zadaniu znaki odstępu będziemy oznaczać\nPrzykład:\nZałóżmy, że tekst ALGORYTM_PRZESTAWIENIOWY ma być zaszyfrowany w tablicy\nkwadratowej. Liczba znaków w tekście do zaszyfrowania jest równa 24, czyli tablica\nszyfrująca ma wymiary 5×5 . Ostatni element tablicy będzie uzupełniony znakiem odstępu.\nTekst zapisujemy do tablicy wierszami.\nA\nL\nG\nO\nR\nY\nT\nM\nP\nR\nZ\nE\nS\nT\nA\nW\nI\nE\nN\nI\nO\nW\nY\nNastępnie odczytujemy zaszyfrowany tekst kolumnami:\nAYRAILTZWOGMEIWO_SEYRPTN_\na) Podaj wzór na liczbę wierszy i kolumn tablicy kwadratowej używanej do szyfrowania\ntekstu o długości d znaków lub opisz algorytm wyznaczania tej liczby (w postaci listy\nkroków, schematu blokowego lub w wybranym języku programowania).\nkierunek odczytywania\nzaszyfrowanego tekstu\nkierunek wprowadzania\nszyfrowanego tekstu\nPoziom rozszerzony - część I\n3\nb) Do zaszyfrowania pewnego cytatu z Sokratesa użyto metody opisanej w podpunkcie a).\nRozszyfruj ten cytat. Poniższy szyfr składa się z 64 znaków.\nBTLLTU_ĘL_EOYPM_ĄPJZLCYNDREOKYLI_ZMFO_ĄGJY_Ó_N_DEWFWGISYSII_\nŁEI_\nc) Zapisz algorytm (w postaci listy kroków, schematu blokowego lub w wybranym języku\nprogramowania), który szyfruje zadany tekst sposobem opisanym w tym zadaniu i jest\nzgodny z poniższą specyfikacją.\nSpecyfikacja\nDane:\nd - dodatnia liczba całkowita, długość tekstu do zaszyfrowania\ntekst[1…d] - tablica zawierająca tekst do zaszyfrowania, gdzie tekst[i], to i-ty znak w tekście\ndo zaszyfrowania\nWynik:\ns - dodatnia liczba całkowita, długość tekstu po zaszyfrowaniu\nszyfr[1…s] - tablica zawierająca tekst po zaszyfrowaniu, gdzie szyfr[i], to i-ty znak w tekście\npo zaszyfrowaniu\nPoziom rozszerzony - część I\n4\nAlgorytm\nNr zadania\n1a)\n1b)\n1c)\nMaks. liczba pkt\n1\n1\n5\nWypełnia\negzaminator Uzyskana liczba pkt\nPoziom rozszerzony - część I\n5","answer":"1a) n=⌈√d⌉; 1b) BŁĄD JEST PRZYWILEJEM FILOZOFÓW TYLKO GŁUPCY NIE MYLĄ SIĘ NIGDY; 1c) patrz algorytm w answer_text","answer_text":null,"solution":"Oficjalna odpowiedź CKE (Klucz punktowania odpowiedzi, poziom rozszerzony, maj 2010):\n\nZadanie 1. Szyfr przestawieniowy (7 pkt) — a), b), c):\n\na) (1 pkt) Wzór na wymiar tablicy kwadratowej dla tekstu o długości d znaków:\nn = ⌈√d⌉ (najmniejsza liczba naturalna większa lub równa √d).\n\nb) (1 pkt) Rozszyfrowany cytat z Sokratesa:\nBŁĄD JEST PRZYWILEJEM FILOZOFÓW TYLKO GŁUPCY NIE MYLĄ SIĘ NIGDY\n\nc) (5 pkt) Przykładowy algorytm szyfrujący (Java), zgodny ze specyfikacją (dane: d, tekst[1..d]; wynik: s, szyfr[1..s]):\n\npublic char[] szyfruj(char[] tekst) {\nint d = tekst.length;\nint n = (int) Math.ceil(Math.sqrt(d));\nchar[][] tab = new char[n][n];\nint znak = 0;\nfor (int i = 0; i < tab.length; i++) {\nchar[] cs = tab[i];\nfor (int j = 0; j < cs.length; j++) {\nif (znak >= d) {\ncs[j] = ' ';\n} else {\ncs[j] = tekst[znak];\n}\nznak++;\n}\n}\nint s = n*n;\nchar szyfr[] = new char[s];\nznak = 0;\nfor (int i = 0; i < tab.length; i++) {\nchar[] cs = tab[i];\nfor (int j = 0; j < cs.length; j++) {\nszyfr[znak] = tab[j][i];\nznak++;\n}\n}\nreturn szyfr;\n}\n\nPunktacja za c): 5 pkt za w pełni poprawny algorytm (1 pkt za poprawne n, 1 pkt za poprawne s,\n2 pkt za poprawne indeksowanie przy szyfrowaniu, 1 pkt za uzupełnienie tekstu znakami odstępu do długości s).","image":"img/informatyka-2010-maj-matura-rozszerzona/zad-1.webp","solution_image":null,"topics":null,"page_from":2,"source":"ai","answer_source":"ai","answer_text_source":null,"solution_source":"ai","text_source":"ocr","source_label":"Informatyka · Matura · maj 2010 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 1. Szyfr przestawieniowy (7 pkt)<br>Szyfrowanie przestawieniowe jest klasyczną metodą szyfrowania polegającą na zmianie<br>kolejności liter w szyfrowanym tekście. Często używa się reguł zamiany opartych na różnych<br>figurach geometrycznych - w tym zadaniu użyjemy kwadratu. Szyfrowanie będzie polegało<br>na wprowadzeniu tekstu do kwadratowej tablicy szyfrującej o wymiarach n<br>n<br>× po kolei<br>wierszami, a następnie odczytaniu tekstu z tablicy kolumnami od lewej do prawej. Wymiar n<br>tablicy jest najmniejszą liczbą, przy której tekst zmieści się w całości w kwadracie n n<br>× .<br>W przypadku, gdy tekst jest krótszy i nie wypełnia wszystkich pól tablicy, puste pola<br>uzupełnia się znakami odstępu. W tym zadaniu znaki odstępu będziemy oznaczać<br>Przykład:<br>Załóżmy, że tekst ALGORYTM_PRZESTAWIENIOWY ma być zaszyfrowany w tablicy<br>kwadratowej. Liczba znaków w tekście do zaszyfrowania jest równa 24, czyli tablica<br>szyfrująca ma wymiary 5×5 . Ostatni element tablicy będzie uzupełniony znakiem odstępu.<br>Tekst zapisujemy do tablicy wierszami.<br>A<br>L<br>G<br>O<br>R<br>Y<br>T<br>M<br>P<br>R<br>Z<br>E<br>S<br>T<br>A<br>W<br>I<br>E<br>N<br>I<br>O<br>W<br>Y<br>Następnie odczytujemy zaszyfrowany tekst kolumnami:<br>AYRAILTZWOGMEIWO_SEYRPTN_<br>a) Podaj wzór na liczbę wierszy i kolumn tablicy kwadratowej używanej do szyfrowania<br>tekstu o długości d znaków lub opisz algorytm wyznaczania tej liczby (w postaci listy<br>kroków, schematu blokowego lub w wybranym języku programowania).<br>kierunek odczytywania<br>zaszyfrowanego tekstu<br>kierunek wprowadzania<br>szyfrowanego tekstu<br>Poziom rozszerzony - część I<br>3<br>b) Do zaszyfrowania pewnego cytatu z Sokratesa użyto metody opisanej w podpunkcie a).<br>Rozszyfruj ten cytat. Poniższy szyfr składa się z 64 znaków.<br>BTLLTU_ĘL_EOYPM_ĄPJZLCYNDREOKYLI_ZMFO_ĄGJY_Ó_N_DEWFWGISYSII_<br>ŁEI_<br>c) Zapisz algorytm (w postaci listy kroków, schematu blokowego lub w wybranym języku<br>programowania), który szyfruje zadany tekst sposobem opisanym w tym zadaniu i jest<br>zgodny z poniższą specyfikacją.<br>Specyfikacja<br>Dane:<br>d - dodatnia liczba całkowita, długość tekstu do zaszyfrowania<br>tekst[1…d] - tablica zawierająca tekst do zaszyfrowania, gdzie tekst[i], to i-ty znak w tekście<br>do zaszyfrowania<br>Wynik:<br>s - dodatnia liczba całkowita, długość tekstu po zaszyfrowaniu<br>szyfr[1…s] - tablica zawierająca tekst po zaszyfrowaniu, gdzie szyfr[i], to i-ty znak w tekście<br>po zaszyfrowaniu<br>Poziom rozszerzony - część I<br>4<br>Algorytm<br>Nr zadania<br>1a)<br>1b)<br>1c)<br>Maks. liczba pkt<br>1<br>1<br>5<br>Wypełnia<br>egzaminator Uzyskana liczba pkt<br>Poziom rozszerzony - część I<br>5</p>","solutions":[{"source":"ai","label":"AI","kind":"text","html":"<p>Oficjalna odpowiedź CKE (Klucz punktowania odpowiedzi, poziom rozszerzony, maj 2010):</p>\n<p>Zadanie 1. Szyfr przestawieniowy (7 pkt) — a), b), c):</p>\n<p>a) (1 pkt) Wzór na wymiar tablicy kwadratowej dla tekstu o długości d znaków:<br>n = ⌈√d⌉ (najmniejsza liczba naturalna większa lub równa √d).</p>\n<p>b) (1 pkt) Rozszyfrowany cytat z Sokratesa:<br>BŁĄD JEST PRZYWILEJEM FILOZOFÓW TYLKO GŁUPCY NIE MYLĄ SIĘ NIGDY</p>\n<p>c) (5 pkt) Przykładowy algorytm szyfrujący (Java), zgodny ze specyfikacją (dane: d, tekst[1..d]; wynik: s, szyfr[1..s]):</p>\n<p>public char[] szyfruj(char[] tekst) {<br>int d = tekst.length;<br>int n = (int) Math.ceil(Math.sqrt(d));<br>char[][] tab = new char[n][n];<br>int znak = 0;<br>for (int i = 0; i &lt; tab.length; i++) {<br>char[] cs = tab[i];<br>for (int j = 0; j &lt; cs.length; j++) {<br>if (znak &gt;= d) {<br>cs[j] = &#x27; &#x27;;<br>} else {<br>cs[j] = tekst[znak];<br>}<br>znak++;<br>}<br>}<br>int s = n*n;<br>char szyfr[] = new char[s];<br>znak = 0;<br>for (int i = 0; i &lt; tab.length; i++) {<br>char[] cs = tab[i];<br>for (int j = 0; j &lt; cs.length; j++) {<br>szyfr[znak] = tab[j][i];<br>znak++;<br>}<br>}<br>return szyfr;<br>}</p>\n<p>Punktacja za c): 5 pkt za w pełni poprawny algorytm (1 pkt za poprawne n, 1 pkt za poprawne s,<br>2 pkt za poprawne indeksowanie przy szyfrowaniu, 1 pkt za uzupełnienie tekstu znakami odstępu do długości s).</p>"}]}