Cześć, miałem za zadanie napisać program, który odszyfruje kryptogram zaszyfrowany systemem Cezara korzystając z metody badania częstości występowania liter w tekście. Statystycznie litera A jest najczęściej występującą literą w języku polskim, więc przyjmujemy, że litera najczęściej występująca w kryptogramie jest zaszyfrowaną literą A/a.
Poniżej kod programu.
#include <iostream>
#include <fstream>
using namespace std;
const string alf_w = "AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ";
const string alf_m = "aąbcćdeęfghijklłmnńoópqrsśtuvwxyzźż";
string Cezar(string s, int k)
{
int p;
string odsz;
for(int i = 0; i<s.size(); i++)
{
p = alf_m.find(s[i]);
if(p>=0&&p<35) odsz = odsz + alf_m[(p+k)%35];
else
{
p = alf_w.find(s[i]);
if(p>=0&&p<35) odsz = odsz + alf_w[(p+k)%35];
else odsz = odsz + s[i];
}
}
return odsz;
}
int main()
{
string szyfrogram;
ifstream wejscie("tajne.txt");
ofstream wyjscie("jawny.txt");
int p;
int Liczniki[35];
while(!wejscie.eof())
{
getline(wejscie, szyfrogram);
for(int i = 0; i<szyfrogram.size(); i++)
{
p = alf_m.find(szyfrogram[i]);
if(p>=0&&p<35) Liczniki[p]++;
else
{
p = alf_w.find(szyfrogram[i]);
if(p>=0&&p<35) Liczniki[p]++;
}
}
}
wejscie.close();
int indeks = 0;
for(int i = 0; i<35; i++)
{
if(Liczniki[indeks]<Liczniki[i])
indeks = i;
}
int klucz = 35 - indeks;
wejscie.open("tajne.txt");
while(!wejscie.eof())
{
getline(wejscie, szyfrogram);
wyjscie << Cezar(szyfrogram, klucz) << endl;
}
wyjscie << alf_w[indeks];
wejscie.close();
wyjscie.close();
cout << "Udalo sie rozszyfrowac tekst!";
return 0;
}
Problem jest następujący - program wskazuje niepoprawną literę, która występuje najwięcej razy w tekście. Dla pewnego pliku uzyskałem literę Ż, która właściwie nie wystąpiła w nim ani razu. W czym jest błąd?