コード例 #1
0
ファイル: MainForm.cs プロジェクト: Dasem/psu
 public Parms(Matrix _left, Matrix _right, Matrix _result, OperProgress _prbar)
 {
     left   = _left;
     right  = _right;
     result = _result;
     prbar  = _prbar;
 }
コード例 #2
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();
            }
        }
コード例 #3
0
ファイル: Fparent.cs プロジェクト: Dasem/psu
        public void OutputMatrix(Object _Outparams)
        {
            Outparams    outpar    = (Outparams)_Outparams;
            RichTextBox  ForOut    = outpar.ForOutForm.richTextBox1;
            OperProgress prbarform = outpar.prbarform;
            Link         temp;
            int          count = 0;

            for (int i = 0; i < this.sizey; ++i)
            {
                for (int j = 0; j < this.sizex; ++j)
                {
                    if (!prbarform.IsDisposed)
                    {
                        if (!prbarform.IsDisposed)
                        {
                            prbarform.InvokeUI(() => { prbarform.progressBar1.Value = count; });
                        }
                        count++;
                    }
                    temp = this.columns[j];
                    bool F = true;
                    if (temp.next == null)//Если столбец пустой
                    {
                        ForOut.AppendText(TabSpaces(0));
                    }
                    else
                    {
                        while (temp.next != null && F)
                        {
                            if (temp.next.line_number == i)
                            {
                                ForOut.AppendText(TabSpaces(temp.next.inf));
                                F = false;
                            }
                            else
                            {
                                temp = temp.next;
                            }
                        }
                        if (F)
                        {
                            ForOut.AppendText(TabSpaces(0));
                        }
                    }
                }
                ForOut.AppendText("\n\n\n\n\n\n");
            }
            if (!prbarform.IsDisposed)
            {
                prbarform.InvokeUI(() => { prbarform.Close(); });
            }
            if (--this.count_readers == 0)
            {
                Fparent.names_collection[Fparent.names_collection.IndexOf(this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ") (чтение)")] = this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ")";
                Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });
            }
            outpar.ForOutForm.ShowDialog();
        }
コード例 #4
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();
            }
        }
コード例 #5
0
ファイル: Fparent.cs プロジェクト: 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();
        }
コード例 #6
0
ファイル: Fparent.cs プロジェクト: Dasem/psu
        public void OutputMatrixPacked(Object _Outparams)
        {
            Outparams    outpar    = (Outparams)_Outparams;
            RichTextBox  outp      = outpar.ForOutForm.richTextBox1;
            OperProgress prbarform = outpar.prbarform;
            Link         temp;
            int          count = 0;

            outp.AppendText("Размерность матрицы, X:" + this.sizex.ToString() + ", Y:" + this.sizey.ToString() + "\n(X, Y, Значение)\n");
            for (int j = 0; j < sizex; ++j)
            {
                if (!prbarform.IsDisposed)
                {
                    prbarform.InvokeUI(() => { prbarform.progressBar1.Value = count; });
                    count++;
                }
                temp = columns[j];
                if (!(temp.next == null))
                {
                    while (temp.next != null)
                    {
                        outp.AppendText(j + 1 + " ");
                        outp.AppendText(temp.next.line_number + 1 + " ");
                        outp.AppendText(temp.next.inf.ToString() + "\n");
                        temp = temp.next;
                    }
                }
            }
            if (!prbarform.IsDisposed)
            {
                prbarform.InvokeUI(() => { prbarform.Close(); });
            }
            if (--this.count_readers == 0)
            {
                Fparent.names_collection[Fparent.names_collection.IndexOf(this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ") (чтение)")] = this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ")";
                Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });
            }
            outpar.ForOutForm.ShowDialog();
        }
コード例 #7
0
ファイル: Fparent.cs プロジェクト: Dasem/psu
        public void StructOutput(Object _Outparams)
        {
            Outparams    outpar    = (Outparams)_Outparams;
            RichTextBox  outp      = outpar.ForOutForm.richTextBox1;
            OperProgress prbarform = outpar.prbarform;
            Link         temp;
            int          count       = 0;
            int          memory_size = 0;

            for (int j = 0; j < this.sizex; ++j)
            {
                if (!prbarform.IsDisposed)
                {
                    prbarform.InvokeUI(() => { prbarform.progressBar1.Value = count; });
                    count++;
                }
                temp = this.columns[j];
                while (temp.next != null)
                {
                    memory_size += 12;
                    var safeptr = SafePtr.Create(temp.next);
                    outp.AppendText("Элемент " + temp.next.inf + " с координатами X:" + (j + 1) + " Y:" + (1 + temp.next.line_number) + " находится по адресу " + safeptr.IntPtr.ToString("x") + "\n");
                    temp = temp.next;
                }
            }
            if (!prbarform.IsDisposed)
            {
                prbarform.InvokeUI(() => { prbarform.Close(); });
            }
            outp.AppendText("\nОбщий объём памяти, занимаемый матрицой: " + memory_size / 1024.0 + " Кбайт\n");
            if (--this.count_readers == 0)
            {
                Fparent.names_collection[Fparent.names_collection.IndexOf(this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ") (чтение)")] = this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ")";
                Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });
            }
            outpar.ForOutForm.ShowDialog();
        }
