Pagini recente » Cod sursa (job #2426018) | Cod sursa (job #546734) | Cod sursa (job #1725346) | Cod sursa (job #2153070) | Cod sursa (job #1213983)
#include <fstream>
#include <iomanip>
#define DIM 310
#define EPS 0.000000001
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
double A[DIM][DIM];
double X[DIM], aux;
int n, i, j, m, k, t, sol;
int main() {
fin>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=m+1;j++)
fin>>A[i][j];
i = 1; j = 1;// i = ecuatia la care sunt, j = necunoscuta
while (i<=n && j<=m) {
for (k=i;k<=n;k++)
if (A[k][j] != 0)
break;
if (k == n+1) {
j++;
continue;
}
if (k!=i) {
for (t=1;t<=m+1;t++) {
aux = A[i][t];
A[i][t] = A[k][t];
A[k][t] = aux;
}
}
// A[i][j] e sifur nenul
for (t = j+1;t<=m+1;t++)
A[i][t]/=A[i][j];
A[i][j] = 1;
for (k = i+1;k<=n;k++) {
for (t = j+1;t<=m+1;t++)
A[k][t] -= A[i][t]*A[k][j];
A[k][j] = 0;
}
i++,j++;
}
for (i=n;i>=1;i--) {
// caut prima pozitie nenula de pe linia i
for (j=1;j<=m+1;j++)
if (A[i][j] < -EPS || A[i][j] > EPS)
break;
if (j == m+2)
continue;
if (j == m+1) {
sol = -1;
break;
}
X[j] = A[i][m+1];
for (k=j+1;k<=m;k++)
X[j] -= X[k] * A[i][k];
}
if (sol == -1) {
fout<<"Imposibil\n";
} else {
for (i=1;i<=m;i++)
fout<<setprecision(10)<<fixed<<X[i]<<" ";
}
return 0;
}