Advertisement
Guest User

Untitled

a guest
Feb 13th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <cmath>
  4. #include <string>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9. class fract
  10. {
  11. private:
  12. void reduce()
  13. {
  14. if (num == 0)
  15. denum = 1;
  16. if (denum < 0)
  17. {
  18. denum = -denum;
  19. num = -num;
  20. }
  21. int max = abs(num) > abs(denum) ? abs(denum) : abs(num);
  22. for (int i = 2; i <= max; i++)
  23. {
  24. if (num % i == 0 && denum % i == 0)
  25. {
  26. num /= i;
  27. denum /= i;
  28. i = 1;
  29. }
  30. }
  31. }
  32. public:
  33. fract(int num)
  34. {
  35. this->num = num;
  36. denum = 1;
  37. }
  38. fract()
  39. {
  40. num = 0;
  41. denum = 1;
  42. }
  43. fract(int num, int denum)
  44. {
  45. this->num = num;
  46. this->denum = denum;
  47. reduce();
  48. }
  49. int num;
  50. int denum;
  51. };
  52.  
  53.  
  54. int places[4]{ 0, 1, 2, 3 };
  55. fract matrix[4][5];
  56. //{ { fract(2), fract(0), fract(1), fract(1), fract(0)},{ fract(4), fract(2), fract(8), fract(1), fract(0) },{ fract(3), fract(5), fract(2), fract(2), fract(0) },{ fract(-6), fract(4), fract(1), fract(1), fract(0) } }
  57. void swap_rows(int n1, int n2)
  58. {
  59. for (int i = 0; i < 5; i++)
  60. {
  61. swap(matrix[n1][i], matrix[n2][i]);
  62. }
  63. }
  64.  
  65. void swap_cols(int n1, int n2)
  66. {
  67. for (int i = 0; i < 4; i++)
  68. {
  69. swap(matrix[i][n1], matrix[i][n2]);
  70. }
  71. swap(places[n1], places[n2]);
  72. }
  73.  
  74. void print_matr()
  75. {
  76. for (int i = 0; i < 4; i++)
  77. {
  78. for (int g = 0; g < 5; g++)
  79. {
  80. if (matrix[i][g].denum != 1)
  81. {
  82. cout.width(10);
  83. cout << matrix[i][g].num << "/" << matrix[i][g].denum;
  84. }
  85. else
  86. {
  87. cout.width(10);
  88. cout << matrix[i][g].num;
  89. }
  90. }
  91. cout << endl;
  92. }
  93. }
  94.  
  95.  
  96. fract answer[4];
  97.  
  98. void get_answer()
  99. {
  100. fract free;
  101. for (int i = 3; i >= 0; i--)
  102. {
  103. free = matrix[i][4];
  104. for (int g = i + 1; g < 4; g++)
  105. {
  106. free = fract(free.num*matrix[i][g].denum*answer[places[g]].denum - matrix[i][g].num*answer[places[g]].num*free.denum, free.denum*matrix[i][g].denum*answer[places[g]].denum);
  107. }
  108. answer[places[i]] = fract(free.num * matrix[i][i].denum, free.denum * matrix[i][i].num);
  109. }
  110. }
  111.  
  112.  
  113.  
  114. int main()
  115. {
  116. double max = 0;
  117. int num, colmax, rowmax;
  118. int mode;
  119. cin >> mode;
  120. for (int i = 0; i < 4; i++)
  121. {
  122. for (int g = 0; g < 5; g++)
  123. {
  124. cin >> num;
  125. matrix[i][g] = fract(num);
  126. }
  127. }
  128. fract k;
  129. for (int col = 0; col < 3; col++)
  130. {
  131. max = 0;
  132. if (mode == 0)
  133. {
  134. for (int row = col; row < 4; row++)
  135. {
  136. if (abs(double(matrix[row][col].num) / matrix[row][col].denum) >= max)
  137. {
  138. max = abs(double(matrix[row][col].num) / matrix[row][col].denum);
  139. rowmax = row;
  140. }
  141. }
  142. swap_rows(col, rowmax);
  143. }
  144. else if (mode == 1)
  145. {
  146. for (int row = col; row < 4; row++)
  147. {
  148. if (abs(double(matrix[col][row].num) / matrix[col][row].denum) >= max)
  149. {
  150. max = abs(double(matrix[col][row].num) / matrix[col][row].denum);
  151. colmax = row;
  152. }
  153. }
  154. swap_cols(col, colmax);
  155. }
  156. else
  157. {
  158. for (int row = col; row < 4; row++)
  159. {
  160. for (int column = col; column < 4; column++)
  161. {
  162. if (abs(double(matrix[row][column].num) / matrix[row][column].denum) > max)
  163. {
  164. max = abs(double(matrix[row][column].num) / matrix[row][column].denum);
  165. rowmax = row;
  166. colmax = column;
  167. }
  168. }
  169. }
  170. swap_cols(col, colmax);
  171. swap_rows(col, rowmax);
  172. }
  173. print_matr();
  174. cout << endl << endl;
  175. for (int row = col + 1; row < 4; row++)
  176. {
  177. k = fract(-matrix[row][col].num * matrix[col][col].denum, matrix[row][col].denum * matrix[col][col].num);
  178. for (int column = col; column < 5; column++)
  179. {
  180. matrix[row][column] = fract(matrix[row][column].num*matrix[col][column].denum*k.denum + matrix[col][column].num*k.num*matrix[row][column].denum, matrix[row][column].denum*k.denum*matrix[col][column].denum);
  181. }
  182. }
  183. print_matr();
  184. cout << endl << endl;
  185. }
  186. get_answer();
  187. cout << "--------------------------------------------------------------------";
  188. for (int i = 0; i < 4; i++)
  189. {
  190. if (answer[i].denum != 1)
  191. cout << answer[i].num << "/" << answer[i].denum << " ";
  192. else
  193. cout << answer[i].num << " ";
  194. }
  195. return 0;
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement