Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
UltraRedMan
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
1

Программа "шифрование послания"

14.11.2011, 15:13. Просмотров 3204. Ответов 31
Метки нет (Все метки)

Всем привет!=)
В общем вот в чем суть..каждый день на парах, мы в ручную кодируем предложения...это в принципе не сложно, но очень долго и часто сбиваешься..появилась идея сделать программу в которую вводишь предложение и оно тебе его кодирует..Делаю в "Builder C++"..а теперь сама проблема, не могу понять как его так лучше сделать с программированием пока туговато...сама программа должна заменять буквы тоесть "а" заменяется на "к", "б" - "г" и т.д. я создал форму...фотка ниже..помогите кто чем может буду благодарен...
0
Миниатюры
Программа "шифрование послания"  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 15:13
Ответы с готовыми решениями:

Не могу создать программу "шифрование"
Ребята помоги пожалуйста."Разработать программу «Шифрование», которая...

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"
Доброе время суток, как переделать int Key= Application->MessageBox(L"Text",...

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д
Нужен код игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д....

Открыть папку "мой компьютер", "панель управления", "program files"
Нужно открыть папку "мой компьютер", "панель управления", "program files"

Ошибки: "Failed to allocate SAVEmem" и ""bcc32" exited with code 1."
Помогите пожалуйста с этими ошибками. Такое не только у меня, полазил по разным...

31
UltraRedMan
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 00:06  [ТС] 21
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Оптимизируется очень просто, при кодировании используется массив char array[255], где номер элемента - символ который нужно заменить, а значение - символ на который нужно заменить... язык сломаешь И получается что-то вроде:
C++
1
2
3
4
5
6
//...
AnsiString Input = Memo1->Text, Result = "";
for (int index = 1; index <= Input.Length(); index++)
  Result+=array[Input[index]];
Memo2->Text = Result;
//...
При де-кодировании аналогично.
что то сложно...не понимаю пока...я до таких переменных еще не дошел)) но всеравно спасибо))
0
DefineTrueFalse
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 00:15 22
Главное понять смысл, а какие переменные и методы использовать это уже третье дело. Каждый символ имеет свое значение от 0 до 254 (так как на самом деле является числом). Чтобы понять, что это значит можешь взглянуть на таблицу.
Input[index] - возвращает значение указанного символа и и используя это значение, как номер в массиве array, который заполнен символами в соотвествии с нужной кодировкой.
1
UltraRedMan
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 00:28  [ТС] 23
DefineTrueFalse, ага более мене понял...только не понял как производиться замена вставил код в билдер запустилось все нормально без ошибок...пишу в 1 мемо то что надо закодировать..нажимаю на кнопку но ничего не происходит..((
0
DefineTrueFalse
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 00:33 24
Так тебе нужно заполнить массив Array кодировкой. В общем, сейчас пример накатаю.
1
DefineTrueFalse
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 01:14 25
При создании формы, заполняем наш массив кодировкой. В данном случае, я заполнил "от балды".
C++
1
2
3
4
5
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   for (int index = 0; index < 255; index++)
      DecodeArray[index] = 254-index;
}
Далее, первая кнопка у нас будет кодировать текст:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   const AnsiString Input = Memo1->Text.Trim();
   AnsiString Result =  "";
   for (int index = 1; index <= Input.Length(); index++)
      Result+=DecodeArray[Input[index]];
   Memo2->Text = Result;
}
Вторая будет заниматься де-кодированием:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   const AnsiString Input = Memo1->Text;
   AnsiString Result = "";
   for (int index = 1; index <= Input.Length(); index++)
      for (int select = 0; select < 255; select++)
         if (DecodeArray[select] == Input[index])
         {
            Result+=(char)select;
            break;
         }
   Memo2->Text = Result;
}
Ну и для смака добавим кнопку, которая будет помещать текст из Memo2 в Memo1.
C++
1
2
3
4
void __fastcall TForm1::Button3Click(TObject *Sender)
{
   Memo1->Text = Memo2->Text;
}
Собственно все, при нажатии на первую кнопку кодированный текст будет помещен в Memo2. Далее можешь увидеть пример работы программы и где был объявлен массив. Так же можно упростить процесс де-кодировки, используя второй массив, который будет прямой противоположностью первого.
2
Миниатюры
Программа "шифрование послания"   Программа "шифрование послания"  
UltraRedMan
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 01:24  [ТС] 26
DefineTrueFalse, ОГО!! Круто спасибо!!!!
...а можно теперь как то чтобы оно его кодировало не символами, а тоже буквами но со смещением как метод Цезаря ??
0
LK
Заблокирован
16.11.2011, 01:28 27
ну, и вот это
заполнил "от балды"
не понятно - это как ? и как правильно ?
0
DefineTrueFalse
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 02:16 28
Цитата Сообщение от LK Посмотреть сообщение
не понятно - это как ? и как правильно ?
Как минимум получать массив кодировки из текстового поля, а лучше из файла (или вообще мазохистким способом - статистически).
Цитата Сообщение от UltraRedMan Посмотреть сообщение
...а можно теперь как то чтобы оно его кодировало не символами, а тоже буквами но со смещением как метод Цезаря ??
Можно заполнить в соотвествии с условием, но для этой задачи, это будет извращением.
Если я правильно помню, шифр цезаря заключается в сдвиге на 3 символа по алфавиту влево. Если так, тогда что-то подобное получается.

Кодировка шифра Цезаря.
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   const AnsiString Input = Memo1->Text.Trim();
   AnsiString Result =  "";
   for (int index = 1; index <= Input.Length(); index++)
      if ((Input[index] > 64) && (Input[index] < 91))
      // заглавные буквы
      {
         if (Input[index] < 68) Result+=(char)(88 + Input[index] - 65);
         // обработка для 'A B C'.
         else Result+=(char)(Input[index]-3);
         // остальные символы по обычному шифру.
      }
      else if ((Input[index] > 96) && (Input[index] < 123))
      // строчные буквы
      {
         if (Input[index] < 100) Result+=(char)(120 + Input[index] - 97);
         // обработка для 'a b c'.
         else Result+=(char)(Input[index]-3);
         // остальные символы по обычному шифру.
      }
      else Result+=Input[index];
      // для всяких пробелов и т.п.
   Memo2->Text = Result;
}
Де-кодировка шифра Цезаря.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   const AnsiString Input = Memo1->Text.Trim();
   AnsiString Result =  "";
   for (int index = 1; index <= Input.Length(); index++)
      if ((Input[index] > 64) && (Input[index] < 91))
      {
         if (Input[index] > 87) Result+=(char)(65 + Input[index] - 88);
         else Result+=(char)(Input[index]+3);
      }
      else if ((Input[index] > 96) && (Input[index] < 123))
      {
         if (Input[index] > 119) Result+=(char)(97 + Input[index] - 120);
         else Result+=(char)(Input[index]+3);
      }
      else Result+=Input[index];
   Memo2->Text = Result;
}
2
LK
Заблокирован
16.11.2011, 02:22 29
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Как минимум получать массив кодировки из текстового поля, а лучше из файла (или вообще мазохистким способом - статистически).

Можно заполнить в соотвествии с условием, но для этой задачи, это будет извращением.
вот я говорю - народ ждет пример . хорошо разжевали тему - так доведите пример до кондиции .
1
UltraRedMan
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 19:24  [ТС] 30
ойойой))) спасибо!!!))
0
legos91
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 4
15.02.2013, 04:06 31
Проще сделать шифрование всех символов, не только алфавит.
Вот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int T;
        AnsiString buff = Edit1->Text;//Начальное слово
        int key  = StrToInt(Edit2->Text);//Ключ(Сдвиг)
        for (int i = 1;i<=buff.Length();i++)
                {
                        T = ((unsigned char)buff[i] + key);//Смещение на key
                        if (T >= 256) T=T-255;//Если ключ больше 256(Таблица символов ASCII)
                        buff[ i ] = (char)T;//Новое значение
                }
        Edit3->Text = buff;//Результат 
}
0
legos91
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 4
26.02.2013, 13:35 32
Можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
        int T;
        AnsiString buff = Edit1->Text;
        int key  = StrToInt(Edit2->Text);
        for (int i = 1;i<=buff.Length();i++)
                {
                        T = ((unsigned char)buff[i] + key);
                        if (T >= 256) T=T-255;
                        buff[ i ] = (char)T;
                }
        Edit3->Text = buff;
Шифруем со сдвигом на key символов
0
26.02.2013, 13:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 13:35

Найти частоту встречаемости следующих друг за другом символов "А", "В"и "С".
В заданном тексте найти частоту встречаемости следующих друг за другом...

С "build with runtime packages = false" программа перестает запускаться
Здравствуйте. Использую C++ Builder XE (2010). После снятия галочки пункта...

Курсовая работа на тему "Игровая программа Домино"
Здраствуйте помогите написать програмний продукт &quot;Домино&quot; і нарисовать...


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

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

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