помогите, не могу разобраться| Код | //Программа шифрования/дешифрования символов латиницы #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> #include <conio.h> #include <fstream> #include <clocale> #include <cmath>
using namespace std; int main() { int km=1,sm=1; //Переменная выбора - шифрование/дешифрование int a, b, c, i; string str; string key; setlocale(LC_ALL,"Russian"); while(sm) { string result = ""; //Строка - результат cout<<"0-Выход\n"; cout<<"***********************\n"; cout<<" Шифрование методом Третемиуса:\n"; cout<<"1-Шифрование\n"; cout<<"2-Дешифрование\n"; cout<<"***********************\n"; // putc('\n',stdout); cout<<"Введите операцию: "; cin>>km; switch (km) //Если km { case 0: {exit(1);} case 1: //Шифрование { cout<<"Введите ключи для шифрования: "<<"a= "; //alph(); cin>>a; cout<<"b= "; cin>>b; cout<<"c= "; cin>>c; int L=(a*(int)(str[i])*(int)(str[i]) + b*(int)(str[i]) + c); //Величина сдвига key=L; //putc('\n',stdout); if (L > 31) L = L % 31; //Вычисление сдвига ///////////////////////////////////////////////////////////////////////////////////////////// cout<<"Имя файла:"; string filename; cin>>filename; cout<<"Чтение файла...\n";//Чтение файла string str; //Строка считанная из файла ifstream in(filename); ///////////////////////////////////////////////////////////////////////////////////////////// getline(in,str); cout<<"Текст файла: \n"<<str<<endl; key=str; //str=shift; in.close(); // putc('\n',stdout); cout<<"Шифрование...\n"; for (int i = 0; i < str.length(); i++) { //Если латиница if (((int)(str[i]) < -64)||((int)(str[i]) > -1)) result += str[i]; //Если буква является строчной if (((int)(str[i]) >= -32) && ((int)(str[i]) <= -1)) { //Если буква, после сдвига выходит за пределы алфавита if ((int)(str[i]) + L > -1) //Добавление в строку результатов символ result += (char)((int)(str[i]) + L - 31); //Если буква может быть сдвинута в пределах алфавита else //Добавление в строку результатов символ result += (char)((int)(str[i]) + L); } //Если буква является прописной if (((int)(str[i]) >= -64) && ((int)(str[i]) <= -33)) { //Если буква, после сдвига выходит за пределы алфавита if ((int)(str[i]) + L > -33) //Добавление в строку результатов символ result += (char)((int)(str[i]) + L - 31); //Если буква может быть сдвинута в пределах алфавита else //Добавление в строку результатов символ result += (char)((int)(str[i]) + L); } } cout<<"Результат:\n"; cout<<result; //Вывод результата ///////////////////////////////////////////////////////////////////////////////////////////// ofstream out("OUT.txt"); out << result << endl; cout<<"\nСохранено в OUT.txt"; out.close(); ///////////////////////////////////////////////////////////////////////////////////////////// break; } case 2: //Дешифрование { cout<<"Введите ключи для шифрования: "<<"a= "; //alph(); cin>>a; cout<<"b= "; cin>>b; cout<<"c= "; cin>>c; int L=a*(int)(str[i])+b*(int)(str[i])+c; //putc('\n',stdout); if (L > 31) L = L % 31; cout<<"Имя файла:"; ///////////////////////////////////////////////////////////////////////////////////////////// string filename; cin>>filename; cout<<"Чтение файла...\n";//Чтение файла string str; //Строка считанная из файла ifstream in(filename); ///////////////////////////////////////////////////////////////////////////////////////////// getline(in,str); cout<<"Текст файла: \n"<<str<<endl; in.close(); //putc('\n',stdout); cout<<"Дешифрование...\n"; for (int i = 0; i < str.length(); i++) { //Если латиница if (((int)(str[i]) < -64)||((int)(str[i]) > -1)) result += str[i]; //Если буква является строчной if (((int)(str[i]) >= -32) && ((int)(str[i]) <= -1)) { //Если буква, после сдвига выходит за пределы алфавита if ((int)(str[i]) - L < -32) //Добавление в строку результатов символ result += (char)((int)(str[i]) - L + 31); //Если буква может быть сдвинута в пределах алфавита else //Добавление в строку результатов символ result += (char)((int)(str[i]) - L); } //Если буква является прописной if (((int)(str[i]) >= -64) && ((int)(str[i]) <= -33)) { //Если буква, после сдвига выходит за пределы алфавита if ((int)(str[i]) - L < -64) //Добавление в строку результатов символ result += (char)((int)(str[i]) - L + 31); //Если буква может быть сдвинута в пределах алфавита else //Добавление в строку результатов символ result += (char)((int)(str[i]) - L); } } cout<<"Результат:\n"; cout<<result; //Вывод результата ///////////////////////////////////////////////////////////////////////////////////////////// ofstream out("OUT.txt"); out << result << endl; cout<<"\nСохранено в OUT.txt"; out.close(); ///////////////////////////////////////////////////////////////////////////////////////////// break; } default: //Если ошибочное значение { cout<<"Ошибка->"; break; } } getch(); system("cls"); } return 0; }
|
|