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

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

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

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

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

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

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

31
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
14.11.2011, 16:19
ну так че тут тугого?
пишешь функцию которая принимает исходный текст, кодирует его, возвращает закодированный.
и обратную.
0
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
14.11.2011, 16:25  [ТС]
sandye51
а можно хоть пример какой то, или код похожей программки, а то что то я не понимаю...
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.11.2011, 16:31
Пример:

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
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <cstring>
 
/* ищет аргумент operator() в std::map по ключу     *
 * если элемент с таким ключом был найден, заменяет *
 * аргумент operator() на значение этого элемента   */
template <typename Char_t>
struct replace_by_key
{
protected:
    typedef std::map<Char_t, Char_t> repl_map;
    repl_map * table_ptr;
 
public:
    replace_by_key( repl_map * ptr ) : table_ptr( ptr ){};
    void operator() ( Char_t &ch )
    {
        typename repl_map::const_iterator it = table_ptr->find( ch );
 
        if( it != table_ptr->end() )
           ch = it->second;
    }
};
 
/* ищет аргумент operator() в std::map по значению     *
 * если элемент с таким значением был найден, заменяет *
 * аргумент operator() на ключ этого элемента          */
template <typename Char_t>
struct replace_by_value
{
protected:
    typedef std::map<Char_t, Char_t> repl_map;
    repl_map * table_ptr;
 
public:
    replace_by_value( repl_map * ptr ) : table_ptr( ptr ){};
    void operator() ( Char_t &ch )
    {
        typename repl_map::const_iterator it = table_ptr->begin();
 
        while( it->second != ch && it != table_ptr->end() ) it++;
 
        if( it != table_ptr->end() )
           ch = it->first;
    }
};
 
int main( int argc, char ** argv )
{
    std::map<char, char> replace_table;
 
    // алфавит замены
    replace_table['a'] = 'b';
    replace_table['b'] = 'c';
    replace_table['c'] = 'd';
    replace_table['d'] = 'e';
    replace_table['e'] = 'f';
    replace_table['f'] = 'g';
    replace_table['g'] = 'h';
    replace_table['h'] = 'i';
    replace_table['i'] = 'j';
    replace_table['j'] = 'k';
    replace_table['k'] = 'l';
    replace_table['l'] = 'm';
    replace_table['m'] = 'n';
    replace_table['n'] = 'o';
    replace_table['o'] = 'p';
    replace_table['p'] = 'q';
    replace_table['q'] = 'r';
    replace_table['r'] = 's';
    replace_table['s'] = 't';
    replace_table['t'] = 'u';
    replace_table['u'] = 'v';
    replace_table['v'] = 'w';
    replace_table['w'] = 'x';
    replace_table['x'] = 'y';
    replace_table['y'] = 'z';
    replace_table['z'] = 'a';
    // ...
 
    // шифруем std::string
    std::string to_crypt;
    std::cout << "testing std::string encryption/decryption\n>";
    getline( std::cin, to_crypt );
 
    std::for_each( to_crypt.begin(), to_crypt.end(), replace_by_key<char>( &replace_table ) );
    std::cout << to_crypt << '\n';
 
    std::for_each( to_crypt.begin(), to_crypt.end(), replace_by_value<char>( &replace_table ) );
    std::cout << to_crypt << '\n';
 
 
    // шифруем буфер char
    char buffer[256];
    std::cout << "\ntesting asciiz string encryption/decryption\n>";
    std::cin.getline( buffer, 256 );
    size_t buffer_lng = strlen( buffer );
 
    std::for_each( buffer, &buffer[ buffer_lng ], replace_by_key<char>( &replace_table ) );
    std::cout << buffer << '\n';
 
    std::for_each( buffer, &buffer[ buffer_lng ], replace_by_value<char>( &replace_table ) );
    std::cout << buffer << '\n';
 
    return 0;
}
1
 Аватар для Dar101
40 / 40 / 7
Регистрация: 12.05.2011
Сообщений: 109
14.11.2011, 16:40
Пример под WinForms, если понадобится (начал писать до того, как тему перенесли).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
        textBox2->Text = "";
        String^ tb1 = textBox1->Text;
        for(int i=0; i<textBox1->TextLength;i++)
        {
            if      (tb1[i] == L'а') textBox2->Text += "к";
            else if (tb1[i] == L'б') textBox2->Text += "г";
            //...
            else textBox2->Text += tb1[i];
        }
    }
1
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
14.11.2011, 17:05  [ТС]
Цитата Сообщение от Dar101 Посмотреть сообщение
Пример под WinForms, если понадобится (начал писать до того, как тему перенесли).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
        textBox2->Text = "";
        String^ tb1 = textBox1->Text;
        for(int i=0; i<textBox1->TextLength;i++)
        {
            if      (tb1[i] == L'а') textBox2->Text += "к";
            else if (tb1[i] == L'б') textBox2->Text += "г";
            //...
            else textBox2->Text += tb1[i];
        }
    }
Тоисть я первое поле переименовываю под textBox1 а второе поле под textBox2 правильно? ну сам код я применяю к button1...
а мне выкидывает ошибку
Миниатюры
Программа "шифрование послания"  
0
 Аватар для Dar101
40 / 40 / 7
Регистрация: 12.05.2011
Сообщений: 109
14.11.2011, 17:22
у вас проект другого типа — пример был под WinForms, просто чтобы логику показать.
0
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
14.11.2011, 17:25  [ТС]
Dar101
а все понял не прочитал сначала что выше) но спасиб уже более менее разобрался что к чему
0
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
15.11.2011, 18:24  [ТС]
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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 test;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject Sender)
{
 
Edit2->Text = "";
String tb = Edit1->Text;
for(int i=1; i<Edit1->Text.Length();i++)
{
if (tb[i] == L'A') tb[i]=L'q' ;
else if (tb[i] == L'B') tb[i]=L'w' ;
else if (tb[i] == L'C') tb[i]=L'e' ;
else if (tb[i] == L'D') tb[i]=L'r' ;
else if (tb[i] == L'E') tb[i]=L't' ;
else if (tb[i] == L'F') tb[i]=L'y' ;
else if (tb[i] == L'G') tb[i]=L'u' ;
else if (tb[i] == L'H') tb[i]=L'i' ;
else if (tb[i] == L'I') tb[i]=L'o' ;
else if (tb[i] == L'J') tb[i]=L'p' ;
else if (tb[i] == L'K') tb[i]=L'a' ;
else if (tb[i] == L'L') tb[i]=L's' ;
else if (tb[i] == L'M') tb[i]=L'd' ;
else if (tb[i] == L'N') tb[i]=L'f' ;
else if (tb[i] == L'O') tb[i]=L'g' ;
else if (tb[i] == L'P') tb[i]=L'h' ;
else if (tb[i] == L'Q') tb[i]=L'j' ;
else if (tb[i] == L'R') tb[i]=L'k' ;
else if (tb[i] == L'S') tb[i]=L'l' ;
else if (tb[i] == L'T') tb[i]=L'z' ;
else if (tb[i] == L'U') tb[i]=L'x' ;
else if (tb[i] == L'V') tb[i]=L'c' ;
else if (tb[i] == L'W') tb[i]=L'v' ;
else if (tb[i] == L'X') tb[i]=L'b' ;
else if (tb[i] == L'Y') tb[i]=L'n' ;
else if (tb[i] == L'Z') tb[i]=L'm' ; }
Edit2->Text = tb;
 
}
вот сделал все работает))) всем спасибо за примеры!!!=))
вот только как сделать, чтобы он не только латиницу мог а и кириллицу воспринимать???
1
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
15.11.2011, 22:12
UltraRedMan, "очень производительно"
0
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
15.11.2011, 22:13  [ТС]
Цитата Сообщение от sandye51 Посмотреть сообщение
UltraRedMan, "очень производительно"
в смысле?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.11.2011, 22:17
sandye51, я от вас, кроме "общих рассуждений" типа
ну так че тут тугого?
пишешь функцию которая принимает исходный текст, кодирует его, возвращает закодированный.
и обратную.
и охаивания предложений других участников -
"очень производительно"
, в этой теме ничего толкового так и не услышал - если нечего сказать - лучше промолчать, имхо .

UltraRedMan, в том смысле, что код может быть оптимальнее, но у вас вполне приличный, и что главное, как вы говорите, рабочий код,

посмотрите в приложении примеры с транслитерацией , хотя в данном случае это неважно - принцип тот же - там есть по вашему вопросу
делфи, но в общем все понятно , что не понятно - спрашивайте.
Вложения
Тип файла: zip Translite.zip (528.0 Кб, 26 просмотров)
Тип файла: zip transliterator.zip (7.7 Кб, 22 просмотров)
1
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
15.11.2011, 22:30  [ТС]
LK
Огромное спасибо)

Добавлено через 52 секунды
Цитата Сообщение от LK Посмотреть сообщение
в том смысле, что код может быть оптимальнее
ну так как я начинающий то пойдет..)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.11.2011, 22:48
и, по-моему, ваш код прекрасно справляется с кириллицей:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm::Button1Click(TObject *Sender)
{
  String tb = "йцукен";
  for(int i=1; i<tb.Length()+1;i++) {
    if (tb[i] == L'й') tb[i]=L'q' ;
    else if (tb[i] == L'ц') tb[i]=L'w' ;
    else if (tb[i] == L'у') tb[i]=L'e' ;
    else if (tb[i] == L'к') tb[i]=L'r' ;
    else if (tb[i] == L'е') tb[i]=L't' ;
    else if (tb[i] == L'н') tb[i]=L'y' ;
  }
  ShowMessage(tb);
}
Миниатюры
Программа "шифрование послания"  
1
15.11.2011, 22:51

Не по теме:

Цитата Сообщение от LK Посмотреть сообщение
имхо
вот именно, что имхо. Поэтому оставь это при себе
Цитата Сообщение от LK Посмотреть сообщение
если нечего сказать - лучше промолчать
так вот бы и следовал этому


 Комментарий модератора 
sandye51, прекратите заниматься оффтопом.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.11.2011, 23:01
UltraRedMan, а оптимизировать можно, например, так:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm::Button1Click(TObject *Sender)
{
  String tb = "йцукен";
  String tb2 = "qwerty";
  for(int i=1; i<tb.Length()+1;i++) {
    tb[i] = tb2[i];
  }
  ShowMessage(tb);
}
1
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
15.11.2011, 23:16  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
UltraRedMan, а оптимизировать можно, например, так:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm::Button1Click(TObject *Sender)
{
  String tb = "йцукен";
  String tb2 = "qwerty";
  for(int i=1; i<tb.Length()+1;i++) {
    tb[i] = tb2[i];
  }
  ShowMessage(tb);
}
да так проще, но оно не шифрует побуквенно..
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.11.2011, 23:39
да, наверное, я зря убрал условие.
1
8 / 8 / 0
Регистрация: 15.04.2010
Сообщений: 54
15.11.2011, 23:47  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
да, наверное, я зря убрал условие.
так да) без условия никак..
1
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
15.11.2011, 23:58
Оптимизируется очень просто, при кодировании используется массив 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;
//...
При де-кодировании аналогично.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2011, 23:58
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru