Example #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text.Trim();
            if (textBox1.Text == null || textBox1.Text == "")
            {
                MessageBox.Show("Поле \"Название матрицы\" не заполнено", "Ошибка");
                return;
            }
            if (textBox1.Text.Contains(' '))
            {
                MessageBox.Show("Название матрицы не должно содержать пробелов", "Ошибка");
                return;
            }
            foreach (var el in matrix_collection)
            {
                if (el.name == textBox1.Text)
                {
                    MessageBox.Show("Матрица с таким названием уже существует", "Ошибка");
                    return;
                }
            }
            if (numericUpDown1.Value <= 0)
            {
                MessageBox.Show("Количество столбцов задано некорректно", "Ошибка");
                return;
            }
            if (numericUpDown4.Value <= 0)
            {
                MessageBox.Show("Количество строк задано некорректно", "Ошибка");
                return;
            }
            if (richTextBox1.Text == "" || richTextBox1.Text == null)
            {
                MessageBox.Show("Поле для координат и значений элементов не заполнено", "Ошибка");
                return;
            }
            Matrix temp = new Matrix(Convert.ToInt32(numericUpDown1.Value), Convert.ToInt32(numericUpDown4.Value), textBox1.Text);

            if (temp.InputMatrix(richTextBox1))
            {
                matrix_collection.Add(temp);
                names_collection.Add(temp.name + " (" + temp.sizey.ToString() + "x" + temp.sizex.ToString() + ")");


                ComboRefresh();

                if (MessageBox.Show("Матрица \"" + textBox1.Text + "\" успешно добавлена, вывести на экран?", "Успех", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    OperProgress prbarform = new OperProgress();
                    prbarform.Show();
                    prbarform.progressBar1.Maximum = temp.sizex * temp.sizey;
                    Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(temp.name, "matrix"), prbarform);
                    ReadThisMatrix(temp);
                    temp.count_readers++;
                    new Thread(temp.OutputMatrix).Start(forout);
                }
                Close();
            }
        }
Example #2
0
        private void AddFromFile(object sender, EventArgs e)
        {
            textBox4.Text = textBox4.Text.Trim();
            if (textBox3.Text == null || textBox3.Text == "")
            {
                MessageBox.Show("Поле \"Путь к файлу\" не заполнено", "Ошибка");
                return;
            }
            if (textBox4.Text == null || textBox4.Text == "")
            {
                MessageBox.Show("Поле \"Название матрицы\" не заполнено", "Ошибка");
                return;
            }
            if (textBox4.Text.Contains(' '))
            {
                MessageBox.Show("Название матрицы не должно содержать пробелов", "Ошибка");
                return;
            }
            foreach (var el in matrix_collection)
            {
                if (el.name == textBox4.Text)
                {
                    MessageBox.Show("Матрица с таким названием уже существует", "Ошибка");
                    return;
                }
            }
            Matrix temp = new Matrix();

            if (temp.TxtInput(textBox3.Text, textBox4.Text))
            {
                matrix_collection.Add(temp);
                names_collection.Add(temp.name + " (" + temp.sizey.ToString() + "x" + temp.sizex.ToString() + ")");

                ComboRefresh();

                if (MessageBox.Show("Матрица \"" + textBox4.Text + "\" успешно добавлена, вывести на экран?", "Успех", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    OperProgress prbarform = new OperProgress();
                    prbarform.Show();
                    prbarform.progressBar1.Maximum = temp.sizex * temp.sizey;
                    Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(temp.name, "matrix"), prbarform);
                    ReadThisMatrix(temp);
                    temp.count_readers++;
                    new Thread(temp.OutputMatrix).Start(forout);
                }
                Close();
            }
        }
Example #3
0
File: Fparent.cs Project: Dasem/psu
        public void RI(int count)
        {
            Random       rnd   = new Random();
            int          x     = rnd.Next(0, this.sizex);
            int          y     = rnd.Next(0, this.sizey);
            OperProgress progr = new OperProgress();

            progr.Text = "Создание матрицы \"" + this.name + "\"";
            progr.progressBar1.Maximum = count;
            progr.Show();
            for (int i = 0; i < count; i++)
            {
                progr.progressBar1.Value = i;
                while (NotZero(x, y))
                {
                    x = rnd.Next(0, this.sizex);
                    y = rnd.Next(0, this.sizey);
                }
                this.columns[x].Insert(y, rnd.Next(-50, 51));
            }
            progr.Close();
        }
