Sprawdź się
Sentencja hic sunt dracones – oznacza tu są smoki. Ten łaciński tekst umieszczany był na mapach, by oznaczyć miejsca szczególnie niebezpieczne lub nieznane. Inną jego wersją była fraza hic sunt leones (tu mieszkają lwy).
Napisz program, który za pomocą algorytmu szyfru płotkowego poprawnie zaszyfruje zadany łańcuch znaków i wypisze wynik szyfrowania w konsoli. Uzupełnij kod źródłowy w miejscach oznaczonych komentarzami. Program przetestuj dla łańcucha znaków HIC SUNT DRACONES i klucza 6. Program ma uwzględniać w szyfrowaniu znaki odstępu.
Specyfikacja problemu:
Dane:
doZaszyfrowania
– łańcuch znaków; wiadomość do zaszyfrowaniaklucz
– liczba całkowita dodatnia; klucz szyfru
Wynik:
zaszyfrowane
– łańcuch znaków; szyfrogram – zaszyfrowany łańcuch znakówdoZaszyfrowania
Przykładowe rozwiązanie zadania:
public class SzyfrPlotkowy {
static String szyfrujPlotkowo(String ciag, int klucz) {
char[] zaszyfrowane = new char[ciag.length()];
int n = 0;
for(int z = 0; z < klucz; z++) {
int indeks = z;
boolean wDol = true;
while (indeks < ciag.length()) {
zaszyfrowane[n] = ciag.charAt(indeks);
n++;
if(z == 0 || z == klucz - 1) {
indeks = indeks + 2 * (klucz - 1);
}
else if(wDol) {
indeks = indeks + 2 * (klucz - z - 1);
wDol = !wDol;
}
else {
indeks = indeks + 2 * z;
wDol = !wDol;
}
}
}
return new String(zaszyfrowane);
}
public static void main(String []args){
String doZaszyfrowania = "HIC SUNT DRACONES";
System.out.print(szyfrujPlotkowo(doZaszyfrowania, 6));
}
}
Napisz program, który poprawnie odszyfruje zadany łańcuch znaków (zaszyfrowany za pomocą algorytmu szyfru płotkowego) i wypisze wynik w konsoli. Uzupełnij kod źródłowy w miejscach oznaczonych komentarzami. Program przetestuj dla szyfrogramu HS CSI UTDAOECNRN i klucza 3. Program ma uwzględniać w odszyfrowywaniu znaki odstępu.
Specyfikacja problemu:
Dane:
szyfrogram
– łańcuch znaków; wiadomość do odszyfrowaniaklucz
– liczba całkowita dodatnia; klucz szyfru
Wynik:
odszyfrowane
– łańcuch znaków; odszyfrowana treść wiadomości podanej jakoszyfrogram
Przykładowe rozwiązanie zadania:
public class SzyfrPlotkowy {
static String odszyfrujPlotkowo(String szyfrogram, int klucz) {
char[] odszyfrowane = new char[szyfrogram.length()];
char[][] plotek = new char[klucz][szyfrogram.length()];
int wiersz = 0;
boolean dol = false;
for(int kolumna = 0; kolumna < szyfrogram.length(); kolumna++){
plotek[wiersz][kolumna] = '*';
if(wiersz == klucz - 1){
dol = false;
} else if (wiersz == 0) {
dol = true;
}
if(dol){
wiersz = wiersz + 1;
} else {
wiersz = wiersz - 1;
}
}
int znak = 0;
for(int i = 0; i < klucz; i++){
for(int j = 0; j < szyfrogram.length(); j++){
if(plotek[i][j] == '*'){
plotek[i][j] = szyfrogram.charAt(znak);
znak = znak + 1;
}
}
}
wiersz = 0;
for(int kolumna = 0; kolumna < szyfrogram.length(); kolumna++){
odszyfrowane[kolumna] = plotek[wiersz][kolumna];
if(wiersz == klucz - 1){
dol = false;
} else if (wiersz == 0) {
dol = true;
}
if(dol){
wiersz = wiersz + 1;
} else {
wiersz = wiersz - 1;
}
}
return new String(odszyfrowane);
}
public static void main(String []args){
String szyfrogram = "HS CSI UTDAOECNRN";
System.out.print(odszyfrujPlotkowo(szyfrogram, 3));
}
}
Zmodyfikuj program szyfrujący łańcuch znaków szyfrem płotkowym tak, aby w przypadku podania jako parametr łańcucha znaków zawierającego spacje algorytm ignorował je przy szyfrowaniu za pomocą algorytmu szyfru płotkowego. Program przetestuj dla łańcucha znaków MATURA Z INFORMATYKI i klucza 4.
Specyfikacja problemu:
Dane:
doZaszyfrowania
– łańcuch znaków; wiadomość do zaszyfrowaniaklucz
– liczba całkowita dodatnia; klucz szyfru
Wynik:
zaszyfrowane
– łańcuch znaków, szyfrogram otrzymany przez zaszyfrowanie wiadomości zawartej wdoZaszyfrowania
Przykładowe rozwiązanie zadania:
public class SzyfrPlotkowy {
static String usunSpacje(String ciag) {
String bezSpacji = "";
for (int i = 0; i < ciag.length(); i++) {
if (ciag.charAt(i) != ' ') {
bezSpacji += ciag.charAt(i);
}
}
return bezSpacji;
}
static String szyfrujPlotkowo(String ciag, int klucz) {
ciag = usunSpacje(ciag);
char[] zaszyfrowane = new char[ciag.length()];
int n = 0;
for(int z = 0; z < klucz; z++) {
int indeks = z;
boolean wDol = true;
while (indeks < ciag.length()) {
zaszyfrowane[n] = ciag.charAt(indeks);
n++;
if(z == 0 || z == klucz - 1) {
indeks = indeks + 2 * (klucz - 1);
}
else if(wDol) {
indeks = indeks + 2 * (klucz - z - 1);
wDol = !wDol;
}
else {
indeks = indeks + 2 * z;
wDol = !wDol;
}
}
}
return new String(zaszyfrowane);
}
public static void main(String []args){
String doZaszyfrowania = "MATURA Z INFORMATYKI";
System.out.print(szyfrujPlotkowo(doZaszyfrowania, 4));
}
}
Napisz program, który poprawnie odszyfruje zadany szyfrogram (zaszyfrowany za pomocą algorytmu szyfru płotkowego) i wypisze wynik tej operacji w konsoli. Uzupełnij kod źródłowy w miejscach oznaczonych komentarzami. Program uruchom dla ciągu znaków Tpioornk payj wwetn sy i klucza 6. Program ma uwzględniać w szyfrowaniu znaki odstępu.
Specyfikacja problemu:
Dane:
doOdszyfrowania
– łańcuch znaków; zaszyfrowana wiadomość do odszyfrowaniaklucz
– liczba całkowita dodatnia; klucz szyfru
Wynik:
odszyfrowane
– łańcuch znaków; odszyfrowany łańcuch znakówdoOdszyfrowania
Przykładowe rozwiązanie zadania:
public class SzyfrPlotkowy {
static String odszyfrujPlotkowo(String szyfrogram, int klucz) {
char[] odszyfrowane = new char[szyfrogram.length()];
char[][] plotek = new char[klucz][szyfrogram.length()];
int wiersz = 0;
boolean dol = false;
for(int kolumna = 0; kolumna < szyfrogram.length(); kolumna++){
plotek[wiersz][kolumna] = '*';
if(wiersz == klucz - 1){
dol = false;
} else if (wiersz == 0) {
dol = true;
}
if(dol){
wiersz = wiersz + 1;
} else {
wiersz = wiersz - 1;
}
}
int znak = 0;
for(int i = 0; i < klucz; i++){
for(int j = 0; j<szyfrogram.length(); j++){
if(plotek[i][j] == '*'){
plotek[i][j] = szyfrogram.charAt(znak);
znak = znak + 1;
}
}
}
wiersz = 0;
for(int kolumna = 0; kolumna < szyfrogram.length(); kolumna++){
odszyfrowane[kolumna] = plotek[wiersz][kolumna];
if(wiersz == klucz - 1){
dol = false;
} else if (wiersz == 0) {
dol = true;
}
if(dol){
wiersz = wiersz + 1;
} else {
wiersz = wiersz - 1;
}
}
return new String(odszyfrowane);
}
public static void main(String []args){
String doOdszyfrowania = "Tpioornk payj wwetn sy";
int klucz = 6;
System.out.println(odszyfrujPlotkowo(doOdszyfrowania,klucz));
}
}