MainWindow.xaml.cs 43 KB

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