Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define NMAX 310
- #include <iostream>
- #include <cstdio>
- using namespace std;
- int n, m;
- double a[NMAX][NMAX];
- double rez[NMAX];
- void make1_onLine(int line)
- {
- int for1 = a[line][line];
- for(int j = line; j <= n; ++j)
- a[line][j] /= for1;
- rez[line] /= for1;
- }
- void make0_onLine(int line, int column, int relativeToLine)
- {
- double multipl = -a[line][column];
- for(int j = column; j <= n; ++j)
- a[line][j] = a[line][j] + a[relativeToLine][j] * multipl;
- rez[line] = rez[line] + rez[relativeToLine] * multipl;
- }
- void diff_startingOn(int line, int column)
- {
- for(int i = line; i <= n; ++i)
- if(a[i][column] != 0)
- make0_onLine(i, column, line-1);
- }
- void swp(int i, int l)
- {
- for(int j = 1; j <= n; ++j)
- swap(a[i][j], a[l][j]);
- }
- void read()
- {
- scanf("%d %d", &n, &m);
- for(int i = 1; i <= n; ++i)
- {
- for(int j = 1; j <= n; ++j)
- scanf("%lf", &a[i][j]);
- scanf("%lf", &rez[i]);
- }
- }
- void form_a()
- {
- int plusJ = 0;
- for(int l_to_solve = 1; l_to_solve <= n; ++l_to_solve)
- {
- if(a[l_to_solve][l_to_solve + plusJ] != 0)
- {
- make1_onLine(l_to_solve);
- diff_startingOn(l_to_solve+1, l_to_solve + plusJ);
- }
- else{
- bool findn0 = 0;
- for(int i = l_to_solve+1; i <= n; ++i)
- if(a[i][l_to_solve] != 0)
- {
- swp(i, l_to_solve);
- make1_onLine(l_to_solve);
- diff_startingOn(l_to_solve+1, l_to_solve + plusJ);
- findn0 = 1;
- break;
- }
- if(findn0 == 0)
- plusJ ++;
- }
- }
- }
- void write()
- {
- for(int i = 1; i <= n; ++i)
- {
- for(int j = 1; j <= n; ++j)
- printf("%lf ", a[i][j]);
- printf("\n");
- }
- }
- int main()
- {
- freopen("gauss.in", "r", stdin);
- freopen("gauss.out", "w", stdout);
- read();
- form_a();
- write();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement