Pagini recente » Cod sursa (job #3270896) | Borderou de evaluare (job #2016404) | Cod sursa (job #2096059) | Cod sursa (job #2599901) | Cod sursa (job #2392239)
#include <cstdio>
#include <algorithm>
#define epsi 0.0000000001
using namespace std;
double coef[500][500];
double valori[500];
int N, M;
void imparte_linia_i(int i, int j)
{
double ca_sa_fie_1 = coef[i][j];
for(int c=1; c<=M+1; c++)
coef[i][c] = coef[i][c] / ca_sa_fie_1;
}
void elimin_lit(int i, int nr, int i_init)
{
for(int j=1; j<=M+1; j++)
coef[i][j] += coef[i_init][j] * nr;
}
void rezolva_linia(int k, int j)
{
int i;
for(i=k; i<=N; i++)
if(abs(coef[i][j]) >= epsi)
break;
if(i == N + 1)
return;
swap(coef[i], coef[k]);
imparte_linia_i(i, j);
for(int linie = i+1; linie <= N; linie ++)
elimin_lit(linie, coef[linie][j] * (-1), i);
}
void raspuns_final()
{
if(N == M)
{
valori[N] = coef[N][M+1]/coef[N][M];
for(int i=N-1; i>=1; i--)
{
double rez = coef[i][M+1];
for(int j=i+1; j<=N; j++)
rez -= coef[i][j] * valori[j];
valori[i] = rez / coef[i][i];
}
for(int i=1; i<=M; i++)
printf("%.8f ", valori[i]);
}
}
int main()
{
freopen("guess.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%d %d", &N, &M);///N linii M+1 intregi
for(int i=1; i<=N; i++)
for(int j=1; j<=M+1; j++)
scanf("%lf", &coef[i][j]);
for(int i=1; i<N; i++)
rezolva_linia(i, i);
raspuns_final();
return 0;
}