Ćwiczenie 0

a) Aby otrzymać kod ASCII danego znaku, należy zrzutować typ char na typ int – jeśli zastosuje się np. polecenie int('a'), program wypisze liczbę 97. Zmień parametry zapisu, aby otrzymać kody ASCII dla znaków c, d i y.

#include <iostream> using namespace std; int main() { cout << int ('a') << endl; cout << int ('b') << endl; cout << int ('z') << endl; return 0; }
99 100 121
Rozwiąż ćwiczenie

b) Odwrotnie, aby otrzymać znak odpowiadający danemu kodowi ASCII, należy rzutować na typ char – jeśli zastosuje się np. polecenie char(97), program wypisze literę a. Sprawdź, co otrzymasz po uruchomieniu poniższego skryptu.

#include <iostream> using namespace std; int main() { cout << char (97) << endl; cout << char (98) << endl; cout << char (122) << endl; return 0; }
Rozwiąż ćwiczenie

c) Aby wypisać kolejne znaki odpowiadające kodom ASCII, np. od 33 do 37, należy zastosować pętlę for. Zmień parametry pętli, aby otrzymać cały alfabet łaciński.

#include <iostream> using namespace std; int main() { for (int i = 33; i < 38; i++) cout << i << ": " << char (i) << endl; return 0; }
97: a 98: b 99: c 100: d 101: e 102: f 103: g 104: h 105: i 106: j 107: k 108: l 109: m 110: n 111: o 112: p 113: q 114: r 115: s 116: t 117: u 118: v 119: w 120: x 121: y 122: z
Rozwiąż ćwiczenie

Ćwiczenie 1Szyfrowanie znaku

Zdefiniuj funkcję szyfruj_znak(char znak, int klucz), której parametrami są – odpowiednio – dowolna mała litera alfabetu łacińskiego oraz liczba całkowita nieujemna mniejsza od 1000, a wynikiem jest litera zaszyfrowana danym kluczem. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji szyfruj_znak('a', 3), jest d.
  • Wynikiem funkcji szyfruj_znak('z', 7), jest g.
#include <iostream> using namespace std; // zdefiniuj funkcję char szyfruj_znak(char znak, int klucz) { } int main() { // sprawdź działanie funkcji return 0; }
Wynikiem szyfruj_znak('a', 26) jest a
return szyfruj_znak('a', 26) == 'a';
a
szyfruj_znak('a', 26)
Wynikiem szyfruj_znak('z', 13) jest m
return szyfruj_znak('z', 13) == 'm';
m
szyfruj_znak('z', 13)
Wynikiem szyfruj_znak('c', 520) jest c
return szyfruj_znak('c', 520) == 'c';
c
szyfruj_znak('c', 520)
Rozwiąż ćwiczenie

Ćwiczenie 2Szyfrowanie tekstu

Zdefiniuj funkcję szyfruj(string tekst, int klucz), której parametrami są – odpowiednio – ciąg małych liter alfabetu łacińskiego oraz liczba całkowita nieujemna mniejsza od 1000, a wynikiem jest tekst zaszyfrowany danym kluczem. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji szyfruj("kiedyspotkanie", 13), jest xvrqlfcbgxnavr.
  • Wynikiem funkcji szyfruj("tajne", 3), jest wdmqh.
#include <iostream> using namespace std; char szyfruj_znak(char znak, int klucz) { int litera_alfabetu = int(znak) - 97; int kod_nowej_litery = (litera_alfabetu + klucz) % 26; return char (kod_nowej_litery + 97); } // zdefiniuj funkcję string szyfruj(string tekst, int klucz) { } int main() { // sprawdź działanie funkcji return 0; }
Wynikiem funkcji szyfruj("innabajka", 13) jest ciąg znaków vaanonwxn
return szyfruj("innabajka", 13) == "vaanonwxn";
vaanonwxn
szyfruj("innabajka", 13)
Wynikiem funkcji szyfruj("celujdobrze", 520) jest ciąg znaków celujdobrze
return szyfruj("celujdobrze", 520) == "celujdobrze";
celujdobrze
szyfruj("celujdobrze", 520)
Wynikiem funkcji szyfruj("rakinieboraki", 99) jest ciąg znaków mvfdidzwjmvfd
return szyfruj("rakinieboraki", 99) == "mvfdidzwjmvfd";
mvfdidzwjmvfd
szyfruj("rakinieboraki", 99)
Rozwiąż ćwiczenie

Ćwiczenie 3Odszyfrowywanie tekstu

Wynikiem zdefiniowanej poniżej funkcji deszyfruj(string tekst, int klucz) powinien być od­szyfrowany tekst z danym kluczem, np.:

  • wynikiem funkcji deszyfruj("xvrqlfcbgxnavr", 13) jest ciąg znaków kiedyspotkanie,
  • wynikiem funkcji deszyfruj("wdmqh", 3) jest ciąg znaków tajne.

Przeanalizuj podane informacje i popraw błąd w skrypcie.

