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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Мусаси
7 / 7 / 0
Регистрация: 07.05.2013
Сообщений: 178
#1

Шифрование биграмм с двойным квадратом (C++) - C++

14.02.2014, 02:43. Просмотров 1713. Ответов 4
Метки нет (Все метки)

Всем добрый вечер! В общем надо зашифровать слово методом Биграмм с двойным квадратом. Суть их в чем заключается:
1)есть 2 таблицы (массивы из букв. Буквы не должны повторяться)
2)задаём ключ для первой и второй таблицы. (ключ - слово, заполняющее самую первую строчку массива)
3)вводим шифруемое слово(открытый текст)
4)шифр осуществляется так Шифрование биграмм с двойным квадратом (C++)

Вот я написал код программы, который я не могу доработать, т.к. выдаёт ошибку
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
// Шифрование биграммами с двойным квадратом.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main()
{//инициализация 1-го массива и вывод его на экран
const int A=6,B=6;
char Mass[A][B]={"ABCDE","FGHIJ","KLMNO","PQRST","UVWXY","Z,-.!"};
int i,j;
cout<<"--- 1 Massiv ---"<<endl;
for (i=0;i<A;i++) {cout<<endl;
for (j=0;j<B;j++) {cout<<Mass[i][j]<<" ";}
}
 
//инициализация 2-го массива и вывод его на экран
const int A1=6,B1=6;
char Mass1[A1][B1]={"ABCDE","FGHIJ","KLMNO","PQRST","UVWXY","Z,-.!"};
int i1,j1;
cout<<endl<<endl<<"--- 2 Massiv ---"<<endl;
for (i1=0;i1<A1;i1++) {cout<<endl;
for (j1=0;j1<B1;j1++) {cout<<Mass1[i1][j1]<<" ";}
}
 
//вводим ключ для первого массива и вывод исходного массива
cout<<endl<<"Input key for 1-st Massiv (5 symbols) ---> ";
char key1[A];//КЛЮЧ
cin>>key1;
 
char g1=Mass[0][0];//ДЛЯ 1-Й БУКВЫ
char g2=Mass[0][1];//ДЛЯ 2-Й БУКВЫ
char g3=Mass[0][2];//ДЛЯ 3-Й БУКВЫ
char g4=Mass[0][3];//ДЛЯ 4-Й БУКВЫ
char g5=Mass[0][4];//ДЛЯ 5-Й БУКВЫ
 
for (i=0;i<A;i++) {cout<<endl;
for (j=0;j<B;j++) {
                if (Mass[i][j]==key1[0]) {key1[0]=Mass[0][0]; Mass[0][0]=Mass[i][j];Mass[i][j]=g1;}
                if (Mass[i][j]==key1[1]) {key1[1]=Mass[0][1]; Mass[0][1]=Mass[i][j];Mass[i][j]=g2;}//
                if (Mass[i][j]==key1[2]) {key1[2]=Mass[0][2]; Mass[0][2]=Mass[i][j];Mass[i][j]=g3;}
                if (Mass[i][j]==key1[3]) {key1[3]=Mass[0][3]; Mass[0][3]=Mass[i][j];Mass[i][j]=g4;}//
                if (Mass[i][j]==key1[4]) {key1[4]=Mass[0][4]; Mass[0][4]=Mass[i][j];Mass[i][j]=g5;}
                    }
}
 
cout<<"--- 1 Massiv (NEW) ---"<<endl;
for (i=0;i<A;i++) {cout<<endl;
for (j=0;j<B;j++) {cout<<Mass[i][j]<<" ";}
}
 
//вводим ключ для второго массива и вывод исходного массива
cout<<endl<<"Input key for 2-d Massiv (5 symbols) ---> ";
char key2[A1];//КЛЮЧ
cin>>key2;
 
char G1=Mass1[0][0];//ДЛЯ 1-Й БУКВЫ
char G2=Mass1[0][1];//ДЛЯ 2-Й БУКВЫ
char G3=Mass1[0][2];//ДЛЯ 3-Й БУКВЫ
char G4=Mass1[0][3];//ДЛЯ 4-Й БУКВЫ
char G5=Mass1[0][4];//ДЛЯ 5-Й БУКВЫ
 
for (i1=0;i1<A1;i1++) {cout<<endl;
for (j1=0;j1<B1;j1++) {
                if (Mass1[i1][j1]==key2[0]) {key2[0]=Mass1[0][0]; Mass1[0][0]=Mass1[i1][j1];Mass1[i1][j1]=G1;}
                if (Mass1[i1][j1]==key2[1]) {key2[1]=Mass1[0][1]; Mass1[0][1]=Mass1[i1][j1];Mass1[i1][j1]=G2;}//
                if (Mass1[i1][j1]==key2[2]) {key2[2]=Mass1[0][2]; Mass1[0][2]=Mass1[i1][j1];Mass1[i1][j1]=G3;}
                if (Mass1[i1][j1]==key2[3]) {key2[3]=Mass1[0][3]; Mass1[0][3]=Mass1[i1][j1];Mass1[i1][j1]=G4;}//
                if (Mass1[i1][j1]==key2[4]) {key2[4]=Mass1[0][4]; Mass1[0][4]=Mass1[i1][j1];Mass1[i1][j1]=G5;}
                    }
}
 
cout<<"--- 2 Massiv (NEW) ---"<<endl;
for (i1=0;i1<A1;i1++) {cout<<endl;
for (j1=0;j1<B1;j1++) {cout<<Mass1[i1][j1]<<" ";}
}
 
//ВВОДИМ И ШИФРУЕМ СЛОВО
cout<<endl<<"Input word(limit 10)"<<endl;
char word[6];
cin>>word[6];
//-------поиск в 1-ом и во 2-ом ------------------------
int x,y,X,Y;//1-2
int x1,y1,X1,Y1;//3-4
int x2,y2,X2,Y2;//5-6
int x3,y3,X3,Y3;//7-8
int x4,y4,X4,Y4;//9-10
 
char w0=word[0]; 
char w1=word[1];
 
for (i=0;i<A;i++) {//1-й (1-я буква) [1-й массив 1-я буква]
for (j=0;j<B;j++)   
    {   if (Mass[i][j]==w0) {x=i;y=j;}
    }
}
for (i1=0;i1<A1;i1++) {//2-й (2-я буква)
for (j1=0;j1<B1;j1++)   
    {   if (Mass1[i1][j1]==w1) {X=i1;Y=j1;}
    }
}
cout<<"Number 1 ---- ["<<x<<" "<<y<<"]"<<endl;
cout<<"Number 2 ---- ["<<X<<" "<<Y<<"]"<<endl;
 
/*for (i=0;i<A;i++) {//1-й (3-я буква)
for (j=0;j<B;j++)   
    {   if (Mass[i][j]==word[3]) {x1=i;y1=j;}
    }
}
for (i1=0;i1<A1;i1++) {//2-й (4-я буква)
for (j1=0;j1<B1;j1++)   
    {   if (Mass1[i1][j1]==word[4]) {X1=i1;Y1=j1;}
    }
}
 
 
for (i=0;i<A;i++) {//1-й (5-я буква)
for (j=0;j<B;j++)   
    {   if (Mass[i][j]==word[5]) {x2=i;y2=j;}
    }
}
for (i1=0;i1<A1;i1++) {//2-й (6-я буква)
for (j1=0;j1<B1;j1++)   
    {   if (Mass1[i1][j1]==word[6]) {X2=i1;Y2=j1;}
    }
}
 
for (i=0;i<A;i++) {//1-й (7-я буква)
for (j=0;j<B;j++)   
    {   if (Mass[i][j]==word[7]) {x3=i;y3=j;}
    }
}
for (i1=0;i1<A1;i1++) {//2-й (8-я буква)
for (j1=0;j1<B1;j1++)   
    {   if (Mass1[i1][j1]==word[8]) {X3=i1;Y3=j1;}
    }
}
 
for (i=0;i<A;i++) {//1-й (9-я буква)
for (j=0;j<B;j++)   
    {   if (Mass[i][j]==word[9]) {x4=i;y4=j;}
    }
}
for (i1=0;i1<A1;i1++) {//2-й (10-я буква)
for (j1=0;j1<B1;j1++)   
    {   if (Mass1[i1][j1]==word[10]) {X4=i1;Y4=j1;}
    }
}*/
cout<<endl<<"Vash shifrovanoe slovo - "<<endl;
cout<<Mass1[x][Y]<<" | "<<Mass[X][y]<<endl;
 
system("pause");
return 0;
}
Вот выдаёт ошибку:
Шифрование биграмм с двойным квадратом (C++)
Подскажите, в чем причина, что не так? Можно ли как-то уменьшить код. На всякий скину программу Шифрование биграммами с двойным квадратом.rar
Спасибо. Буду очень благодарен. Надеюсь, эта тема еще кому-нибудь поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2014, 02:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шифрование биграмм с двойным квадратом (C++) (C++):

