Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54

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

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

Студворк — интернет-сервис помощи студентам
Всем привет!=)
В общем вот в чем суть..каждый день на парах, мы в ручную кодируем предложения...это в принципе не сложно, но очень долго и часто сбиваешься..появилась идея сделать программу в которую вводишь предложение и оно тебе его кодирует..Делаю в "Builder C++"..а теперь сама проблема, не могу понять как его так лучше сделать с программированием пока туговато...сама программа должна заменять буквы тоесть "а" заменяется на "к", "б" - "г" и т.д. я создал форму...фотка ниже..помогите кто чем может буду благодарен...
Миниатюры
Программа "шифрование послания"  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.11.2011, 15:13
Ответы с готовыми решениями:

Расшифрованное послания Цезаря
Если у кого есть наброски как сделать помогите чем можете вот условие : В первой строке ввода дан ключ - строка S...

Расшифровать содержимое послания
Шифровка Разведкой был перехвачен ряд шифровок, которые передавал Джеймс Бонд. Известно, что каждое послание зашифровано методом...

Криптография: расшифровать два послания
Без труда справившись с образцом тайнописи старинной дипломатии – ПАЙЦИКЕ ТСЮГ Т "КАМАЩАМЛТОЙ ЧМАРОКЕ" – КАЙПОНИЛИ,...

31
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 00:06  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 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
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 00:15
Главное понять смысл, а какие переменные и методы использовать это уже третье дело. Каждый символ имеет свое значение от 0 до 254 (так как на самом деле является числом). Чтобы понять, что это значит можешь взглянуть на таблицу.
Input[index] - возвращает значение указанного символа и и используя это значение, как номер в массиве array, который заполнен символами в соотвествии с нужной кодировкой.
1
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 00:28  [ТС]
DefineTrueFalse, ага более мене понял...только не понял как производиться замена вставил код в билдер запустилось все нормально без ошибок...пишу в 1 мемо то что надо закодировать..нажимаю на кнопку но ничего не происходит..((
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 00:33
Так тебе нужно заполнить массив Array кодировкой. В общем, сейчас пример накатаю.
1
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 01:14
При создании формы, заполняем наш массив кодировкой. В данном случае, я заполнил "от балды".
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
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 01:24  [ТС]
DefineTrueFalse, ОГО!! Круто спасибо!!!!
...а можно теперь как то чтобы оно его кодировало не символами, а тоже буквами но со смещением как метод Цезаря ??
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.11.2011, 01:28
ну, и вот это
заполнил "от балды"
не понятно - это как ? и как правильно ?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.11.2011, 02:16
Цитата Сообщение от 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
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.11.2011, 02:22
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Как минимум получать массив кодировки из текстового поля, а лучше из файла (или вообще мазохистким способом - статистически).

Можно заполнить в соотвествии с условием, но для этой задачи, это будет извращением.
вот я говорю - народ ждет пример . хорошо разжевали тему - так доведите пример до кондиции .
1
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
16.11.2011, 19:24  [ТС]
ойойой))) спасибо!!!))
0
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 4
15.02.2013, 04:06
Проще сделать шифрование всех символов, не только алфавит.
Вот пример
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
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 4
26.02.2013, 13:35
Можно сделать так
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2013, 13:35
Помогаю со студенческими работами здесь

Как происходит процесс послания сигнала?
Вот я пишу kill(pid1, SIGUSR1), что в ядре происходит, как ядро посылает сигнал? И что происходит в ядре, во время обработки сигнала...

Шифровальщик прошелся по диску, переименовал и оставил текстовые послания
Добрый день, шифровальщик прошелся по диску, переименовал и оставил текстовые послания. Windows 8.1, был открыт RDP (учетка с...

Петя придумал шифр — все символы послания он заменяет буквой П
1 задача- Петя придумал шифр — все символы послания он заменяет буквой П. Дано послание. Выведи его зашифрованную версию. ввод- ...

Шифрование: программа пропускает первую букву 'а'
При выполнения алгоритма пропускает первую букву 'а', как можно исправить это? программирую на c++ builder. int nom; nom=48; for...

Программа шифрование, сравнение строковых массивов
Пользователь вводит строку, эта строка сравниваеться с строковым массивом и новой строке присваиваются i-е числа массива Массив алфавита...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru