Cod sursa(job #821149)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 21 noiembrie 2012 20:07:41
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include<iomanip>

using namespace std;

//ifstream fin("gauss.in");
//ofstream fout("gauss.out");

ifstream fin("input.txt");
ofstream fout("output.txt");

double v[305][305];
double r[305];

int main()
{
	int n, m;
	fin >> n >> m;
	for(int i = 0; i < n; i++)
		for(int j = 0; j <= m; j++)
			fin >> v[i][j];

	int i = 0, j = 0;

	while(i < n && j < m)
	{
		for(int x = i; x < n; x++)
			if(v[x][j])
			{
				for(int y = 0; y <= m; y++)
				{
					double t = v[x][y];
					v[x][y] = v[i][y];
					v[i][y] = t;
				}

				double val = v[i][j];
				for(int y = 0; y <= m; y++)
					v[i][y] /= val;

				for(int u = i + 1; u < n; u++)
				{
					val = v[u][j];
					for(int y = 0; y <= m; y++)
						v[u][y] -= v[i][y] * val;
				}

				i++;
				break;
			}
		j++;
	}

	for(int i = n-1; i >= 0; i--)
	{
		int p;
		for(p = 0; p <= m; p++)
			if(v[i][p] > 1e-10 || v[i][p] < -1e-10)
				break;
		if(p == m)
		{
			fout << "Imposibil\n";
			return 0;
		}
		else if (p > m)
			continue;

		r[p] = v[i][m];
		for(int j = m - 1; j > p; j--)
			r[p] -= v[i][j] * r[j];
	}


	for(int i = 0; i < m; i++)
		fout << setprecision(8) << r[i] << " ";

    fin.close();
    fout.close();
    return 0;
}