daily pastebin goal
14%
SHARE
TWEET

Untitled

a guest Feb 13th, 2018 96 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top