Mai intai trebuie sa te autentifici.
Cod sursa(job #3136744)
| Utilizator | Data | 8 iunie 2023 10:07:56 | |
|---|---|---|---|
| Problema | Algoritmul lui Gauss | Scor | 10 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.4 kb |
#include <bits/stdc++.h>
#define L 305
#define EPS 0.0000000001
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
double m[L][L];
bool vis[L];
int main(){
int l, c;
fin >> l >> c;
for (int i = 0; i < l; i++)
for (int j = 0; j <= c; j++)
fin >> m[i][j];
for (int j = 0; j < c; j++){
int rel = -1;
for (int i = 0; i < l; i++)
if (abs(m[i][j]) > EPS && !vis[i]){
rel = i;
i = l;
}
if (rel == -1)
continue;
vis[rel] = true;
double x = m[rel][j];
for (int k = 0; k <= c; k++)
m[rel][k] /= x;
for (int i = 0; i < l; i++)
if (i != rel){
double coef = m[i][j];
for (int k = 0; k <= c; k++){
m[i][k] -= coef * m[rel][k];
if (abs(m[i][k]) < EPS)
m[i][k] = 0;
}
}
}
for (int i = 0; i < l; i++){
bool ok = false;
for (int j = 0; j < c; j++){
if (abs(m[i][j]) > EPS)
ok = true;
}
if (!ok && abs(m[i][c]) > EPS){
fout << "Imposibil\n";
return 0;
}
}
fout << setprecision(10) << fixed;
for (int j = 0; j < c; j++){
bool printed = false;
for (int i = 0; i < l; i++)
if (abs(m[i][j]) > EPS){
fout << m[i][c] << " ";
printed = true;
break;
}
if (!printed)
fout << 0 << " ";
}
return 0;
}
