Witajcie,
Mam problem z programem szyfrującym algorytmem cezara.
Program ogólnie działa poprawnie lecz dla wprowadzonych liter takich jak UVWXYZ niestety nie.
Nie mogę jakoś odnaleźć błedu w kodzie. Zapewne błąd tkwi gdzieś przy warunkach w funkcjach. Byłbym bardzo wdzięczny za wskazanie gdzie on się znajduje.
Z góry dziękuję :)
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
void wczytaj(string &zdanie)
{
system("cls");
getline(cin,zdanie);
}
void wyswietl(string zdanie)
{
system("cls");
cout<<zdanie<<endl;
system("pause");
}
int wczyt_kl(int &kl)
{
system("cls");
cout<<"Wpisz klucz: "; cin>>kl;
}
string szyfruj(int klucz, string &zdanie )
{
int i = 0;
int ilosc_liter = 'z' - 'a' + 1;
klucz = klucz % ilosc_liter;
for(i=0;zdanie[ i ] != '\0';i++)
{
if(zdanie[i]!=32)
zdanie[ i ] += klucz;
else
continue;
if( zdanie[ i ] > 'z') zdanie[ i ] -= ilosc_liter;
if( zdanie[ i ] < 'a' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;
if( zdanie[ i ] > 'Z' && zdanie[ i ] < 'a') zdanie[ i ] -= ilosc_liter;
if( zdanie[ i ] < 'A' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;
}
return zdanie;
}
string deszyfruj(int klucz, string &zdanie)
{
int i = 0;
int ilosc_liter = 'z' - 'a' + 1;
klucz = klucz % ilosc_liter;
for(i=0;zdanie[ i ] != '\0';i++)
{
if(zdanie[i]!=32)
zdanie[ i ] -= klucz;
else
continue;
if( zdanie[ i ] > 'z' ) zdanie[ i ] -= ilosc_liter;
if( zdanie[ i ] < 'a' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;
if( zdanie[ i ] > 'z' && zdanie[ i ] > 'Z') zdanie[ i ] -= ilosc_liter;
if( zdanie[ i ] < 'a' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;
}
return zdanie;
}
int main()
{
char w;
string zdanie;
int kl;
do
{ system("cls");
cout<<" MENU "<<endl;
cout<<"-----------------------------"<<endl;
cout<<"1. Wczytaj zdanie"<<endl;
cout<<"2. Wyswietl zdanie"<<endl;
cout<<"3. Wybierz klucz"<<endl;
cout<<"4. Szyfruj"<<endl;
cout<<"5. Deszyfruj"<<endl;
cout<<"6. Zakoncz program"<<endl;
cin>>w;
cin.ignore();
switch(w)
{
case '1': wczytaj(zdanie); break;
case '2': wyswietl(zdanie); break;
case '3': wczyt_kl(kl); break;
case '4': szyfruj(kl,zdanie); break;
case '5': deszyfruj(kl,zdanie); break;
}
} while(w!='6');
return 0;
}