#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int razmer; //размер матрицы
 double **a, // матрица с коэфицентами
        *x, // х
        *b; // свободные члены
/* Здесь переменной razmer необходимо присвоить размер матрицы */
    // создание динамических переменных
    b = new double[razmer];
    x = new double[razmer];
    a = new double*[razmer];
    for(int i=0; i < razmer; i++){
        a[i] = new double[razmer];
    }
/* Здесь нам надо присвоить значения матрице а, и заполнить свободные члены b */

    // начинаем решать)
    // частный случай, если размер матрицы == 1
    if(razmer == 1){
        if(a[0][0] != 0){
            cout << "x=" << b[0]/a[0][0] << endl;
        }else{
            cout << "Х любое" << endl;
        }
        sleep(5);//getch();
        exit(0);
    }
    // прямой проход
    // идем слево на право по коэфицентам х
    for(int k=0; k < razmer-1; k++){
        // вычитаем по строкам
        for(int m=k+1; m < razmer; m++){
            // если на диагонали элемент = 0, то поменяем местами строки
            if(a[m][m] == 0) exchange(a, razmer, m, get_n_no_empty(a, razmer, m));
           
            double koeficent=a[m][k]/a[0][k];
            //вычисление новых коэфицентов уравнения
            b[m] = b[m] - b[0] * koeficent;
            for(int z=0; z < razmer; z++){
                a[m][z] = a[m][k] - a[0][k] * koeficent;
            }

        }
    }
    // ищем решения
    for(int m=razmer-1; m >= 0; m--){
        double sum=0;
        // идем по строке спаво налево, считая сумму корень*коэфицент, до текущего корня
        for(int i=razmer-1; i > m; i--){
            sum += x[i] * a[m][i];
        }
        x[m] = (b[m] - sum)/a[m][m];
    }

    // вывод решений
    cout << "###Решения:" << endl;
    for(int i=0; i < razmer; i++){
        cout << "x[" << i << "]=" << x[i] << endl;
    }
    pause();
}