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

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

14.11.2011, 15:13. Показов 4382. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru