Szyfr Cezara

0

Czesc. Potrzebuje pomocy. Ktos wytlumaczy mi dzialanie poniższego kodu w c++:

#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
 
void szyfruj(int klucz, char tab[])
{
  int dl = strlen(tab); //określenie ilości znaków wyrazu
 
  if(klucz >= 0)

    for(int i=0;i<dl;i++)

      tab[i] = (tab[i] - 65 + klucz)%26 + 65;

  else

    for(int i=0;i<dl;i++)

      tab[i] = (tab[i] + 65 + klucz)%26 + 65;  
 
}
 



int main()
{
  char tab[1001]; //tablica znaków - max 1000 znaków.
 
  int klucz;
 
  cout<<"Podaj wyraz składający się z dużych liter: ";
  cin>>tab;
 
  cout<<"Podaj klucz z przedziału [-10..10]: ";
  cin>>klucz;
 
  szyfruj(klucz,tab); //szyfrowanie
 
  cout<<"Po zaszyfrowaniu: "<<tab<<endl;
 
  szyfruj(-klucz,tab); //deszyfrowanie
 
  cout<<"Po rozszyfrowaniu: "<<tab<<endl;
 
  system("pause");
  return 0;
}
0

Zapytam inaczej. Czego tu konkretnie nie rozumiesz?

0

Po kiego ci tłumaczenie niepoprawnego kodu?

0

Znalazlem ten kod na takiej stronie http://www.algorytm.edu.pl/wstep/49-szyfr-cezara-cz-i.html

0

Widze ze jako początkujacy , przede mną jest jeszcze daleka droga.... w programowaniu

0

Ja zapisałbym to tak:

void Caesar(int key,char *str)
  {
   for(key=(key%26+26)%26;*str;++str) if(isupper(*str)) *str=(*str-'A'+key)%26+'A';
  }
void Caesar(int key,string &str)
  {
   key=(key%26+26)%26;
   for(auto &ch:str) if(isupper(ch)) ch=(ch-'A'+key)%26+'A';
  }
0

No to jak ma wygladac poprawna implementacja szyfru cezara w c++

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