#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
short int const N = 8;
short int i, j, k;
string oznacznia[N];
double p, m[N + 1][N + 1];;
void macierz_m_gausa()
{
double x;
for(i = 0; i < N; i++)
{
if(m[i][i] == 0)
for(j = i + 1; j < N; j++)
if(m[i][j] != 0)
{
swap(oznacznia[i], oznacznia[j]);
for(k = 0; k < N; k++)
swap(m[k][i], m[k][j]);
j = N;
}
if(m[i][i] != 1)
{
x = m[i][i];
for(j = i; j <= N; j++)
m[i][j] /= x;
}
for(j = i + 1; j < N; j++)
if(m[j][i] != 0)
{
x = m[j][i];
for(k = 0; k <= N; k++)
m[j][k] -= (m[i][k] * x);
}
for(j = 0; j < i; j++)
if(m[j][i] != 0)
{
x = m[j][i];
for(k = 0; k <= N; k++)
m[j][k] -= (m[i][k] * x);
}
}
}
void wysw()
{
for(i = 0; i < N; i++)
{
for(j = 0; j <= N; j++)
cout<<"\t"<<round(1000 * m[i][j]) / 1000;
cout<<"\n";
}
cout<<"\n\ngdzie:\n";
for(i = 0; i < N; i++)
cout<<"x"<<i + 1<<" = "<<oznacznia[i]<<"\n";
cout<<"\n";
}
int main()
{
for(i = 0; i < N; i++)
for(j = 0; j <= N; j++)
m[i][j] = 0;
oznacznia[0] = "Hb";
oznacznia[1] = "Va";
oznacznia[2] = "Vb";
oznacznia[3] = "S1";
oznacznia[4] = "S2";
oznacznia[5] = "S3";
oznacznia[6] = "S4";
oznacznia[7] = "S5";
p=100;
m[0][2] = 1;
m[0][N] = p;
m[1][1] = 3;
m[1][N] = -4*p;
m[2][0] = 1;
m[2][1] = 1;
m[2][N] = 0;
m[3][4] = 1;
m[3][N] = 0;
m[4][1] = -1;
m[4][3] = 1;
m[4][N] = 0;
m[5][6] = 1;
m[5][N] = p;
m[6][7] = 1;
m[6][N] = 0;
m[7][2] = 1;
m[7][4] = 1;
m[7][5] = 0.6;
m[7][N] = 0;
cout<<"macierz wczytana:\n";
wysw();
macierz_m_gausa();
cout<<"\n\npo zastosowaniu metody eliminacji Gaussa:\n";
wysw();
cout<<"koncowym wynikiem sa wartosci:\n";
for(i = 0; i < N; i++)
cout<<oznacznia[i]<<" = "<<m[i][N]<<"\n";
cout<<"\n\n\n";
system("pause");
return 0;
}