Pagini recente » Cod sursa (job #328181) | Cod sursa (job #2335745) | Cod sursa (job #2227583) | Cod sursa (job #22638) | Cod sursa (job #1589504)
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int n,m,i,j,k,l;
struct ec
{
double c[302];
ec *prec,*urm;
}*p,*u,*t,*v;
void aprox(double&a)
{
double aint=double(int(a*1e8))/1e8;
if(a<aint+5e-9)a=aint;
else a=aint+1e-8;
}
int pr(ec*a)
{
int i=1;
while(a->c[i]==0&&i<=n+1)i++;
if(i==n+2)return 0;
return i;
}
void simpl(ec*a,ec*b,int i)
{
int j;
double k=a->c[i]/b->c[i];
for(j=1;j<=n+1;j++)
{
a->c[j]-=b->c[j]*k;
aprox(a->c[j]);
}
}
fstream f;
double sol[301];
int main()
{
f.open("gauss.in",ios_base::in);
f>>m>>n;
p=new ec;
u=new ec;
t=new ec;
p->urm=t;
t->prec=p;
u->prec=t;
t->urm=u;
for(j=1;j<=n+1;j++)f>>t->c[j];
t->c[n+1]=-t->c[n+1];
for(i=2;i<=m;i++)
{
t=new ec;
u->prec->urm=t;
t->prec=u->prec;
u->prec=t;
t->urm=u;
for(j=1;j<=n+1;j++)f>>t->c[j];
t->c[n+1]=-t->c[n+1];
}
f.close();
f.open("gauss.out",ios_base::out);
for(i=1;i<=n;i++)
{
for(t=p->urm,v=NULL;t!=u;t=t->urm)if(pr(t)==i)v=t;
if(v!=NULL)for(t=p->urm;t!=u;t=t->urm)if(t!=v)
{
/*
for(j=1;j<=n+1;j++)cout<<v->c[j]<<' ';
cout<<'\n';
for(j=1;j<=n+1;j++)cout<<t->c[j]<<' ';
cout<<'\n';
cout<<'\n';
*/
simpl(t,v,i);
/*
for(j=1;j<=n+1;j++)cout<<t->c[j]<<' ';
cout<<'\n';
cout<<'\n';
cout<<'\n';
*/
if(pr(t)==n+1)
{
f<<"Imposibil";
return 0;
}
}
}
for(t=p->urm;t!=u;t=t->urm)
{
i=pr(t);
sol[i]=-t->c[n+1]/t->c[i];
}
for(i=1;i<=n;i++)f<<sol[i]<<setprecision(8)<<' ';
return 0;
}
//functie de 2 ecuatii, pt f(a,b,n) a-=b/b(n)*a(n)