Witam, mam problem z takim samym programem.
Deszyfrowanie rozwiązuję tak, że liczę procentową zawartość każdej liczby, po każdym przesunięciu całego tekstu o jedną pozycję w prawo.
Następnie od znanej mi charakterystyki języka ang, odejmuję zawartości procentowe odpowiednich liter, wygląda to mniej więcej tak:
Wiem, że literka a występuje w tekscie w jez ang ok. 8.2% . W moim przesuniętym tekście występuje np. 5% . Dalej 8.2 - 5 = 3.2
Robię tak w przypadku każdej litery, i tam gdzie suma różnic wyjdzie najmniejsza, tam tekst jest poprawnie odszyfrowany.
Jednak w moim kodzie jest coś nie tak, gdyż funkcja źle mi liczy ilość poszczególnych liter. W pierwszej iteracji jest ok, jednak w następnych coś się psuje. Mógłby ktoś spojrzeć i w razie wykrycia błędu napisać co jest źle?
string deszyfr(string tekst, int n) //funkcja deszyfrujaca
{
double licz_lit = 0, suma = 0, litery, roznica;
int k = 'A';
double tab[26], tab2[26];
double proc_lit = 0;
char b=65;
double jezyk[26]= {8.2,1.5,2.8,4.3,12.7,2.2,2,6.1,7,0.2,0.8,4,2.4,6.7,7.5,1.9,0.1,6,6.3,9.1,2.8,1,2.4,0.2,2,0.1};
litery = licz_litery(tekst,n);
for(int m=0; m<3; m++)
{
for(int i=0; i<n; i++)// przesuwanie tekstu o jedna pozycje w prawo
{
if((tekst[i]>='a' && tekst[i]<='z') || (tekst[i]>='A' && tekst[i]<='Z'))// bierzemy pod uwagę tylko litery
{
if(tekst[i]=='z'|| tekst[i]=='Z')
tekst[i]=tekst[i]-26;
tekst[i]=tekst[i]+1;
}
}
b=65;
for(int i=0; i<26; i++,k++) // 26 liter w alfabecie ang
{
licz_lit=0;
for(int j=0; j<n ;j++) // liczenie kolejnych liczb w tekscie
{
if(tekst[j]==k || tekst[j]==k+32)
licz_lit++;
}
cout<<b++<<"\t"<<licz_lit<<endl;
proc_lit = ((licz_lit/litery)*100); // liczenie % zawartosci kolejnych liter
tab[i] = proc_lit; // w tablicy zapisuje zawartosc % kolejnych liter
roznica = jezyk[i] - tab[i];
roznica = sqrt(roznica*roznica);
tab2[i] = roznica;
suma+=tab2[i];
}
cout<<"\n\nNEXT"<<endl;
}
//for(int i=0; i<26; i++)
// cout<<tab2[i]<<endl;
return tekst;
}
Na razie wszystko jest dość chaotycznie za co przepraszam!
W razie czego, tu jest cały kod:
http://pastebin.com/HyvDi6T7
Pozdrawiam