Восстановление из трея двойным нажатием - C++ Builder
Здраствуйте, подскажите где выставить восстановление из трея двойным нажатием левой кнопкой мыши по иконке, если правую нажимаю то там я...

Натуральное число N является точным квадратом - C++ Builder
Составить программу, которая будет выводить true, если указанное высказывание является истинным и false — в противном случае. Натуральное...

Зумирование TChart выделением мышью квадратом - C++ Builder
Добрый день! Пожалуйста, помогите! В builder в tChart график. Когда его зуммирую(мышкой выделяю область белым прямоугольником), то...

Не открываются проекты двойным щелчком - Visual C++
Добрый день. При попытке открыть любой проект из проводника двойным кликом вылезает ошибка: (вложение) надеялся что в 2012 студии...

Работа с двойным указателем в структуре - Visual C++
Есть такой код: typedef struct tagSTRUCT { ... TCHAR **ppszArray; int nArrayCount; ... } STRUCT; STRUCT st =...

Шифрование квадратом Полибия - C++
Шифрование квадратом Полибия. Допустим, шифрую слово СЕЛДОН. Должно получиться зашифрованное сообщение 35 16 25 15 32 31, но выдает 15 16...

4
Мусаси
7 / 7 / 0
Регистрация: 07.05.2013
Сообщений: 178
15.02.2014, 11:30  [ТС] #2
Помогите пожалуйста просто поменять местами буквы в массиве
0
StailGot
28 / 23 / 6
Регистрация: 25.08.2013
Сообщений: 41
15.02.2014, 18:44 #3
Цитата Сообщение от Мусаси Посмотреть сообщение
Подскажите, в чем причина, что не так?
//ВВОДИМ И ШИФРУЕМ СЛОВО
cout<<endl<<"Input word(limit 10)"<<endl;
char word[6];
cin>>word[6]
;
C++
1
cin>>word;
0
Мусаси
7 / 7 / 0
Регистрация: 07.05.2013
Сообщений: 178
15.02.2014, 19:42  [ТС] #4
Спасибо. Исправил - заработало!!!

Интересно, можно ли сократить программный код?
0
StailGot
28 / 23 / 6
Регистрация: 25.08.2013
Сообщений: 41
16.02.2014, 16:57 #5
Цитата Сообщение от Мусаси Посмотреть сообщение
Интересно, можно ли сократить программный код?
Можно, например, вынести повторяющиеся действия в отдельные функции (заполнение массива, ввод ключа и т.д.). А после подумать над реализацией алгоритма, очень уж много лишних переменных вида x1,x2, g1, g2 ... от них нужно избавиться.
1
16.02.2014, 16:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2014, 16:57
Привет! Вот еще темы с ответами:

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

Посчитать процентное соотношение (или количество) каждой буквы алфавита и биграмм - C++
Дан текст 5Мб. надо написать программу на с++, посчитать процентное соотношение(или количество) каждой буквы алфавита и биграмм. Подскажите...

Сортировка с двойным включением - C++
Помогите написать код для сортировки с двойным включением по возрастанию на C++?

Закрытое хеширование с двойным опробованием - C++
Помогите, пожалуйста! Очень нужна ХЕШ-функция с двойным хешированием. В интернете информации очень мало, ни одного примера. Реализация на...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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