コード例 #8
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();
        }
コード例 #9
0
ファイル: MainForm.cs プロジェクト: Dasem/psu
        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();
        }
コード例 #10
0
ファイル: MainForm.cs プロジェクト: Dasem/psu
        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();
        }
コード例 #11
0
ファイル: MainForm.cs プロジェクト: Dasem/psu
 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;
             }
         }
     }
 }
コード例 #12
0
ファイル: Fparent.cs プロジェクト: Dasem/psu
        public static void MultMatrix(Object para)
        {
            Parms        par = (Parms)para;
            Matrix       mat1 = par.left, mat2 = par.right, result = par.result;
            OperProgress prbar = par.prbar;
            int          count = 0;

            while (!prbar.IsHandleCreated)
            {
                Thread.Sleep(10);
            }
            for (int i = 0; i < result.sizey; ++i)
            {
                if (!prbar.IsDisposed)
                {
                    prbar.InvokeUI(() => { prbar.progressBar1.Value = count; });
                }
                count++;
                for (int j = 0; j < result.sizex; ++j)
                {
                    int  sum             = 0;
                    Link temp            = mat2.columns[j].next;
                    Link current_pointer = temp;
                    while (temp != null)
                    {
                        sum += mat2.Exist(j, temp.line_number, ref current_pointer) * mat1.Exist(temp.line_number, i);
                        //sum += mat2.Exist(j, temp.line_number) * mat1.Exist(temp.line_number, i);
                        temp = temp.next;
                    }
                    if (sum != 0)
                    {
                        result.columns[j].Insert(i, sum);
                    }
                }
            }
            Fparent.names_collection[Fparent.names_collection.IndexOf(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (запись)")] = result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ")";

            if (mat1.name == mat2.name)
            {
                mat1.count_readers--;
            }
            else
            {
                mat1.count_readers--;
                mat2.count_readers--;
            }
            if (mat1.count_readers == 0)
            {
                if (mat1.name != result.name)//для сброса наименования и возможности дальнейшей работы с матрицами
                {
                    try
                    {
                        Fparent.names_collection[Fparent.names_collection.IndexOf(mat1.name + " (" + mat1.sizey.ToString() + "x" + mat1.sizex.ToString() + ") (чтение)")] = mat1.name + " (" + mat1.sizey.ToString() + "x" + mat1.sizex.ToString() + ")";
                    }
                    catch
                    {
                        Fparent.names_collection[Fparent.names_collection.IndexOf(mat1.name + " (" + mat1.sizey.ToString() + "x" + mat1.sizex.ToString() + ") (запись)")] = mat1.name + " (" + mat1.sizey.ToString() + "x" + mat1.sizex.ToString() + ")";
                    }
                }
            }

            if (mat2.count_readers == 0)
            {
                if (mat2.name != result.name && mat2.name != mat1.name)
                {
                    try
                    {
                        Fparent.names_collection[Fparent.names_collection.IndexOf(mat2.name + " (" + mat2.sizey.ToString() + "x" + mat2.sizex.ToString() + ") (чтение)")] = mat2.name + " (" + mat2.sizey.ToString() + "x" + mat2.sizex.ToString() + ")";
                    }
                    catch
                    {
                        Fparent.names_collection[Fparent.names_collection.IndexOf(mat2.name + " (" + mat2.sizey.ToString() + "x" + mat2.sizex.ToString() + ") (запись)")] = mat2.name + " (" + mat2.sizey.ToString() + "x" + mat2.sizex.ToString() + ")";
                    }
                }
            }
            Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });



            if (MessageBox.Show("Матрица \"" + result.name + "\" успешно добавлена, вывести результат?", "Успех", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                Program.fr2.InvokeUI(() => { prbar.progressBar1.Maximum = result.sizex * result.sizey; });
                Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(result.name, "matrix"), prbar);
                //   result.count_readers++;
                Fparent.names_collection[Fparent.names_collection.IndexOf(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ")")] = result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (чтение)";
                Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });
                result.count_readers++;
                Fparent.threads.Add(new Thread(result.OutputMatrix));
                Fparent.threads.Last().Start(forout);
            }
            else
            if (!prbar.IsDisposed)
            {
                prbar.InvokeUI(() => { prbar.Close(); });
            }
        }
コード例 #13
0
ファイル: Fparent.cs プロジェクト: Dasem/psu
 public Outparams(ForOutputMatrix _ForOutForm, OperProgress _prbarform)
 {
     ForOutForm = _ForOutForm;
     prbarform  = _prbarform;
 }
コード例 #14
0
ファイル: Fparent.cs プロジェクト: Dasem/psu
        public static void ReverseMatrix(Object para)
        {
            Parms        par = (Parms)para;
            Matrix       mat = par.left, result = par.result;
            OperProgress prbar = par.prbar;

            bool[] cols = new bool[mat.sizex];
            bool[] rows = new bool[mat.sizex];
            for (int i = 0; i < cols.Length; ++i)
            {
                cols[i] = rows[i] = true;
            }
            int det = mat.DetMatrix(rows, cols, mat.sizex);

            if (det == 0)
            {
                try
                {
                    Fparent.names_collection[Fparent.names_collection.IndexOf(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (запись)")] = result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ")";
                }
                catch
                {
                    Thread.Sleep(200);
                    try
                    {
                        Fparent.names_collection[Fparent.names_collection.IndexOf(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (запись)")] = result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ")";
                    }
                    catch { }
                }
                --mat.count_readers;
                if (mat.count_readers == 0)
                {
                    if (mat.name != result.name)
                    {
                        try
                        {
                            Fparent.names_collection[Fparent.names_collection.IndexOf(mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ") (чтение)")] = mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ")";
                        }
                        catch
                        {
                            Fparent.names_collection[Fparent.names_collection.IndexOf(mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ") (запись)")] = mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ")";
                        }
                    }
                }

                Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });

                if (!prbar.IsDisposed)
                {
                    prbar.InvokeUI(() => { prbar.Close(); });
                }
                par.isDetermNull = 1;
                MessageBox.Show("Определитель матрицы равен нулю, невозможно найти обратную", "Ошибка");
                return;
            }
            else
            {
                par.isDetermNull = 0;
            }
            int k     = 0;
            int count = 0;

            while (!prbar.IsHandleCreated)
            {
                Thread.Sleep(10);
            }
            for (int i = 0; i < result.sizey; ++i)
            {
                for (int j = 0; j < result.sizex; ++j)
                {
                    if (!prbar.IsDisposed)
                    {
                        prbar.InvokeUI(() => { prbar.progressBar1.Value = count; });
                    }
                    count++;
                    result.columns[i].Insert(j, Convert.ToInt32((mat.Minor(i, j, (bool[])rows.Clone(), (bool[])cols.Clone(), mat.sizex)) / det));
                    Console.WriteLine(++k);
                }
            }
            try
            {
                Fparent.names_collection[Fparent.names_collection.IndexOf(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (запись)")] = result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ")";
            }
            catch
            {
                Thread.Sleep(200);
                Fparent.names_collection[Fparent.names_collection.IndexOf(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (запись)")] = result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ")";
            }
            --mat.count_readers;
            if (mat.count_readers == 0)
            {
                if (mat.name != result.name)
                {
                    try
                    {
                        Fparent.names_collection[Fparent.names_collection.IndexOf(mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ") (чтение)")] = mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ")";
                    }
                    catch
                    {
                        Fparent.names_collection[Fparent.names_collection.IndexOf(mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ") (запись)")] = mat.name + " (" + mat.sizey.ToString() + "x" + mat.sizex.ToString() + ")";
                    }
                }
            }
            Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });

            if (MessageBox.Show("Матрица \"" + result.name + "\" успешно добавлена, вывести результат?", "Успех", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                Program.fr2.InvokeUI(() => { prbar.progressBar1.Maximum = result.sizex * result.sizey; });
                Matrix.Outparams forout = new Matrix.Outparams(new ForOutputMatrix(result.name, "matrix"), prbar);
                //   result.count_readers++;
                Fparent.names_collection[Fparent.names_collection.IndexOf(result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ")")] = result.name + " (" + result.sizey.ToString() + "x" + result.sizex.ToString() + ") (чтение)";
                Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });
                result.count_readers++;
                Fparent.threads.Add(new Thread(result.OutputMatrix));
                Fparent.threads.Last().Start(forout);
            }
            else
            if (!prbar.IsDisposed)
            {
                prbar.InvokeUI(() => { prbar.Close(); });
            }
        }