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

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

14.11.2011, 15:13. Показов 4413. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru