Szyfr płotkowy – problem ze zrozumieniem niektórych fragmentów kodu

0

Mam problem ze zrozumieniem pewnych linijek poniższego kodu, a najbardziej z treścią między **
Sam muszę napisać program szyfrujący i deszyfrujący także chciałbym zrozumieć co dokładnie się dzieje w poszczególnych linijkach.
Z góry dziękuję bardzo za pomoc.

#include <iostream>
using namespace std;
int main()
{

     string tekst;

    cout<<"Podaj tekst do zaszyfrowania: "<<endl;
    cin>>tekst;
    cout<<""<<endl;

    char plotek[3][50];
    int dl=tekst.size();

//stworzenie pustej macierzy
  for (int w=0; w<3 ; w++)
	for (int k=0; k<dl; k++)
		plotek [w][k]='.';
************************
	int w=0;
	int zwrot=-1;
	for (int k=0; k<dl; k++)
	{
		plotek [w][k]=tekst[k];
		if (w==0 || w==2) zwrot =-zwrot;
		w=w+zwrot;
	}
*************************
for(int w=0; w<3; w++)// WYSWIETLANIE 1,2 i 3 WIERSZA 
 {

   for(int k=0; k<dl; k++)
        cout << plotek[w][k];
            cout << endl;
 }

//for(int w=0; w<3; w++)
  // for(int k=0; k<dl; k++)
		//if (plotek[w][k]!='.')
		//cout << plotek [w][k];


}



0

Czego konkretnie nie rozumiesz i na jakiej zasadzie ten szyfr ma działać?

0

Ma to być szyfr płotkowy i ma on działać tak, że zostaje wprowadzone słowo przez użytkownika i następnie jest ono szyfrowane, a później deszyfrowane odpowiednią funkcją. Tak jak napisałem wcześniej do miejsca zaznaczonego *** rozumiem, a dalej mam problem ze zrozumieniem i nie wiem jak pociągnąć swój program. Do tego funkcja deszyfrująca sprawia mały kłopot.

0

Na wikipedii masz nawet obrazek jak ten szyfr działa.

0

To jak on działa to ja wiem i napisałem to wyżej. Tylko potrzebuje wyjaśnienia jak działa kilka linijek.

0

Znacznie więcej się nauczysz jeśli zwyczajnie odpalisz debugger i prześledzisz sam zamiast nam głowy zawracać (tym bardziej, że nie umiesz wskazać konkretnie o co ci chodzi). Polecam gdb, fajnie daje się automatyzować.

1
we3te4 napisał(a):

To jak on działa to ja wiem i napisałem to wyżej. Tylko potrzebuje wyjaśnienia jak działa kilka linijek.

Gdybyś wiedział jak działa ten algorytm, to wiedziałbyś jak działa te kilka linijek.

W algorytmie masz n rzędów (w tym przypadku n=3), o długości przynajmniej tak długiej jak słowo. W każdej iteracji pętli bierzesz jedną literkę i umieszczasz ją w jakimś rzędzie w

...
    for (int k=0; k<dl; k++)
    {
        plotek [w][k]=tekst[k];
...
    }

Tu ustalamy, że pierwszym rzędem będzie rząd 0, a kolejny rząd będzie to obecny zwiększony o wartość zwrot.

int w = 0;
for ...
{
...
w=w+zwrot;
...
}

zwrot może mieć wartość 1 lub -1, oznacza w którą stronę poruszamy się ze zmianą rzędu. Gdy jesteśmy na skrajnych rzędach (tu 0 i 2), musimy zmienić zwrot na przeciwny bo inaczej wyjdziemy poza zakres.

for ...
{
...
if (w==0 || w==2) zwrot =-zwrot;
...
}

zwrot jest początkowo ustalony na -1 dlatego, że jeszcze przed jego pierwszym użyciem powyższy warunek spowoduje jego zmianę na 1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1