Pagini recente » Cod sursa (job #2773209) | Cod sursa (job #419222) | Cod sursa (job #3238828) | Cod sursa (job #429756) | Cod sursa (job #901779)
Cod sursa(job #901779)
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
fstream f("gauss.in", ios::in), g("gauss.out", ios::out);
float a[303][303],n,m;
void solve();
void cauta(int);
void schimba(int,int);
void redu(int,int,float);
void imparte(int,float);
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m+1;j++)
f>>a[i][j];
solve();
for(int i=1;i<=n;i++)
{
g<<fixed<<setprecision (8)<<a[i][(int)m+1]<<" ";
}
return 0;
}
void solve()
{
for(int i=1;i<=m;i++)
{
if (a[i][i]==0)
cauta(i);
imparte(i,a[i][i]);
for(int j=i+1;j<=n;j++)
{
float d=a[j][i]/a[i][i];
redu(i,j,d);
}
}
for(int i=m;i>0;i--)
{
for(int j=i-1;j>0;j--)
{
float d=a[j][i]/a[i][i];
redu(i,j,d);
}
}
}
void cauta(int m)
{
int i=m+1;
while(a[i][m]==0 && i<=n)
i++;
if(i>n)
{
g<<"Imposibil";
exit(0);
}
schimba(m,i);
}
void schimba(int m,int i)
{
int aux;
for(int j=1;j<=m+1;j++)
{
aux=a[m][j];
a[m][j]=a[i][j];
a[i][j]=aux;
}
}
void redu(int i, int j, float d)
{
for(int k=i;k<=m+1;k++)
{
a[j][k]=a[j][k]-a[i][k]*d;
}
}
void imparte(int i, float d)
{
for(int k=i;k<=m+1;k++)
a[i][k]/=d;
}