Example #4
0
        private void button2_Click(object sender, EventArgs e)
        {
            Random R = new Random();
            int    _sizex, _sizey, _count;

            textBox2.Text = textBox2.Text.Trim();
            if (textBox2.Text == null || textBox2.Text == "")
            {
                MessageBox.Show("Поле \"Название матрицы\" не заполнено", "Ошибка");
                return;
            }
            if (textBox2.Text.Contains(' '))
            {
                MessageBox.Show("Название матрицы не должно содержать пробелов", "Ошибка");
                return;
            }
            foreach (var el in matrix_collection)
            {
                if (el.name == textBox2.Text)
                {
                    MessageBox.Show("Матрица с таким названием уже существует", "Ошибка");
                    return;
                }
            }
            if (checkBox2.Checked == true)
            {
                _sizex = R.Next(5, 56);
                _sizey = R.Next(5, 56);
            }
            else
            {
                if (numericUpDown2.Value <= 0)
                {
                    MessageBox.Show("Размерность матрицы задана некорректно", "Ошибка");
                    return;
                }
                _sizex = Convert.ToInt32(numericUpDown2.Value);
                _sizey = Convert.ToInt32(numericUpDown5.Value);
            }
            if (checkBox1.Checked == true)
            {
                _count = R.Next(1, _sizex * _sizey / 10);
            }
            else
            {
                if (numericUpDown2.Value * numericUpDown5.Value < numericUpDown3.Value)
                {
                    MessageBox.Show("Количество ненулевых элементов больше размера матрицы", "Ошибка");
                    return;
                }
                if (numericUpDown3.Value <= 0)
                {
                    MessageBox.Show("Кол-во ненулевых элементов задано некорректно", "Ошибка");
                    return;
                }
                _count = Convert.ToInt32(numericUpDown3.Value);
                if (_count > _sizex * _sizey / 10)
                {
                    MessageBox.Show("Количество ненулевых элементов слишком велико, производительность операций может быть значительно снижена", "Предупреждение");
                }
            }
            Matrix temp = new Matrix(_sizex, _sizey, textBox2.Text);

            temp.RI(_count);
            matrix_collection.Add(temp);
            names_collection.Add(temp.name + " (" + temp.sizey.ToString() + "x" + temp.sizex.ToString() + ")");

            ComboRefresh();
            if (MessageBox.Show("Матрица \"" + textBox2.Text + "\" успешно добавлена, вывести на экран?", "Успех", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                OperProgress prbarform = new OperProgress();
                prbarform.Show();
                prbarform.progressBar1.Maximum = temp.sizex * temp.sizey;
                Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(temp.name, "matrix"), prbarform);
                ReadThisMatrix(temp);
                temp.count_readers++;
                new Thread(temp.OutputMatrix).Start(forout);
            }
            Close();
        }
