Pagini recente » Cod sursa (job #3197851) | Cod sursa (job #1915541) | Cod sursa (job #3219649) | Cod sursa (job #950637) | Cod sursa (job #2392398)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n, m,aux;
double necunoscute[305];
class ecuatie{
public:
double coeficienti[305];
double rezultat;
};
ecuatie toate_ecuatiile[305];
void punere_pe_pozitie_1(int ind)
{
for (int i=ind+1; i<=n; ++i)
{
if (toate_ecuatiile[ind].coeficienti[i]!=0)
{
swap(toate_ecuatiile[ind].coeficienti[ind],toate_ecuatiile[ind].coeficienti[i]);
return;
}
}
}
void reducere(int ind)
{
double aux=toate_ecuatiile[ind].coeficienti[ind];
if (aux){
for (int i=ind; i<=m; ++i)
{
toate_ecuatiile[ind].coeficienti[i]/=aux;
}
toate_ecuatiile[ind].rezultat/=aux;
}
}
void scadere_coloana(int ind_coloana_descazut, int ind_coloana_scazator)
{
double dif=toate_ecuatiile[ind_coloana_descazut].coeficienti[ind_coloana_scazator];
for (int i=ind_coloana_scazator; i<=m; ++i)
{
toate_ecuatiile[ind_coloana_descazut].coeficienti[i]-=(dif*toate_ecuatiile[ind_coloana_scazator].coeficienti[i]);
}
toate_ecuatiile[ind_coloana_descazut].rezultat-=(dif*toate_ecuatiile[ind_coloana_scazator].rezultat);
}
void afisare()
{
for (int linie=n-1; linie>0; --linie)
{
double rez=toate_ecuatiile[linie].rezultat;
if (!necunoscute[linie]){
for (int coloana=m; coloana>linie; --coloana)
{
rez-=(necunoscute[coloana]*toate_ecuatiile[linie].coeficienti[coloana]);
}
necunoscute[linie]=rez;
}
bool ok=false;
for (int j=m; j>=linie; --j)
{
if (necunoscute[j])
ok=true;
}
if (!ok)
{
g<< "Imposibil";
return;
}
}
for (int i=1; i<=m; ++i)
g << setprecision(10)<<fixed<<necunoscute[i] <<' ';
}
void cautare_aux()
{
for (int i=n; i>=1; --i)
{
if (toate_ecuatiile[i].coeficienti[m]!=0)
{
aux=i;
return;
}
}
}
int main()
{
f >> n >> m;
for (int i=1; i<=n; ++i)
{
for (int j=1; j<=m; ++j)
{
f >> toate_ecuatiile[i].coeficienti[j];
}
f >> toate_ecuatiile[i].rezultat;
}
for (int coloana=1; coloana<=m; ++coloana)
{
if (toate_ecuatiile[coloana].coeficienti[coloana]==0)
punere_pe_pozitie_1(coloana);
if (toate_ecuatiile[coloana].coeficienti[coloana]!=0)
{
reducere(coloana);
for (int alta_coloana=coloana+1; alta_coloana<=n; alta_coloana++)
{
scadere_coloana(alta_coloana,coloana);
}
}
}
cautare_aux();
if (toate_ecuatiile[aux].coeficienti[m]!=0)
necunoscute[m]=toate_ecuatiile[aux].rezultat/toate_ecuatiile[aux].coeficienti[m];
else
{
g << "Imposibil";
return 0;
}
/*for (int i=1; i<=n; ++i)
{
for (int j=1; j<=m; ++j)
{
cout << toate_ecuatiile[i].coeficienti[j] <<' ';
}
cout << toate_ecuatiile[i].rezultat << '\n';
}*/
afisare();
return 0;
}