Создание дешифратора на СИ!

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Spider545, 3 Oct 2009.

  1. Spider545

    Spider545 New Member

    Joined:
    10 Apr 2009
    Messages:
    26
    Likes Received:
    2
    Reputations:
    0
    Создание дешифратора на СИ! Студентам))))

    Все кто любит поломать голову, приветствую вас)))))
    Нужно разработать программу, взламывающую шифр, основываясь на статистике естественного языка.

    Дан шифротекст и размер блока. Требуется получить открытый текст и ключ — последовательность перестановки символов (получить автоматически).

    Текст должен расшифровываться по методу двойной перестановки.
    Пример:
    1 2 3 4
    1 A З Ю Ж
    2 E С Ш
    3 Г T О О
    4 И П E P

    Рассматривая маловероятные сочетания букв, легко найти истинную последовательность столбцов. Так, сочетание ГТ в 3 строке шифровки указывает на то, что после 1 столбца вряд ли следует 2 столбец. Рассчитаем статистически, какой столбец скорее всего следует за 1. Для этого воспользуемся таблицей логарифмов вероятностей биграмм русского текста, приведенной в приложении. Вероятность следования одного столбца за другим равна произведению вероятностей биграмм в строках этих столбцов. Поскольку в таблице даны логарифмы биграмм, то их достаточно суммировать, а потом выбрать сочетание столбцов с максимальной вероятностью. Для вероятностей следования за первым столбцом 2, 3 и 4 имеем выражения:
    р (1-2) =р(A3) р(Е ) р(ГТ) р(ИП)=7+9+0+5=21
    р (1-3) =р(АЮ) р(ЕС) р(ГО) р(ИЕ)=6+8+8+8=30
    р (1-4 )=р(АЖ) р(ЕШ) р(ГО) р(ЯР)=7+5+8+7=27

    В нашем случае наиболее вероятно, что после столбца 1 следует столбец 3. Для такой небольшой таблицы шифрования, которую имеем, можно перебрать все варианты перестановок - их всего лишь 24. В случае большого числа столбцов целесообразно оценить вероятности пар сочетаний разных столбцов и решить оптимизационную задачу, которая укажет перестановку столбцов, дающую фрагменты естественного текста с большей вероятностью. В нашем случае наилучший результат достигается при расстановке столбцов (2413), что примерно вдвое по вероятностной оценке достовернее ближайшей к ней по вероятности расстановки (4132). После того, как столбцы шифровки расставлены, не составит труда правильно расставить и ее строки по смыслу фрагментов текста:
    2 4 1 3
    1 З Ж A Ю
    2 Ш E С
    3 T О Г О
    4 П P И E
    Текст в ней уже читается и, расставив строки в порядке (4123), получим расшифровку ПРИЕЗЖАЮ ШЕСТОГО.


    Статистика распределения частот символов
    [(8028,' '), (10,'!'), (6,'%'), (70,'('), (70,')'), (836,','), (116,'-'), (432,'.'), (10,'0'), (4,'1'), (2,'2'), (2,'4'), (2,'6'), (2,'7'), (8,'9'), (28,':'), (10,';'), (4,'?'), (18,'А'), (6,'Б'), (76,'В'), (2,'Г'), (26,'Д'), (14,'Е'), (22,'З'), (54,'И'), (40,'К'), (8,'Л'), (18,'М'), (50,'Н'), (60,'О'), (56,'П'), (12,'Р'), (58,'С'), (20,'Т'), (12,'У'), (4,'Ф'), (10,'Х'), (2,'Ц'), (2,'Ч'), (8,'Ш'), (18,'Э'), (2,'Ю'), (4,'Я'), (3650,'а'), (816,'б'), (2060,'в'), (608,'г'), (1186,'д'), (4700,'е'), (424,'ж'), (984,'з'), (4188,'и'), (514,'й'), (1664,'к'), (1954,'л'), (1828,'м'), (3640,'н'), (5772,'о'), (1432,'п'), (2222,'р'), (2868,'с'), (3706,'т'), (1258,'у'), (244,'ф'), (482,'х'), (278,'ц'), (734,'ч'), (196,'ш'), (366,'щ'), (16,'ъ'), (1100,'ы'), (938,'ь'), (152,'э'), (450,'ю'), (914,'я')]
    Статистика распределения частот пар символов
    [(2," "), (70," ("), (74," -"), (4," 1"), (2," 2"), (2," 4"), (2," 6"), (4," 9"), (14," А"), (6," Б"), (74," В"), (2," Г"), (26," Д"), (14," Е"), (22," З"), (42," И"), (40," К"), (8," Л"), (14," М"), (48," Н"), (54," О"), (56," П"), (12," Р"), (36," С"), (18," Т"), (12," У"), (4," Ф"), (10," Х"), (2," Ц"), (2," Ч"), (6," Ш"), (16," Э"), (2," Ю"), (4," Я"), (162," а"), (294," б"), (652," в"), (72," г"), (284," д"), (88," е"), (36," ж"), (204," з"), (652," и"), (472," к"), (94," л"), (228," м"), (548," н"), (556," о"), (816," п"), (218," р"), (828," с"), (372," т"), (222," у"), (20," ф"), (76," х"), (44," ц"), (220," ч"), (16," ш"), (142," э"), (6," ю"), (26," я"), (6,"! "), (4,"!)"), (6,"% "), (2,"(В"), (4,"(в"), (2,"(г"), (2,"(е"), (12,"(и"), (4,"(к"), (2,"(л"), (4,"(м"), (8,"(н"), (10,"(о"), (2,"(п"), (2,"(р"), (4,"(с"), (2,"(т"), (4,"(у"), (6,"(х"), (28,") "), (18,"),"), (22,")."), (2,");"), (834,", "), (2,",-"), (76,"- "), (4,"-в"), (6,"-з"), (2,"-к"), (4,"-л"), (2,"-м"), (6,"-н"), (6,"-п"), (8,"-т"), (2,"-ч"), (415,". "), (6,".)"), (8,".."), (2,".п"), (4,"0 "), (6,"0%"), (2,"10"), (2,"19"), (2,"20"), (2,"4)"), (2,"60"), (2,"7 "), (4,"90"), (2,"97"), (2,"99"), (28,": "), (10,"; "), (4,"? "), (2,"А "), (2,"А."), (2,"АО"), (2,"АТ"), (2,"АЭ"), (2,"Ар"), (6,"Ат"), (2,"Бо"), (4,"Бы"), (34,"В "), (20,"ВС"), (2,"Ва"), (2,"Ве"), (2,"Вз"), (4,"Во"), (8,"Вс"), (4,"Вы"), (2,"Гл"), (12,"Да"), (4,"Де"), (4,"Дл"), (6,"Др"), (4,"Ег"), (10,"Ес"), (12,"За"), (6,"Зв"), (2,"Зи"), (2,"Зн"), (8,"И "), (6,"И,"), (2,"И:"), (2,"Иг"), (4,"Из"), (4,"Им"), (4,"Ин"), (10,"Ис"), (8,"Ит"), (6,"Их"), (8,"К "), (10,"Ка"), (2,"Ке"), (16,"Ко"), (4,"Кр"), (8,"Ле"), (4,"МИ"), (2,"Ме"), (6,"Ми"), (2,"Мн"), (2,"Мо"), (2,"Мы"), (2,"Н "), (2,"НА"), (16,"На"), (12,"Не"), (2,"Ни"), (14,"Но"), (2,"Ну"), (2,"О "), (2,"О)"), (2,"ОН"), (6,"Об"), (10,"Од"), (8,"Он"), (22,"Ос"), (2,"От"), (6,"Оч"), (2,"ПО"), (30,"По"), (24,"Пр"), (2,"Ра"), (8,"Ре"), (2,"Ро"), (20,"С "), (2,"С)"), (8,"С,"), (8,"СИ"), (4,"СМ"), (2,"СШ"), (4,"Сл"), (8,"Со"), (2,"Су"), (2,"ТО"), (6,"Та"), (10,"Те"), (2,"Тр"), (2,"У "), (6,"Уг"), (2,"Уд"), (2,"Уя"), (2,"Фа"), (2,"Фр"), (2,"Ха"), (8,"Хо"), (2,"Це"), (2,"Чт"), (2,"ША"), (2,"Ши"), (4,"Шу"), (2,"ЭС"), (2,"Эк"), (14,"Эт"), (2,"Юг"), (2,"Я "), (2,"Яр"), (466,"а "), (2,"а!"), (8,"а)"), (54,"а,"), (4,"а-"), (36,"а."), (6,"а:"), (2,"а;"), (54,"аб"), (124,"ав"), (14,"аг"), (72,"ад"), (114,"ае"), (58,"аж"), (154,"аз"), (24,"аи"), (26,"ай"), (422,"ак"), (270,"ал"), (174,"ам"), (350,"ан"), (32,"ап"), (86,"ар"), (204,"ас"), (372,"ат"), (4,"ау"), (2,"аф"), (44,"ах"), (140,"ац"), (74,"ач"), (28,"аш"), (86,"ащ"), (48,"аю"), (96,"ая"), (18,"б "), (2,"б."), (38,"ба"), (176,"бе"), (2,"бж"), (8,"би"), (2,"бк"), (34,"бл"), (2,"бм"), (28,"бн"), (140,"бо"), (44,"бр"), (32,"бс"), (50,"бу"), (24,"бх"), (30,"бщ"), (12,"бъ"), (158,"бы"), (16,"бя"), (312,"в "), (2,"в!"), (2,"в)"), (42,"в,"), (2,"в-"), (8,"в."), (4,"в;"), (350,"ва"), (4,"вв"), (10,"вд"), (256,"ве"), (64,"вз"), (158,"ви"), (12,"вк"), (96,"вл"), (4,"вм"), (86,"вн"), (298,"во"), (2,"вп"), (22,"вр"), (88,"вс"), (12,"вт"), (34,"ву"), (2,"вх"), (18,"вш"), (154,"вы"), (18,"вя"), (2,"г-"), (52,"га"), (30,"гд"), (12,"ге"), (58,"ги"), (6,"гк"), (22,"гл"), (2,"гм"), (6,"гн"), (308,"го"), (86,"гр"), (24,"гу"), (22,"д "), (4,"д,"), (2,"д."), (160,"да"), (2,"дб"), (22,"дв"), (8,"дд"), (248,"де"), (106,"ди"), (4,"дк"), (74,"дл"), (16,"дм"), (128,"дн"), (178,"до"), (8,"дп"), (38,"др"), (32,"дс"), (4,"дт"), (76,"ду"), (2,"дх"), (2,"дч"), (2,"дъ"), (16,"ды"), (16,"дь"), (16,"дя"), (882,"е "), (4,"е!"), (8,"е)"), (66,"е,"), (2,"е-"), (22,"е."), (26,"еа"), (44,"еб"), (66,"ев"), (118,"ег"), (228,"ед"), (82,"ее"), (38,"еж"), (134,"ез"), (4,"еи"), (138,"ей"), (80,"ек"), (356,"ел"), (310,"ем"), (686,"ен"), (36,"ео"), (22,"еп"), (398,"ер"), (344,"ес"), (402,"ет"), (10,"еу"), (28,"еф"), (36,"ех"), (20,"ец"), (62,"еч"), (24,"еш"), (14,"ещ"), (6,"ею"), (4,"ея"), (4,"ж "), (42,"жа"), (8,"жб"), (36,"жд"), (156,"же"), (44,"жи"), (12,"жк"), (110,"жн"), (2,"жо"), (10,"жу"), (36,"з "), (4,"з,"), (4,"з-"), (2,"з."), (252,"за"), (4,"зб"), (102,"зв"), (8,"зг"), (26,"зд"), (4,"зе"), (10,"зз"), (18,"зи"), (88,"зл"), (44,"зм"), (90,"зн"), (154,"зо"), (26,"зр"), (60,"зу"), (2,"зъ"), (38,"зы"), (2,"зь"), (2,"зю"), (8,"зя"), (866,"и "), (14,"и)"), (112,"и,"), (104,"и."), (8,"и:"), (38,"иа"), (36,"иб"), (82,"ив"), (22,"иг"), (54,"ид"), (264,"ие"), (2,"иж"), (136,"из"), (160,"ии"), (62,"ий"), (212,"ик"), (120,"ил"), (268,"им"), (226,"ин"), (68,"ио"), (14,"ип"), (82,"ир"), (320,"ис"), (366,"ит"), (42,"иф"), (122,"их"), (20,"иц"), (106,"ич"), (8,"иш"), (14,"ищ"), (44,"ию"), (196,"ия"), (380,"й "), (4,"й)"), (14,"й,"), (18,"й."), (2,"й:"), (4,"йд"), (2,"йл"), (14,"йн"), (44,"йс"), (24,"йт"), (2,"йч"), (6,"йш"), (184,"к "), (22,"к,"), (2,"к."), (2,"к:"), (248,"ка"), (14,"кв"), (108,"ке"), (16,"кж"), (170,"ки"), (2,"кк"), (40,"кл"), (20,"кн"), (530,"ко"), (112,"кр"), (10,"кс"), (88,"кт"), (86,"ку"), (10,"кц"), (58,"л "), (4,"л)"), (6,"л,"), (4,"л."), (136,"ла"), (2,"лг"), (326,"ле"), (32,"лж"), (408,"ли"), (6,"лк"), (4,"лл"), (14,"лн"), (248,"ло"), (122,"лу"), (20,"лы"), (360,"ль"), (54,"лю"), (150,"ля"), (310,"м "), (4,"м)"), (68,"м,"), (28,"м."), (2,"м:"), (2,"м?"), (186,"ма"), (268,"ме"), (192,"ми"), (16,"мл"), (36,"мм"), (70,"мн"), (234,"мо"), (126,"мп"), (2,"мс"), (102,"му"), (22,"мщ"), (146,"мы"), (14,"мя"), (56,"н "), (6,"н,"), (6,"н."), (484,"на"), (14,"нд"), (370,"не"), (6,"нж"), (720,"ни"), (46,"нк"), (330,"нн"), (856,"но"), (2,"нр"), (24,"нс"), (76,"нт"), (64,"ну"), (96,"нф"), (26,"нц"), (366,"ны"), (30,"нь"), (4,"ню"), (58,"ня"), (820,"о "), (2,"о!"), (130,"о,"), (24,"о-"), (22,"о."), (2,"о:"), (2,"о;"), (4,"оа"), (330,"об"), (556,"ов"), (254,"ог"), (220,"од"), (140,"ое"), (134,"ож"), (128,"оз"), (38,"ои"), (208,"ой"), (70,"ок"), (382,"ол"), (440,"ом"), (280,"он"), (26,"оо"), (174,"оп"), (316,"ор"), (502,"ос"), (366,"от"), (10,"оу"), (32,"оф"), (26,"ох"), (16,"оц"), (56,"оч"), (20,"ош"), (16,"ощ"), (8,"оэ"), (2,"ою"), (16,"оя"), (10,"п "), (6,"п."), (176,"па"), (110,"пе"), (16,"пи"), (2,"пк"), (16,"пл"), (6,"пн"), (514,"по"), (2,"пп"), (452,"пр"), (6,"пс"), (4,"пт"), (20,"пу"), (20,"пы"), (72,"пь"), (32,"р "), (2,"р)"), (18,"р,"), (2,"р?"), (552,"ра"), (6,"рб"), (22,"рв"), (34,"рг"), (4,"рд"), (310,"ре"), (16,"рж"), (190,"ри"), (12,"рк"), (2,"рл"), (102,"рм"), (86,"рн"), (480,"ро"), (4,"рп"), (2,"рр"), (28,"рс"), (6,"рт"), (166,"ру"), (2,"рх"), (2,"рч"), (96,"ры"), (16,"рь"), (30,"ря"), (96,"с "), (2,"с."), (54,"са"), (62,"св"), (10,"сд"), (178,"се"), (202,"си"), (148,"ск"), (218,"сл"), (16,"см"), (138,"сн"), (200,"со"), (170,"сп"), (20,"ср"), (68,"сс"), (944,"ст"), (80,"су"), (4,"сф"), (6,"сх"), (2,"сц"), (16,"сч"), (4,"сш"), (12,"сы"), (26,"сь"), (192,"ся"), (320,"т "), (42,"т,"), (22,"т."), (438,"та"), (236,"тв"), (20,"тд"), (602,"те"), (376,"ти"), (40,"тк"), (12,"тл"), (2,"тм"), (96,"тн"), (616,"то"), (194,"тр"), (142,"тс"), (2,"тт"), (60,"ту"), (6,"тч"), (64,"ты"), (400,"ть"), (16,"тя"), (162,"у "), (24,"у,"), (2,"у-"), (10,"у."), (6,"уа"), (12,"уб"), (14,"ув"), (66,"уг"), (124,"уд"), (54,"уе"), (80,"уж"), (10,"уз"), (2,"уи"), (10,"уй"), (40,"ук"), (16,"ул"), (42,"ум"), (10,"ун"), (46,"уп"), (50,"ур"), (50,"ус"), (72,"ут"), (2,"ух"), (96,"уч"), (14,"уш"), (60,"ущ"), (2,"уэ"), (142,"ую"), (40,"уя"), (8,"ф "), (2,"ф,"), (10,"фа"), (42,"фе"), (44,"фи"), (2,"фл"), (116,"фо"), (8,"фр"), (2,"фу"), (10,"фф"), (262,"х "), (2,"х)"), (26,"х,"), (8,"х."), (42,"ха"), (2,"хв"), (2,"хе"), (18,"хн"), (100,"хо"), (14,"хр"), (4,"хс"), (2,"ху"), (2,"ц "), (4,"ц,"), (8,"ца"), (2,"цд"), (60,"це"), (198,"ци"), (2,"цо"), (2,"цу"), (4,"ч "), (86,"ча"), (240,"че"), (140,"чи"), (8,"чк"), (82,"чн"), (2,"чр"), (142,"чт"), (18,"чу"), (6,"чш"), (6,"чь"), (6,"ш "), (18,"ша"), (70,"ше"), (44,"ши"), (2,"шк"), (12,"шл"), (14,"шн"), (14,"шо"), (12,"шу"), (4,"шь"), (18,"ща"), (142,"ще"), (188,"щи"), (2,"щн"), (10,"щу"), (6,"щь"), (8,"ъе"), (8,"ъя"), (262,"ы "), (44,"ы,"), (28,"ы."), (2,"ы:"), (46,"ыв"), (6,"ыд"), (166,"ые"), (8,"ыз"), (70,"ый"), (2,"ык"), (48,"ыл"), (102,"ым"), (2,"ын"), (6,"ып"), (2,"ыр"), (18,"ыс"), (78,"ыт"), (122,"ых"), (60,"ыч"), (22,"ыш"), (6,"ыя"), (366,"ь "), (36,"ь,"), (26,"ь."), (2,"ь:"), (2,"ьб"), (2,"ьг"), (10,"ье"), (82,"ьз"), (4,"ьи"), (46,"ьк"), (4,"ьм"), (160,"ьн"), (52,"ьс"), (12,"ьт"), (26,"ьш"), (106,"ью"), (2,"ья"), (4,"эк"), (8,"эл"), (2,"эн"), (2,"эр"), (124,"эт"), (10,"эф"), (2,"эх"), (106,"ю "), (20,"ю,"), (16,"ю."), (18,"юб"), (18,"юд"), (8,"юм"), (4,"юс"), (138,"ют"), (20,"юч"), (102,"ющ"), (506,"я "), (6,"я)"), (60,"я,"), (26,"я."), (42,"яв"), (4,"яд"), (42,"яе"), (4,"яж"), (42,"яз"), (6,"як"), (6,"ял"), (18,"ям"), (8,"ян"), (2,"яр"), (12,"яс"), (60,"ят"), (4,"ях"), (4,"яч"), (4,"яш"), (22,"ящ"), (36,"яю")]
     
    #1 Spider545, 3 Oct 2009
    Last edited: 2 Nov 2009
    1 person likes this.
  2. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    Вы говорите "Текст должен расшифровываться по методу простой перестановки.", а сами рассказываете о двойной перестановке(когда помимо столбцов ещё и строки перемешиваются) Так что же конкретно нужно?

    P.S. "Статистика распределения частот символов" здесь не нужна, т.к. замена алфавита в этом методе шифрования не производится.
     
    1 person likes this.
  3. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    Ну нашу статистику мы помещаем в 2-у мерный массив
    arr[1][1]="Бо"; arr[1][2]="2";
    arr[2][1]="Бы"; arr[1][2]="4";
    (ну заносим конечно не таким методом, а более оптимальным)

    Ройте в направлении инициализации массивов.

    Ну а по поводу получения ключа у вас впринципе всё написано в шапке темы...
    Загоняем текст в двумерный массив и сравниваем между собой его элементы...
     
  4. Spider545

    Spider545 New Member

    Joined:
    10 Apr 2009
    Messages:
    26
    Likes Received:
    2
    Reputations:
    0
    В общем вот такая рабочая программка:

    Unit1.cpp:

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit3.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
    Memo1->Clear();
    if (OpenDialog1->Execute())
    Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::BitBtn2Click(TObject *Sender)
    {
    struct{
    int n; //вероятность бирграмы
    char bigrama[2];} //сама биграма
    str[811]={
    {2," "}, {70," ("}, {74," -"}, {4," 1"}, {2," 2"}, {2," 4"}, {2," 6"},
    {4," 9"}, {14," А"}, {6," Б"}, {74," В"}, {2," Г"}, {26," Д"}, {14," Е"},
    {22," З"}, {42," И"}, {40," К"}, {8," Л"}, {14," М"}, {48," Н"}, {54," О"},
    {56," П"}, {12," Р"}, {36," С"}, {18," Т"}, {12," У"}, {4," Ф"}, {10," Х"},
    {2," Ц"}, {2," Ч"}, {6," Ш"}, {16," Э"}, {2," Ю"}, {4," Я"}, {162," а"},
    {294," б"}, {652," в"}, {72," г"}, {284," д"}, {88," е"}, {36," ж"}, {204," з"},
    {652," и"}, {472," к"}, {94," л"}, {228," м"}, {548," н"}, {556," о"},
    {816," п"}, {218," р"}, {828," с"}, {372," т"}, {222," у"}, {20," ф"},
    {76," х"}, {44," ц"}, {220," ч"}, {16," ш"}, {142," э"}, {6," ю"}, {26," я"},
    {6,"! "}, {4,"!)"}, {6,"% "}, {2,"(В"}, {4,"(в"}, {2,"(г"}, {2,"(е"}, {12,"(и"},
    {4,"(к"}, {2,"(л"}, {4,"(м"}, {8,"(н"}, {10,"(о"}, {2,"(п"}, {2,"(р"}, {4,"(с"},
    {2,"(т"}, {4,"(у"}, {6,"(х"}, {28,") "}, {18,"),"}, {22,")."}, {2,");"},
    {834,", "}, {2,",-"}, {76,"- "}, {4,"-в"}, {6,"-з"}, {2,"-к"}, {4,"-л"},
    {2,"-м"}, {6,"-н"}, {6,"-п"}, {8,"-т"}, {2,"-ч"}, {415,". "}, {6,".)"},
    {8,".."}, {2,".п"}, {4,"0 "}, {6,"0%"}, {2,"10"}, {2,"19"}, {2,"20"}, {2,"4}"},
    {2,"60"}, {2,"7 "}, {4,"90"}, {2,"97"}, {2,"99"}, {28,": "}, {10,"; "},
    {4,"? "}, {2,"А "}, {2,"А."}, {2,"АО"}, {2,"АТ"}, {2,"АЭ"}, {2,"Ар"}, {6,"Ат"},
    {2,"Бо"}, {4,"Бы"}, {34,"В "}, {20,"ВС"}, {2,"Ва"}, {2,"Ве"}, {2,"Вз"},
    {4,"Во"}, {8,"Вс"}, {4,"Вы"}, {2,"Гл"}, {12,"Да"}, {4,"Де"}, {4,"Дл"},
    {6,"Др"}, {4,"Ег"}, {10,"Ес"}, {12,"За"}, {6,"Зв"}, {2,"Зи"}, {2,"Зн"},
    {8,"И "}, {6,"И,"}, {2,"И:"}, {2,"Иг"}, {4,"Из"}, {4,"Им"}, {4,"Ин"},
    {10,"Ис"}, {8,"Ит"}, {6,"Их"}, {8,"К "}, {10,"Ка"}, {2,"Ке"}, {16,"Ко"},
    {4,"Кр"}, {8,"Ле"}, {4,"МИ"}, {2,"Ме"}, {6,"Ми"}, {2,"Мн"}, {2,"Мо"},
    {2,"Мы"}, {2,"Н "}, {2,"НА"}, {16,"На"}, {12,"Не"}, {2,"Ни"}, {14,"Но"},
    {2,"Ну"}, {2,"О "}, {2,"О}"}, {2,"ОН"}, {6,"Об"}, {10,"Од"}, {8,"Он"},
    {22,"Ос"}, {2,"От"}, {6,"Оч"}, {2,"ПО"}, {30,"По"}, {24,"Пр"}, {2,"Ра"},
    {8,"Ре"}, {2,"Ро"}, {20,"С "}, {2,"С}"}, {8,"С,"}, {8,"СИ"}, {4,"СМ"}, {2,"СШ"},
    {4,"Сл"}, {8,"Со"}, {2,"Су"}, {2,"ТО"}, {6,"Та"}, {10,"Те"}, {2,"Тр"}, {2,"У "},
    {6,"Уг"}, {2,"Уд"}, {2,"Уя"}, {2,"Фа"}, {2,"Фр"}, {2,"Ха"}, {8,"Хо"}, {2,"Це"},
    {2,"Чт"}, {2,"ША"}, {2,"Ши"}, {4,"Шу"}, {2,"ЭС"}, {2,"Эк"}, {14,"Эт"}, {2,"Юг"},
    {2,"Я "}, {2,"Яр"}, {466,"а "}, {2,"а!"}, {8,"а}"}, {54,"а,"}, {4,"а-"},
    {36,"а."}, {6,"а:"}, {2,"а;"}, {54,"аб"}, {124,"ав"}, {14,"аг"}, {72,"ад"},
    {114,"ае"}, {58,"аж"}, {154,"аз"}, {24,"аи"}, {26,"ай"}, {422,"ак"}, {270,"ал"},
    {174,"ам"}, {350,"ан"}, {32,"ап"}, {86,"ар"}, {204,"ас"}, {372,"ат"}, {4,"ау"},
    {2,"аф"}, {44,"ах"}, {140,"ац"}, {74,"ач"}, {28,"аш"}, {86,"ащ"}, {48,"аю"},
    {96,"ая"}, {18,"б "}, {2,"б."}, {38,"ба"}, {176,"бе"}, {2,"бж"}, {8,"би"},
    {2,"бк"}, {34,"бл"}, {2,"бм"}, {28,"бн"}, {140,"бо"}, {44,"бр"}, {32,"бс"},
    {50,"бу"}, {24,"бх"}, {30,"бщ"},
    {12,"бъ"}, {158,"бы"}, {16,"бя"}, {312,"в "}, {2,"в!"}, {2,"в}"}, {42,"в,"},
    {2,"в-"}, {8,"в."}, {4,"в;"}, {350,"ва"}, {4,"вв"}, {10,"вд"}, {256,"ве"},
    {64,"вз"}, {158,"ви"}, {12,"вк"}, {96,"вл"}, {4,"вм"}, {86,"вн"}, {298,"во"},
    {2,"вп"}, {22,"вр"}, {88,"вс"}, {12,"вт"}, {34,"ву"}, {2,"вх"}, {18,"вш"},
    {154,"вы"}, {18,"вя"}, {2,"г-"}, {52,"га"}, {30,"гд"}, {12,"ге"}, {58,"ги"},
    {6,"гк"}, {22,"гл"}, {2,"гм"}, {6,"гн"}, {308,"го"}, {86,"гр"}, {24,"гу"},
    {22,"д "}, {4,"д,"}, {2,"д."}, {160,"да"}, {2,"дб"}, {22,"дв"}, {8,"дд"},
    {248,"де"}, {106,"ди"}, {4,"дк"}, {74,"дл"}, {16,"дм"}, {128,"дн"}, {178,"до"},
    {8,"дп"}, {38,"др"}, {32,"дс"}, {4,"дт"}, {76,"ду"}, {2,"дх"}, {2,"дч"},
    {2,"дъ"}, {16,"ды"}, {16,"дь"}, {16,"дя"}, {882,"е "}, {4,"е!"}, {8,"е}"},
    {66,"е,"}, {2,"е-"}, {22,"е."}, {26,"еа"}, {44,"еб"}, {66,"ев"}, {118,"ег"},
    {228,"ед"}, {82,"ее"}, {38,"еж"}, {134,"ез"}, {4,"еи"}, {138,"ей"}, {80,"ек"},
    {356,"ел"}, {310,"ем"}, {686,"ен"}, {36,"ео"}, {22,"еп"}, {398,"ер"},
    {344,"ес"}, {402,"ет"}, {10,"еу"}, {28,"еф"}, {36,"ех"}, {20,"ец"}, {62,"еч"},
    {24,"еш"}, {14,"ещ"}, {6,"ею"}, {4,"ея"}, {4,"ж "}, {42,"жа"}, {8,"жб"},
    {36,"жд"}, {156,"же"}, {44,"жи"}, {12,"жк"}, {110,"жн"}, {2,"жо"}, {10,"жу"},
    {36,"з "}, {4,"з,"}, {4,"з-"}, {2,"з."}, {252,"за"}, {4,"зб"}, {102,"зв"},
    {8,"зг"}, {26,"зд"}, {4,"зе"}, {10,"зз"}, {18,"зи"}, {88,"зл"}, {44,"зм"},
    {90,"зн"}, {154,"зо"}, {26,"зр"}, {60,"зу"}, {2,"зъ"}, {38,"зы"}, {2,"зь"},
    {2,"зю"}, {8,"зя"}, {866,"и "}, {14,"и}"}, {112,"и,"}, {104,"и."}, {8,"и:"},
    {38,"иа"}, {36,"иб"}, {82,"ив"}, {22,"иг"}, {54,"ид"}, {264,"ие"}, {2,"иж"},
    {136,"из"}, {160,"ии"}, {62,"ий"}, {212,"ик"}, {120,"ил"}, {268,"им"},
    {226,"ин"}, {68,"ио"}, {14,"ип"}, {82,"ир"}, {320,"ис"}, {366,"ит"}, {42,"иф"},
    {122,"их"}, {20,"иц"}, {106,"ич"}, {8,"иш"}, {14,"ищ"}, {44,"ию"}, {196,"ия"},
    {380,"й "}, {4,"й}"}, {14,"й,"}, {18,"й."}, {2,"й:"}, {4,"йд"}, {2,"йл"},
    {14,"йн"}, {44,"йс"}, {24,"йт"}, {2,"йч"}, {6,"йш"}, {184,"к "}, {22,"к,"},
    {2,"к."}, {2,"к:"}, {248,"ка"}, {14,"кв"}, {108,"ке"}, {16,"кж"}, {170,"ки"},
    {2,"кк"}, {40,"кл"}, {20,"кн"}, {530,"ко"}, {112,"кр"}, {10,"кс"}, {88,"кт"},
    {86,"ку"}, {10,"кц"}, {58,"л "}, {4,"л}"}, {6,"л,"}, {4,"л."}, {136,"ла"},
    {2,"лг"}, {326,"ле"}, {32,"лж"}, {408,"ли"}, {6,"лк"}, {4,"лл"}, {14,"лн"},
    {248,"ло"}, {122,"лу"}, {20,"лы"}, {360,"ль"}, {54,"лю"}, {150,"ля"},
    {310,"м "}, {4,"м}"}, {68,"м,"}, {28,"м."}, {2,"м:"}, {2,"м?"}, {186,"ма"},
    {268,"ме"}, {192,"ми"}, {16,"мл"}, {36,"мм"}, {70,"мн"}, {234,"мо"}, {126,"мп"},
    {2,"мс"}, {102,"му"}, {22,"мщ"}, {146,"мы"}, {14,"мя"}, {56,"н "}, {6,"н,"},
    {6,"н."}, {484,"на"}, {14,"нд"}, {370,"не"}, {6,"нж"}, {720,"ни"}, {46,"нк"},
    {330,"нн"}, {856,"но"}, {2,"нр"}, {24,"нс"}, {76,"нт"}, {64,"ну"}, {96,"нф"},
    {26,"нц"}, {366,"ны"}, {30,"нь"}, {4,"ню"}, {58,"ня"}, {820,"о "}, {2,"о!"},
    {130,"о,"}, {24,"о-"}, {22,"о."}, {2,"о:"}, {2,"о;"}, {4,"оа"}, {330,"об"},
    {556,"ов"}, {254,"ог"}, {220,"од"}, {140,"ое"}, {134,"ож"}, {128,"оз"},
    {38,"ои"}, {208,"ой"}, {70,"ок"}, {382,"ол"}, {440,"ом"}, {280,"он"}, {26,"оо"},
    {174,"оп"}, {316,"ор"}, {502,"ос"}, {366,"от"}, {10,"оу"}, {32,"оф"}, {26,"ох"},
    {16,"оц"}, {56,"оч"}, {20,"ош"}, {16,"ощ"}, {8,"оэ"}, {2,"ою"}, {16,"оя"},
    {10,"п "}, {6,"п."}, {176,"па"}, {110,"пе"}, {16,"пи"}, {2,"пк"}, {16,"пл"},
    {6,"пн"}, {514,"по"}, {2,"пп"}, {452,"пр"}, {6,"пс"}, {4,"пт"}, {20,"пу"},
    {20,"пы"}, {72,"пь"}, {32,"р "}, {2,"р}"}, {18,"р,"}, {2,"р?"}, {552,"ра"},
    {6,"рб"}, {22,"рв"}, {34,"рг"}, {4,"рд"}, {310,"ре"}, {16,"рж"}, {190,"ри"},
    {12,"рк"}, {2,"рл"}, {102,"рм"}, {86,"рн"}, {480,"ро"}, {4,"рп"}, {2,"рр"},
    {28,"рс"}, {6,"рт"}, {166,"ру"}, {2,"рх"}, {2,"рч"}, {96,"ры"}, {16,"рь"},
    {30,"ря"}, {96,"с "}, {2,"с."}, {54,"са"}, {62,"св"}, {10,"сд"}, {178,"се"},
    {202,"си"}, {148,"ск"}, {218,"сл"}, {16,"см"}, {138,"сн"}, {200,"со"},
    {170,"сп"}, {20,"ср"}, {68,"сс"}, {944,"ст"}, {80,"су"}, {4,"сф"}, {6,"сх"},
    {2,"сц"}, {16,"сч"}, {4,"сш"}, {12,"сы"}, {26,"сь"}, {192,"ся"}, {320,"т "},
    {42,"т,"}, {22,"т."}, {438,"та"}, {236,"тв"}, {20,"тд"}, {602,"те"}, {376,"ти"},
    {40,"тк"}, {12,"тл"}, {2,"тм"}, {96,"тн"}, {616,"то"}, {194,"тр"}, {142,"тс"},
    {2,"тт"}, {60,"ту"}, {6,"тч"}, {64,"ты"}, {400,"ть"}, {16,"тя"}, {162,"у "},
    {24,"у,"}, {2,"у-"}, {10,"у."}, {6,"уа"}, {12,"уб"}, {14,"ув"}, {66,"уг"},
    {124,"уд"}, {54,"уе"}, {80,"уж"}, {10,"уз"}, {2,"уи"}, {10,"уй"}, {40,"ук"},
    {16,"ул"}, {42,"ум"}, {10,"ун"}, {46,"уп"}, {50,"ур"}, {50,"ус"}, {72,"ут"},
    {2,"ух"}, {96,"уч"}, {14,"уш"}, {60,"ущ"}, {2,"уэ"}, {142,"ую"}, {40,"уя"},
    {8,"ф "}, {2,"ф,"}, {10,"фа"}, {42,"фе"}, {44,"фи"}, {2,"фл"}, {116,"фо"},
    {8,"фр"}, {2,"фу"}, {10,"фф"}, {262,"х "}, {2,"х}"}, {26,"х,"}, {8,"х."},
    {42,"ха"}, {2,"хв"}, {2,"хе"}, {18,"хн"}, {100,"хо"}, {14,"хр"}, {4,"хс"},
    {2,"ху"}, {2,"ц "}, {4,"ц,"}, {8,"ца"}, {2,"цд"}, {60,"це"}, {198,"ци"},
    {2,"цо"}, {2,"цу"}, {4,"ч "}, {86,"ча"}, {240,"че"}, {140,"чи"}, {8,"чк"},
    {82,"чн"}, {2,"чр"}, {142,"чт"}, {18,"чу"}, {6,"чш"}, {6,"чь"}, {6,"ш "},
    {18,"ша"}, {70,"ше"}, {44,"ши"}, {2,"шк"}, {12,"шл"}, {14,"шн"}, {14,"шо"},
    {12,"шу"}, {4,"шь"}, {18,"ща"}, {142,"ще"}, {188,"щи"}, {2,"щн"}, {10,"щу"},
    {6,"щь"}, {8,"ъе"}, {8,"ъя"}, {262,"ы "}, {44,"ы,"}, {28,"ы."}, {2,"ы:"},
    {46,"ыв"}, {6,"ыд"}, {166,"ые"}, {8,"ыз"}, {70,"ый"}, {2,"ык"}, {48,"ыл"},
    {102,"ым"}, {2,"ын"}, {6,"ып"}, {2,"ыр"}, {18,"ыс"}, {78,"ыт"}, {122,"ых"},
    {60,"ыч"}, {22,"ыш"}, {6,"ыя"}, {366,"ь "}, {36,"ь,"}, {26,"ь."}, {2,"ь:"},
    {2,"ьб"}, {2,"ьг"}, {10,"ье"}, {82,"ьз"}, {4,"ьи"}, {46,"ьк"}, {4,"ьм"},
    {160,"ьн"}, {52,"ьс"}, {12,"ьт"}, {26,"ьш"}, {106,"ью"}, {2,"ья"}, {4,"эк"},
    {8,"эл"}, {2,"эн"}, {2,"эр"}, {124,"эт"}, {10,"эф"}, {2,"эх"}, {106,"ю "},
    {20,"ю,"}, {16,"ю."}, {18,"юб"}, {18,"юд"}, {8,"юм"}, {4,"юс"}, {138,"ют"},
    {20,"юч"}, {102,"ющ"}, {506,"я "}, {6,"я}"}, {60,"я,"}, {26,"я."}, {42,"яв"},
    {4,"яд"}, {42,"яе"}, {4,"яж"}, {42,"яз"}, {6,"як"}, {6,"ял"}, {18,"ям"},
    {8,"ян"}, {2,"яр"}, {12,"яс"}, {60,"ят"}, {4,"ях"}, {4,"яч"}, {4,"яш"},
    {22,"ящ"}, {36,"яю"}
    };[/quote]
    Code:
    
    AnsiString text=Memo1->Text;
    int array[8][8];                //массив биграмм в блоке
    for (int i=0; i<8; i++)
            for(int j=0; j<8; j++)
                    array[i][j]=0;
    
    //занесение вероятностей биграмм в массив
    int text_length=text.Length();
    for (int i=1; i<text_length-6; i+=8)
            for (int i_first=0; i_first<8; i_first++)
                    for (int i_second=0; i_second<8; i_second++)
                            for (int t=0; t<811; t++)
                                     if ((i_first!=i_second)&&(text[i+i_first]==str[t].bigrama[0])&&(text[i+i_second]==str[t].bigrama[1]))
                                            {
                                            array[i_first][i_second]+=str[t].n;
                                            break;
                                            }
    
    Form2->Memo1->Clear();
    Form2->Memo1->Lines->Add("Вероятности:");
    Form2->Memo1->Lines->Add(" ");
    for(int i=0; i<8; i++)
            {
            Form2->Memo1->Lines->Add(i+1);
            for(int j=0; j<8; j++)
                    Form2->Memo1->Lines->Add(array[i][j]);
            Form2->Memo1->Lines->Add(" ");
            }
    
    //нахождение индекса последней буквы в блоке
    int last;       //индекс последней буквы в блоке
    for (int i=0; i<8; i++)
            {
            int max=array[i][0];
            for (int j=1; j<8; j++)
                    if (array[i][j]>max)
                            max=array[i][j];
            for (int j=0; j<8; j++)
                    if ((max!=array[i][j])&&(max<1.3*array[i][j]))
                            last=i;
            }
    
    //нахождение перестановки
    int posl[8];    //перестановка
    posl[7]=last+1;
    for (int i=6; i>=0; i--)
            {
            int max=array[0][last];
            posl[i]=1;
            for (int j=1; j<8; j++)
                    if (array[j][last]>max)
                            {max=array[j][last]; posl[i]=j+1;}
            last=posl[i]-1;
            }
    
    Form2->Edit1->Text=posl[0];
    Form2->Edit2->Text=posl[1];
    Form2->Edit3->Text=posl[2];
    Form2->Edit4->Text=posl[3];
    Form2->Edit5->Text=posl[4];
    Form2->Edit6->Text=posl[5];
    Form2->Edit7->Text=posl[6];
    Form2->Edit8->Text=posl[7];
    Form2->ShowModal();
    }
    
    Unit2.cpp:
    
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit3.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm2::BitBtn1Click(TObject *Sender)
    {
    AnsiString text1=Form1->Memo1->Text;
    AnsiString text2=Form1->Memo1->Text;
    int array[8];                   //массив перестановки
    array[0]=StrToInt(Edit1->Text);
    array[1]=StrToInt(Edit2->Text);
    array[2]=StrToInt(Edit3->Text);
    array[3]=StrToInt(Edit4->Text);
    array[4]=StrToInt(Edit5->Text);
    array[5]=StrToInt(Edit6->Text);
    array[6]=StrToInt(Edit7->Text);
    array[7]=StrToInt(Edit8->Text);
    for (int i=1; i<text1.Length()-7; i+=8)
            for (int j=0; j<8; j++)
                    text2[i+j]=text1[i-1+array[j]];         //замена такста
    Form3->Memo1->Lines->Add(text2);
    Form3->ShowModal();
    }[/FONT]
     
    #4 Spider545, 2 Nov 2009
    Last edited by a moderator: 2 Nov 2009