#include <iomanip>
#include <math.h>
#include <stdlib.h>
#include <sstream>
#define st (int)'А' //начало алф
#define fin (int)'Я' //конец алф
#define vol 32 //размер алфавита
using namespace std;
void encrInt(char* inf, char* outf) //шифр по числу
{
int shift; //Величина сдвига
cout<<"Enter value shift for encryption\n";
cin>>shift;
if (shift > vol)
shift = shift % vol; //Вычисление сдвига
cout<<"Read of file...\n";
ifstream in(inf);
ofstream out(outf);
char c;
while(in.get( c )) { //читаем до конца файла
c=toupper(c); //приводим к заглавным буквам
if (c < st || c > fin) //проверяем кирилическая ли буква
out<<c; //если нет - выводим как есть
else { //если кирилица
if ((int)(c) + shift > fin) //Если буква, после сдвига выходит за пределы алфавита
out<< (char)((int)(c) + shift - vol); //уменьшаем на обьем алфавита
else //Если буква может быть сдвинута в пределах алфавита
out<< (char)((int)(c) + shift); //сдвигем
}
}
cout<<"Encryption complete!\n";
}
void encrW(char* inf, char* outf) //шифр по слову
{
int shift[1000]; //величины сдвигов
string s;
int i,j=0;
cout<<"Enter word for encryption\n"; //слово для сдвига
cin>>s;
for (i = 0; i < s.length(); i++) //вычисляем сдвиг по каждой букве слова
shift[i]=(int)s[i];
cout<<"Read of file...\n";
ifstream in(inf);
ofstream out(outf);
char c;
while(in.get( c )) { //до конца файла
if(j>i) //проверяем не вышли ли за длинну слова
j=0;
c=toupper(c);
if (c < st || c > fin)
out<<c;
else {
while ((int)(c) + shift[j] < st) //Если буква, после сдвига выходит за пределы алфавита
shift[j]+=vol;
while ((int)(c) + shift[j]> fin) //Если буква, после сдвига выходит за пределы алфавита
shift[j]-=vol;
out<< (char)((int)(c) + shift[j]); //сдвигаем
j++; //счетчик размеров сдвига
}
}
cout<<"Encryption complete!\n";
}
void decrW(char* inf, char* outf) //дешифр по слову
{
int shift[1000];
string s;
int i,j=0;
cout<<"Enter word for decryption\n";
cin>>s;
for (i = 0; i < s.length(); i++)
shift[i]=(int)s[i];
cout<<"Read of file...\n";
ifstream in(inf);
ofstream out(outf);
char c;
while(in.get( c )) {
if(j>i)
j=0;
c=toupper(c);
if (c < st || c > fin)
out<<c;
else {
while ((int)(c) - shift[j] < st) //Если буква, после сдвига выходит за пределы алфавита
shift[j]-=vol;
while ((int)(c) - shift[j]> fin) //Если буква, после сдвига выходит за пределы алфавита
shift[j]+=vol;
out<< (char)((int)(c) - shift[j]);
j++;
}
}
cout<<"Decryption complete!\n";
}
void decrInt(char* inf, char* outf) //дешифр по числу
{
int shift; //Величина сдвига
cout<<"Enter value shift for decryption\n";
cin>>shift;
if (shift > vol)
shift = shift % vol;
cout<<"Read of file...\n";
ifstream in(inf);
ofstream out(outf);
char c;
while(in.get( c ))
{
c=toupper(c);
if (c < st|| c > fin)
out<<c;
else {
if ((int)(c) - shift < st) //Если буква, после сдвига выходит за пределы алфавита
out<< (char)((int)(c) - shift + vol);
else //Если буква может быть сдвинута в пределах алфавита
out<< (char)((int)(c) - shift);
}
}
cout<<"Decryption complete!\n";
}
int main(int argc, char* argv[])
{
setlocale(LC_ALL,".1251"); //работаем с русским алфавитом
if(!strcmp(argv[1], "--EI"))
encrInt(argv[2],argv[3]);
else if(!strcmp(argv[1], "--DI"))
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.