Ejemplo n.º 1
0
        public void Run()
        {
            //получаем список директорий
            string[] folders = Directory.GetDirectories(path);
            foreach (string folder in folders)
            {
                string current = folder.Split(Path.DirectorySeparatorChar).Last();
                string full    = Path.Combine(path, current, keyWord);
                if (Directory.EnumerateFileSystemEntries(folder).Any() && Directory.Exists(full) && Directory.EnumerateFileSystemEntries(full).Any())
                {
                    //каталог не пустой и в нём есть папка "теория" или "примеры", которая тоже не пуста
                    //получаем список файлов и начинаем конвертацию
                    TexUtils.Render render = new TexUtils.Render("");

                    string[] files = Directory.GetFiles(full);
                    foreach (string file in files)
                    {
                        if (Path.GetExtension(file) == ".tex")
                        {
                            string fulloutput = Path.Combine(savepath, current, keyWord, Path.GetFileNameWithoutExtension(file));
                            System.IO.Directory.CreateDirectory(fulloutput);

                            render.Directory = fulloutput;
                            render.TexToHtml(file);
                            render.Reset();
                        }
                    }
                }
                else
                {
                    Logs.WriteLine("В теме '" + current + "' папка '" + keyWord + "' оказалась пустой");
                }
            }
        }
Ejemplo n.º 2
0
        public void Run()
        {
            //получаем список директорий
            string[] folders = Directory.GetDirectories(path);
            foreach (string folder in folders)
            {
                string current = folder.Split(Path.DirectorySeparatorChar).Last();
                string full = Path.Combine(path, current, keyWord);
                if (Directory.EnumerateFileSystemEntries(folder).Any() && Directory.Exists(full) && Directory.EnumerateFileSystemEntries(full).Any())
                {
                    //каталог не пустой и в нём есть папка "теория" или "примеры", которая тоже не пуста
                    //получаем список файлов и начинаем конвертацию
                    TexUtils.Render render = new TexUtils.Render("");

                    string[] files = Directory.GetFiles(full);
                    foreach (string file in files)
                        if (Path.GetExtension(file) == ".tex")
                        {
                            string fulloutput = Path.Combine(savepath, current, keyWord, Path.GetFileNameWithoutExtension(file));
                            System.IO.Directory.CreateDirectory(fulloutput);

                            render.SetDirectory = fulloutput;
                            render.TexToHTML(file);
                            render.Reset();
                        }
                }
                else
                {
                    Logs.WriteLine("В теме '"+current+"' папка '"+keyWord+"' оказалась пустой");
                }
            }
        }
Ejemplo n.º 3
0
        private void btn_result_Click(object sender, EventArgs e)
        {
            Complex c1;
            var     c2 = new Complex();
            var     d  = 1.0;

            if (!TryGetComplex(textBoxReal1, textBoxImaginary1, out c1) ||
                (CurrentOperation < Operation.Pow && !TryGetComplex(textBoxReal2, textBoxImaginary2, out c2)) ||
                (CurrentOperation == Operation.Pow && !double.TryParse(textBoxPow.Text, out d)))
            {
                MessageBox.Show("Заполните поля корректными значениями!");
                return;
            }

            string result;

            switch (CurrentOperation)
            {
            case Operation.Add:
                result = ComplexUtils.Add(c1, c2, checkBoxDetails.Checked);
                break;

            case Operation.Mul:
                result = ComplexUtils.Multiply(c1, c2, checkBoxDetails.Checked);
                break;

            case Operation.Div:
                result = ComplexUtils.Divide(c1, c2, checkBoxDetails.Checked);
                break;

            case Operation.Pow:
                result = ComplexUtils.Power(c1, d, checkBoxDetails.Checked);
                break;

            case Operation.Convert:
                result = ComplexUtils.Convert(c1, checkBoxDetails.Checked);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            //очистка временной директории
            try
            {
                Directory.Delete(DirectoriesSettings.ComplexCalculatorPath, true);
            }
            catch (Exception ex)
            {
                Logs.WriteLine("При удалении старых файлов калькулятора комплексных чисел. Подробности:" + ex.Message);
            }

            var render = new TexUtils.Render(DirectoriesSettings.ComplexCalculatorPath);
            var lines  = result.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

            render.StringsToHtml(lines, "калькулятора матриц");
            browserResults.Navigate("file:///" + render.HtmlPath);
            _settings.ApplyWebBrowserStyle(browserResults);
        }
Ejemplo n.º 4
0
        public void Run()
        {
            //root_folders

            //получаем список директорий
            string[] root_folders = Directory.GetDirectories(path);
            foreach (string root_folder in root_folders)
            {
                string current = root_folder.Split(Path.DirectorySeparatorChar).Last();
                string full    = Path.Combine(path, current, keyWord); //full=тема/тесты/
                if (Directory.EnumerateFileSystemEntries(root_folder).Any() && Directory.Exists(full) && Directory.EnumerateFileSystemEntries(full).Any())
                {
                    //каталог не пустой и в нём есть папка "тесты", которая тоже не пуста
                    string[] folders = Directory.GetDirectories(full);
                    foreach (string folder in folders)
                    {
                        if (Directory.EnumerateFileSystemEntries(folder).Any())
                        {
                            //в тестах нашёлся непустой подкаталог

                            //получаем список файлов
                            string[] files = Directory.GetFiles(folder);

                            string        temp       = "";
                            int           file_lines = 0;
                            List <Object> answers    = new List <Object>();
                            try
                            {
                                double obj = 0;
                                using (StreamReader reader = new StreamReader(Path.Combine(folder, "ответы.txt"), System.Text.Encoding.GetEncoding("windows-1251"), true))
                                    while ((temp = reader.ReadLine()) != null)
                                    {
                                        if (Double.TryParse(temp, out obj))
                                        {
                                            answers.Add(obj);
                                        }
                                        else
                                        {
                                            answers.Add(temp);
                                        }

                                        file_lines++;
                                    }
                            }
                            catch (Exception e)
                            {
                                Logs.WriteLine("В теме '" + current + "в тесте " + folder.Split(Path.DirectorySeparatorChar).Last() + " файл ответов был не найден или содержал ошибки. Подробности: " + e.Message);
                                continue;
                            }


                            if (files.Length - 1 == file_lines)
                            {
                                //отрендерить вопросы

                                TexUtils.Render render = new TexUtils.Render("");

                                foreach (string file in files)
                                {
                                    if (Path.GetExtension(file) == ".tex")
                                    {
                                        string fulloutput = Path.Combine(savepath, current, keyWord, folder.Split(Path.DirectorySeparatorChar).Last(), Path.GetFileNameWithoutExtension(file));
                                        //MessageBox.Show(fulloutput);
                                        System.IO.Directory.CreateDirectory(fulloutput);

                                        render.Directory = fulloutput;
                                        render.TexToHtml(file);
                                        render.Reset();
                                    }
                                }

                                //запись бинарного файла ответов

                                FileStream      fs        = new FileStream(Path.Combine(savepath, current, keyWord, folder.Split(Path.DirectorySeparatorChar).Last(), "answers.dat"), FileMode.Create);
                                BinaryFormatter formatter = new BinaryFormatter();
                                try
                                {
                                    formatter.Serialize(fs, answers);
                                }
                                catch (SerializationException e)
                                {
                                    Logs.WriteLine("Ошибка сериализации. Подробности: " + e.Message);
                                    throw;
                                }
                                finally
                                {
                                    fs.Close();
                                }
                            }
                            else
                            {
                                Logs.WriteLine("В теме '" + current + "' в папке '" + keyWord + "' количество вопросов и ответов не совпадают. Проверьте пустые строки в конце файла.");
                            }
                        }
                    }
                }
                else
                {
                    Logs.WriteLine("В теме '" + current + "' папка '" + keyWord + "' оказалась пустой");
                }
            }
        }
Ejemplo n.º 5
0
        //private Complex Rea
        private void btn_result_Click(object sender, EventArgs e)
        {
            Complex c1 = new Complex();
            Complex c2 = new Complex();

            try
            {
                c1 = new Complex(Double.Parse(tbx_complex1_a.Text), Double.Parse(tbx_complex1_b.Text));
            }
            catch
            {
                MessageBox.Show("Ошибка при считывании первого числа");
            }

            try
            {
                c2 = new Complex(Double.Parse(tbx_complex2_a.Text), Double.Parse(tbx_complex2_b.Text));
            }
            catch
            {
                MessageBox.Show("Ошибка при считывании второго числа");
            }

            string result = "";

            //вызов соответствующих процедур
            foreach (Control panel_control in split_complex.Panel2.Controls)
                if (panel_control is GroupBox)
                    switch (panel_control.Name)
                    {
                        case "gbx_два_компл_действия":
                            if (chbx_два_компл.Checked == true)
                                foreach (Control group_control in panel_control.Controls)
                                    if ((group_control is CheckBox) && ((CheckBox)group_control).Checked && group_control.Name!="chbx_два_компл")
                                    {
                                        string function = group_control.Name.Substring(5);
                                        Type matr_utils = typeof(ComplexUtils);
                                        MethodInfo method = matr_utils.GetMethod(function);

                                        result += (string)method.Invoke(this, new object[] { c1, c2, this.chbx_details.Checked });
                                    }
                            break;
                        default:
                            foreach (Control group_control in panel_control.Controls)
                                if ((group_control is CheckBox) && ((CheckBox)group_control).Checked)
                                {
                                    string function = group_control.Name.Substring(5);
                                    Type matr_utils = typeof(ComplexUtils);
                                    MethodInfo method = matr_utils.GetMethod(function);

                                    Control[] controls = Controls.Find("numeric_" + function, true);
                                    if (controls.Count() == 0)
                                        //MessageBox.Show(String.Format("Для чекбокса {0} не найден привязанный комбобокс", group_control.Name));
                                        result += (string)method.Invoke(this, new object[] { c1, this.chbx_details.Checked });
                                    else
                                    {
                                        //вызов для одного или двух нумериков
                                        Control[] controls2 = Controls.Find("numeric_" + function + "_2", true);
                                        if (controls2.Count() == 0)
                                            //один нумерик
                                            result += (string)method.Invoke(this, new object[] { c1, Int32.Parse(((NumericUpDown)controls[0]).Value.ToString()), this.chbx_details.Checked });
                                        else
                                            //два нумерика
                                            result += (string)method.Invoke(this, new object[] { c1, ((NumericUpDown)controls[0]).Value, ((NumericUpDown)controls2[0]).Value, this.chbx_details.Checked });
                                    }

                                }
                            break;
                    }

            //очистка временной директории
            try
            {
                Directory.Delete(DirectoriesSettings.ComplexCalculatorPath, true);
            }
            catch (Exception ex)
            {
                Logs.WriteLine("При удалении старых файлов калькулятора матриц. Подробности:" + ex.Message);
            }

            TexUtils.Render r1 = new TexUtils.Render(DirectoriesSettings.ComplexCalculatorPath);
            string[] temp = result.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
            r1.StringToHTML(temp, "калькулятора матриц");
            browser_results.Navigate(String.Format("file:///{0}", r1.HTMLPath));
            //settings.ApplyWebBrowserStyle(browser_results);
        }
Ejemplo n.º 6
0
        private void btn_calculate_Click(object sender, EventArgs e)
        {
            Expression[,] A = new Expression[dgv_mtr1.Rows.Count, dgv_mtr1.Columns.Count];
            Expression[,] B = new Expression[dgv_mtr2.Rows.Count, dgv_mtr2.Columns.Count];
            try
            {
                ReadMatr(dgv_mtr1, A);
            }
            catch
            {
                MessageBox.Show("Ошибка при считывании первой матрицы", "Ошибка матрицы", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (dgv_mtr2.Visible)
            {
                try
                {
                    ReadMatr(dgv_mtr2, B);
                }
                catch
                {
                    MessageBox.Show("Ошибка при считывании второй матрицы", "Ошибка матрицы", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            foreach (object obj in groupBoxOperations.Controls)
            {
                if (obj is RadioButton)
                {
                    RadioButton radioButton = (RadioButton)obj;
                    string      result      = "";

                    if (radioButton.Checked)
                    {
                        Type matr_utils = typeof(MatrixUtils);
                        switch (radioButton.Name)
                        {
                        case "radioButtonSumMatrix":
                            result += MatrixUtils.две_матр_действия_сложение(A, B, this.chbx_details.Checked);
                            break;

                        case "radioButtonSubMatrix":
                            result += MatrixUtils.две_матр_действия_вычитание(A, B, this.chbx_details.Checked);
                            break;

                        case "radioButtonMultMatrix":
                            result += MatrixUtils.две_матр_действия_умножение(A, B, this.chbx_details.Checked);
                            break;

                        case "radioButtonDeterminantSarrus":
                            result += MatrixUtils.определитель_саррюс(A, this.chbx_details.Checked);
                            break;

                        case "radioButtonDeterminantRow":
                            result += MatrixUtils.определитель_разложение_строка(A, (int)numericUpDownDeterminantRow.Value - 1, this.chbx_details.Checked);
                            break;

                        case "radioButtonDeterminantColumn":
                            result += MatrixUtils.определитель_разложение_столбец(A, (int)numericUpDownDeterminantColumn.Value - 1, this.chbx_details.Checked);
                            break;

                        case "radioButtonDeterminantLaplas":
                            result += MatrixUtils.определитель_лаплас(A, (int)numericUpDownDeterminantLaplasString1.Value - 1, (int)numericUpDownDeterminantLaplasString2.Value - 1, this.chbx_details.Checked);
                            break;

                        case "radioButtonRankIdentityMatrix":
                            result += MatrixUtils.ранг_метод_окаймляющих_миноров(A, this.chbx_details.Checked);
                            break;

                        case "radioButtonRankGauss":
                            result += MatrixUtils.ранг(A, this.chbx_details.Checked);     // неправильно работает для нулевой матрицы
                            break;

                        case "radioButtonEquationCheck":
                            result += MatrixUtils.проверка_критерия_совместности(A, this.chbx_details.Checked);
                            break;

                        case "radioButtonEquationSolveGauss":
                            result += MatrixUtils.слу_гаусс(A, this.chbx_details.Checked);     // не всегда работает
                            break;

                        case "radioButtonReverseIdentity":
                            result += MatrixUtils.обратная_матрица_приписывание(A, this.chbx_details.Checked);
                            break;

                        case "radioButtonReverseTransformation":
                            result += MatrixUtils.обратная_матрица_алгебраические_дополнения(A, this.chbx_details.Checked);
                            break;
                        }
                        TexUtils.Render r1   = new TexUtils.Render(DirectoriesSettings.MatrixCalculatorPath);
                        string[]        temp = result.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
                        r1.StringsToHtml(temp, "калькулятора матриц");
                        browser_results.Navigate(String.Format("file:///{0}", r1.HtmlPath));
                        settings.ApplyWebBrowserStyle(browser_results);
                    }
                }
            }
        }
Ejemplo n.º 7
0
        public void Run()
        {
            //root_folders

            //получаем список директорий
            string[] root_folders = Directory.GetDirectories(path);
            foreach (string root_folder in root_folders)
            {
                string current = root_folder.Split(Path.DirectorySeparatorChar).Last();
                string full = Path.Combine(path, current, keyWord); //full=тема/тесты/
                if (Directory.EnumerateFileSystemEntries(root_folder).Any() && Directory.Exists(full) && Directory.EnumerateFileSystemEntries(full).Any())
                {
                    //каталог не пустой и в нём есть папка "тесты", которая тоже не пуста
                    string[] folders = Directory.GetDirectories(full);
                    foreach (string folder in folders)
                    {
                        if (Directory.EnumerateFileSystemEntries(folder).Any())
                        {
                            //в тестах нашёлся непустой подкаталог

                            //получаем список файлов
                            string[] files = Directory.GetFiles(folder);

                            string temp = "";
                            int file_lines = 0;
                            List<Object> answers = new List<Object>();
                            try
                            {
                                double obj = 0;
                                using (StreamReader reader = new StreamReader(Path.Combine(folder, "ответы.txt"), System.Text.Encoding.GetEncoding("windows-1251"), true))
                                    while ((temp = reader.ReadLine()) != null)
                                    {
                                        if (Double.TryParse(temp, out obj))
                                            answers.Add(obj);
                                        else
                                            answers.Add(temp);

                                        file_lines++;
                                    }
                            }
                            catch(Exception e)
                            {
                                Logs.WriteLine("В теме '" + current + "в тесте " + folder.Split(Path.DirectorySeparatorChar).Last() + " файл ответов был не найден или содержал ошибки. Подробности: "+e.Message);
                                continue;
                            }

                            if (files.Length - 1 == file_lines)
                            {
                                //отрендерить вопросы

                                TexUtils.Render render = new TexUtils.Render("");

                                foreach (string file in files)
                                    if (Path.GetExtension(file) == ".tex")
                                    {
                                        string fulloutput = Path.Combine(savepath, current, keyWord, folder.Split(Path.DirectorySeparatorChar).Last(),Path.GetFileNameWithoutExtension(file));
                                        //MessageBox.Show(fulloutput);
                                        System.IO.Directory.CreateDirectory(fulloutput);

                                        render.SetDirectory = fulloutput;
                                        render.TexToHTML(file);
                                        render.Reset();
                                    }

                                //запись бинарного файла ответов

                                FileStream fs = new FileStream(Path.Combine(savepath, current, keyWord, folder.Split(Path.DirectorySeparatorChar).Last(), "answers.dat"), FileMode.Create);
                                BinaryFormatter formatter = new BinaryFormatter();
                                try
                                {
                                    formatter.Serialize(fs, answers);
                                }
                                catch (SerializationException e)
                                {
                                    Logs.WriteLine("Ошибка сериализации. Подробности: " + e.Message);
                                    throw;
                                }
                                finally
                                {
                                    fs.Close();
                                }
                            }
                            else
                                Logs.WriteLine("В теме '" + current + "' в папке '" + keyWord + "' количество вопросов и ответов не совпадают. Проверьте пустые строки в конце файла.");
                        }
                    }
                }
                else
                {
                    Logs.WriteLine("В теме '" + current + "' папка '" + keyWord + "' оказалась пустой");
                }
            }
        }