Example #5
0
        private void button4_Click_1(object sender, EventArgs e)
        {
            string rname      = "";
            string lname      = "";
            string oper       = "";
            string resultname = "";

            if (!CheckLeft())
            {
                return;
            }

            rname      = ComboRightMatrix.SelectedItem.ToString().Split(' ')[0];
            lname      = ComboLeftMatrix.SelectedItem.ToString().Split(' ')[0];
            oper       = ComboOperation.SelectedItem.ToString();
            resultname = EditOperNewMatrix.Text;
            OperProgress prbar = new OperProgress();

            if (matrix_collection.Count == 0)
            {
                MessageBox.Show("Ни одной матрицы не создано", "Ошибка");
                return;
            }
            if (EditOperNewMatrix.Text == "" || EditOperNewMatrix.Text == null)
            {
                MessageBox.Show("Не задано имя результирующей матрицы");
                return;
            }

            if (EditOperNewMatrix.Text.Contains(' '))
            {
                MessageBox.Show("Название матрицы не должно содержать пробелов", "Ошибка");
                return;
            }

            foreach (var el in matrix_collection)
            {
                if (el.name == EditOperNewMatrix.Text)
                {
                    MessageBox.Show("Матрица с таким названием уже существует", "Ошибка");
                    return;
                }
            }

            Matrix left = null, right = null, result = null;

            foreach (var matrix in matrix_collection)
            {
                if (matrix.name == lname)
                {
                    left = matrix;
                }
            }
            switch (oper)
            {
            case "*":
                if (!CheckRight())
                {
                    return;
                }
                foreach (var matrix in matrix_collection)
                {
                    if (matrix.name == rname)
                    {
                        right = matrix;
                    }
                }
                if (left.sizex != right.sizey)
                {
                    MessageBox.Show("Неверные размерности входных матриц", "Ошибка");
                    return;
                }

                if (left.name == right.name)
                {
                    left.count_readers++;
                }
                else
                {
                    left.count_readers++;
                    right.count_readers++;
                }

                ReadLeft(left);
                ReadRight(right);
                result = new Matrix(right.sizex, left.sizey, resultname);

                prbar.Text = "Умножение, " + left.name + " * " + right.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizey;
                prbar.Show();
                Parms par = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.MultMatrix));
                threads.Last().Start(par);
                break;

            case "+":
                if (!CheckRight())
                {
                    return;
                }
                foreach (var matrix in matrix_collection)
                {
                    if (matrix.name == rname)
                    {
                        right = matrix;
                    }
                }
                if (left.sizex != right.sizex || left.sizey != right.sizey)
                {
                    MessageBox.Show("Неверные размерности входных матриц", "Ошибка");
                    return;
                }

                if (left.name == right.name)
                {
                    left.count_readers++;
                }
                else
                {
                    left.count_readers++;
                    right.count_readers++;
                }

                ReadLeft(left);
                ReadRight(right);

                result     = new Matrix(right.sizex, left.sizey, resultname);
                prbar.Text = "Сложение матриц, " + left.name + " + " + right.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizex;
                prbar.Show();
                Parms par2 = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.AddMatrix));
                threads.Last().Start(par2);
                break;

            case "-":
                if (!CheckRight())
                {
                    return;
                }
                foreach (var matrix in matrix_collection)
                {
                    if (matrix.name == rname)
                    {
                        right = matrix;
                    }
                }
                if (left.sizex != right.sizex || left.sizey != right.sizey)
                {
                    MessageBox.Show("Неверные размерности входных матриц", "Ошибка");
                    return;
                }

                if (left.name == right.name)
                {
                    left.count_readers++;
                }
                else
                {
                    left.count_readers++;
                    right.count_readers++;
                }

                ReadLeft(left);
                ReadRight(right);

                result     = new Matrix(right.sizex, left.sizey, resultname);
                prbar.Text = "Вычитание матриц, " + left.name + " - " + right.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizex;
                prbar.Show();
                Parms par3 = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.SubMatrix));
                threads.Last().Start(par3);
                break;

            case "нахождение обратной":
                if (left.sizex != left.sizey)
                {
                    MessageBox.Show("Обратную матрицу возможно найти только для квадратной");
                    return;
                }

                left.count_readers++;

                ReadLeft(left);

                result     = new Matrix(left.sizex, left.sizey, resultname);
                prbar.Text = "Обратная матрица, от " + left.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizey * result.sizex;
                prbar.Show();
                Parms par4 = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.ReverseMatrix));
                threads.Last().Start(par4);
                while (par4.isDetermNull == 2)
                {
                    Thread.Sleep(100);
                }
                if (par4.isDetermNull == 1)
                {
                    //MessageBox.Show("Определитель матрицы равен нулю, невозможно найти обратную", "Ошибка");
                    return;
                }
                break;
            }
            matrix_collection.Add(result);
            names_collection.Add(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (запись)");
            ComboRefresh();
        }
Example #6
0
        private void button4_Click(object sender, EventArgs e)
        {
            if (!CheckLeft())
            {
                return;
            }
            if (!CheckResult())
            {
                return;
            }
            string rname      = "";
            string lname      = "";
            string oper       = "";
            string resultname = "";

            rname      = ComboRightMatrix.SelectedItem.ToString().Split(' ')[0];
            lname      = ComboLeftMatrix.SelectedItem.ToString().Split(' ')[0];
            oper       = ComboOperation.SelectedItem.ToString();
            resultname = ComboResult.SelectedItem.ToString().Split(' ')[0];
            OperProgress prbar = new OperProgress();

            if (matrix_collection.Count == 0)
            {
                MessageBox.Show("Ни одной матрицы не создано", "Ошибка");
                return;
            }
            if (MessageBox.Show("Перезаписать матрицу \"" + resultname + "\"?", "Предупреждение", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            Matrix left = null, right = null, result = null;

            foreach (var matrix in matrix_collection)
            {
                if (matrix.name == lname)
                {
                    left = matrix;
                }
            }
            switch (oper)
            {
            case "*":
                if (!CheckRight())
                {
                    return;
                }
                foreach (var matrix in matrix_collection)
                {
                    if (matrix.name == rname)
                    {
                        right = matrix;
                    }
                }
                if (left.sizex != right.sizey)
                {
                    MessageBox.Show("Неверные размерности входных матриц", "Ошибка");
                    return;
                }
                if (left.name == right.name)
                {
                    left.count_readers++;
                }
                else
                {
                    left.count_readers++;
                    right.count_readers++;
                }

                result = new Matrix(right.sizex, left.sizey, resultname);

                WriteResult(result);
                ReadLeft(left);
                ReadRight(right);

                prbar.Text = "Умножение, " + left.name + " * " + right.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizey;
                prbar.Show();
                Parms par = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.MultMatrix));
                threads.Last().Start(par);
                break;

            case "+":
                if (!CheckRight())
                {
                    return;
                }
                foreach (var matrix in matrix_collection)
                {
                    if (matrix.name == rname)
                    {
                        right = matrix;
                    }
                }
                if (left.sizex != right.sizex || left.sizey != right.sizey)
                {
                    MessageBox.Show("Неверные размерности входных матриц", "Ошибка");
                    return;
                }

                if (left.name == right.name)
                {
                    left.count_readers++;
                }
                else
                {
                    left.count_readers++;
                    right.count_readers++;
                }

                result = new Matrix(right.sizex, left.sizey, resultname);

                WriteResult(result);
                ReadLeft(left);
                ReadRight(right);

                prbar.Text = "Сложение матриц, " + left.name + " + " + right.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizex;
                prbar.Show();
                Parms par2 = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.AddMatrix));
                threads.Last().Start(par2);
                break;

            case "-":
                if (!CheckRight())
                {
                    return;
                }
                foreach (var matrix in matrix_collection)
                {
                    if (matrix.name == rname)
                    {
                        right = matrix;
                    }
                }
                if (left.sizex != right.sizex || left.sizey != right.sizey)
                {
                    MessageBox.Show("Неверные размерности входных матриц", "Ошибка");
                    return;
                }

                if (left.name == right.name)
                {
                    left.count_readers++;
                }
                else
                {
                    left.count_readers++;
                    right.count_readers++;
                }

                result = new Matrix(right.sizex, left.sizey, resultname);

                WriteResult(result);
                ReadLeft(left);
                ReadRight(right);

                prbar.Text = "Вычитание матриц, " + left.name + " - " + right.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizex;
                prbar.Show();
                Parms par3 = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.SubMatrix));
                threads.Last().Start(par3);
                break;

            case "нахождение обратной":
                if (left.sizex != left.sizey)
                {
                    MessageBox.Show("Обратную матрицу возможно найти только для квадратной");
                    return;
                }

                left.count_readers++;

                result = new Matrix(left.sizex, left.sizey, resultname);

                WriteResult(result);
                ReadLeft(left);

                prbar.Text = "Обратная матрица, от " + left.name + " = " + result.name;
                prbar.progressBar1.Maximum = result.sizey * result.sizex;
                prbar.Show();
                Parms par4 = new Parms(left, right, result, prbar);
                threads.Add(new Thread(Matrix.ReverseMatrix));
                threads.Last().Start(par4);
                while (par4.isDetermNull == 2)
                {
                    Thread.Sleep(100);
                }
                if (par4.isDetermNull == 1)
                {
                    //MessageBox.Show("Определитель матрицы равен нулю, невозможно найти обратную", "Ошибка");
                    return;
                }
                break;
            }

            string combo_line = resultname;
            Matrix temp       = null;

            foreach (var el in matrix_collection)
            {
                if (el.name == combo_line)
                {
                    temp = el;
                    break;
                }
            }
            matrix_collection.Remove(temp);
            matrix_collection.Add(result);
            ComboRefresh();
        }
Example #7
0
 private void button6_Click(object sender, EventArgs e)
 {
     if (ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ').Length == 3 && ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ')[2] == "(запись)")
     {
         MessageBox.Show("В матрицу ещё производится запись,пожалуйста, подождите", "Ошибка");
         return;
     }
     if (RadioOutFile.Checked && RadioOutMatrix.Checked)
     {
         if (ComboMainFormOutMatrix.SelectedIndex == -1)
         {
             MessageBox.Show("Матрица не выбрана", "Ошибка");
             return;
         }
         if (textBox1.Text == null || textBox1.Text == "")
         {
             MessageBox.Show("Поле \"Путь к файлу\" не заполнено", "Ошибка");
             return;
         }
         string[] combo_line = ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ');
         foreach (var el in matrix_collection)
         {
             if (el.name == combo_line[0])
             {
                 if (el.TxtOutputMatrix(textBox1.Text))
                 {
                     MessageBox.Show("Матрица \"" + combo_line[0] + "\" выведена в файл \"" + textBox1.Text + "\"");
                 }
                 return;
             }
         }
     }
     else if (RadioOutMonitor.Checked && RadioOutMatrix.Checked)
     {
         if (ComboMainFormOutMatrix.SelectedIndex == -1)
         {
             MessageBox.Show("Матрица не выбрана", "Ошибка");
             return;
         }
         string[] combo_line = ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ');
         foreach (var el in matrix_collection)
         {
             if (el.name == combo_line[0])
             {
                 OperProgress prbarform = new OperProgress();
                 prbarform.Show();
                 prbarform.progressBar1.Maximum = el.sizex * el.sizey;
                 Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(el.name, "matrix"), prbarform);
                 ReadThisMatrix(el);
                 el.count_readers++;
                 threads.Add(new Thread(el.OutputMatrix));
                 Fparent.threads.Last().Start(forout);
                 return;
             }
         }
     }
     else if (RadioOutMemory.Checked && RadioOutMonitor.Checked)
     {
         if (ComboMainFormOutMatrix.SelectedIndex == -1)
         {
             MessageBox.Show("Матрица не выбрана", "Ошибка");
             return;
         }
         string[] combo_line = ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ');
         foreach (var el in matrix_collection)
         {
             if (el.name == combo_line[0])
             {
                 OperProgress prbarform = new OperProgress();
                 prbarform.Show();
                 prbarform.progressBar1.Maximum = el.sizex;
                 Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(el.name, "memory"), prbarform);
                 ReadThisMatrix(el);
                 el.count_readers++;
                 threads.Add(new Thread(el.StructOutput));
                 Fparent.threads.Last().Start(forout);
                 return;
             }
         }
     }
     else if (RadioOutCompress.Checked && RadioOutMonitor.Checked)
     {
         if (ComboMainFormOutMatrix.SelectedIndex == -1)
         {
             MessageBox.Show("Матрица не выбрана", "Ошибка");
             return;
         }
         string[] combo_line = ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ');
         foreach (var el in matrix_collection)
         {
             if (el.name == combo_line[0])
             {
                 OperProgress prbarform = new OperProgress();
                 prbarform.Show();
                 prbarform.progressBar1.Maximum = el.sizex;
                 Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(el.name, "compress"), prbarform);
                 ReadThisMatrix(el);
                 el.count_readers++;
                 threads.Add(new Thread(el.OutputMatrixPacked));
                 Fparent.threads.Last().Start(forout);
                 return;
             }
         }
     }
     else if (RadioOutCompress.Checked && RadioOutFile.Checked)
     {
         if (ComboMainFormOutMatrix.SelectedIndex == -1)
         {
             MessageBox.Show("Матрица не выбрана", "Ошибка");
             return;
         }
         if (textBox1.Text == null || textBox1.Text == "")
         {
             MessageBox.Show("Поле \"Путь к файлу\" не заполнено", "Ошибка");
             return;
         }
         string[] combo_line = ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ');
         foreach (var el in matrix_collection)
         {
             if (el.name == combo_line[0])
             {
                 if (el.TxtOutputMatrixPacked(textBox1.Text))
                 {
                     MessageBox.Show("Матрица \"" + combo_line[0] + "\" выведена в файл \"" + textBox1.Text + "\"");
                 }
                 return;
             }
         }
     }
     else if (RadioOutMemory.Checked && RadioOutFile.Checked)
     {
         if (ComboMainFormOutMatrix.SelectedIndex == -1)
         {
             MessageBox.Show("Матрица не выбрана", "Ошибка");
             return;
         }
         if (textBox1.Text == null || textBox1.Text == "")
         {
             MessageBox.Show("Поле \"Путь к файлу\" не заполнено", "Ошибка");
             return;
         }
         string[] combo_line = ComboMainFormOutMatrix.SelectedItem.ToString().Split(' ');
         foreach (var el in matrix_collection)
         {
             if (el.name == combo_line[0])
             {
                 if (el.TxtOutputMemory(textBox1.Text))
                 {
                     MessageBox.Show("Матрица \"" + combo_line[0] + "\" выведена в файл \"" + textBox1.Text + "\"");
                 }
                 return;
             }
         }
     }
 }