Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <cmath>
- #include <string>
- #include <iomanip>
- using namespace std;
- class fract
- {
- private:
- void reduce()
- {
- if (num == 0)
- denum = 1;
- if (denum < 0)
- {
- denum = -denum;
- num = -num;
- }
- int max = abs(num) > abs(denum) ? abs(denum) : abs(num);
- for (int i = 2; i <= max; i++)
- {
- if (num % i == 0 && denum % i == 0)
- {
- num /= i;
- denum /= i;
- i = 1;
- }
- }
- }
- public:
- fract(int num)
- {
- this->num = num;
- denum = 1;
- }
- fract()
- {
- num = 0;
- denum = 1;
- }
- fract(int num, int denum)
- {
- this->num = num;
- this->denum = denum;
- reduce();
- }
- int num;
- int denum;
- };
- int places[4]{ 0, 1, 2, 3 };
- fract matrix[4][5];
- //{ { 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) } }
- void swap_rows(int n1, int n2)
- {
- for (int i = 0; i < 5; i++)
- {
- swap(matrix[n1][i], matrix[n2][i]);
- }
- }
- void swap_cols(int n1, int n2)
- {
- for (int i = 0; i < 4; i++)
- {
- swap(matrix[i][n1], matrix[i][n2]);
- }
- swap(places[n1], places[n2]);
- }
- void print_matr()
- {
- for (int i = 0; i < 4; i++)
- {
- for (int g = 0; g < 5; g++)
- {
- if (matrix[i][g].denum != 1)
- {
- cout.width(10);
- cout << matrix[i][g].num << "/" << matrix[i][g].denum;
- }
- else
- {
- cout.width(10);
- cout << matrix[i][g].num;
- }
- }
- cout << endl;
- }
- }
- fract answer[4];
- void get_answer()
- {
- fract free;
- for (int i = 3; i >= 0; i--)
- {
- free = matrix[i][4];
- for (int g = i + 1; g < 4; g++)
- {
- 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);
- }
- answer[places[i]] = fract(free.num * matrix[i][i].denum, free.denum * matrix[i][i].num);
- }
- }
- int main()
- {
- double max = 0;
- int num, colmax, rowmax;
- int mode;
- cin >> mode;
- for (int i = 0; i < 4; i++)
- {
- for (int g = 0; g < 5; g++)
- {
- cin >> num;
- matrix[i][g] = fract(num);
- }
- }
- fract k;
- for (int col = 0; col < 3; col++)
- {
- max = 0;
- if (mode == 0)
- {
- for (int row = col; row < 4; row++)
- {
- if (abs(double(matrix[row][col].num) / matrix[row][col].denum) >= max)
- {
- max = abs(double(matrix[row][col].num) / matrix[row][col].denum);
- rowmax = row;
- }
- }
- swap_rows(col, rowmax);
- }
- else if (mode == 1)
- {
- for (int row = col; row < 4; row++)
- {
- if (abs(double(matrix[col][row].num) / matrix[col][row].denum) >= max)
- {
- max = abs(double(matrix[col][row].num) / matrix[col][row].denum);
- colmax = row;
- }
- }
- swap_cols(col, colmax);
- }
- else
- {
- for (int row = col; row < 4; row++)
- {
- for (int column = col; column < 4; column++)
- {
- if (abs(double(matrix[row][column].num) / matrix[row][column].denum) > max)
- {
- max = abs(double(matrix[row][column].num) / matrix[row][column].denum);
- rowmax = row;
- colmax = column;
- }
- }
- }
- swap_cols(col, colmax);
- swap_rows(col, rowmax);
- }
- print_matr();
- cout << endl << endl;
- for (int row = col + 1; row < 4; row++)
- {
- k = fract(-matrix[row][col].num * matrix[col][col].denum, matrix[row][col].denum * matrix[col][col].num);
- for (int column = col; column < 5; column++)
- {
- 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);
- }
- }
- print_matr();
- cout << endl << endl;
- }
- get_answer();
- cout << "--------------------------------------------------------------------";
- for (int i = 0; i < 4; i++)
- {
- if (answer[i].denum != 1)
- cout << answer[i].num << "/" << answer[i].denum << " ";
- else
- cout << answer[i].num << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement