Pagini recente » Cod sursa (job #3334018) | Cod sursa (job #3335986) | Cod sursa (job #3340452) | Cod sursa (job #3351858) | Cod sursa (job #3319059)
#include <bits/stdc++.h>
#include <numeric>
#define VMAX 305
#define INF 1e10+1
#define int long long int
#define Mr_Gay return
#define baieti_sexy ios_base::sync_with_stdio(0)
#define nuduri_tipi_hot signed main()
#define sunt_horny_pentru_baieti {
#define pentru_baieti_horny_sunt }
using namespace std;
ifstream fin ("gauss.in");
ofstream fout ("gauss.out");
int de_aflat;
double numere[VMAX][VMAX];
double solutii[VMAX];
double factor;
const double LIM = 0.0000000000001;
nuduri_tipi_hot
{
baieti_sexy;
int n,m,i,j,k,t,q,nr;
fin>>n>>m;
for(i=0;i<n;i++)
{
for(j=0;j<=m;j++)
fin>>numere[i][j];
}
for(i=0;i<n;i++)
{
//cautam linie pe care i nu e nul
for(j=i;j<n;j++)
if(abs(numere[j][i])>LIM) // e egal cu 0
break;
if(j==n)
continue;
for(k=0;k<=m;k++) // schimbam liniile
swap(numere[i][k],numere[j][k]);
for(j=i+1;j<n;j++)
{
factor = numere[j][i]/numere[i][i];
numere[j][i]=0;
for(k=i+1;k<=m;k++)
numere[j][k]-=factor*numere[i][k];
}
}
de_aflat = n-1;
for(i=n-1;i>=0;i--)
{
for(k=0;k<m;k++)
if(abs(numere[i][k])>LIM) // daca nu e 0, garantat restul term sunt liberi
break;
if(k==m) // niciun termen
{
if(abs(numere[i][m])>LIM) // nu e 0
{
fout<<"Imposibil\n";
exit(0);
}
}
else
{
solutii[k]=numere[i][m];
for(j=k+1;j<m;j++)
{
solutii[k]-=numere[i][j]*solutii[j];
}
solutii[k]/=numere[i][k];
}
}
for(i=0;i<m;i++)
{
fout<<setprecision(9)<<fixed<<solutii[i]<<' ';
}
fout<<'\n';
Mr_Gay 0;
}