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