Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.88
Roger7
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 11
#1

Шифр Цезаря - C++

26.10.2009, 17:51. Просмотров 5973. Ответов 8
Метки нет (Все метки)

text - исходный
code - закодированный
decode - дешифрованный

после компиляции в файл code в конец ложится пробел, откуда он берется!?! Соответственно и при декодировании пробел превращяетс в нечто ненужное !! Рудз


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// ================ Coding and decoding "Cesaer" ==========================
 
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
 
   int key;
   char s;
 
   FILE *text, *code, *decode;
 
   text = fopen("d:\\text.txt", "r");
   code = fopen("d:\\code.txt", "w+");
   decode = fopen("d:\\decode.txt", "w+");
 
   cout << "Enter the key: ";
   cin >> key;                  // key of coding
 
//======================= Coding =================================
 
   while(!feof(text))
      {
                 s = getc(text);
         s += key;
         putc(s,code);
      }
 
   fclose(text);
   fclose(code);
 
//======================= Decoding  ==============================
 
   code = fopen("d:\\code.txt", "r");
 
 
   while(!feof(code))
        {
 
         s = getc(code);
         s -= key;
         putc(s,decode);
        }
 
   fclose(code);
   fclose(decode);
 
   cout << "Coding..." << endl;
   cout << "Decoging..." << endl;
   cout << "Coding and decoging done!";
 
   getch ();
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2009, 17:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шифр Цезаря (C++):

Шифр Цезаря - C++
Объясните пожалуйста есть формула для шифра Цезаря :En(x) = (x +n)mod26 почему в коде надо еще отнять 65, а потом прибавить. 65- это код...

Шифр Цезаря - C++
Ребята , помогите решить задачку, битый час сижу, не могу понять . Надо чтобы введенная буква алфавита сдвигалась на 3 буквы вперед...

Шифр цезаря - C++
Столкнулся с такой проблемой нужно &quot;Разработать прикладное приложение для шифрования текста с помощью шифра простой замены. Приложение...

C++ Шифр Цезаря - C++
Help нужно написать программу на С++, которая шифрует русские и английские слова. Делает запрос на сдвиг. Зашифрованный код переводил...

Шифр Цезаря - C++
Вот есть готовый код программы, может, кому понадобиться:) #include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; using namespace...

Шифр Цезаря - C++
есть код программы для взлома Шыффра Цэзара но никак немогу доделать ее чтобы взломать строку VTA.P,JR;STJQATPZX,VJX,JF;A...

8
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
26.10.2009, 18:04 #2
в файле text в конце строки стоит перенос на другую строку? Если нет, то возможно дело в том, что последним считанным символом из файла будет EOF, который в текущей итерации видимо запишется в виде пробела ( http://www.codenet.ru/progr/cpp/spru/getc_-_getchar.php ). попробуй добавить условие
C
1
2
3
4
5
6
while(!feof(code))
{
s = getc(code);
s -= key;
if (!feof(code)) putc(s,decode);
}
или второй вариант - добавить в условия циклов
C
1
2
3
4
5
while ((s = getc(code)) != EOF)
{
s -= key;
putc(s,decode);
}
1
Roger7
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 11
27.10.2009, 18:15  [ТС] #3
Вы были правы насчет EOF!!! Первый вариант работает как надо! Большое спасибо, завтра с чувством выполненого долга пойду сдавать эту лабу!!! Еще раз спасибо)
0
Roger7
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 11
29.10.2009, 17:53  [ТС] #4
Как сделать так чтоб путь к файлам вводился пользователем через консоль!!!???

Пример(консоль):

Введите путь к исходному тексту:
d:\\text.txt
0
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
29.10.2009, 17:56 #5
самый простой способ
C
1
2
3
char filepath[256];
printf("Введите путь к исходному тексту:\n");
scanf("%s",&filepath);
но тут ограничение в 256 символов на путь, если есть другой способ или через string, поправьте меня
0
Roger7
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 11
29.10.2009, 18:10  [ТС] #6
Вот так было:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int key;
   char s;
 
   FILE *text, *code, *decode;
 
   text = fopen("d:\\text.txt", "r");
   code = fopen("d:\\code.txt", "w+");
   decode = fopen("d:\\decode.txt", "w+");
 
   cout << "Enter the key: ";
   cin >> key;                  // key of coding
 
//======================= Coding =================================
 
   while(!feof(text))
      {
         s = getc(text);
         s += key;
         if (!feof(code)) putc(s,code);
      }
 
   fclose(text);
   fclose(code);
А с тем что я хочу так???

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int key;
   char s, fileTEXT[256], fileCODE[256], fileDECODE[256];
 
   printf("Введите путь к исходному тексту:\n");
   scanf("%s",&fileTEXT);
 
   printf("путь к файлу с закодированным текстом\n");
   scanf("%s",&fileCODE);
 
  printf("путь к файлу с декодированным текстом\n");
   scanf("%s",&fileDECODE);
  
 
 cout << "Enter the key: ";
   cin >> key;                  // key of coding
 
//======================= Coding =================================
while(!feof( )) Вот тут как прописать с чем работать??? &fileTEXT??
0
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
29.10.2009, 18:16 #7
ну вот как-то так, в цикле в функции feof должен быть указатель, т.е. остается как есть.
C
1
2
3
4
5
6
7
8
9
10
11
12
   char s;
   char s, fileTEXT[256], fileCODE[256], fileDECODE[256];
   printf("Введите путь к исходному тексту:\n");
   scanf("%s",&fileTEXT);
   printf("путь к файлу с закодированным текстом\n");
   scanf("%s",&fileCODE);
   printf("путь к файлу с декодированным текстом\n");
   scanf("%s",&fileDECODE);
    FILE *text, *code, *decode;
    text = fopen(fileTEXT, "r");
   code = fopen(fileCODE, "w+");
   decode = fopen(fileDECODE, "w+");
1
Roger7
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 11
29.10.2009, 18:28  [ТС] #8
Спасибо! Займусь внедрением... =) Отвечу позже!
0
Roger7
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 11
30.10.2009, 15:41  [ТС] #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// ================ Coding and decoding "Cesaer" ==========================
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
 
   int key;
   char a, fileTEXT[256], fileCODE[256], fileDECODE[256];
 
   printf("Adress of text: \n");
   scanf("%s", &fileTEXT);
 
   printf("Adress of code: \n");
   scanf("%s", &fileTEXT);
 
   printf("Adress of decode: \n");
   scanf("%s", &fileTEXT);
 
 
   FILE *text, *code, *decode;
 
   text = fopen(fileTEXT, "r");
   code = fopen(fileCODE, "w+");
   decode = fopen(fileDECODE, "w+");
 
   cout << "Enter the key: ";
   cin >> key;                            // key of coding
 
//======================= Coding =================================
 
   cout << "Coding..." << endl;
 
   while(!feof(text))
      {
                 a = fgetc(text);
         a += key;
           if (!feof(text))     fputc(a,code);
      }
 
   fclose(text);
   fclose(code);
 
//======================= Decoding  ==============================
 
   cout << "Decoging..." << endl;
 
   code = fopen(fileCODE, "r");
 
   while(!feof(code))
           {
                 a = fgetc(code);
         a -= key;
        if (!feof(code)) fputc(a,decode);
        }
 
   fclose(code);
   fclose(decode);
 
   cout << "Coding and decoging done!";
 
   getch ();
   return 0;
}
Не получилось!!! Не компилится чегото! Все таки дело наверное в адресах которые я через консоль хочу вводить!!! Может както не так??!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2009, 15:41
Привет! Вот еще темы с ответами:

Шифр Цезаря - C++
Створити програму, що реалізовує алгоритм дешифрування Цезаря, для латинського алфавіту з прогресуючим кроком від 3 до 10 (ВЕЛИКІ малі...

Шифр Цезаря - C++
Добрый вечер, не могу реализовать шифр цезаря на C builder, программа компилится нормально, но при нажатии на кнопку выдаёт ошибку. Вот код...

Шифр Цезаря полосками - C++
Нужен пример кода обязательно на С++, который будет реализовывать расшифровку шифра Цезаря с помощью метода полосок. Количество полосок...

Шифр сдвига (Цезаря) - C++
скажите как сделать шифр в кольце 26(для латиницы), т.е. чтобы последняя буква в первую переходила int main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
30.10.2009, 15:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru