Pagini recente » Cod sursa (job #1897974) | Cod sursa (job #481644) | Cod sursa (job #2953546) | Cod sursa (job #2839348) | Cod sursa (job #1244569)
#include<iostream>
#include<fstream>
#include<math.h>
#include<iomanip>
using namespace std;
#define NMAX 302
#define eps 0.000000001
double a[NMAX][NMAX],x[NMAX];
int egal(double x, double y)
{
if(fabs(x-y)<=eps)
return 1;
return 0;
}
int main ()
{
int i,j,k,poz,n,m,lin;
double aux,mul;
ifstream f("gauss.in");
ofstream g("gauss.out");
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
f>>a[i][j];
f.close();
lin=1;
for(j=1;j<=m && lin<=n-1;j++) {
if(egal(a[lin][j],0)) {
poz=-1;
for(i=lin;i<=n;i++)
if(egal(a[i][j],0)==0) {
poz=i;
break;
}
if(poz==-1)
continue;
for(k=j;k<=m+1;k++) {
aux=a[poz][k];
a[poz][k]=a[lin][k];
a[lin][k]=aux;
}
}
for(i=lin+1;i<=n;i++) {
mul=a[i][j]/a[lin][j];
for(k=j;k<=m+1;k++)
a[i][k]=a[i][k]-mul*a[lin][k];
}
lin++;
}
for(i=lin;i<=n;i++) {
for(j=1;j<=m;j++)
if(egal(a[i][j],0)==0)
break;
if(j>m) {
if(egal(a[i][m+1],0)==0)
break;
}
}
if(i<=n) {
g<<"Imposibil";
g.close();
return 0;
}
for(i=n;i>=1;i--) {
for(j=m;j>=1;j--)
if(egal(a[i][j],0))
break;
if(j==m)
continue;
for(k=j+1;k<=m;k++)
a[i][m+1]=a[i][m+1]-a[i][k]*x[k];
x[j+1]=a[i][m+1]/a[i][j+1];
}
g<<fixed;
for(i=1;i<=m;i++)
g<<setprecision(10)<<x[i]<<" ";
g.close();
return 0;
}