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(); }
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(); }
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 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(); }); } }