Witam, uczę się c++ i próbuję zrobić program szyfrujący wraz z deszyfratorem. Wszystko wygląda w porządku, ale z jakiegoś powodu kiedy próbuję rozszyfrować jakiś tekst, to wychodzi całkowicie inny wynik niż powinien. Tak wyglądają moje kody:
Do szyfrowania:
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
int seed, dzialania, b, c, d, e, seed2, dzialania2;
string slowo, slowo2;
char a, f;
cout<<"Podaj slowo/a, ktore ma byc zaszyfrowane: ";
getline(cin, slowo);
cout<<"Podaj liczby: ";
cin>>seed;
cin>>dzialania;
srand(seed);
cout<<seed;
for(int i=0; i<=slowo.length()-1; i++)
{
a=slowo.at(i);
b=a;
if(dzialania==1)
{
c=b+rand()%29;
c=c*2+3;
}
else if(dzialania==2)
{
c=b-rand()%51;
c=c*3+8;
}
else if(dzialania==3)
{
c=b-rand()%21+rand()%21;
}
a=c;
cout<<a;
}
cout<<dzialania;
}
Deszyfrator:
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
int seed, dzialania, b, c;
char a;
string slowo;
cout<<"Podaj tekst do odszyfrowania: ";
getline(cin, slowo);
int tablica[slowo.length()] = {};
cout<<"Podaj liczby: ";
cin>>seed;
cin>>dzialania;
srand(seed);
for(int i=0; i<=slowo.length()-1; i++)
{
a=slowo.at(i);
b=a;
if(dzialania==1)
{
tablica[i]=b-rand()%29;
c=tablica[i]/2-3;
}
/*
else if(dzialania==2)
{
c=b-rand()%51;
c=c/3-8;
}
else if(dzialania==3)
{
c=b+rand()%21-rand()%21;
}
*/
a=c;
cout<<a;
}
}
W tej chwili próbuję zrozumieć co źle działa w zawartości pierwszego if'a (dzialania==1), reszty jeszcze nie sprawdzałem. Tak wygląda w tej chwili cały proces szyfrowania i deszyfrowania wiadomości:
Oryginał: abc 97 98 99
Zaszyfrowany: Ţ§ß 221 245 225
Rozszyfrowany: ŠýŔ 230 236 232
I z jakiegoś powodu zwiększa mi wartość w systemie ascii zamiast ją zmniejszać.
//Seed, którego używałem podczas testowania tych programów to 1.