Example #1
0
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Задание № 3";
            form.SetDefaultVals(new System.Drawing.Size(800, 500));
            form.Controls.Add(BeautyfyForms.AddButton("Открыть файл множества", new Point(0, 10), (o, k) =>
            {
                Helper.LoadFile("Файл множества", "mul", multiplicity);
                dgv.ColumnCount = multiplicity.Count;
                for (int i = 0; i < multiplicity.Count; i++)
                {
                    dgv.Columns[i].HeaderCell.Value = (i + 1).ToString();
                    dgv.Columns[i].ReadOnly         = true;

                    dgv.Rows[0].Cells[i].Value = multiplicity.ElementAt(i);
                }
                logLstBox.Items.Add(DateTime.Now.ToString() + ": Заполнили DGV множеством");
            }));

            form.Controls.Add(BeautyfyForms.AddButton(" Суть ", new Point(250, 10), (o, k) =>
            {
                MessageBox.Show("Задача № 3. Теорема: любое множество можно представить с помощью разложения в произведения транспозиций. Попробуем найти циклическую перестановку и построить транспозицию.");
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Открыть файл нового множества", new Point(0, 40), (o, k) =>
            {
                Helper.LoadFile("Файл нового множества", "mul", newMultiplicity);
                dgv.ColumnCount = newMultiplicity.Count;
                for (int i = 0; i < newMultiplicity.Count; i++)
                {
                    dgv.Rows[1].Cells[i].Value = newMultiplicity.ElementAt(i);
                }
                logLstBox.Items.Add(DateTime.Now.ToString() + ": Заполнили DGV множеством *");
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Найти транспозиции", new Point(0, 70), (o, k) =>
            {
                ProcessTranspos();
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Построить циклическую перестановку", new Point(150, 70), (o, k) =>
            {
                ProcessCycles();
            }));

            dgv = BeautyfyForms.AddDataGridViewHeadersOnLeft(new Point(0, 100), form.Size, 3, new string[] { "Множество", "Множество *" });
            form.Controls.Add(dgv);

            logLstBox = BeautyfyForms.AddListBox(new Point(0, 100 + dgv.Height + 5), form.Size);
            form.Controls.Add(logLstBox);
        }
Example #2
0
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Задание № 1";
            form.SetDefaultVals(new System.Drawing.Size(800, 500));
            form.Controls.Add(BeautyfyForms.AddButton("Открыть файл множества", new Point(0, 10), (o, k) =>
            {
                Helper.LoadFileNode("Файл множества", "mul", multiplicity);
                dgv.ColumnCount = multiplicity.Count;
                for (int i = 0; i < multiplicity.Count; i++)
                {
                    dgv.Columns[i].HeaderCell.Value = (i + 1).ToString();
                    dgv.Columns[i].ReadOnly         = true;

                    dgv.Rows[0].Cells[i].Value = multiplicity.ElementAt(i).value;
                }
                logLstBox.Items.Add(DateTime.Now.ToString() + ": Заполнили DGV множеством");
            }));

            form.Controls.Add(BeautyfyForms.AddButton(" Суть ", new Point(250, 10), (o, k) =>
            {
                MessageBox.Show("Задача № 1. Задано множество, задана перестановка, вывести множество используя перестановку. ");
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Открыть файл перестановок", new Point(0, 40), (o, k) =>
            {
                Helper.LoadFile("Файл перестановок", "shuff", reshuffle);
                dgv.ColumnCount = reshuffle.Count;
                for (int i = 0; i < reshuffle.Count; i++)
                {
                    dgv.Rows[1].Cells[i].Value = reshuffle.ElementAt(i);
                }
                logLstBox.Items.Add(DateTime.Now.ToString() + ": Заполнили DGV перестановкой");
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Обработать", new Point(0, 70), (o, k) =>
            {
                Process();
            }));

            dgv = BeautyfyForms.AddDataGridViewHeadersOnLeft(new Point(0, 100), form.Size, 5, new string[] { "Множество", "Перестановка", "Δ", "Множество *" });
            form.Controls.Add(dgv);

            logLstBox = BeautyfyForms.AddListBox(new Point(0, 100 + dgv.Height + 5), form.Size);
            form.Controls.Add(logLstBox);
        }
Example #3
0
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Задание № 1 (b)";
            form.SetDefaultVals(new System.Drawing.Size(800, 700));
            var tmpbutt = BeautyfyForms.AddButton("Очистить дерево", new Point(0, 10), (o, k) =>
            {
                _tree = new BranchingTree();
                treeViewer.Clear();
                _addedWords.Items.Clear();
            });

            _buttonsToHide.Add(tmpbutt);
            form.Controls.Add(tmpbutt);

            form.Controls.Add(BeautyfyForms.AddButton(" Суть ", new Point(200, 10), (o, k) =>
            {
                MessageBox.Show("Задача № 1b. Параграф 6.3, Реализация структуры \"Лес\" ");
            }));

            tmpbutt = BeautyfyForms.AddButton("Добавить значение", new Point(0, 40), (o, k) =>
            {
                if (string.IsNullOrEmpty(_addInput.Text))
                {
                    MessageBox.Show("Нет текста для поиска");
                    return;
                }

                var text = _addInput.Text;
                if (_tree.AddWord(text))
                {
                    if (!_addedWords.Items.Contains(text))
                    {
                        _addedWords.Items.Add(text);
                    }
                }

                treeViewer.Text = (_tree != null) ? _tree.getTreeView(_addXToEnd.Checked) : "";
            });

            _buttonsToHide.Add(tmpbutt);
            form.Controls.Add(tmpbutt);

            tmpbutt = BeautyfyForms.AddButton("Удалить значение", new Point(0, 70), (o, k) =>
            {
                if (string.IsNullOrEmpty(_deleteInput.Text))
                {
                    MessageBox.Show("Нет текста для поиска");
                    return;
                }

                var text = _deleteInput.Text;
                _tree.DeleteWord(text);
                _addedWords.Items.Remove(text);

                treeViewer.Text = (_tree != null) ? _tree.getTreeView(_addXToEnd.Checked) : "";
            });

            _buttonsToHide.Add(tmpbutt);
            form.Controls.Add(tmpbutt);

            tmpbutt = BeautyfyForms.AddButton("Проверить значение", new Point(0, 100), (o, k) =>
            {
                if (string.IsNullOrEmpty(_checkInput.Text))
                {
                    MessageBox.Show("Нет текста для поиска");
                    return;
                }

                var text = _checkInput.Text;
                if (_tree.WordExists(text))
                {
                    MessageBox.Show("Существует");
                }
                else
                {
                    MessageBox.Show("Не существует");
                }
            });

            _buttonsToHide.Add(tmpbutt);
            form.Controls.Add(tmpbutt);

            tmpbutt = BeautyfyForms.AddButton("Отобразить деревце", new Point(0, 140), (o, k) =>
            {
                treeViewer.Text = (_tree != null) ? _tree.getTreeView(_addXToEnd.Checked) : "";
            });
            _buttonsToHide.Add(tmpbutt);
            form.Controls.Add(tmpbutt);

            tmpbutt = BeautyfyForms.AddButton(" Импорт ", new Point(0, 180), (o, k) =>
            {
                var keys = new List <string>();
                Helper.LoadFile("Список слов", "wordlst", keys);

                if (keys.Count > 0)
                {
                    _tree = new BranchingTree();
                    treeViewer.Clear();
                    _addedWords.Items.Clear();

                    foreach (var key in keys)
                    {
                        if (_tree.AddWord(key))
                        {
                            if (!_addedWords.Items.Contains(key))
                            {
                                _addedWords.Items.Add(key);
                            }
                        }
                    }
                }

                treeViewer.Text = (_tree != null) ? _tree.getTreeView(_addXToEnd.Checked) : "";
            });
            _buttonsToHide.Add(tmpbutt);
            form.Controls.Add(tmpbutt);

            tmpbutt = BeautyfyForms.AddButton(" Экспорт ", new Point(80, 180), (o, k) =>
            {
                SaveFileDialog saveFile = new SaveFileDialog();
                saveFile.Filter         = string.Format("{0} (*.{1})|*.{1}", "Луч", "branchview");
                if (saveFile.ShowDialog() == DialogResult.OK)
                {
                    _buttonsToHide.ForEach(x => x.Enabled = false);
                    _timerProgress.Start();

                    Task.Run(() =>
                    {
                        System.IO.File.WriteAllText(saveFile.FileName, _tree.getTreeView(_addXToEnd.Checked, false));
                    });
                    _buttonsToHide.ForEach(x => x.Enabled = true);
                    _timerProgress.Stop();
                    _progress.Value = _progress.Maximum;
                    MessageBox.Show("Сохранено!");
                }
            });
            _buttonsToHide.Add(tmpbutt);
            form.Controls.Add(tmpbutt);

            tmpbutt = BeautyfyForms.AddButton(" Импорт .index ", new Point(160, 180), async(o, k) =>
            {
                OpenFileDialog openDic = new OpenFileDialog();
                openDic.Multiselect    = false;
                openDic.Filter         = string.Format("{0} (*.{1})|*.{1}", "Index файл", "index");
                if (openDic.ShowDialog() == DialogResult.OK)
                {
                    _buttonsToHide.ForEach(x => x.Enabled = false);
                    var openedFile = System.IO.Path.ChangeExtension(openDic.FileName, null);
                    var indexFile  = openedFile + ".index";
                    var baseFile   = openedFile + ".base";
                    _timerProgress.Start();
                    var state = await Task.Run(() => LoadIndexFile(indexFile, baseFile));

                    if (state != false)
                    {
                        MessageBox.Show("Готово! Дерево загружено.");
                    }
                    else
                    {
                        MessageBox.Show("Ошибка загрузки дерева.");
                        return;
                    }

                    _timerProgress.Stop();
                    _progress.Value = _progress.Maximum;
                    _buttonsToHide.ForEach(x => x.Enabled = true);
                }
            });

            //_buttonsToHide.Add(tmpbutt);
            //form.Controls.Add(tmpbutt);

            _progress = BeautyfyForms.AddProgressBar(new Point(300, 180), form.Size, 0, 10);
            form.Controls.Add(_progress);

            _timerProgress = BeautyfyForms.CreateTimer((sender, EventArgs) =>
            {
                if (_progress.Value >= _progress.Maximum)
                {
                    _progress.Value = 0;
                }
                else
                {
                    _progress.Value = _progress.Value + 1;
                }
            });

            _addInput = BeautyfyForms.CreateTextBox(new Point(150, 43), false);
            form.Controls.Add(_addInput);

            _deleteInput = BeautyfyForms.CreateTextBox(new Point(150, 73), false);
            form.Controls.Add(_deleteInput);

            _checkInput = BeautyfyForms.CreateTextBox(new Point(150, 103), false);
            form.Controls.Add(_checkInput);

            treeViewer = BeautyfyForms.CreateMLTextBox(new Point(5, 250 + 5), 780, 400);
            form.Controls.Add(treeViewer);

            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(150, 145), "Добавлять Х в качестве null-ветвей", true, 190));

            _addXToEnd = BeautyfyForms.CreateCheckBox(new Point(340, 140), false);
            form.Controls.Add(_addXToEnd);

            _addedWords = BeautyfyForms.AddListBox(new Point(500, 20), new Size(200, 250));
            _addedWords.MouseDoubleClick += (x, y) =>
            {
                if (_addedWords.SelectedItem != null)
                {
                    MessageBox.Show(_addedWords.SelectedItem.ToString());
                }
            };
            form.Controls.Add(_addedWords);
        }
