Pagini recente » Cod sursa (job #959052) | Cod sursa (job #1950565) | Cod sursa (job #2665208) | Cod sursa (job #584423) | Cod sursa (job #2393179)
#include <cstdio>
#include <fstream>
#include <cmath>
#define eps 0.00000000000005
using namespace std;
int n, m; // n ecuatii m necunoscute
double a[305][305];
double sol[305];
void schimb(int i){
for(int j=i+1;j<n;++j)
if(fabs(a[j][i])>eps){
swap(a[i],a[j]);
break;
}
}
void inmultire_linie(int linie,int coloana){ //inmultesc linia pentru a face elementul de pe colana 1
//toate elementele din fata coloanei sunt deja 0
if(a[linie][coloana]<eps)
schimb(linie);
double cu_ce_impart=a[linie][coloana];
for(int j=coloana; j<=m; j++){
a[linie][j]=a[linie][j]/cu_ce_impart;
}
}
void afisare(){
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++)
printf("%lf ",a[i][j]);
printf("\n");
}
}
void rez(){
for(int i=1; i<=n; i++){
inmultire_linie(i,i);
for(int j=i+1; j<=n; j++){
double cat=-a[j][i];
for(int col=1; col<=m; col++)
a[j][col]=a[j][col]+cat*a[i][col];
}
}
int ok=1;
for(int i=n; i>=1; i--){
double sols=a[i][m];
for(int j=i+1; j<m; j++)
sols=sols-sol[j]*a[i][j];
sol[i]=sols;
}
//afisare();
}
int main() {
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i=1; i<=n; i++){
for(int j=1; j<=m+1; j++){
scanf("%lf",&a[i][j]);
}
}
if(n>m){
m++;
int aux=n;
n=m-1;
rez();
bool ok=0;
for(int i=n; i<=aux; i++){
double soll=0;
for(int j=1; j<=m; j++)
soll=soll+a[i][j]*sol[j];
if(soll!=a[i][m]){
ok=1;
break;
}
}
if(ok==1)
printf("Imposibil");
else for(int j=1; j<m; j++)
printf("%lf ", sol[j]);
}
else if(n==m){
m++;
rez();
for(int j=1; j<m; j++)
printf("%lf ", sol[j]);
}
else printf("Imposibil");
return 0;
}