Pagini recente » Cod sursa (job #2670685) | Cod sursa (job #320540) | Cod sursa (job #889300) | Cod sursa (job #2514634) | Cod sursa (job #2553747)
#include <iostream>
#include <fstream>
using namespace std;
int n,m;
double a[305][305],sol[305];
void citire()
{
ifstream fin("gauss.in");
fin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m+1;j++)
fin>>a[i][j];
}
void schimbare(int l1,int l2)
{
for(int i=1;i<=m+1;i++)
{
int aux=a[l1][i];
a[l1][i]=a[l2][i];
a[l2][i]=aux;
}
}
void gauss()
{
for(int k=1;k<m;k++)
{
if(a[k][k]==0)
{
int i=k+1;
while(i<=n&&a[i][k])
i++;
if(i<=n)
schimbare(k,i);
}
if(a[k][k])
{
double nr=1/a[k][k];
a[k][k]=1;
for(int j=k+1;j<=m+1;j++)
a[k][j]*=nr;
for(int i=k+1;i<=n;i++)
{
nr=a[i][k]/a[k][k];
for(int j=k;j<=m+1;j++)
a[i][j]-=nr*a[k][j];
}
}
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<" "<<a[i][m+1]<<"\n";
}*/
}
void solutie()
{
for(int i=n;i>0;i--)
{
sol[i]=a[i][m+1];
for(int j=m;j>i;j--)
sol[i]-=a[i][j]*sol[j];
sol[i]/=a[i][i];
}
}
void afisare()
{
ofstream fout("gauss.out");
for(int i=1;i<=m;i++)
fout<<sol[i]<<' ';
}
int main()
{
citire();
gauss();
solutie();
afisare();
return 0;
}