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

шифрование квадратом Виженера текста, состоящего из нескольких строчек - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти среднее арифметическое наибольшего и наименьшего зна¬чений элементов матрицы http://www.cyberforum.ru/cpp-beginners/thread1012279.html
Дана действительная матрица размера 6x9. Найти среднее арифметическое наибольшего и наименьшего зна¬чений ее элементов. Перепечатывайте задание на форум.
C++ Указатель на поле типа char [] Всем добрый день! Ситуация такая: есть класс, в нём есть поля типа char и метод, работающий с этими полями. Метод должен многократно по определённому алгоритму изменять эти поля. Что я решил сделать: создать ещё один метод (process() ), который будет вызываться из вышеупомянутого метода (method() ) для обработки этих полей (txt1, txt2 и т.д.). Он каким-то образом будет принимать поле,... http://www.cyberforum.ru/cpp-beginners/thread1012276.html
C++ Разработать класс Matrix – матрица
Разработать класс Matrix – матрица. Размерность матрицы задавать в конструкторе. Реализовать метод доступа к элементам массива. Реализовать операции сложения, вычитания, умножения и транспонирования матрицы. Сделать метод определения симметричности матрицы (если матрица квадратная). Сделать метод формирования единичной матрицы (для квадратных матриц). P.S. Если с кодом никто не поможет хотя...
C++ Не найден .exe файл
Только начал обучение С++ по учебнику Страуструпа. Загрузил Visual Studio Начал со стандартного "Hello. World!" Отладка проходит успешно, ошибок нет. Однако программа не запускается. Выходят следующие сообщения (см. скрины во вложении).
C++ программа не работает так,как надо http://www.cyberforum.ru/cpp-beginners/thread1012269.html
задание: ввести количество чисел последовательности и числа последовательности. определить и вывести количество участков последовательности,на которых значения вводимых чисел не уменьшаются,а также максимальное количество чисел,образующих такой участок вот текст программы: #include "StdAfx.h" #include <iostream> int main() { int k,n,n1,s1,s,m;
C++ Тотальная обработка матриц! Проверьте пожалуйста! Здесь нужно найти суму всех четных и нечетных чисел в матрице! void sumOfElement(int matr, int nRow, int nCol, int&sum1, int&sum2){ sum1 = 0; sum2 = 0; for(int i = 0; i < nRow; i++){ for(int j = 0; j < nCol; j++){ if(matr%2==0) sum1+=matr; else sum2+=matr; cout<<"\nCума непарних... подробнее

Показать сообщение отдельно
goldenflor
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 9

шифрование квадратом Виженера текста, состоящего из нескольких строчек - C++

19.11.2013, 18:46. Просмотров 669. Ответов 0
Метки (Все метки)

помогите найти ошибку:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
 
int main (void) {
    FILE *fid;
    setlocale(LC_ALL, "rus");// для поддержки шрифтов кириллицы
/*
1.
В качестве специального алфавита примите только необходимые символы, имеющиеся в шифруемом сообщении.
*/
    char abc[] = "abcdefghijklmnopqrstuvwxyz .";
/*
Фраза для шифрования п. 4-5
*/
   char *str[] = {{"methods and means"},
         {"of protecting computer information."},
         {"encryption using table vizhenera."}};
     char secret[] = "december";// Лозунг - ключевое слово
 
 
/*
квадрат Виженера  
*/
     char *square[]={
         {"abcdefghijklmnopqrstuvwxyz "},
         {"bcdefghijklmnopqrstuvwxyz a"},
         {"cdefghijklmnopqrstuvwxyz ab"},
         {"defghijklmnopqrstuvwxyz abc"},
         {"efghijklmnopqrstuvwxyz abcd"},
         {"fghijklmnopqrstuvwxyz abcde"},
         {"ghijklmnopqrstuvwxyz abcdef"},
         {"hijklmnopqrstuvwxyz abcdefg"},
         {"ijklmnopqrstuvwxyz abcdefgh"},
         {"jklmnopqrstuvwxyz abcdefghi"},
         {"klmnopqrstuvwxyz abcdefghij"},
         {"lmnopqrstuvwxyz abcdefghijk"},
         {"mnopqrstuvwxyz abcdefghijkl"},
         {"nopqrstuvwxyz abcdefghijklm"},
         {"opqrstuvwxyz abcdefghijklmn"},
         {"pqrstuvwxyz abcdefghijklmno"},
         {"qrstuvwxyz abcdefghijklmnop"},
         {"rstuvwxyz abcdefghijklmnopq"},
         {"stuvwxyz abcdefghijklmnopqr"},
         {"tuvwxyz abcdefghijklmnopqrs"},
         {"uvwxyz abcdefghijklmnopqrst"},
         {"vwxyz abcdefghijklmnopqrstu"},
         {"wxyz abcdefghijklmnopqrstuv"},
         {"xyz abcdefghijklmnopqrstuvw"},
         {"yz abcdefghijklmnopqrstuvwx"},
         {"z abcdefghijklmnopqrstuvwxy"},
         {" abcdefghijklmnopqrstuvwxyz"},
     };
    
     char *crypto, // для шифрованного текста
         *decrypto; // для дешифрованного текста
 
     int i, j,j1, n,
         k,N, // в качестве переменного ключа (сдвига)
         m = strlen(secret); // количество символов лозунга
  
     // Количество символов заданного текста (фразы)
     int Nt1 = sizeof(str)/ sizeof(str[0]); 
           N = (int)strlen(abc);
     int *Na, // для цифрового кодирования исходного текста
         *Ns, // для цифрового кодирования лозунга
         *Nd, //для цифрового кодирования шифрованного текста
         *Nd1,
         *Nd2,
         *code=NULL,//для цифрового кодирования алфавита
         **code1=NULL;//для цифрового кодирования квадрата
    
 
       // Определение количества строк заданного текста
    int Nt = sizeof(square)/ sizeof(square[0]); 
 
     // Определение максимальной длины строки заданного текста
    int Mt = (int)strlen(square[0]); // предполагаемый максимум
     for ( int i = 1; i < Nt; i++)
         if (Mt < (int)strlen(square[i]))
              Mt = (int)strlen(square[i]);
 
     // Выделение блоков памяти и запись их адресов в указатели
     crypto = (char *)malloc( (Mt + 1) * sizeof(char));
     decrypto = (char *)malloc( (Mt + 1) * sizeof(char));
     Na = (int *)malloc( N * sizeof(int));
     Nd = (int *)malloc( N * sizeof(int));
     Ns = (int *)malloc( m * sizeof(int));
     Nd1 = (int *)malloc( Nt * sizeof(int));
       Nd2 = (int *)malloc( Nt * sizeof(int));
     code = (int *)calloc (N , sizeof(int));
     code1 = (int **)calloc(Nt, sizeof(int *));
     for (i = 0; i < Nt; i++)
         code1[i] = (int *)calloc(Mt, sizeof(int));
 
 // Цифровое кодирование специального алфавита
     for (i = 0; i < N; i++)
         code[i] = i;
 
     // Цифровое кодирование исходного текста
     for (i = 0; i < Nt; i++){
         for (j = 0; j < (int)strlen(str[i]); j++ ){
              for (n = 0; n < N; n++){
                   if (str[i][j] == abc[n])
                       crypto[i][j] = code[n];};};};
 
     // Цифровое кодирование лозунга
     for (j = 0; j < m; j++){
         for (i = 0; i < N; i++){
              if ( abc[i] == secret[j] )
                  Ns[j] = i;};};
 // Цифровое кодирование квадрата
     for (i = 0; i < Nt; i++)
         for (j = 0; j < (int)strlen(square[i]); j++ )
              for (n = 0; n < N; n++)
                   if (square[i][j] == abc[n])
                        code1[i][j] = code[n];
 
     puts(" Исходный текст:\n");
     for (i = 0; i < Nt; i++){         
             printf("%s\n",str[i]);}
 
/*
6.
Выведите квадрат Виженера в текстовый файл с именем compX.txt
(Х – номер компьютера)
*/
     printf("\n Лозунг: %s\n", secret);
          if ( (fopen_s(&fid, "comp7.txt", "wt")) != 0 )
     {
         printf("\n Файл не может быть открыт для записи\n");
         printf(" Нажмите любую клавишу для выхода: ");
         _getch();
         return -1;
     }
 puts("\n Квадрат :");
     for (i = 0; i < Nt; i++){
          puts("\n");
          fprintf(fid, "\n");
         for (j = 0; j < (int)strlen(square[i]); j++ ){
             printf("%c ", square[i][j]);
              fprintf(fid, "%c", square[i][j]);
        };};
        
     fclose (fid);
     puts("\n Квадрат Виженера в текстовом файле comp7.txt \n ");
 
     // Шифрование по методу Виженера
     j = 0;
     i=0;
     while (i < m) {
          for (j1 = 0; j1 < Nt; j1++){
              if (code1 [j1][0]==Ns[i]){
                  Nd[j]=code1 [j1][Na[j]];
              };};
          i++;
              
              if (i==m) 
              {i=0;};
              if (j==(Nt1-1))
              { break;};
              j++;
     };
     puts("\n Код шифрованного текста:");
     for (i = 0; i < Nt1; i++)
         printf(" %i ", Nd[i]);
 
 // Цифровое кодирование исходного текста-обратное
     for (j = 0; j < Nt1; j++){
         for (i = 0; i < N; i++){//алфавит
              if ( code[i] == Nd[j] )
                  crypto[j] = abc[i];
        };};
     puts("\n Шифрованный текст :");
     for (j = 0; j < Nt1; j++)
      printf(" %c ", crypto[j]);
 
    // Дешифрование по методу Виженера
    j = 0;
     i=0;
     while (i < m) {
          for (j1 = 0; j1 < Nt; j1++){
              if (code1 [j1][0]==Ns[i]){
                   for (int i1 = 0; i1 < (int)strlen(square[j1]); i1++ ){
                       if (code1 [j1][i1]==Nd[j])
                           Nd2[j]=code[i1];}
              };};
          i++;
              
              if (i==m) 
              {i=0;};
              if (j==(Nt1-1))
              { break;};
              j++;
     };
 
     //Цифровое кодирование исходного текста-обратное
     for (j = 0; j < Nt1; j++){
         for (i = 0; i < N; i++){//алфавит
              if ( code[i] == Nd2[j] )
                  decrypto[j] = abc[i];
        };};
      
 
 //Цифровое кодирование исходного текста-обратное
     for (j = 0; j < Nt1; j++){
         for (i = 0; i < N; i++){//алфавит
              if ( code[i] == Nd2[j] )
                  decrypto[j] = abc[i];
        };};
     puts("\n Расшифрованный текст:");
     for (j = 0; j < Nt1; j++)
      printf("%c", decrypto[j]);
     free(Na); free(Ns); free(Nd);
 
     printf("\n\n ... Нажмите любую клавишу: ");
     _getch();
     return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru