using System; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media.Animation; using Matrix; namespace MatrixXAMLOnly { // TODO: Перепроверить все поля на валидацию (например, при создании диаграмм) // TODO: Изменить кнопки // TODO: Изменить при наведении в гамбургере /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); BtnAddition.Content = "Сложение матриц"; BtnDifference.Content = "Вычитание матриц"; BtnMultiplicationOnScalar.Content = "Умножение матрицы \nна скаляр"; BtnTransposition.Content = "Транспонирование матрицы"; BtnMultiplicationOnTransposed.Content = "Умножение матрицы на её \nтранспонированную матрицу"; BtnRowsReplace.Content = "Перестановка строк"; BtnRowsTranspositionReplace.Content = "Перестановка строк согласно \nвектору транспозиции"; BtnInverse.Content = "Обратная матрицы"; BtnAddition.RaiseEvent(new RoutedEventArgs(Button.ClickEvent)); } private void BtnHamburgerMenu_Click(object sender, RoutedEventArgs e) { DoubleAnimation menuAnimation = new DoubleAnimation(); menuAnimation.From = CurtainMenu.ActualWidth; menuAnimation.DecelerationRatio = 1.0; if (menuAnimation.From == 250) { menuAnimation.To = 0; menuAnimation.Duration = TimeSpan.FromSeconds(0.2); } else { menuAnimation.To = 250; menuAnimation.Duration = TimeSpan.FromSeconds(0.2); } CurtainMenu.BeginAnimation(WidthProperty, menuAnimation); } private Grid CreateMatrix(int a, int b, bool isOnlyRead) { Grid matrixGrid = new Grid(); matrixGrid.Margin = new Thickness(25, 75, 25, 75); // Добавление колонок for (int i = 0; i < b; i++) { matrixGrid.ColumnDefinitions.Add(new ColumnDefinition()); } // Добавление строк for (int j = 0; j < a; j++) { matrixGrid.RowDefinitions.Add(new RowDefinition()); } // Добавление TextBox'ов int tabCounter = 1; for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { TextBox textBox = new TextBox() { HorizontalContentAlignment = HorizontalAlignment.Center, VerticalContentAlignment = VerticalAlignment.Center, TabIndex = tabCounter }; if (isOnlyRead) { textBox.IsReadOnly = true; } tabCounter++; textBox.KeyDown += TextBox_KeyDown; Grid.SetColumn(textBox, j); Grid.SetRow(textBox, i); matrixGrid.Children.Add(textBox); } } return matrixGrid; } private void TextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.W || e.Key == Key.A || e.Key == Key.S || e.Key == Key.D || e.Key == Key.Tab) { e.Handled = true; FocusOnNext((TextBox)sender, e.Key); return; } if (e.Key != Key.NumPad0 && e.Key != Key.D0 && e.Key != Key.NumPad1 && e.Key != Key.D1 && e.Key != Key.NumPad2 && e.Key != Key.D2 && e.Key != Key.NumPad3 && e.Key != Key.D3 && e.Key != Key.NumPad4 && e.Key != Key.D4 && e.Key != Key.NumPad5 && e.Key != Key.D5 && e.Key != Key.NumPad6 && e.Key != Key.D6 && e.Key != Key.NumPad7 && e.Key != Key.D7 && e.Key != Key.NumPad8 && e.Key != Key.D8 && e.Key != Key.NumPad9 && e.Key != Key.D9 && e.Key != Key.OemMinus && e.Key != Key.Subtract) { e.Handled = true; } } private void FocusOnNext(TextBox tb, Key KeyArg) { Grid matrixGrid = (Grid)tb.Parent; int columns = matrixGrid.ColumnDefinitions.Count; int rows = matrixGrid.RowDefinitions.Count; int element = tb.TabIndex; if (((int)KeyArg) == 40 || KeyArg == Key.S) { element += columns; } else if ((int)KeyArg == 38 || KeyArg == Key.W) { element -= columns; } else if ((int)KeyArg == 37 || KeyArg == Key.A) { element -= 1; } else if ((int)KeyArg == 39 || KeyArg == Key.D || KeyArg == Key.Tab) { element += 1; } else { return; } int counter = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { counter++; if (element == counter) { matrixGrid.Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Focus(); } } } } #region HumburgerMenuItems private void BtnAddition_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Сложение матриц"; GridContentAddition.Visibility = Visibility.Visible; GridContentDifference.Visibility = Visibility.Collapsed; GridContentMultiplication.Visibility = Visibility.Collapsed; GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed; GridContentRowsReplace.Visibility = Visibility.Collapsed; GridContentTranspose.Visibility = Visibility.Collapsed; GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed; GridContentInverse.Visibility = Visibility.Collapsed; GridAdditionFrstTerm.Children.Clear(); GridAdditionScndTerm.Children.Clear(); GridAdditionResult.Children.Clear(); GridAdditionFrstTerm.Children.Add(CreateMatrix(5, 5, false)); GridAdditionScndTerm.Children.Add(CreateMatrix(5, 5, false)); GridAdditionResult.Children.Add(CreateMatrix(5, 5, true)); } private void BtnDifference_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Вычитание матриц"; GridContentAddition.Visibility = Visibility.Collapsed; GridContentDifference.Visibility = Visibility.Visible; GridContentMultiplication.Visibility = Visibility.Collapsed; GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed; GridContentRowsReplace.Visibility = Visibility.Collapsed; GridContentTranspose.Visibility = Visibility.Collapsed; GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed; GridContentInverse.Visibility = Visibility.Collapsed; GridDifferenceFrstTerm.Children.Clear(); GridDifferenceScndTerm.Children.Clear(); GridDifferenceResult.Children.Clear(); GridDifferenceFrstTerm.Children.Add(CreateMatrix(5, 5, false)); GridDifferenceScndTerm.Children.Add(CreateMatrix(5, 5, false)); GridDifferenceResult.Children.Add(CreateMatrix(5, 5, true)); } private void BtnMultiplicationOnScalar_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Умножение матрицы на скаляр"; GridContentAddition.Visibility = Visibility.Collapsed; GridContentDifference.Visibility = Visibility.Collapsed; GridContentMultiplication.Visibility = Visibility.Visible; GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed; GridContentRowsReplace.Visibility = Visibility.Collapsed; GridContentTranspose.Visibility = Visibility.Collapsed; GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed; GridContentInverse.Visibility = Visibility.Collapsed; GridMultiplicationOnScalarFrstTerm.Children.Clear(); TextBoxMultiplicationOnScalarScndTerm.Text = ""; GridMultiplicationOnScalarResult.Children.Clear(); GridMultiplicationOnScalarFrstTerm.Children.Add(CreateMatrix(5, 5, false)); GridMultiplicationOnScalarResult.Children.Add(CreateMatrix(5, 5, true)); } private void BtnTransposition_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Транспонирование матрицы"; GridContentAddition.Visibility = Visibility.Collapsed; GridContentDifference.Visibility = Visibility.Collapsed; GridContentMultiplication.Visibility = Visibility.Collapsed; GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed; GridContentRowsReplace.Visibility = Visibility.Collapsed; GridContentTranspose.Visibility = Visibility.Visible; GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed; GridContentInverse.Visibility = Visibility.Collapsed; GridTransposeFrom.Children.Clear(); GridTransposed.Children.Clear(); GridTransposeFrom.Children.Add(CreateMatrix(3, 5, false)); GridTransposed.Children.Add(CreateMatrix(5, 3, true)); } private void BtnMultiplicationOnTransposed_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Умножение матрицы на её транспонированную матрицу"; GridContentAddition.Visibility = Visibility.Collapsed; GridContentDifference.Visibility = Visibility.Collapsed; GridContentMultiplication.Visibility = Visibility.Collapsed; GridContentMultiplicationOnTransposed.Visibility = Visibility.Visible; GridContentRowsReplace.Visibility = Visibility.Collapsed; GridContentTranspose.Visibility = Visibility.Collapsed; GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed; GridContentInverse.Visibility = Visibility.Collapsed; GridMultiplicationOnTransposedTerm.Children.Clear(); GridMultiplicationOnTransposedResult.Children.Clear(); GridMultiplicationOnTransposedTerm.Children.Add(CreateMatrix(5, 5, false)); GridMultiplicationOnTransposedResult.Children.Add(CreateMatrix(5, 5, true)); } private void BtnRowsReplace_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Перестановка строк"; GridContentAddition.Visibility = Visibility.Collapsed; GridContentDifference.Visibility = Visibility.Collapsed; GridContentMultiplication.Visibility = Visibility.Collapsed; GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed; GridContentRowsReplace.Visibility = Visibility.Visible; GridContentTranspose.Visibility = Visibility.Collapsed; GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed; GridContentInverse.Visibility = Visibility.Collapsed; GridRowsReplaceMatrix.Children.Clear(); GridRowsReplaceResult.Children.Clear(); GridRowsReplaceMatrix.Children.Add(CreateMatrix(5, 5, false)); GridRowsReplaceResult.Children.Add(CreateMatrix(5, 5, true)); } private void BtnInverse_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Обратная матрица"; GridContentAddition.Visibility = Visibility.Collapsed; GridContentDifference.Visibility = Visibility.Collapsed; GridContentMultiplication.Visibility = Visibility.Collapsed; GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed; GridContentRowsReplace.Visibility = Visibility.Collapsed; GridContentTranspose.Visibility = Visibility.Collapsed; GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed; GridContentInverse.Visibility = Visibility.Visible; GridInverseMatrix.Children.Clear(); GridInverseResult.Children.Clear(); GridInverseMatrix.Children.Add(CreateMatrix(5, 5, false)); GridInverseResult.Children.Add(CreateMatrix(5, 5, true)); } private void BtnRowsTranspositionReplace_Click(object sender, RoutedEventArgs e) { this.Title = "Калькулятор: матрицы - Перестановка строк согласно вектору транспозиции"; GridContentAddition.Visibility = Visibility.Collapsed; GridContentDifference.Visibility = Visibility.Collapsed; GridContentMultiplication.Visibility = Visibility.Collapsed; GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed; GridContentRowsReplace.Visibility = Visibility.Collapsed; GridContentTranspose.Visibility = Visibility.Collapsed; GridContentRowTranspositionReplace.Visibility = Visibility.Visible; GridContentInverse.Visibility = Visibility.Collapsed; GridRowTranspositionReplaceMatrix.Children.Clear(); GridRowTranspositionReplaceVector.Children.Clear(); GridRowTranspositionReplaceResult.Children.Clear(); GridRowTranspositionReplaceMatrix.Children.Add(CreateMatrix(5, 5, false)); GridRowTranspositionReplaceVector.Children.Add(CreateMatrix(5, 1, false)); GridRowTranspositionReplaceResult.Children.Add(CreateMatrix(5, 5, true)); } #endregion #region Addition private void BtnAdditionCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridAdditionResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridAdditionResult.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; double[,] scndTerm = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridAdditionFrstTerm.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); scndTerm[i, j] = Convert.ToDouble(((Grid)GridAdditionScndTerm.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } MyMatrix matrixFrstTerm = new MyMatrix(frstTerm); MyMatrix matrixScndTerm = new MyMatrix(scndTerm); MyMatrix result = matrixFrstTerm + matrixScndTerm; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { ((TextBox)((Grid)GridAdditionResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString(); } } } private void BtnAddtitionCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount = 0; int columnCount = 0; try { rowCount = Convert.ToInt32(TextBoxAdditionRowCount.Text); columnCount = Convert.ToInt32(TextBoxAdditionColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridAdditionFrstTerm.Children.Clear(); GridAdditionScndTerm.Children.Clear(); GridAdditionResult.Children.Clear(); GridAdditionFrstTerm.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridAdditionScndTerm.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridAdditionResult.Children.Add(CreateMatrix(rowCount, columnCount, true)); } private void BtnAdditionDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridAdditionResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridAdditionResult.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridAdditionResult.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion #region Difference private void BtnDifferenceCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount = 0; int columnCount = 0; try { rowCount = Convert.ToInt32(TextBoxDifferenceRowCount.Text); columnCount = Convert.ToInt32(TextBoxDifferenceColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridDifferenceFrstTerm.Children.Clear(); GridDifferenceScndTerm.Children.Clear(); GridDifferenceResult.Children.Clear(); GridDifferenceFrstTerm.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridDifferenceScndTerm.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridDifferenceResult.Children.Add(CreateMatrix(rowCount, columnCount, true)); } private void BtnDifferenceCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridDifferenceResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridDifferenceResult.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; double[,] scndTerm = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridDifferenceFrstTerm.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); scndTerm[i, j] = Convert.ToDouble(((Grid)GridDifferenceScndTerm.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } MyMatrix matrixFrstTerm = new MyMatrix(frstTerm); MyMatrix matrixScndTerm = new MyMatrix(scndTerm); MyMatrix result = matrixFrstTerm - matrixScndTerm; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { ((TextBox)((Grid)GridDifferenceResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString(); } } } private void BtnDifferenceDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridDifferenceResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridDifferenceResult.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridDifferenceResult.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion #region MultiplicationOnScalar private void BtnMultiplicationOnScalarCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount, columnCount; try { rowCount = Convert.ToInt32(TextBoxMultiplicationOnScalarRowCount.Text); columnCount = Convert.ToInt32(TextBoxMultiplicationOnScalarColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridMultiplicationOnScalarFrstTerm.Children.Clear(); TextBoxMultiplicationOnScalarScndTerm.Text = ""; GridMultiplicationOnScalarResult.Children.Clear(); GridMultiplicationOnScalarFrstTerm.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridMultiplicationOnScalarResult.Children.Add(CreateMatrix(rowCount, columnCount, true)); } private void BtnMultiplicationOnScalarCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridMultiplicationOnScalarResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridMultiplicationOnScalarResult.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; double scndTerm = 0; try { scndTerm = Convert.ToDouble(TextBoxMultiplicationOnScalarScndTerm.Text); } catch { MessageBox.Show("Скалярная величина указана некорректно!"); return; } for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridMultiplicationOnScalarFrstTerm.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } MyMatrix matrixFrstTerm = new MyMatrix(frstTerm); MyMatrix result = matrixFrstTerm * scndTerm; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { ((TextBox)((Grid)GridMultiplicationOnScalarResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString(); } } } private void BtnMultiplicationOnScalarnDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridMultiplicationOnScalarResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridMultiplicationOnScalarResult.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridMultiplicationOnScalarResult.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion #region Transposition private void BtnTranspositionCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount = 0; int columnCount = 0; try { rowCount = Convert.ToInt32(TextBoxTranspositionRowCount.Text); columnCount = Convert.ToInt32(TextBoxTranspositionColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridTransposeFrom.Children.Clear(); GridTransposed.Children.Clear(); GridTransposeFrom.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridTransposed.Children.Add(CreateMatrix(columnCount, rowCount, true)); } private void BtnTranspositionCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridTransposeFrom.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridTransposeFrom.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridTransposeFrom.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } MyMatrix result = MyMatrix.Transpose(new MyMatrix(frstTerm)); for (int i = 0; i < result.Rows; i++) { for (int j = 0; j < result.Columns; j++) { Grid matrixGrid = (Grid)GridTransposed.Children[0]; TextBox tb = (TextBox)matrixGrid.Children[(i * result.Columns) + j]; tb.Text = result.data[i, j].ToString(); } } } private void BtnTranspositionDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridTransposed.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridTransposed.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridTransposed.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion #region MultiplicationOnTransposed private void BtnMultiplicationOnTransposedCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount = 0; int columnCount = 0; try { rowCount = Convert.ToInt32(TextBoxMultiplicationOnTransposedRowCount.Text); columnCount = Convert.ToInt32(TextBoxMultiplicationOnTransposedColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridMultiplicationOnTransposedTerm.Children.Clear(); GridMultiplicationOnTransposedResult.Children.Clear(); GridMultiplicationOnTransposedTerm.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridMultiplicationOnTransposedResult.Children.Add(CreateMatrix(rowCount, rowCount, true)); } private void BtnMultiplicationOnTransposedCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridMultiplicationOnTransposedTerm.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridMultiplicationOnTransposedTerm.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridMultiplicationOnTransposedTerm.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } MyMatrix matrixFrst = new MyMatrix(frstTerm); MyMatrix matrixTransposed = MyMatrix.Transpose(matrixFrst); MyMatrix result = matrixFrst * matrixTransposed; for (int i = 0; i < result.Rows; i++) { for (int j = 0; j < result.Columns; j++) { ((TextBox)((Grid)GridMultiplicationOnTransposedResult.Children[0]).Children[(i * result.Columns) + j]).Text = result.data[i, j].ToString(); } } } private void BtnMultiplicationOnTransposedDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridMultiplicationOnTransposedResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridMultiplicationOnTransposedResult.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridMultiplicationOnTransposedResult.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion #region RowReplace private void BtnRowReplaceCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount = 0; int columnCount = 0; try { rowCount = Convert.ToInt32(TextBoxRowReplaceRowCount.Text); columnCount = Convert.ToInt32(TextBoxRowReplaceColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridRowsReplaceMatrix.Children.Clear(); GridRowsReplaceResult.Children.Clear(); GridRowsReplaceMatrix.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridRowsReplaceResult.Children.Add(CreateMatrix(rowCount, columnCount, true)); } private void BtnRowsReplaceCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridRowsReplaceMatrix.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridRowsReplaceMatrix.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridRowsReplaceMatrix.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } MyMatrix matrixFrstTerm = new MyMatrix(frstTerm); MyMatrix result = MyMatrix.RowReplace(matrixFrstTerm, Convert.ToInt32(TextBoxRowReplaceFrstTerm.Text) - 1, Convert.ToInt32(TextBoxRowReplaceScndTerm.Text) - 1); for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { ((TextBox)((Grid)GridRowsReplaceResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString(); } } } private void BtnRowsReplaceDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridRowsReplaceResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridRowsReplaceResult.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridRowsReplaceResult.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion #region RowTranspositionReplace private void BtnRowTranspositionReplaceCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount, columnCount; try { rowCount = Convert.ToInt32(TextBoxRowTranspositionReplaceRowCount.Text); columnCount = Convert.ToInt32(TextBoxRowTranspositionReplaceColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridRowTranspositionReplaceMatrix.Children.Clear(); GridRowTranspositionReplaceVector.Children.Clear(); GridRowTranspositionReplaceResult.Children.Clear(); GridRowTranspositionReplaceMatrix.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridRowTranspositionReplaceVector.Children.Add(CreateMatrix(rowCount, 1, false)); GridRowTranspositionReplaceResult.Children.Add(CreateMatrix(rowCount, columnCount, true)); } private void BtnRowTranspositionReplaceCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridRowTranspositionReplaceMatrix.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridRowTranspositionReplaceMatrix.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; int[] vector = new int[rowCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridRowTranspositionReplaceMatrix.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } for (int i = 0; i < rowCount; i++) { try { vector[i] = Convert.ToInt32(((Grid)GridRowTranspositionReplaceVector.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == 0 && Grid.GetRow(e) == i).Text) - 1; } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } MyMatrix matrixFrstTerm = new MyMatrix(frstTerm); MyMatrix result = MyMatrix.RowReplaceByVector(matrixFrstTerm, vector); if (result != null) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { ((TextBox)((Grid)GridRowTranspositionReplaceResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString(); } } } else { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { ((TextBox)((Grid)GridRowTranspositionReplaceResult.Children[0]).Children[(i * columnCount) + j]).Text = matrixFrstTerm.data[i, j].ToString(); } } } } private void BtnRowTranspositionReplaceDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridRowTranspositionReplaceResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridRowTranspositionReplaceResult.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridRowTranspositionReplaceResult.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion #region Inverse private void BtnInverseCreateMatrix_Click(object sender, RoutedEventArgs e) { int rowCount, columnCount; try { rowCount = Convert.ToInt32(TextBoxInverseRowCount.Text); columnCount = Convert.ToInt32(TextBoxInverseColumnCount.Text); } catch { MessageBox.Show("Количество строк/столбцов указано некорректно!"); return; } GridInverseMatrix.Children.Clear(); GridInverseResult.Children.Clear(); GridInverseMatrix.Children.Add(CreateMatrix(rowCount, columnCount, false)); GridInverseResult.Children.Add(CreateMatrix(rowCount, columnCount, true)); } private void BtnInverseCalculate_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridInverseMatrix.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridInverseMatrix.Children[0]).ColumnDefinitions.Count; double[,] frstTerm = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { try { frstTerm[i, j] = Convert.ToDouble(((Grid)GridInverseMatrix.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } catch { MessageBox.Show("Матрица указана некорректно!"); return; } } } MyMatrix matrixFrstTerm = new MyMatrix(frstTerm); MyMatrix result; try { result = MyMatrix.Inverse(matrixFrstTerm); } catch (Exception ex) { MessageBox.Show(ex.Message); return; } for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { ((TextBox)((Grid)GridInverseResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString(); } } } private void BtnInverseeDiagramm_Click(object sender, RoutedEventArgs e) { int rowCount = ((Grid)GridInverseResult.Children[0]).RowDefinitions.Count; int columnCount = ((Grid)GridInverseResult.Children[0]).ColumnDefinitions.Count; double[,] result = new double[rowCount, columnCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { result[i, j] = Convert.ToDouble(((Grid)GridInverseResult.Children[0]).Children.Cast().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text); } } DiagramWindow wnd = new DiagramWindow(new MyMatrix(result)); wnd.Show(); } #endregion } }