Example #4
0
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Задание № 1 и 2";
            form.SetDefaultVals(new System.Drawing.Size(800, 500));
            form.Controls.Add(BeautyfyForms.AddButton("Инициализация", new Point(0, 10), (o, k) =>
            {
                _inputG.Text = "64";  //G
                _inputA.Text = "122"; //H
                _inputM.Text = "607"; //P
                if (!_autoFindN.Checked)
                {
                    _inputN.Text = "101";//N
                }

                Log("Инициализовали параметры стандартными значениями");
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Очистить лог", new Point(0, 43), (o, k) =>
            {
                logLstBox.Items.Clear();
            }));

            form.Controls.Add(BeautyfyForms.AddButton(" Суть ", new Point(150, 10), (o, k) =>
            {
                MessageBox.Show("Задача № 1 и 2. ρ - метод Полларда (обычный и параллельный) \r\n Найти такой х, что g^x = a % m ");
            }));

            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(310, 10), "g", true, 10));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(410, 10), "a", true, 25));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(520, 10), "m", true, 30));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(640, 10), "n", true, 30));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(705, 10), "Автоподбор n", true, 100));

            _inputG      = BeautyfyForms.CreateTextBox(new Point(270, 33), false);
            _inputG.Text = "0";
            form.Controls.Add(_inputG);

            _inputA      = BeautyfyForms.CreateTextBox(new Point(380, 33), false);
            _inputA.Text = "0";
            form.Controls.Add(_inputA);

            _inputM      = BeautyfyForms.CreateTextBox(new Point(490, 33), false);
            _inputM.Text = "0";
            form.Controls.Add(_inputM);

            _inputN      = BeautyfyForms.CreateTextBox(new Point(600, 33), false);
            _inputN.Text = "0";
            form.Controls.Add(_inputN);

            _autoFindN = BeautyfyForms.CreateCheckBox(new Point(740, 33), false);
            _autoFindN.CheckedChanged += (o, k) =>
            {
                if (_autoFindN.Checked)
                {
                    _inputN.ReadOnly = true;
                    _inputN.Text     = "-1";
                }
                else
                {
                    _inputN.ReadOnly = false;
                    _inputN.Text     = "0";
                }
            };
            form.Controls.Add(_autoFindN);

            logLstBox = BeautyfyForms.AddListBox(new Point(0, 150 + 5), form.Size);
            logLstBox.MouseDoubleClick += (x, y) =>
            {
                if (logLstBox.SelectedItem != null)
                {
                    MessageBox.Show(logLstBox.SelectedItem.ToString());
                }
            };
            form.Controls.Add(logLstBox);

            form.Controls.Add(BeautyfyForms.AddButton(" Поехали (обычный) ", new Point(410, 63), (o, k) =>
            {
                ParseAndRunPollard(false);
            }));

            form.Controls.Add(BeautyfyForms.AddButton(" Поехали (параллельный) ", new Point(410, 93), (o, k) =>
            {
                ParseAndRunPollard(true);
            }));
        }
