Przeczytaj
Zadania przedstawione w tej sekcji zostały opracowane przez Centralną Komisję Egzaminacyjną i pojawiły się na egzaminie maturalnym z informatyki w maju 2016 roku (cz. 2). Cały arkusz można znaleźć na stronie internetowej CKE.
Zadanie 1. Szyfr Cezara
Podstawieniowy szyfr Cezara z przesunięciem (kluczemkluczem) k polega na zastąpieniu każdego znaku jawnego znakiem leżącym w alfabecie o k pozycji w prawo od zastępowanego znaku. Przykład: znak „B” po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem „E”.

Przy szyfrowaniu znaku należy postępować w sposób cykliczny, to znaczy, jeżeli znak nie posiada w alfabecie następnika przesuniętego o k pozycji, to alfabet „zawija się” i za literą „Z” następuje znów litera „A”.
Przykład: jawny znak „X” po zakodowaniu kluczem k = 3 zastąpiony zostanie znakiem „A”, znak „Y” – znakiem „B”, natomiast „Z” – znakiem „C”.

W tym zadaniu rozpatrujemy tylko słowa zbudowane z wielkich liter alfabetu angielskiego (o kodach ASCII odpowiednio od 65 do 90), o długościach nie większych niż 30 znaków.
Zadanie 1.1
W pliku dane_1.txt
znajduje się 100 słów. Słowa umieszczono w osobnych wierszach.
Napisz program, który zaszyfruje słowa z pliku z użyciem klucza k = 107. Wyniki zapisz do pliku wyniki_1.txt
, każde słowo w osobnym wierszu, w porządku odpowiadającym kolejności słów z pliku z danymi.
Fragment pliku z danymi:
INTERPRETOWANIE
ROZWESELANIE
KONSERWOWANIE
Poprawny wynik dla podanego fragmentu pliku:
LQWHUSUHWRZDQLH
URCZHVHODQLH
NRQVHUZRZDQLH
Do oceny oddajesz:
plik
wyniki_1.txt
zawierający odpowiedź (zaszyfrowane słowa, zapisane w osobnych liniach),plik(i) z komputerową realizacją zadania (kodem programu).
W załączonym pliku dane_1.txt
znajdują się dane wejściowe. Każde słowo (łańcuch znakówłańcuch znaków) do zaszyfrowania znajduje się w oddzielnej linijce.
dane_1.txt
.Rozwiąż zadanie dla danych wejściowych zapisanych w pliku dane_1.txt
. Wykorzystaj w tym celu jeden z języków programowania: C++, Java lub Python. Zadbaj o prawidłowe wczytanie danych z pliku tekstowego do programu. Odpowiedź do zadania znajdziesz w osobnym pliku, umieszczonym po omówieniu pseudokodu.
Przykładowe rozwiązanie
W prezentowanych rozwiązaniach obu zadań omówionych w tej sekcji zastosowane zostaną dwie funkcje pomocnicze:
funkcja
kod(znak)
zwracająca kod ASCII podanego znaku (liczbę całkowitą)
funkcja
znak(kod)
zwracająca znak o podanym kodzie ASCII (typ znakowy)
Na początku ustalamy, o ile znaków będziemy przesuwać litery tekstu jawnego. W tym celu obliczamy resztę z dzielenia klucza przez wartość 26 (czyli liczbę liter w alfabecie łacińskim). Wczytujemy również dane z pliku.
Następnie iterujemy przy użyciu pętli po wszystkich wczytanych wyrazach. Każdy przetwarzany wyraz jest zapisywany do nowo tworzonej zmiennej slowo
.
Aby zaszyfrować słowo, potrzebujemy dostępu do jego poszczególnych liter. Uzyskujemy go za pomocą pętli przechodzącej po znakach składających się na dane słowo.
Do każdego znaku tekstu jawnego dodajemy wartość klucza, co skutkuje przesunięciem o k
liter w prawo. Jeżeli wartość znajdująca się w slowo[j]
będzie większa od wartości kodu ASCII dla litery Z, zostanie od niej odjęta liczba 26.
Po zakończeniu pętli wewnętrznej każdorazowo zapisujemy zaszyfrowane słowo do pliku wynikowego.
Odpowiedź dla danych zapisanych w pliku dane_1.txt
:
Schemat punktowania
3 pkt. – za poprawny plik wynikowy,
2 pkt. – za pominięcie ostatniego wiersza,
1 pkt. – za plik z błędnym wykonaniem zawinięcia cyklicznego albo bez zawijania,
0 pkt. – za odpowiedź błędną albo brak odpowiedzi.
Schemat punktowania został opracowany przez Centralną Komisję Egzaminacyjną. Cały arkusz oraz schematy punktowania można znaleźć na stronie internetowej CKE.
Zadanie 1.2
W pliku dane_2.txt
zapisano 3000 szyfrogramówszyfrogramów i odpowiadające im klucze szyfrujące. W każdym wierszu znajduje się jeden szyfrogram i po pojedynczym znaku odstępu odpowiadający mu klucz (maksymalnie czterocyfrowa liczba).
Napisz program, który odszyfruje słowa zaszyfrowane podanymi kluczami. Wynik zapisz w pliku wyniki_2.txt
– każde słowo w osobnym wierszu, w porządku odpowiadającym kolejności szyfrogramów z pliku z danymi.
Przykładowe dane z pliku:
BCYKUNCM 1718
YFOGNSKGYW 7580
WARDA 9334
Poprawny wynik dla podanego fragmentu pliku:
ZAWISLAK
KRASZEWSKI
WARDA
Do oceny oddajesz:
plik
wyniki_2.txt
zawierający odpowiedź (odszyfrowane słowa, zapisane w osobnych liniach),plik(i) z komputerową realizacją zadania (kodem programu).
W pliku dane_2.txt
znajdują się dane: każda para szyfrogram‑klucz zapisana jest w nowej linii.
Plik dane_2.txt
jest zmodyfikowanym plikiem udostępnionym przez CKE na potrzeby egzaminu maturalnego. Modyfikacje polegają na uzupełnieniu brakujących kluczy w oficjalnym pliku.
dane_2.txt
.Rozwiąż zadanie dla danych wejściowych zapisanych w pliku dane_2.txt
. Wykorzystaj w tym celu jeden z języków programowania: C++, Java lub Python. Zadbaj o prawidłowe wczytanie danych z pliku tekstowego do programu. Odpowiedź do zadania znajdziesz w osobnym pliku, umieszczonym po omówieniu pseudokodu.
Przykładowe rozwiązanie
Na początku zapisujemy do zmiennych liczbę szyfrogramów do odczytania oraz tworzymy tablicę, w której zapiszemy dane z pliku (szyfrogram i klucz).
Mamy odszyfrować każdy szyfrogram za pomocą przypisanego mu klucza. Tworzymy pętlę, która będzie iterowała po odczytanych szyfrogramach.
Szyfrogram oraz klucz zapisujemy w nowych zmiennych. Następnie wykonujemy działania odwrotne niż w przypadku szyfrowania. Od każdej wartości znaku słowa odejmujemy wartość klucza. Spowoduje to przesunięcie o k
liter w lewo.
Jeżeli wartość litery w kodowaniu ASCII zawartej w slowo[j]
będzie mniejsza od wartości litery A, należy dodać do niej wartość 26.
Po zakończeniu pętli wewnętrznej za każdym razem zapisujemy odszyfrowane słowo do pliku wynikowego.
Odpowiedź dla danych z pliku dane_2.txt
:
Schemat punktowania
4 pkt. – za poprawny plik wynikowy.
2 pkt. – za błędne dekodowanie jednej z liter alfabetu lub błędne rozwiązanie wynikające z błędu zawijania lub za błędne rozwiązanie wynikające z przyjęcia błędnej długości alfabetu (25).
0 pkt. – za odpowiedź błędną albo za brak odpowiedzi.
Uwaga: Nie przyznaje się 3 p i 1 p.
Słownik
informacja, która jest wykorzystywana do szyfrowania i/lub deszyfrowania wiadomości
(ang. string) tekstowy typ danych, który służy do przechowywania ciągu znaków
zaszyfrowana wiadomość, inaczej kryptogram