Pagini recente » Cod sursa (job #2435654) | Cod sursa (job #1897995) | Cod sursa (job #888063) | Cod sursa (job #1844785) | Cod sursa (job #2209828)
#include<fstream>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
# define EPS 0.0000001
# define MAX 301
double a[MAX][MAX], x[MAX];
int m, n;
double argMax(int h, int k){
double max=EPS, where=-1;
for(int i=h;i<=m;i++)
if(abs(a[i][k])>max){
max=abs(a[i][k]); where=i;
}
return where;
}
void swapRows(int y, int x){
for(int j=1;j<=n;j++)
swap(a[x][j],a[y][j]);
}
void afisareMatrice(){
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
}
int main(){
freopen("gauss.in","r",stdin); freopen("gauss.out","w",stdout);
int i, j, h, k;
double i_max, f;
//citire date
scanf("%i %i",&m, &n);
for(i=1;i<=m;i++)
for(j=1;j<=n+1;j++)
scanf("%lf",&a[i][j]);
//Gausssian Elimination
n++;
h=1; k=1;
while(h<=m && k<=n){
i_max=argMax(h,k);
if(i_max==-1) k++;
else{
swapRows(h,i_max);
for(j=k+1;j<=n;j++)
a[h][j]=a[h][j]/a[h][k];
a[h][k]=1;
for(i=h+1; i<=m; i++){
f=a[i][k];
a[i][k]=0;
for(j=k+1;j<=n;j++)
a[i][j]=a[i][j]-a[h][j]*f*1.0;
}
h++; k++;
}
}
//aflare necunoscute
for(i=m;i>0;i--)
for(j=1;j<=n;j++){
if(abs(a[i][j])>EPS){
if(j==n){
printf("Imposibil\n");
return 0;
}
x[j]=a[i][n];
for(k=j+1;k<=n-1;k++)
x[j]=x[j]-x[k]*a[i][k];
break;
}
}
//afisare rezultat
for(i=1;i<n;i++)
printf("%.8lf ",x[i]);
return 0;
}