Example #5
0
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Задание № 3";
            form.SetDefaultVals(new System.Drawing.Size(800, 500));

            var btnOpen = BeautyfyForms.AddButton("Открыть index файл", new Point(0, 10), async(o, k) =>
            {
                OpenFileDialog openDic = new OpenFileDialog();
                openDic.Multiselect    = false;
                openDic.Filter         = string.Format("{0} (*.{1})|*.{1}", "Index файл", "index");
                if (openDic.ShowDialog() == DialogResult.OK)
                {
                    _buttonsToHide.ForEach(x => x.Enabled = false);
                    openedFile    = System.IO.Path.ChangeExtension(openDic.FileName, null);
                    var indexFile = openedFile + ".index";
                    var baseFile  = openedFile + ".base";

                    _timerProgress.Start();

                    logLstBox.Items.Add(DateTime.Now.ToString() + ": Загружаем index файл");

                    var state = await Task.Run(() => LoadIndexFile(indexFile, baseFile));

                    if (state)
                    {
                        logLstBox.Items.Add(DateTime.Now.ToString() + ": index файл загружен");
                    }
                    else
                    {
                        logLstBox.Items.Add(DateTime.Now.ToString() + ": ошибка загрузки");
                    }

                    _timerProgress.Stop();
                    _progress.Value = _progress.Maximum;
                    _buttonsToHide.ForEach(x => x.Enabled = true);
                }
            });

            _buttonsToHide.Add(btnOpen);
            form.Controls.Add(btnOpen);

            logLstBox = BeautyfyForms.AddListBox(new Point(0, 300 + 3), form.Size);
            form.Controls.Add(logLstBox);

            _progress = BeautyfyForms.AddProgressBar(new Point(150, 10), form.Size, 0, 10);
            form.Controls.Add(_progress);

            _timerProgress = BeautyfyForms.CreateTimer((sender, EventArgs) =>
            {
                if (_progress.Value >= _progress.Maximum)
                {
                    _progress.Value = 0;
                }
                else
                {
                    _progress.Value = _progress.Value + 1;
                }
            });

            _timerBackup = BeautyfyForms.CreateTimer(async(sender, EventArgs) =>
            {
                var indexFile = openedFile + ".index";
                var baseFile  = openedFile + ".base";
                var state     = await Task.Run(() => SaveIndexFile(indexFile, baseFile));
            });

            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(300, 80), "Слово для поиска"));

            _info = BeautyfyForms.CreateLabel(new Point(400, 100), " Поиск не производился ");
            form.Controls.Add(_info);

            _input = BeautyfyForms.CreateTextBox(new Point(300, 100), false);
            form.Controls.Add(_input);

            var btnSearch = BeautyfyForms.AddButton(" Поиск ", new Point(200, 100), async(o, k) =>
            {
                if (_linkedList == null)
                {
                    MessageBox.Show("Необходимо сначала загрузить index файл");
                    return;
                }

                if (_linkedList.Count <= 0)
                {
                    MessageBox.Show("Нет записей, которые можно было бы обработать. (Пустой файл?)");
                    return;
                }

                if (string.IsNullOrEmpty(_input.Text))
                {
                    MessageBox.Show("Нет текста для поиска");
                    return;
                }

                var text       = _input.Text;
                var hashedText = Helper.GetHash(text, _header.hashType);
                _buttonsToHide.ForEach(x => x.Enabled = false);

                var state = await Task.Run(() => Search(hashedText));

                if (state)
                {
                    logLstBox.Items.Add(DateTime.Now.ToString() + ": Слово `" + text + "` найдено");
                }
                else
                {
                    logLstBox.Items.Add(DateTime.Now.ToString() + ": Слово `" + text + "` не найдено");
                }

                _buttonsToHide.ForEach(x => x.Enabled = true);
            });

            _buttonsToHide.Add(btnSearch);
            form.Controls.Add(btnSearch);
        }
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Задание № 1";
            form.SetDefaultVals(new System.Drawing.Size(800, 500));

            form.Controls.Add(BeautyfyForms.AddButton(" Суть ", new Point(370, 10), (o, k) =>
            {
                MessageBox.Show("Задача № 1. Игра с Геометрическим, Биномиальным и Клиновидным распределениями!");
            }));

            logGeometric = BeautyfyForms.AddListBox(new Point(10, 100), new Size(200, 450));
            form.Controls.Add(logGeometric);

            _geometric = BeautyfyForms.CreateTextBox(new Point(40, 420), true);
            form.Controls.Add(_geometric);

            logBinominal = BeautyfyForms.AddListBox(new Point(300, 100), new Size(200, 450));
            form.Controls.Add(logBinominal);

            _binominal = BeautyfyForms.CreateTextBox(new Point(340, 420), true);
            form.Controls.Add(_binominal);

            logWedgeShaped = BeautyfyForms.AddListBox(new Point(590, 100), new Size(200, 450));
            form.Controls.Add(logWedgeShaped);

            _wedgeShaped = BeautyfyForms.CreateTextBox(new Point(625, 420), true);
            form.Controls.Add(_wedgeShaped);

            form.Controls.Add(BeautyfyForms.AddButton("Геометрическое", new Point(30, 70), (o, k) =>
            {
                logGeometric.Items.Clear();
                Task.Run(() =>
                {
                    var listOfElements = new List <KeyValueItem>();
                    var geom           = new MathNet.Numerics.Distributions.Geometric(0.6);
                    for (int i = 0; i <= 1000; i++)
                    {
                        listOfElements.Add(new KeyValueItem(i, geom.Probability(i)));
                    }
                    var sum        = (from element in listOfElements.AsParallel() select element.Probability).Sum();
                    listOfElements = (from element in listOfElements.AsParallel() orderby element.Probability descending select element).ToList();
                    foreach (var item in listOfElements)
                    {
                        logGeometric.BeginInvoke(new MethodInvoker(() => logGeometric.Items.Add(item)));
                    }

                    double average = 0;
                    for (int i = 0; i < 100000; i++)
                    {
                        var search = geom.Sample();
                        for (int j = 0; j < listOfElements.Count; j++)
                        {
                            if (listOfElements[j].Key == search)
                            {
                                average += j;
                            }
                        }
                    }

                    average /= 100000;
                    _geometric.BeginInvoke(new MethodInvoker(() => _geometric.Text = Math.Round(average).ToString()));
                });
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Биноминальное", new Point(335, 70), (o, k) =>
            {
                logBinominal.Items.Clear();
                Task.Run(() =>
                {
                    var listOfElements = new List <KeyValueItem>();
                    var binom          = new MathNet.Numerics.Distributions.Binomial(0.4, 1000);
                    for (int i = 0; i <= 1000; i++)
                    {
                        listOfElements.Add(new KeyValueItem(i, binom.Probability(i)));
                    }
                    listOfElements = (from element in listOfElements.AsParallel() orderby element.Probability descending select element).ToList();
                    foreach (var item in listOfElements)
                    {
                        logBinominal.BeginInvoke(new MethodInvoker(() => logBinominal.Items.Add(item)));
                    }

                    long average = 0;

                    for (int i = 0; i < 100000; i++)
                    {
                        var search = binom.Sample();
                        for (int j = 0; j < listOfElements.Count; j++)
                        {
                            if (listOfElements[j].Key == search)
                            {
                                average += j;
                            }
                        }
                    }

                    average /= 100000;
                    _binominal.BeginInvoke(new MethodInvoker(() => _binominal.Text = Math.Round((decimal)average).ToString()));
                });
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Клиновидное", new Point(630, 70), (o, k) =>
            {
                logWedgeShaped.Items.Clear();
                Task.Run(() =>
                {
                    var listOfElements = new List <KeyValueItem>();
                    Random random      = new Random((int)DateTime.Now.ToBinary());
                    int N = 1000;
                    for (int i = 0; i < 1000; i++)
                    {
                        listOfElements.Add(new KeyValueItem(i, (N - i) * (2.0 / (N * (N + 1)))));
                    }
                    var sum        = (from element in listOfElements.AsParallel() select element.Probability).Sum();
                    listOfElements = (from element in listOfElements.AsParallel() orderby element.Probability descending select element).ToList();
                    foreach (var item in listOfElements)
                    {
                        logWedgeShaped.BeginInvoke(new MethodInvoker(() => logWedgeShaped.Items.Add(item)));
                    }

                    double average = 0;

                    for (int i = 0; i < 100000; i++)
                    {
                        var p      = (N - random.Next(0, 1000)) * (2.0 / (N * (N + 1)));
                        var search = -(1 / 2.0) * N * (N * p + p - 2);
                        for (int j = 0; j < listOfElements.Count; j++)
                        {
                            if (listOfElements[j].Key == search)
                            {
                                average += j;
                            }
                        }
                    }
                    average /= 100000;
                    _wedgeShaped.BeginInvoke(new MethodInvoker(() => _wedgeShaped.Text = Math.Round(average).ToString()));
                });
            }));
        }
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Алгоритм Диксона - Курсовая работа";
            form.SetDefaultVals(new System.Drawing.Size(800, 500));

            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(40, 10), "Число для факторизации (2 - 2147483647)", true, 250));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(70, 56), "Кол-во потоков (1-100)", true, 150));


            _inputNumber       = BeautyfyForms.CreateNumericUpDown(new Point(70, 33), 2, 2147483647, false);
            _inputNumber.Value = 2;
            form.Controls.Add(_inputNumber);

            _inputThreads       = BeautyfyForms.CreateNumericUpDown(new Point(70, 79), 1, 100, false);
            _inputThreads.Value = 1;
            form.Controls.Add(_inputThreads);

            form.Controls.Add(BeautyfyForms.AddButton("Инициализация", new Point(300, 20), (o, k) =>
            {
                _inputNumber.Value  = 2;
                _inputThreads.Value = 1;
                Log("Инициализовали параметры стандартными значениями");
            }));

            form.Controls.Add(BeautyfyForms.AddButton(" Факторизовать ", new Point(290, 55), (o, k) =>
            {
                ParseAndRunDixon();
            }));

            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(280, 90), "Считать кол-во операций", true, 150));

            _calculateOperations = BeautyfyForms.CreateCheckBox(new Point(350, 105), false);
            form.Controls.Add(_calculateOperations);

            form.Controls.Add(BeautyfyForms.AddButton(" О программе ", new Point(545, 20), (o, k) =>
            {
                string buffer = "Курсовая работа по предмету `Математические основы защиты информации и информационная безопасность`" + '\n';
                buffer       += "Алгоритм Диксона." + '\n';
                buffer       += "Данный алгоритм предназначен для факторизации натуральных чисел" + '\n';
                buffer       += "Выполнил: " + ConfigurationManager.AppSettings["Author"] + ", группа " + ConfigurationManager.AppSettings["Group"];
                MessageBox.Show(buffer);
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Очистить лог", new Point(550, 55), (o, k) =>
            {
                logLstBox.Items.Clear();
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Кол-во операций -> буфер обмена", new Point(470, 90), (o, k) =>
            {
                var researchData = new List <string>();
                foreach (string item in logLstBox.Items)
                {
                    if (item.Contains("Общее кол-во выполненых операций"))
                    {
                        researchData.Add(item);
                    }
                }
                if (researchData.Count > 0)
                {
                    System.Windows.Forms.Clipboard.SetText(string.Join("\r\n", researchData));
                    MessageBox.Show("Скопировано!");
                }
                else
                {
                    MessageBox.Show("Подходящие сообщения отсутствуют.");
                }
            }));

            logLstBox = BeautyfyForms.AddListBox(new Point(0, 150 + 5), form.Size);
            logLstBox.MouseDoubleClick += (x, y) =>
            {
                if (logLstBox.SelectedItem != null)
                {
                    MessageBox.Show(logLstBox.SelectedItem.ToString());
                }
            };
            form.Controls.Add(logLstBox);
        }
        public void LocateControls(Form form, ConsoleHandler console)
        {
            form.Text = "Задание № 4";
            form.SetDefaultVals(new System.Drawing.Size(800, 500));
            form.Controls.Add(BeautyfyForms.AddButton("Случайное уравнение", new Point(0, 10), (o, k) =>
            {
                var tuple    = SelectRandomEquation();
                _inputH.Text = tuple.Item1.ToString();
                _inputG.Text = tuple.Item2.ToString();
                _inputP.Text = tuple.Item3.ToString();

                Log("Инициализовали параметры заготовленными значениями");
            }));

            form.Controls.Add(BeautyfyForms.AddButton("Очистить лог", new Point(0, 43), (o, k) =>
            {
                logLstBox.Items.Clear();
            }));

            form.Controls.Add(BeautyfyForms.AddButton(" Суть ", new Point(170, 10), (o, k) =>
            {
                MessageBox.Show("Задача № 4 Алгоритм Полига-Хеллмана \r\n Найти такой х, что H = G^x (mod P) ");
            }));

            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(310, 10), "H", true, 10));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(410, 10), "G", true, 25));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(520, 10), "P", true, 30));
            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(705, 100), "Очищать лог", true, 100));

            _inputH      = BeautyfyForms.CreateTextBox(new Point(270, 33), false);
            _inputH.Text = "0";
            form.Controls.Add(_inputH);

            _inputG      = BeautyfyForms.CreateTextBox(new Point(380, 33), false);
            _inputG.Text = "0";
            form.Controls.Add(_inputG);

            _inputP      = BeautyfyForms.CreateTextBox(new Point(490, 33), false);
            _inputP.Text = "0";
            form.Controls.Add(_inputP);

            _keepLog = BeautyfyForms.CreateCheckBox(new Point(740, 115), false);
            form.Controls.Add(_keepLog);

            logLstBox = BeautyfyForms.AddListBox(new Point(0, 150 + 5), form.Size);
            logLstBox.MouseDoubleClick += (x, y) =>
            {
                if (logLstBox.SelectedItem != null)
                {
                    MessageBox.Show(logLstBox.SelectedItem.ToString());
                }
            };
            form.Controls.Add(logLstBox);

            form.Controls.Add(BeautyfyForms.CreateLabel(new Point(380, 63), "H = G^x (mod P)", true, 100));

            form.Controls.Add(BeautyfyForms.AddButton(" Поехали ", new Point(380, 93), (o, k) =>
            {
                ParseAndRunPohligHellman();
            }));
        }