Тема: Шифр Цезаря
Всім привіт! Допоможіть будь ласка із алгоритмом цезаря, а саме із програмою, що має відкривати текстовий файл, щитати його зміст, зашифрувати та записати новий зашифрований файл. Наперед дякую))
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Шифр Цезаря
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Всім привіт! Допоможіть будь ласка із алгоритмом цезаря, а саме із програмою, що має відкривати текстовий файл, щитати його зміст, зашифрувати та записати новий зашифрований файл. Наперед дякую))
Алгоритм Цезаря це вже бог знає скільки століть як музейний експонат.
Для чого вам таке старе барахло, якщо не таємниця?
UPD: google "Шифр Цезаря". Вже давно є готові рішення...
мені треба для лабораторної роботи, можна якомога простіший варіант, а в І-неті набагато складніші
Відкрию вам таємницю: цей форум - також в інтернеті, і тут вам дадуть тільки складний варіант, та й той за гроші.
І взагалі - картинку в правилах бачили? То подивіться.
Немає куди простіше
Правда, працює лише для нижнього регістру англійської, принаймні для інших не перевіряв.
Наваяв щось таке... працює тільки з латиницею та з додатнім зсувом.
#include <fstream>
//--------------------------------------------------------------------
// Визначення послідовності символів в яку попадає ch
//--------------------------------------------------------------------
void getAlphaRange(const char ch, char& first, char& last ) {
first = '\0';
// latin uppercase
if( ch >= 'A' && ch <= 'Z' ) {
first = 'A';
last = 'Z';
return;
}
// latin lowercase
if( ch >= 'a' && ch <= 'z' ) {
first = 'a';
last = 'z';
return;
}
}
//--------------------------------------------------------------------
// Кодування символу ch з кроком step
//--------------------------------------------------------------------
char codeCesar(char ch, int step) {
char first = '\0';
char last = '\0';
getAlphaRange( ch, first, last );
if( first != '\0' ) {
step = step % (last - first);
if( ch + step > last )
ch = first + ( ch + step - last - 1);
else
ch += step;
}
return ch;
}
//--------------------------------------------------------------------
// Розкодування символу ch з кроком step
//--------------------------------------------------------------------
char uncodeCesar( char ch, int step) {
char first = '\0';
char last = '\0';
getAlphaRange( ch, first, last );
if( first != '\0' ) {
step = step % (last - first);
if( ch - step < first )
ch = last - ( first - (ch - step) - 1 );
else
ch -= step;
}
return ch;
}
//--------------------------------------------------------------------
// Кодування та розкодування файлів
//--------------------------------------------------------------------
void cesarFile( int step ) {
std::fstream inputFile( "/home/arete/input.txt", std::ios::in );
std::fstream codeFile( "/home/arete/code.txt", std::ios::in | std::ios::out | std::ios::trunc );
std::fstream uncodeFile( "/home/arete/uncode.txt", std::ios::out | std::ios::trunc );
char ch;
// Кодування в файл
inputFile.unsetf( std::ios_base::skipws );
while( inputFile >> ch )
codeFile << codeCesar( ch, step );
// Розкодування в файл
codeFile.seekp( 0 );
codeFile.unsetf( std::ios_base::skipws );
while( codeFile >> ch )
uncodeFile << uncodeCesar( ch, step );
}
//--------------------------------------------------------------------
// main
//--------------------------------------------------------------------
int main( int argc, char **argv ) {
int step = 3;
if (argc > 1)
step = atoi( argv[1] );
cesarFile( step );
return 0;
}
./test 3
input.txt
ABC KLM XYZ
abc klm xyz
code.txt
DEF NOP ABC
def nop abc
uncode.txt
ABC KLM XYZ
abc klm xyz
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися