Pagini recente » Cod sursa (job #793891) | Cod sursa (job #2391343) | Cod sursa (job #1736581) | Cod sursa (job #1280918) | Cod sursa (job #754556)
Cod sursa(job #754556)
#include <fstream>
using namespace std;
long N,M;
double A[305][305];
double Res[305];
const double EPS = 10e-7;
double abs(double a)
{
if (a < 0)
{
a = -a;
}
return a;
}
void InterschimbaLinii(long i,long j)
{
for (long l = 0;i <= M;l += 1)
{
double c = A[i][l];
A[i][l] = A[j][l];
A[j][l] = c;
}
}
long CautaLinii(long i)
{
if (abs(A[i][i]) <= EPS)
{
long j;
for (j = i + 1;j < N;j += 1)
{
if (abs(A[j][i]) > EPS)
{
InterschimbaLinii(i,j);
return 1;
}
}
return 0;
}
return 1;
}
int main(void)
{
long i,j,k,l;
fstream fin("gauss.in",ios::in);
fstream fout("gauss.out",ios::out);
fin >> N >> M;
for (i = 0;i < N;i += 1)
{
for (j = 0;j <= M;j += 1)
{
fin >> A[i][j];
}
}
for (i = 0,j = 0;i < N && j < M;)
{
if (CautaLinii(i) == 0)
{
j += 1;
continue;
}
for (k = j + 1;k <= M;k += 1)
{
A[i][k] /= A[i][j];
}
A[i][j] = 1;
for (l = i + 1;l < N;l += 1)
{
for (k = j + 1;k <= M;k += 1)
{
A[l][k] -= A[l][j] * A[i][k];
}
A[l][j] = 0;
}
i += 1;
j += 1;
}
for (i = N - 1;i >= 0;i -= 1)
{
for (j = 0;j <= M;j += 1)
{
if (abs(A[i][j]) > EPS)
{
if (j == M)
{
fout << "Imposibil\n";
fin.close();
fout.close();
return 0;
}
Res[i] = A[i][M];
for (k = i + 1;k < M;k += 1)
{
Res[i] -= Res[k] * A[i][k];
}
break;
}
}
}
for (i = 0;i < M;i += 1)
{
fout << Res[i] << " ";
}
fin.close();
fout.close();
return 0;
}