Pagini recente » Borderou de evaluare (job #1444210) | Borderou de evaluare (job #1314062) | Borderou de evaluare (job #1314063) | Cod sursa (job #1283801)
#include <stdio.h>
#include <math.h>
#include <utility>
using namespace std;
const float E=1e-12;
int n,m;
float v[301][302],s[301];
int linie_fara_zero(int ls, int c)
{
for(int i=ls; i<=n; i++)
if(fabsf(v[i][c]!=0))
return i;
return 0;
}
bool gauss()
{
int lp=1, cp=1,i,j,k,lfz;
bool ok;
while ((lp<=n) && (cp<=m))
{
ok=true;
if(fabsf(v[lp][cp]==0))
{
lfz=linie_fara_zero(lp,cp);
if(!lfz)
{
cp++;
ok=false;
}
else
swap(v[lfz],v[lp]);
}
if(ok)
{
for(i=cp+1; i<=m+1; i++)
v[lp][i]/=v[lp][cp];
v[lp][cp]=1;
for (i=lp+1; i<=n; i++)
{
for(j=cp+1; j<=m+1; j++)
v[i][j]-=v[lp][j]*v[i][cp];
v[i][cp]=0;
}
lp++; cp++;
}
}
for(i=n-1; i>=1; i--)
{
j=1;
while(fabsf(v[i][j]==0)) j++;
if(j==m+1)
return false;
s[j]=v[i][m+1];
for(k=j+1; k<=m; k++)
s[j]-=s[k]*v[i][k];
}
return true;
}
void afiseaza(bool posibil)
{
FILE *f=fopen("gauss.out","w");
if(!posibil)
fprintf(f,"Imposibil");
else
for(int i=1; i<=m; i++)
fprintf(f,"%.7f ",s[i]);
fclose(f);
}
void citeste()
{
FILE *f=fopen("gauss.in", "r");
fscanf(f, "%i%i", &n, &m);
for(int i=1; i<=n; i++)
for(int j=1; j<=m+1; j++)
fscanf(f, "%f", &v[i][j]);
fclose(f);
}
int main()
{
citeste();
afiseaza(gauss());
return 0;
}