Pagini recente » Cod sursa (job #1928017) | Cod sursa (job #183688) | Cod sursa (job #700458) | Cod sursa (job #1673636) | Cod sursa (job #1400010)
#include <fstream>
#include <iomanip>
#define eps 0.000000001
#define nmax 310
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m;
long double v[nmax][nmax];
long double aux,sol[nmax];
int main()
{
int i,j,k,t;
f>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=m+1;j++)
f>>v[i][j];
i=1;j=1;
//Sunt la ecuatia i , necunoscuta j
while (i<=n&&j<=m) {
for (k=i;k<=n;k++)
if (v[k][j])
break;
//Caut prima linie care are necunoscuta j diferita de 0
if (k==n+1) {
j++;
continue;
}
//Interschimb ecuatiile
if (k!=i) {
for (t=1;t<=m+1;t++) {
aux=v[i][k];
v[i][k]=v[k][k];
v[k][k]=aux;
}
}
//Impart ecuatia astfel incat coeficientul lui j sa fie 1
for (t=j+1;t<=m+1;t++)
v[i][t]/=v[i][j];
v[i][j]=1;
//Scad ecuatia din toate celelalte
for (k=i+1;k<=n;k++) {
for (t=j+1;t<=m+1;t++)
v[k][t]-=v[i][t]*v[k][j];
v[k][j]=0;
}
i++;j++;
}
for (i=n;i>=1;i--) {
//Gasesc primul necunoscut deja determinat
for (j=1;j<=m+1;j++)
if (v[i][j]<-eps||v[i][j]>eps)
break;
//Daca totul e 0 continui
if (j==m+2) {
continue;
}
//Nu se poate ca suma cu coeficienti nuli sa fie nula
if (j==m+1) {
g<<"Imposibil\n";
return 0;
}
//Gasim toate necunoscutele
sol[j]=v[i][m+1];
for (k=j+1;k<=m;k++)
sol[j]-=sol[k]*v[i][k];
}
for (i=1;i<=m;i++)
g<<setprecision(10)<<fixed<<sol[i]<<' ';
return 0;
}