#include <iostream> using namespace std; char szyfruj_znak(char znak, int klucz) { int litera_alfabetu = int(znak) - 97; int kod_nowej_litery = (litera_alfabetu + klucz) % 26; return char (kod_nowej_litery + 97); } string szyfruj(string tekst, int klucz) { string pom = ""; for (int i = 0; i < tekst.size(); i++) { pom = pom + szyfruj_znak(tekst[i], klucz); } return pom; } string deszyfruj(string tekst, int klucz) { return szyfruj(tekst, 26 + klucz % 26); } int main() { cout << deszyfruj("xvrqlfcbgxnavr", 13) << endl; cout << deszyfruj("wdmqh", 3) << endl; return 0; }
Wynikiem funkcji deszyfruj("pwfaijeyw", 126) jest ciąg znaków tajemnica
return deszyfruj("pwfaijeyw", 126) == "tajemnica";
tajemnica
deszyfruj("pwfaijeyw", 126)
Wynikiem funkcji deszyfruj("vaanonwxn", 13) jest ciąg znaków innabajka
return deszyfruj("vaanonwxn", 13) == "innabajka";
innabajka
deszyfruj("vaanonwxn", 13)
Wynikiem funkcji deszyfruj("tuvuqu", 410) jest ciąg znaków zabawa
return deszyfruj("tuvuqu", 410) == "zabawa";
zabawa
deszyfruj("tuvuqu", 410)
Rozwiąż ćwiczenie

Ćwiczenie 4Inaczej na pozycjach nieparzystych i parzystych

Zdefiniuj funkcję szyfruj2(string tekst, int klucz1, int klucz2), której parametrami są – odpowiednio – ciąg małych liter alfabetu łacińskiego oraz dwie liczby całkowite, a wynikiem jest tekst zaszyfrowany w ten sposób, że litery na pozycjach parzystych zaszyfrowano kluczem klucz1, a na nieparzystych – kluczem klucz2. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji szyfruj2("poufnytekst", 3, 10) jest zreixbdhuvd.
  • Wynikiem funkcji szyfruj2("poczekajnamnie", 123, 5) jest uhhsjdfcstrgnx.
#include <iostream> using namespace std; // zdefiniuj funkcję char szyfruj_znak(char znak, int klucz) { int litera_alfabetu = int(znak) - 97; int kod_nowej_litery = (litera_alfabetu + klucz) % 26; return char (kod_nowej_litery + 97); } // zdefiniuj funkcję string szyfruj2(string tekst, int klucz1, int klucz2) { } int main() { // sprawdź działanie funkcji return 0; }
Wynikiem funkcji szyfruj2("innabajka", 13, 104) jest ciąg znaków iannbnjxa
return szyfruj2("innabajka", 13, 104)=="iannbnjxa";
iannbnjxa
szyfruj2("innabajka", 13, 104)
Wynikiem funkcji szyfruj2("celujtam", 520, 728) jest ciąg znaków celujtam
return szyfruj2("celujtam", 520, 728)=="celujtam";
celujtam
szyfruj2("celujtam", 520, 728)
Wynikiem funkcji szyfruj2("otokot", 410, 897) jest ciąg znaków bnbebn
return szyfruj2("otokot", 410, 897)=="bnbebn";
bnbebn
szyfruj2("otokot", 410, 897)
Rozwiąż ćwiczenie

Ćwiczenie dodatkowe 1

Pewien tekst zaszyfrowano szyfrem Cezara z kluczem o wartości 5. W wyniku tej operacji otrzymano szyfrogram: HEQTBNJP PYTWD LTSN IBF EFOFHJ SNJ EQFUNJ FSN OJISJLT. Odszyfruj ten tekst, wiedząc, że do szyfrowania użyto alfabetu łacińskiego bez polskich znaków.

Zadanie 1Jakim kluczem zaszyfrowano?

Zdefiniuj funkcję jaki(string tekst_jawny, string szyfrogram), której parametrami są ciągi małych liter alfabetu łacińskiego, a wynikiem jest klucz z przedziału [0, 25], pozwalający zaszyfrować tekst jawny za pomocą metody Ce­zara, lub wartość –1, gdy szyfrogram nie mógł powstać z tekstu jawnego w wyniku szyfrowania metodą Cezara. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji jaki("niespodzianka", "pkgurqfbkcpmc") jest 2.
  • Wynikiem funkcji jaki("zmiana", "anjbxb") jest -1.
#include <iostream> using namespace std; // zdefiniuj funkcję int jaki(string tekst_jawny, string szyfrogram) { } int main() { // sprawdź działanie funkcji return 0; }
Wynikiem funkcji jaki("innabajka", "vaanonwxn") jest 13
return jaki("innabajka", "vaanonwxn")==13;
13
jaki("innabajka", "vaanonwxn")
Wynikiem funkcji jaki("celujtam", "celujtas") jest -1
return jaki("celujtam", "celujtas")==-1;
-1
jaki("celujtam", "celujtas")
Wynikiem funkcji jaki("naratunek", "ylclefypv") jest 11
return jaki("naratunek", "ylclefypv")==11;
11
jaki("naratunek", "ylclefypv")
Rozwiąż ćwiczenie

Pytania quizoweSzyfrowanie i deszyfrowanie tekstu

Twój wynik to: /3
  • Jak nazywa się szyfr, w którym każdą literę tekstu jawnego zastępuje się inną?
  • Napis tajemnica zaszyfrowano szyfrem Cezara i otrzymano xeniqrmge. Jakiego klucza użyto?
  • Ile wynosi kod ASCII litery m, jeśli kod ASCII litery k wynosi 107?