Pagini recente » Cod sursa (job #1713575) | Cod sursa (job #3170152) | Cod sursa (job #1495219) | Cod sursa (job #1045663) | Cod sursa (job #3163985)
#include <iostream>
#include <fstream>
#include <iomanip>
#define EPS 0.0000001
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n, m;
double mat[405][405];
double sol[405];
void sterge(int poz) {
for (int i=poz; i<=n-1; ++i) {
for (int j=1; j<=m+1; ++j) {
mat[i][j]=mat[i+1][j];
}
}
n--;
}
void mutare(int poz) {
n++;
for (int i=n; i>=poz; --i) {
for (int j=1; j<=m+1; ++j) {
mat[i+1][j]=mat[i][j];
}
}
}
bool valid(int lin) {
bool OK=true;
for (int i=1; i<=m; ++i) {
if (mat[lin][i]!=0) {
OK=false;
}
}
if (OK==true && mat[lin][m+1]!=0) {
return false;
}
return true;
}
void afisare(){
for (int i=1; i<=n; ++i) {
for (int j=1; j<=m+1; ++j) {
fout << mat[i][j] << ' ';
}
fout <<'\n';
}
}
void schimba(int lin1, int lin2) {
for (int i=1; i<=m+1; ++i) {
swap(mat[lin1][i],mat[lin2][i]);
}
}
void imparte(int lin, int col) {
for (int i=1; i<=m+1; ++i) {
mat[lin][i]=mat[lin][i]/mat[lin][col];
}
}
void asezare() {
for (int j=2; j<=n; ++j) {
for (int i=1; i<=m-1; ++i) {
if (mat[j][i]==0 && mat[j][i+1]!=0) {
schimba(j, i+1);
}
}
}
}
int main()
{
fin >> n >> m;
for (int i=1; i<=n; ++i) {
for (int j=1; j<=m+1; ++j) {
fin >> mat[i][j];
}
}
int i=1, j=1,k;
double aux;
while (i<=n && j<=m) {
for(k = i; k <= n; ++k) {
if(mat[k][j]<-EPS || mat[k][j]>EPS) {
break;
}
}
if(k == n+1)
{
++j;
continue;
}
if(k != i) {
for(int l = 1; l <= m+1; ++l){
aux = mat[i][l];
mat[i][l] = mat[k][l];
mat[k][l] = aux;
}
}
for(int l = j+1; l <= m+1; ++l) {
mat[i][l] = mat[i][l] / mat[i][j];
}
mat[i][j] = 1;
for(int u = i+1; u <= n; ++u) {
for(int l = j+1; l <= m+1; ++l) {
mat[u][l] -= mat[u][j] * mat[i][l];
}
mat[u][j] = 0;
}
++i;
++j;
for(int i = n; i>0; --i) {
for(int j = 1; j <= m+1; ++j) {
if(mat[i][j]>EPS || mat[i][j]<-EPS) {
if (j==m+1) {
fout << "Imposibil";
return 0;
}
sol[j] = mat[i][m+1];
for(int k = j+1; k <= m; ++k) {
sol[j] -= sol[k] * mat[i][k];
}
break;
}
}
}
}
for (int i=1; i<=m; ++i) {
fout <<fixed<< setprecision(10) << sol[i] << ' ';
}
return 0;
}