Pagini recente » Cod sursa (job #120767) | Cod sursa (job #1305736) | Cod sursa (job #1888864) | Cod sursa (job #1890956) | Cod sursa (job #991591)
Cod sursa(job #991591)
#include <iostream>
#include <fstream>
using namespace std;
int M,N;
void interschimba(double a[300][300], int p,int q)
{
double aux;
int i;
for(i = 0; i < M+1 ; i++)
{
aux = a[p][i];
a[p][i] = a[q][i];
a[q][i] = aux;
}
}
void schimba(double a[300][300], int p,int q)
{
int i;
for (i = p+1; i < M+1;i++)
{
a[q][i] = a[p][p]*a[q][i] - a[p][i]* a[q][p];
}
}
int cauta(double a[300][300],int p)
{
for (int i = p+1 ;i<N; i++)
{
if (a[i][i] != 0) return i;
}
return -1;
}
/*void afiseaza(double a[300][300])
{
int i,j;
for (i=0;i<N;i++)
{
for (j=0;j<M+1;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}*/
int main()
{
ifstream in("gauss.in");
FILE* out= fopen("gauss.out","wt");
in>>N>>M;
int j,k,l;
double a[300][300];
double v[300],s;
for ( j =0; j<N; j++)
for (k=0; k<M+1;k++)
{
in>>a[j][k];
}
in.close();
if ( M == N)
{
for(j=0; j<N-1; j++)
{
if ( a[j][j] == 0)
{
l = cauta(a,j);
if ( l == -1) { fprintf(out,"Imposibil");
fclose(out);
system("pause");
return 0;
}
else interschimba(a,j,l);
}
for (k = j+1; k <N;k++)
schimba(a,j,k);
}
for ( j = N -1; j>=0; j--)
{
s=0;
for ( k = j; k < M; k++)
s += v[k] * a[j][k];
v[j] = (a[j][M] - s) / a[j][j];
}
}
for ( j=0;j<M-1;j++)
{
fprintf(out,"%.8lf ",v[j]);
}
fprintf(out,"%.8lf",v[M-1]);
fclose(out);
return 0;
}