MainWindow.xaml.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Controls.Primitives;
  6. using System.Windows.Input;
  7. using System.Windows.Media;
  8. using System.Windows.Media.Animation;
  9. using Matrix;
  10. namespace MatrixXAMLOnly
  11. {
  12. // TODO: Перепроверить все поля на валидацию
  13. // TODO: Создание диаграмм
  14. /// <summary>
  15. /// Interaction logic for MainWindow.xaml
  16. /// </summary>
  17. public partial class MainWindow : Window
  18. {
  19. public MainWindow()
  20. {
  21. InitializeComponent();
  22. BtnAddition.Content = "Сложение матриц";
  23. BtnDifference.Content = "Вычитание матриц";
  24. BtnMultiplicationOnScalar.Content = "Умножение матрицы \nна скаляр";
  25. BtnTransposition.Content = "Транспонирование матрицы";
  26. BtnMultiplicationOnTransposed.Content = "Умножение матрицы на её \nтранспонированную матрицу";
  27. BtnRowsReplace.Content = "Перестановка строк";
  28. BtnRowsTranspositionReplace.Content = "Перестановка строк согласно \nвектору транспозиции";
  29. BtnInverse.Content = "Обратная матрицы";
  30. BtnAddition.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
  31. }
  32. private void BtnHamburgerMenu_Click(object sender, RoutedEventArgs e)
  33. {
  34. DoubleAnimation menuAnimation = new DoubleAnimation();
  35. menuAnimation.From = CurtainMenu.ActualWidth;
  36. menuAnimation.DecelerationRatio = 1.0;
  37. if (menuAnimation.From == 250)
  38. {
  39. menuAnimation.To = 0;
  40. menuAnimation.Duration = TimeSpan.FromSeconds(0.2);
  41. }
  42. else
  43. {
  44. menuAnimation.To = 250;
  45. menuAnimation.Duration = TimeSpan.FromSeconds(0.2);
  46. }
  47. CurtainMenu.BeginAnimation(WidthProperty, menuAnimation);
  48. }
  49. private Grid CreateMatrix(int a, int b, bool isOnlyRead)
  50. {
  51. Grid matrixGrid = new Grid();
  52. matrixGrid.Margin = new Thickness(25, 75, 25, 75);
  53. // Добавление колонок
  54. for (int i = 0; i < b; i++)
  55. {
  56. matrixGrid.ColumnDefinitions.Add(new ColumnDefinition());
  57. }
  58. // Добавление строк
  59. for (int j = 0; j < a; j++)
  60. {
  61. matrixGrid.RowDefinitions.Add(new RowDefinition());
  62. }
  63. // Добавление TextBox'ов
  64. int tabCounter = 1;
  65. for (int i = 0; i < a; i++)
  66. {
  67. for (int j = 0; j < b; j++)
  68. {
  69. TextBox textBox = new TextBox()
  70. {
  71. HorizontalContentAlignment = HorizontalAlignment.Center,
  72. VerticalContentAlignment = VerticalAlignment.Center,
  73. TabIndex = tabCounter
  74. };
  75. if (isOnlyRead)
  76. {
  77. textBox.IsReadOnly = true;
  78. }
  79. tabCounter++;
  80. textBox.KeyDown += TextBox_KeyDown;
  81. Grid.SetColumn(textBox, j);
  82. Grid.SetRow(textBox, i);
  83. matrixGrid.Children.Add(textBox);
  84. }
  85. }
  86. return matrixGrid;
  87. }
  88. private void TextBox_KeyDown(object sender, KeyEventArgs e)
  89. {
  90. if (e.Key == Key.W ||
  91. e.Key == Key.A ||
  92. e.Key == Key.S ||
  93. e.Key == Key.D ||
  94. e.Key == Key.Tab)
  95. {
  96. e.Handled = true;
  97. FocusOnNext((TextBox)sender, e.Key);
  98. return;
  99. }
  100. if (e.Key != Key.NumPad0 && e.Key != Key.D0 &&
  101. e.Key != Key.NumPad1 && e.Key != Key.D1 &&
  102. e.Key != Key.NumPad2 && e.Key != Key.D2 &&
  103. e.Key != Key.NumPad3 && e.Key != Key.D3 &&
  104. e.Key != Key.NumPad4 && e.Key != Key.D4 &&
  105. e.Key != Key.NumPad5 && e.Key != Key.D5 &&
  106. e.Key != Key.NumPad6 && e.Key != Key.D6 &&
  107. e.Key != Key.NumPad7 && e.Key != Key.D7 &&
  108. e.Key != Key.NumPad8 && e.Key != Key.D8 &&
  109. e.Key != Key.NumPad9 && e.Key != Key.D9 && e.Key != Key.OemMinus && e.Key != Key.Subtract)
  110. {
  111. e.Handled = true;
  112. }
  113. }
  114. private void FocusOnNext(TextBox tb, Key KeyArg)
  115. {
  116. Grid matrixGrid = (Grid)tb.Parent;
  117. int columns = matrixGrid.ColumnDefinitions.Count;
  118. int rows = matrixGrid.RowDefinitions.Count;
  119. int element = tb.TabIndex;
  120. if (((int)KeyArg) == 40 || KeyArg == Key.S)
  121. {
  122. element += columns;
  123. }
  124. else if ((int)KeyArg == 38 || KeyArg == Key.W)
  125. {
  126. element -= columns;
  127. }
  128. else if ((int)KeyArg == 37 || KeyArg == Key.A)
  129. {
  130. element -= 1;
  131. }
  132. else if ((int)KeyArg == 39 || KeyArg == Key.D || KeyArg == Key.Tab)
  133. {
  134. element += 1;
  135. }
  136. else
  137. {
  138. return;
  139. }
  140. int counter = 0;
  141. for (int i = 0; i < rows; i++)
  142. {
  143. for (int j = 0; j < columns; j++)
  144. {
  145. counter++;
  146. if (element == counter)
  147. {
  148. matrixGrid.Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Focus();
  149. }
  150. }
  151. }
  152. }
  153. #region HumburgerMenuItems
  154. private void BtnAddition_Click(object sender, RoutedEventArgs e)
  155. {
  156. this.Title = "Калькулятор: матрицы - Сложение матриц";
  157. GridContentAddition.Visibility = Visibility.Visible;
  158. GridContentDifference.Visibility = Visibility.Collapsed;
  159. GridContentMultiplication.Visibility = Visibility.Collapsed;
  160. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  161. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  162. GridContentTranspose.Visibility = Visibility.Collapsed;
  163. GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed;
  164. GridContentInverse.Visibility = Visibility.Collapsed;
  165. GridAdditionFrstTerm.Children.Clear();
  166. GridAdditionScndTerm.Children.Clear();
  167. GridAdditionResult.Children.Clear();
  168. GridAdditionFrstTerm.Children.Add(CreateMatrix(5, 5, false));
  169. GridAdditionScndTerm.Children.Add(CreateMatrix(5, 5, false));
  170. GridAdditionResult.Children.Add(CreateMatrix(5, 5, true));
  171. }
  172. private void BtnDifference_Click(object sender, RoutedEventArgs e)
  173. {
  174. this.Title = "Калькулятор: матрицы - Вычитание матриц";
  175. GridContentAddition.Visibility = Visibility.Collapsed;
  176. GridContentDifference.Visibility = Visibility.Visible;
  177. GridContentMultiplication.Visibility = Visibility.Collapsed;
  178. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  179. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  180. GridContentTranspose.Visibility = Visibility.Collapsed;
  181. GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed;
  182. GridContentInverse.Visibility = Visibility.Collapsed;
  183. GridDifferenceFrstTerm.Children.Clear();
  184. GridDifferenceScndTerm.Children.Clear();
  185. GridDifferenceResult.Children.Clear();
  186. GridDifferenceFrstTerm.Children.Add(CreateMatrix(5, 5, false));
  187. GridDifferenceScndTerm.Children.Add(CreateMatrix(5, 5, false));
  188. GridDifferenceResult.Children.Add(CreateMatrix(5, 5, true));
  189. }
  190. private void BtnMultiplicationOnScalar_Click(object sender, RoutedEventArgs e)
  191. {
  192. this.Title = "Калькулятор: матрицы - Умножение матрицы на скаляр";
  193. GridContentAddition.Visibility = Visibility.Collapsed;
  194. GridContentDifference.Visibility = Visibility.Collapsed;
  195. GridContentMultiplication.Visibility = Visibility.Visible;
  196. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  197. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  198. GridContentTranspose.Visibility = Visibility.Collapsed;
  199. GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed;
  200. GridContentInverse.Visibility = Visibility.Collapsed;
  201. GridMultiplicationOnScalarFrstTerm.Children.Clear();
  202. TextBoxMultiplicationOnScalarScndTerm.Text = "";
  203. GridMultiplicationOnScalarResult.Children.Clear();
  204. GridMultiplicationOnScalarFrstTerm.Children.Add(CreateMatrix(5, 5, false));
  205. GridMultiplicationOnScalarResult.Children.Add(CreateMatrix(5, 5, true));
  206. }
  207. private void BtnTransposition_Click(object sender, RoutedEventArgs e)
  208. {
  209. this.Title = "Калькулятор: матрицы - Транспонирование матрицы";
  210. GridContentAddition.Visibility = Visibility.Collapsed;
  211. GridContentDifference.Visibility = Visibility.Collapsed;
  212. GridContentMultiplication.Visibility = Visibility.Collapsed;
  213. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  214. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  215. GridContentTranspose.Visibility = Visibility.Visible;
  216. GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed;
  217. GridContentInverse.Visibility = Visibility.Collapsed;
  218. GridTransposeFrom.Children.Clear();
  219. GridTransposed.Children.Clear();
  220. GridTransposeFrom.Children.Add(CreateMatrix(3, 5, false));
  221. GridTransposed.Children.Add(CreateMatrix(5, 3, true));
  222. }
  223. private void BtnMultiplicationOnTransposed_Click(object sender, RoutedEventArgs e)
  224. {
  225. this.Title = "Калькулятор: матрицы - Умножение матрицы на её транспонированную матрицу";
  226. GridContentAddition.Visibility = Visibility.Collapsed;
  227. GridContentDifference.Visibility = Visibility.Collapsed;
  228. GridContentMultiplication.Visibility = Visibility.Collapsed;
  229. GridContentMultiplicationOnTransposed.Visibility = Visibility.Visible;
  230. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  231. GridContentTranspose.Visibility = Visibility.Collapsed;
  232. GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed;
  233. GridContentInverse.Visibility = Visibility.Collapsed;
  234. GridMultiplicationOnTransposedTerm.Children.Clear();
  235. GridMultiplicationOnTransposedResult.Children.Clear();
  236. GridMultiplicationOnTransposedTerm.Children.Add(CreateMatrix(5, 5, false));
  237. GridMultiplicationOnTransposedResult.Children.Add(CreateMatrix(5, 5, true));
  238. }
  239. private void BtnRowsReplace_Click(object sender, RoutedEventArgs e)
  240. {
  241. this.Title = "Калькулятор: матрицы - Перестановка строк";
  242. GridContentAddition.Visibility = Visibility.Collapsed;
  243. GridContentDifference.Visibility = Visibility.Collapsed;
  244. GridContentMultiplication.Visibility = Visibility.Collapsed;
  245. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  246. GridContentRowsReplace.Visibility = Visibility.Visible;
  247. GridContentTranspose.Visibility = Visibility.Collapsed;
  248. GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed;
  249. GridContentInverse.Visibility = Visibility.Collapsed;
  250. GridRowsReplaceMatrix.Children.Clear();
  251. GridRowsReplaceResult.Children.Clear();
  252. GridRowsReplaceMatrix.Children.Add(CreateMatrix(5, 5, false));
  253. GridRowsReplaceResult.Children.Add(CreateMatrix(5, 5, true));
  254. }
  255. private void BtnInverse_Click(object sender, RoutedEventArgs e)
  256. {
  257. this.Title = "Калькулятор: матрицы - Обратная матрица";
  258. GridContentAddition.Visibility = Visibility.Collapsed;
  259. GridContentDifference.Visibility = Visibility.Collapsed;
  260. GridContentMultiplication.Visibility = Visibility.Collapsed;
  261. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  262. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  263. GridContentTranspose.Visibility = Visibility.Collapsed;
  264. GridContentRowTranspositionReplace.Visibility = Visibility.Collapsed;
  265. GridContentInverse.Visibility = Visibility.Visible;
  266. GridInverseMatrix.Children.Clear();
  267. GridInverseResult.Children.Clear();
  268. GridInverseMatrix.Children.Add(CreateMatrix(5, 5, false));
  269. GridInverseResult.Children.Add(CreateMatrix(5, 5, true));
  270. }
  271. private void BtnRowsTranspositionReplace_Click(object sender, RoutedEventArgs e)
  272. {
  273. this.Title = "Калькулятор: матрицы - Перестановка строк согласно вектору транспозиции";
  274. GridContentAddition.Visibility = Visibility.Collapsed;
  275. GridContentDifference.Visibility = Visibility.Collapsed;
  276. GridContentMultiplication.Visibility = Visibility.Collapsed;
  277. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  278. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  279. GridContentTranspose.Visibility = Visibility.Collapsed;
  280. GridContentRowTranspositionReplace.Visibility = Visibility.Visible;
  281. GridContentInverse.Visibility = Visibility.Collapsed;
  282. GridRowTranspositionReplaceMatrix.Children.Clear();
  283. GridRowTranspositionReplaceVector.Children.Clear();
  284. GridRowTranspositionReplaceResult.Children.Clear();
  285. GridRowTranspositionReplaceMatrix.Children.Add(CreateMatrix(5, 5, false));
  286. GridRowTranspositionReplaceVector.Children.Add(CreateMatrix(5, 1, false));
  287. GridRowTranspositionReplaceResult.Children.Add(CreateMatrix(5, 5, true));
  288. }
  289. #endregion
  290. #region Addition
  291. private void BtnAdditionCalculate_Click(object sender, RoutedEventArgs e)
  292. {
  293. int rowCount = ((Grid)GridAdditionResult.Children[0]).RowDefinitions.Count;
  294. int columnCount = ((Grid)GridAdditionResult.Children[0]).ColumnDefinitions.Count;
  295. double[,] frstTerm = new double[rowCount, columnCount];
  296. double[,] scndTerm = new double[rowCount, columnCount];
  297. for (int i = 0; i < rowCount; i++)
  298. {
  299. for (int j = 0; j < columnCount; j++)
  300. {
  301. try
  302. {
  303. frstTerm[i, j] = Convert.ToDouble(((Grid)GridAdditionFrstTerm.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  304. scndTerm[i, j] = Convert.ToDouble(((Grid)GridAdditionScndTerm.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  305. }
  306. catch
  307. {
  308. MessageBox.Show("Матрица указана некорректно!");
  309. return;
  310. }
  311. }
  312. }
  313. MyMatrix matrixFrstTerm = new MyMatrix(frstTerm);
  314. MyMatrix matrixScndTerm = new MyMatrix(scndTerm);
  315. MyMatrix result = matrixFrstTerm + matrixScndTerm;
  316. for (int i = 0; i < rowCount; i++)
  317. {
  318. for (int j = 0; j < columnCount; j++)
  319. {
  320. ((TextBox)((Grid)GridAdditionResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString();
  321. }
  322. }
  323. }
  324. private void BtnAddtitionCreateMatrix_Click(object sender, RoutedEventArgs e)
  325. {
  326. int rowCount = 0;
  327. int columnCount = 0;
  328. try
  329. {
  330. rowCount = Convert.ToInt32(TextBoxAdditionRowCount.Text);
  331. columnCount = Convert.ToInt32(TextBoxAdditionColumnCount.Text);
  332. }
  333. catch
  334. {
  335. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  336. return;
  337. }
  338. GridAdditionFrstTerm.Children.Clear();
  339. GridAdditionScndTerm.Children.Clear();
  340. GridAdditionResult.Children.Clear();
  341. GridAdditionFrstTerm.Children.Add(CreateMatrix(rowCount, columnCount, false));
  342. GridAdditionScndTerm.Children.Add(CreateMatrix(rowCount, columnCount, false));
  343. GridAdditionResult.Children.Add(CreateMatrix(rowCount, columnCount, true));
  344. }
  345. #endregion
  346. #region Difference
  347. private void BtnDifferenceCreateMatrix_Click(object sender, RoutedEventArgs e)
  348. {
  349. int rowCount = 0;
  350. int columnCount = 0;
  351. try
  352. {
  353. rowCount = Convert.ToInt32(TextBoxDifferenceRowCount.Text);
  354. columnCount = Convert.ToInt32(TextBoxDifferenceColumnCount.Text);
  355. }
  356. catch
  357. {
  358. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  359. return;
  360. }
  361. GridDifferenceFrstTerm.Children.Clear();
  362. GridDifferenceScndTerm.Children.Clear();
  363. GridDifferenceResult.Children.Clear();
  364. GridDifferenceFrstTerm.Children.Add(CreateMatrix(rowCount, columnCount, false));
  365. GridDifferenceScndTerm.Children.Add(CreateMatrix(rowCount, columnCount, false));
  366. GridDifferenceResult.Children.Add(CreateMatrix(rowCount, columnCount, true));
  367. }
  368. private void BtnDifferenceCalculate_Click(object sender, RoutedEventArgs e)
  369. {
  370. int rowCount = ((Grid)GridDifferenceResult.Children[0]).RowDefinitions.Count;
  371. int columnCount = ((Grid)GridDifferenceResult.Children[0]).ColumnDefinitions.Count;
  372. double[,] frstTerm = new double[rowCount, columnCount];
  373. double[,] scndTerm = new double[rowCount, columnCount];
  374. for (int i = 0; i < rowCount; i++)
  375. {
  376. for (int j = 0; j < columnCount; j++)
  377. {
  378. try
  379. {
  380. frstTerm[i, j] = Convert.ToDouble(((Grid)GridDifferenceFrstTerm.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  381. scndTerm[i, j] = Convert.ToDouble(((Grid)GridDifferenceScndTerm.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  382. }
  383. catch
  384. {
  385. MessageBox.Show("Матрица указана некорректно!");
  386. return;
  387. }
  388. }
  389. }
  390. MyMatrix matrixFrstTerm = new MyMatrix(frstTerm);
  391. MyMatrix matrixScndTerm = new MyMatrix(scndTerm);
  392. MyMatrix result = matrixFrstTerm - matrixScndTerm;
  393. for (int i = 0; i < rowCount; i++)
  394. {
  395. for (int j = 0; j < columnCount; j++)
  396. {
  397. ((TextBox)((Grid)GridDifferenceResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString();
  398. }
  399. }
  400. }
  401. #endregion
  402. #region MultiplicationOnScalar
  403. private void BtnMultiplicationOnScalarCreateMatrix_Click(object sender, RoutedEventArgs e)
  404. {
  405. int rowCount, columnCount;
  406. try
  407. {
  408. rowCount = Convert.ToInt32(TextBoxMultiplicationOnScalarRowCount.Text);
  409. columnCount = Convert.ToInt32(TextBoxMultiplicationOnScalarColumnCount.Text);
  410. }
  411. catch
  412. {
  413. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  414. return;
  415. }
  416. GridMultiplicationOnScalarFrstTerm.Children.Clear();
  417. TextBoxMultiplicationOnScalarScndTerm.Text = "";
  418. GridMultiplicationOnScalarResult.Children.Clear();
  419. GridMultiplicationOnScalarFrstTerm.Children.Add(CreateMatrix(rowCount, columnCount, false));
  420. GridMultiplicationOnScalarResult.Children.Add(CreateMatrix(rowCount, columnCount, true));
  421. }
  422. private void BtnMultiplicationOnScalarCalculate_Click(object sender, RoutedEventArgs e)
  423. {
  424. int rowCount = ((Grid)GridMultiplicationOnScalarResult.Children[0]).RowDefinitions.Count;
  425. int columnCount = ((Grid)GridMultiplicationOnScalarResult.Children[0]).ColumnDefinitions.Count;
  426. double[,] frstTerm = new double[rowCount, columnCount];
  427. double scndTerm = 0;
  428. try
  429. {
  430. scndTerm = Convert.ToDouble(TextBoxMultiplicationOnScalarScndTerm.Text);
  431. }
  432. catch
  433. {
  434. MessageBox.Show("Скалярная величина указана некорректно!");
  435. return;
  436. }
  437. for (int i = 0; i < rowCount; i++)
  438. {
  439. for (int j = 0; j < columnCount; j++)
  440. {
  441. try
  442. {
  443. frstTerm[i, j] = Convert.ToDouble(((Grid)GridMultiplicationOnScalarFrstTerm.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  444. }
  445. catch
  446. {
  447. MessageBox.Show("Матрица указана некорректно!");
  448. return;
  449. }
  450. }
  451. }
  452. MyMatrix matrixFrstTerm = new MyMatrix(frstTerm);
  453. MyMatrix result = matrixFrstTerm * scndTerm;
  454. for (int i = 0; i < rowCount; i++)
  455. {
  456. for (int j = 0; j < columnCount; j++)
  457. {
  458. ((TextBox)((Grid)GridMultiplicationOnScalarResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString();
  459. }
  460. }
  461. }
  462. #endregion
  463. #region Transposition
  464. private void BtnTranspositionCreateMatrix_Click(object sender, RoutedEventArgs e)
  465. {
  466. int rowCount = 0;
  467. int columnCount = 0;
  468. try
  469. {
  470. rowCount = Convert.ToInt32(TextBoxTranspositionRowCount.Text);
  471. columnCount = Convert.ToInt32(TextBoxTranspositionColumnCount.Text);
  472. }
  473. catch
  474. {
  475. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  476. return;
  477. }
  478. GridTransposeFrom.Children.Clear();
  479. GridTransposed.Children.Clear();
  480. GridTransposeFrom.Children.Add(CreateMatrix(rowCount, columnCount, false));
  481. GridTransposed.Children.Add(CreateMatrix(columnCount, rowCount, true));
  482. }
  483. private void BtnTranspositionCalculate_Click(object sender, RoutedEventArgs e)
  484. {
  485. int rowCount = ((Grid)GridTransposeFrom.Children[0]).RowDefinitions.Count;
  486. int columnCount = ((Grid)GridTransposeFrom.Children[0]).ColumnDefinitions.Count;
  487. double[,] frstTerm = new double[rowCount, columnCount];
  488. for (int i = 0; i < rowCount; i++)
  489. {
  490. for (int j = 0; j < columnCount; j++)
  491. {
  492. try
  493. {
  494. frstTerm[i, j] = Convert.ToDouble(((Grid)GridTransposeFrom.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  495. }
  496. catch
  497. {
  498. MessageBox.Show("Матрица указана некорректно!");
  499. return;
  500. }
  501. }
  502. }
  503. MyMatrix result = MyMatrix.Transpose(new MyMatrix(frstTerm));
  504. for (int i = 0; i < result.Rows; i++)
  505. {
  506. for (int j = 0; j < result.Columns; j++)
  507. {
  508. Grid matrixGrid = (Grid)GridTransposed.Children[0];
  509. TextBox tb = (TextBox)matrixGrid.Children[(i * result.Columns) + j];
  510. tb.Text = result.data[i, j].ToString();
  511. }
  512. }
  513. }
  514. #endregion
  515. #region MultiplicationOnTransposed
  516. private void BtnMultiplicationOnTransposedCreateMatrix_Click(object sender, RoutedEventArgs e)
  517. {
  518. int rowCount = 0;
  519. int columnCount = 0;
  520. try
  521. {
  522. rowCount = Convert.ToInt32(TextBoxMultiplicationOnTransposedRowCount.Text);
  523. columnCount = Convert.ToInt32(TextBoxMultiplicationOnTransposedColumnCount.Text);
  524. }
  525. catch
  526. {
  527. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  528. return;
  529. }
  530. GridMultiplicationOnTransposedTerm.Children.Clear();
  531. GridMultiplicationOnTransposedResult.Children.Clear();
  532. GridMultiplicationOnTransposedTerm.Children.Add(CreateMatrix(rowCount, columnCount, false));
  533. GridMultiplicationOnTransposedResult.Children.Add(CreateMatrix(rowCount, rowCount, true));
  534. }
  535. private void BtnMultiplicationOnTransposedCalculate_Click(object sender, RoutedEventArgs e)
  536. {
  537. int rowCount = ((Grid)GridMultiplicationOnTransposedTerm.Children[0]).RowDefinitions.Count;
  538. int columnCount = ((Grid)GridMultiplicationOnTransposedTerm.Children[0]).ColumnDefinitions.Count;
  539. double[,] frstTerm = new double[rowCount, columnCount];
  540. for (int i = 0; i < rowCount; i++)
  541. {
  542. for (int j = 0; j < columnCount; j++)
  543. {
  544. try
  545. {
  546. frstTerm[i, j] = Convert.ToDouble(((Grid)GridMultiplicationOnTransposedTerm.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  547. }
  548. catch
  549. {
  550. MessageBox.Show("Матрица указана некорректно!");
  551. return;
  552. }
  553. }
  554. }
  555. MyMatrix matrixFrst = new MyMatrix(frstTerm);
  556. MyMatrix matrixTransposed = MyMatrix.Transpose(matrixFrst);
  557. MyMatrix result = matrixFrst * matrixTransposed;
  558. for (int i = 0; i < result.Rows; i++)
  559. {
  560. for (int j = 0; j < result.Columns; j++)
  561. {
  562. ((TextBox)((Grid)GridMultiplicationOnTransposedResult.Children[0]).Children[(i * result.Columns) + j]).Text = result.data[i, j].ToString();
  563. }
  564. }
  565. }
  566. #endregion
  567. #region RowReplace
  568. private void BtnRowReplaceCreateMatrix_Click(object sender, RoutedEventArgs e)
  569. {
  570. int rowCount = 0;
  571. int columnCount = 0;
  572. try
  573. {
  574. rowCount = Convert.ToInt32(TextBoxRowReplaceRowCount.Text);
  575. columnCount = Convert.ToInt32(TextBoxRowReplaceColumnCount.Text);
  576. }
  577. catch
  578. {
  579. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  580. return;
  581. }
  582. GridRowsReplaceMatrix.Children.Clear();
  583. GridRowsReplaceResult.Children.Clear();
  584. GridRowsReplaceMatrix.Children.Add(CreateMatrix(rowCount, columnCount, false));
  585. GridRowsReplaceResult.Children.Add(CreateMatrix(rowCount, columnCount, true));
  586. }
  587. private void BtnRowsReplaceCalculate_Click(object sender, RoutedEventArgs e)
  588. {
  589. int rowCount = ((Grid)GridRowsReplaceMatrix.Children[0]).RowDefinitions.Count;
  590. int columnCount = ((Grid)GridRowsReplaceMatrix.Children[0]).ColumnDefinitions.Count;
  591. double[,] frstTerm = new double[rowCount, columnCount];
  592. for (int i = 0; i < rowCount; i++)
  593. {
  594. for (int j = 0; j < columnCount; j++)
  595. {
  596. try
  597. {
  598. frstTerm[i, j] = Convert.ToDouble(((Grid)GridRowsReplaceMatrix.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  599. }
  600. catch
  601. {
  602. MessageBox.Show("Матрица указана некорректно!");
  603. return;
  604. }
  605. }
  606. }
  607. MyMatrix matrixFrstTerm = new MyMatrix(frstTerm);
  608. MyMatrix result = MyMatrix.RowReplace(matrixFrstTerm, Convert.ToInt32(TextBoxRowReplaceFrstTerm.Text) - 1, Convert.ToInt32(TextBoxRowReplaceScndTerm.Text) - 1);
  609. for (int i = 0; i < rowCount; i++)
  610. {
  611. for (int j = 0; j < columnCount; j++)
  612. {
  613. ((TextBox)((Grid)GridRowsReplaceResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString();
  614. }
  615. }
  616. }
  617. #endregion
  618. #region RowTranspositionReplace
  619. private void BtnRowTranspositionReplaceCreateMatrix_Click(object sender, RoutedEventArgs e)
  620. {
  621. int rowCount, columnCount;
  622. try
  623. {
  624. rowCount = Convert.ToInt32(TextBoxRowTranspositionReplaceRowCount.Text);
  625. columnCount = Convert.ToInt32(TextBoxRowTranspositionReplaceColumnCount.Text);
  626. }
  627. catch
  628. {
  629. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  630. return;
  631. }
  632. GridRowTranspositionReplaceMatrix.Children.Clear();
  633. GridRowTranspositionReplaceVector.Children.Clear();
  634. GridRowTranspositionReplaceResult.Children.Clear();
  635. GridRowTranspositionReplaceMatrix.Children.Add(CreateMatrix(rowCount, columnCount, false));
  636. GridRowTranspositionReplaceVector.Children.Add(CreateMatrix(rowCount, 1, false));
  637. GridRowTranspositionReplaceResult.Children.Add(CreateMatrix(rowCount, columnCount, true));
  638. }
  639. private void BtnRowTranspositionReplaceCalculate_Click(object sender, RoutedEventArgs e)
  640. {
  641. int rowCount = ((Grid)GridRowTranspositionReplaceMatrix.Children[0]).RowDefinitions.Count;
  642. int columnCount = ((Grid)GridRowTranspositionReplaceMatrix.Children[0]).ColumnDefinitions.Count;
  643. double[,] frstTerm = new double[rowCount, columnCount];
  644. int[] vector = new int[rowCount];
  645. for (int i = 0; i < rowCount; i++)
  646. {
  647. for (int j = 0; j < columnCount; j++)
  648. {
  649. try
  650. {
  651. frstTerm[i, j] = Convert.ToDouble(((Grid)GridRowTranspositionReplaceMatrix.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  652. }
  653. catch
  654. {
  655. MessageBox.Show("Матрица указана некорректно!");
  656. return;
  657. }
  658. }
  659. }
  660. for (int i = 0; i < rowCount; i++)
  661. {
  662. try
  663. {
  664. vector[i] = Convert.ToInt32(((Grid)GridRowTranspositionReplaceVector.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == 0 && Grid.GetRow(e) == i).Text) - 1;
  665. }
  666. catch
  667. {
  668. MessageBox.Show("Матрица указана некорректно!");
  669. return;
  670. }
  671. }
  672. MyMatrix matrixFrstTerm = new MyMatrix(frstTerm);
  673. MyMatrix result = MyMatrix.RowReplaceByVector(matrixFrstTerm, vector);
  674. if (result != null)
  675. {
  676. for (int i = 0; i < rowCount; i++)
  677. {
  678. for (int j = 0; j < columnCount; j++)
  679. {
  680. ((TextBox)((Grid)GridRowTranspositionReplaceResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString();
  681. }
  682. }
  683. }
  684. else
  685. {
  686. for (int i = 0; i < rowCount; i++)
  687. {
  688. for (int j = 0; j < columnCount; j++)
  689. {
  690. ((TextBox)((Grid)GridRowTranspositionReplaceResult.Children[0]).Children[(i * columnCount) + j]).Text = matrixFrstTerm.data[i, j].ToString();
  691. }
  692. }
  693. }
  694. }
  695. #endregion
  696. #region Inverse
  697. private void BtnInverseCreateMatrix_Click(object sender, RoutedEventArgs e)
  698. {
  699. int rowCount, columnCount;
  700. try
  701. {
  702. rowCount = Convert.ToInt32(TextBoxInverseRowCount.Text);
  703. columnCount = Convert.ToInt32(TextBoxInverseColumnCount.Text);
  704. }
  705. catch
  706. {
  707. MessageBox.Show("Количество строк/столбцов указано некорректно!");
  708. return;
  709. }
  710. GridInverseMatrix.Children.Clear();
  711. GridInverseResult.Children.Clear();
  712. GridInverseMatrix.Children.Add(CreateMatrix(rowCount, columnCount, false));
  713. GridInverseResult.Children.Add(CreateMatrix(rowCount, columnCount, true));
  714. }
  715. private void BtnInverseCalculate_Click(object sender, RoutedEventArgs e)
  716. {
  717. int rowCount = ((Grid)GridInverseMatrix.Children[0]).RowDefinitions.Count;
  718. int columnCount = ((Grid)GridInverseMatrix.Children[0]).ColumnDefinitions.Count;
  719. double[,] frstTerm = new double[rowCount, columnCount];
  720. for (int i = 0; i < rowCount; i++)
  721. {
  722. for (int j = 0; j < columnCount; j++)
  723. {
  724. try
  725. {
  726. frstTerm[i, j] = Convert.ToDouble(((Grid)GridInverseMatrix.Children[0]).Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Text);
  727. }
  728. catch
  729. {
  730. MessageBox.Show("Матрица указана некорректно!");
  731. return;
  732. }
  733. }
  734. }
  735. MyMatrix matrixFrstTerm = new MyMatrix(frstTerm);
  736. MyMatrix result;
  737. try
  738. {
  739. result = MyMatrix.Inverse(matrixFrstTerm);
  740. }
  741. catch (Exception ex)
  742. {
  743. MessageBox.Show(ex.Message);
  744. return;
  745. }
  746. for (int i = 0; i < rowCount; i++)
  747. {
  748. for (int j = 0; j < columnCount; j++)
  749. {
  750. ((TextBox)((Grid)GridInverseResult.Children[0]).Children[(i * columnCount) + j]).Text = result.data[i, j].ToString();
  751. }
  752. }
  753. }
  754. #endregion
  755. }
  756. }