Matura 2017 (maj). Zadanie 1. Szyfrowanie
Dany jest algorytm szyfrujący tekst jawny s o następującej specyfikacji:
Dane:
d – długość tekstu do zaszyfrowania, d > 1
s[1..d] – tekst jawny, ciąg znaków o długości d
k – liczba całkowita dodatnia taka, że k < d
n – liczba całkowita dodatnia taka, że n < d
Wynik:
szyfr [1..d] – zaszyfrowany tekst s
Algorytm:
od j=1 do d szyfr[j] ← s[j] i ← 1 dopóki i ≤ d – k szyfr[i] ↔ szyfr[i+k] i ← i+n
Operacja szyfr[a] ↔ szyfr[b] oznacza zamianę w ciągu szyfr znaku z pozycji a na znak z pozycji b – i na odwrót.
Zadanie 1.
Uzupełnij tabelę – wpisz zaszyfrowany tekst, który otrzymasz w wyniku wykonania algorytmu.
s | d | k | n | szyfr |
ataknadranem | 12 | 4 | 2 | ntdkaaeranam |
maturazinformatyki | 18 | 3 | 5 | uatmrnziafarmotyki |
stokrotka | 9 | 1 | 2 | tskoorkta |
Rozwiązanie:
Kod w języku programowania c++:
#include <iostream> #include <string.h> using namespace std; int main() { char tekst[]="stokrotka"; int d=strlen(tekst); cout << d << endl; char szyfr[d]; int k=1, n=2; cout << "Tekst jawny: " << tekst << endl; for (int j=0; j<d; j++) szyfr[j]=tekst[j]; int i=0; while(i<=d-k-1){ swap(szyfr[i],szyfr[i+k]); i+=n; } cout << "Tekst szyfowany: " ; for (int j=0; j<d; j++) cout << szyfr[j]; return 0; }
Zadanie 2.
W kolumnie szyfr zapisano zaszyfrowany tekst s. Odszyfruj tekst i zapisz go w kolumnie s.
szyfr | d | k | n | s |
eiindaezotinwezssyktpo | 22 | 2 | 2 | pieniadzetoniewszystko |
Algorytm:
od j=1 do d szyfr[j] ← s[j] i ← d-n dopóki i > 0 szyfr[i] ↔ szyfr[i-k] i ← i-n
Kod w języku programowania c++:
#include <iostream> #include <string.h> using namespace std; int main() { char tekst[]="eiindaezotinwezssyktpo"; int d=strlen(tekst); cout << d << endl; char szyfr[d]; int k=2, n=2; cout << "Tekst szyfowany: " << tekst << endl; for (int j=0; j<d; j++) szyfr[j]=tekst[j]; int i=d-n; while(i>0){ swap(szyfr[i],szyfr[i-k]); i-=n; } cout << "Tekst jawny: " ; for (int j=0; j<d; j++) cout << szyfr[j]; return 0; }
Zadanie 3.
Uzupełnij zapis algorytmu tak, aby w wyniku jego działania otrzymać odszyfrowany tekst s.
Uwaga: W zapisie możesz wykorzystać operacje dodawania, odejmowania, mnożenia, dzielenia, dzielenia całkowitego i brania reszty z dzielenia całkowitego, operację zamiany dwóch znaków ↔ oraz samodzielnie napisane funkcje.
Specyfikacja:
Dane:
d – długość zaszyfrowanego tekstu, d > 1
szyfr [1..d] – zaszyfrowany tekst o długości d
k – liczba całkowita dodatnia taka, że k < d
n – liczba całkowita dodatnia taka, że n < d
Wynik:
s [1..d] – tekst jawny
Algorytm:
od j=1 do d s[j] ← szyfr[j] i ← 1 dopóki i <= d-n-k i ← i+n dopóki i >= 1 s[i] ↔ s[i+k] i ← i-n