Pagini recente » Cod sursa (job #869983) | Cod sursa (job #3294105) | Cod sursa (job #2671983) | Cod sursa (job #1396889) | Cod sursa (job #2730159)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("gauss.in");
ofstream fo("gauss.out");
const int NMAX = 305;
int n, m;
long double A[NMAX][NMAX];
long double sol[NMAX];
void afis() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m + 1; j++)
cout << A[i][j] << " ";
cout << "\n";
}
cout << "\n";
}
void swapLinii(int a, int b) {
for (int j = 1; j <= m + 1; j++)
swap(A[a][j], A[b][j]);
}
void redu() {
int i = 1, j = 1;
while (i <= n && j <= m) {
// caut prima linie care are ceva pe j
int i2 = i;
while (i2 <= n && A[i2][j] == 0)
i2++;
if (i2 > n) {
j++;
continue;
}
swapLinii(i, i2);
long double coef = A[i][j];
for (int j2 = j; j2 <= m + 1; j2++)
A[i][j2] /= coef;
// le nulizez pe celelalte
for (int i2 = i + 1; i2 <= n; i2++) {
long double coef = A[i2][j];
for (int j2 = j; j2 <= m + 1; j2++)
A[i2][j2] -= A[i][j2] * coef;
}
i++; j++;
}
}
void rezolva() {
for (int i = n; i >= 1; i--) {
int pr = 1;
while (A[i][pr] == 0 && pr <= m)
pr++;
if (pr > m)
break;
sol[pr] = A[i][m + 1];
for (int j = pr + 1; j <= m; j++)
sol[pr] -= A[i][j] * sol[j];
}
}
int main()
{
fi >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m + 1; j++)
fi >> A[i][j];
}
redu();
rezolva();
for (int i = 1; i <= m; i++)
fo << fixed << setprecision(10) << sol[i] << " ";
return 0;
}