public Parms(Matrix _left, Matrix _right, Matrix _result, OperProgress _prbar) { left = _left; right = _right; result = _result; prbar = _prbar; }
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(); } }
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(); }
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(); } }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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; } } } }
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(); }); } }
public Outparams(ForOutputMatrix _ForOutForm, OperProgress _prbarform) { ForOutForm = _ForOutForm; prbarform = _prbarform; }
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(); }); } }