PDA

Zobacz pełną wersję : Szyfr płotkowy w Pascalu...



Kasieńka89
08-08-07, 20:59
Hej, sluchajcie mam następujący problem.. Niestety czeka mnie komis z tech. inf. Musze umieć zaszyfrować dane w turbo Pascalu metodą płotkową. No i niby wszystko ok bo program mi wychodzi, ale jest on zrobiony tylko na 2 warstwy płotu. Gdy będzie zadanie by zrobić ich więcej to jak to się robi??
Program wygląda tak:

program plotek;
uses crt;
type tab1= array[1..34]of char;
var
t1,t: tab1;
r,l,i,j,k: integer;
slowo: string;

begin
clrscr;
write('wpisz słowo do zaszyfrowania: ');
readln(slowo);

l:= length(slowo);
r:= round(l/2);
k:= trunc(l/2);

for i:=1 to r do
t[i]:= slowo [(2*i)-1);
for j:=1 to r do
t1[j]:= slowo [2*j];
writeln;
write('słowo zaszyfrowane: ');
for i:=1 to r do
write (t[i],' ' );

for i:=1 to k do
write(t1[i],' ' );
readln;
end.

Jest tu ktoś kto mógłby pomóc? :(

Meusz
08-08-07, 23:56
r:= round(1/2);
k:= trunc(1/2);
Nie rozumiem tego kodu, Czy nie byłoby prościej napisać

r:= 2;
k:= 1;
Czy moĹźe "1/2" nie jest oznacza tu "1 dzielone przez 2"?

doderic
09-08-07, 10:28
Ten kawałek powinien tak na prawdę wyglądać tak:

l:= length(slowo);
r:= round(l/2);
k:= trunc(l/2);

(mała lierka 'l' zamiast cyfry '1')

Aby napisać kod, który będzie szyfrował z większą ilością poziomów, trzeba przeanalizować działanie szyfru. Wykorzystując przykład z Wikipedii*:
szyfrujemy:

WIKIPEDIA_TEKSTEM_JAWNYM
dla n=3:


1: W P A K M W
2: I I E I _ E S E _ A N M
3: K D T T J Y
użyjmy literek:
n - ile poziomów chcesz użyć
p - aktualnie szyfrowany poziom
k - kierunek ruchu: 1 - w dół, -1 - w górę)

Można napisać program, który będzie chodził "wężykiem", w górę i w dół, i zapisywał do outputa po kolei W, I, K, I, P, ... na odpowiednie poziomy.


var output : array of string;
...
n:=3;
k:=1;
p:=0
for i:=1 to length(slowo) do
begin
p:=p+k;
output[p]:=output[p] + slowo[i];
if (p=n) then k:=-1; {doszlismy na dol}
if (p=1) then k:=1; {wrocilismy na gore}
end;

{wypisywanie}
for i:=1 to n do
write(output[i]);

Jak zwykle kod napisałem, na sucho, bez uruchamiania, więc może zawierać błędy... ale powinien wystarczyć aby zobrazować sposób myślenia.

* http://pl.wikipedia.org/wiki/Szyfr_p%C5%82otkowy

Kasieńka89
09-08-07, 14:00
ee... mój błąd przy przepisywaniu.. w programie nie jest "1" tylko " l " ...

Co do analizy działania tego szyfrogramu to przy zmianie czegokolwiek nie wychodzi poprawnie szyfrowanie.. Nie wiem dokładnie co i gdzie zmienić by było więcej tych warstw płotu, może jakaś mała podpowiedź? Jestem w tym zupełnie ciemna :(

a ten "wężyk" to raczej nie.. , forma programu ma być taka jak już wyżej napisałam.

RRybak
10-08-07, 09:05
Szyfrowanie płotkowe polega na właśnie chodzeniu wężykiem. Nie możesz napisać programu wielorzędowego o zmiennej ilości na dwóch sztywnych pętlach "jak już wyżej"...
Możesz sobie dodać ewentualnie 3 pętle, ale wtedy już kroki nie są co dwa.
Pierwszy rząd będzie miał 3+1 do następnego znaku, drugi 3-1, a trzeci znowu 3+1.

Nie będę pisał kodu - na komis powinnaś jednak trochę wiedzieć, a rozwiązanie doderic'a wydaje się całkiem niezłe. Podpowiem tylko, że należy dodawać kolejne pętle wraz z rzędami i zmieniać kroki przy tym a'la "(2*i)-1" (zakładając upór "jedna pętla na jeden rząd").

doderic
13-08-07, 13:56
...i zmieniać kroki przy tym a'la "(2*i)-1"
Już przy mojej wcześniejszej odpowiedzi głowiłem się, jak wyznaczyć co ile trzeba skakać w każdym z rzędów, no i w końcu wymyśliłem. 8)
No bo pierwsze problemy pojawiają się przy n=4, kiedy to w pierwszym rzędzie skakać trzeba co 6 znaków, w drugim na przemian co 4 i co 2, potem w trzecim co 2 i co 4, i wreszcie w ostatnim rzędzie znów co 6 znaków.
Wszystkim zainteresowanym proponuję rozrysować sobie "wężyki" na kartce w kratkę i policzyć "skoki". Np.:
dla wężyka n=4, skoki na poszczególnych poziomach:
1: 6+0
2: 4+2
3: 2+4
4: 0+6
a dla wężyka n=5:
1: 8+0
2: 6+2
3: 4+4
4: 2+6
5: 0+8
Widać zasadę? No to można spróbować użyć ją w programie.