Pagini recente » Cod sursa (job #2042034) | Cod sursa (job #1730026) | Cod sursa (job #3344030) | Cod sursa (job #1323588) | Cod sursa (job #3303107)
#include <bits/stdc++.h>
using namespace std;
const double eps = 0.00000001;
double v[305][305], ans[305];
int main(){
ifstream cin("gauss.in");
ofstream cout("gauss.out");
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m + 1; j++){
cin >> v[i][j];
}
}
for(int i = 1; i <= min(n, m); i++){
int lin = i;
while(lin <= n){
if(abs(v[lin][i]) >= eps)
break;
lin++;
}
if(false){ // aici nu inteleg dar ok, nu ar trebui sa mearga codul asta (imo)
cout << "cum da asa ceva 100";
}
else{
if(i != lin)
swap(v[i], v[lin]);
for(int j = i + 1; j <= m + 1; j++){
v[i][j] /= v[i][i];
}
v[i][i] = 1;
for(int ii = i + 1; ii <= n; ii++){
for(int j = i + 1; j <= m; j++){
v[ii][j] = v[ii][j] - v[i][j] * v[ii][i];
}
v[ii][i] = 0;
}
}
}
for(int i = n; i >= 1; i--){
int j = 1;
while(j <= m + 1 && abs(v[i][j]) < eps)
j++;
if(j == m + 2) continue;
if(j == m + 1){
cout << "Imposibil\n";
return 0;
}
ans[j] = v[i][m + 1];
for(int jj = m; jj > j; jj--){
ans[j] -= ans[jj] * v[i][jj];
}
}
for(int i = 1; i <= m; i++) cout << fixed << setprecision(10) << ans[i] << " ";
return 0;
}