![]() |
Autor artykułu: mgr Jerzy Wałaszek, wersja1.0 |
©2010 mgr
Jerzy Wałaszek
|
Z podanych rozwiązań należy korzystać dopiero po samodzielnym rozwiązaniu danego zadania w celu sprawdzenia poprawności wyniku. Rozwiązania nie są optymalne (nie zostały sprawdzone z kluczem odpowiedzi, ponieważ na dzień dzisiejszy klucz ten nie został jeszcze opublikowany w Internecie). Nie są również jedyne - zadania można rozwiązać w inny, alternatywny sposób.
Poniższy algorytm szyfruje słowo s przy pomocy pewnego szyfru przestawieniowego.
Zaszyfrowane słowo zostaje zapisane w zmiennej w.
Algorytm
1. i ← 1, w ← '', k ← 2
2. dopóki i <= k wykonuj
j ← i
dopóki j <= długość(s) wykonuj:
w ← w • s[j]
j ← j + k
i ← i + 1
Objaśnienia:
'' oznacza słowo puste, s[j] oznacza j-ty znak w słowie s (numeracja rozpoczyna się od 1)
• oznacza sklejenie dwóch słów (ewentualnie sklejenie słowa i znaku)
← oznacza instrukcję przypisania.
Szybka analiza powyższego algorytmu daje odpowiedź, że tekst jest szyfrowany poprzez wybieranie z niego znaków, które w pierwszym obiegu pętli z kroku 2 leżą na pozycjach nieparzystych: 1, 3, 5, ..., a następnie w kolejnym obiegu tej pętli wybierane są znaki leżące na pozycjach parzystych: 2, 4, 6, ...
Zapisz wynik działania powyższego algorytmu dla słów ARKA
i
MOTOR.
ARKA →
AKRA
MOTOR
→ MTROO
Kluczem szyfrującym nazywamy pewną wartość, która jest
wymagana przy szyfrowaniu i deszyfrowaniu, a jej zmiana może dać inny wynik
szyfrowania tego samego słowa. Która ze zmiennych i, j, k służy do
przechowywania klucza w podanym algorytmie?
Jedynie k może być kluczem - definiuje odstęp pomiędzy
wybieranymi kolejno znakami ze szyfrowanego tekstu. Pozostałe zmienne i
oraz j służą do przenoszenia znaków z tekstu do szyfru i ich
wartości są uzależnione od k.
Zapisz algorytm (w postaci listy kroków, schematu blokowego lub w wybranym języku programowania), realizujący następującą metodę szyfrowania: słowo dzielimy na grupy po dwa znaki i w każdej parze zamieniamy znaki miejscami. Jeśli słowo ma nieparzystą długość, ostatni znak pozostaje niezmieniony. Wynik zaszyfrowania danego słowa s zapisz w zmiennej w
Przykłady:
MOTOR → MO TO R → OM OT R → OMOTR
MATURA →MA TU RA → AM UT AR → AMUTAR
Specyfikacja:
Dane:
s - łańcuch znaków, który przechowuje szyfrowane słowo,
pierwszy znak ma indeks 1.
Wyniki:
w - łańcuch znaków, który zawiera zaszyfrowane słowo s,
pierwszy znak ma indeks 1.
Zmienne pomocnicze:
i - indeks znaków
x - zmienna pomocnicza do wymiany znaków
(dla wersji II)
Objaśnienia:
s[j] oznacza j-ty znak w słowie s
(numeracja rozpoczyna się od 1)
• oznacza sklejenie dwóch słów (ewentualnie sklejenie
słowa i znaku)
← oznacza instrukcję przypisania
mod - operacja modulo
| Lista kroków - wersja I:
krok 1: w ← '' |
Lista kroków - wersja II:
krok 1: w ← s |
| Schemat blokowy -
wersja I:
|
Schemat blokowy -
wersja II:
|
Program C++:
// Zadanie 1c - szyfrowanie
// Wersja I
//-------------------------
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s,w;
int i;
getline(cin,s);
w = "";
for(i = 0; i < s.length(); i++)
if(i % 2) w = w + s[i] + s[i-1];
if(w.length() < s.length()) w = w + s[i-1];
cout << w << endl;
return 0;
}
|
// Zadanie 1c - szyfrowanie
// Wersja II
//-------------------------
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s,w;
int i;
char x;
getline(cin,s);
w = s;
for(i = 0; i < s.length(); i++)
if(i % 2)
{
x = w[i];
w[i] = w[i-1];
w[i-1] = x;
}
cout << w << endl;
return 0;
}
|
Program Pascal:
{ Zadanie 1c - szyfrowanie
Wersja I
------------------------}
program szyfr;
var
s,w : string;
i : integer;
begin
readln(s);
w := '';
for i := 1 to length(s) do
if i mod 2 = 0 then w := w + s[i] + s[i-1];
if length(w) < length(s) then w := w + s[length(s)];
writeln(w);
end.
|
{ Zadanie 1c - szyfrowanie
Wersja II
------------------------}
program szyfr;
var
s,w : string;
i : integer;
x : char;
begin
readln(s);
w := s;
for i := 1 to length(s) do
if i mod 2 = 0 then
begin
x := w[i];
w[i] := w[i-1];
w[i-1] := x;
end;
writeln(w);
end.
|
![]() | I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe