Skip to content

Instantly share code, notes, and snippets.

@LifeMoroz
Created November 24, 2012 00:11
Show Gist options
  • Save LifeMoroz/4137792 to your computer and use it in GitHub Desktop.
Save LifeMoroz/4137792 to your computer and use it in GitHub Desktop.
//Все пояснения тут http://ru.wikipedia.org/wiki/Метод_Гаусса_—_Жордана
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <iomanip>
#include "math.h"
using namespace std;
void main()
{
cout<<fixed<<setprecision(3);
setlocale(LC_ALL,"rus");
int i, j, k, razm; //всякая временная мелочь
double** array; // двумерный массив
cout<<"введите размерность\n";
cin>>razm;
cout<<"введите матрицу:\n";
array=new double*[razm]; //двумерный массив
for (i=0; i<razm; i++) //создание двумерного массива
{
array[i]=new double[razm+1];
}
for (i=0; i<razm; i++) //заполнение двумерного массива
for (j=0;j<(razm+1); j++)
array[i][j]=pow(double(i),double(j));
//cin>> array[i][j];
system("cls");
cout<< "Размерность: " << razm<< endl<< "Матрица:"<<endl;
for (i=0; i<razm; i++) //вывод матрицы
{
for (j=0;j<(razm+1); j++)
cout<<setw(7)<<array[i][j];// i - номер строки, j - номер столбца
cout<<endl;
}
for (k=0; k<razm-1; k++)
{
int max, PosMaxInCol;
max=array[k][k];
PosMaxInCol=k;//дабы не менял в конце что либо
for(i=k; i<razm; i++)//ищем максимальный элемент в столбце
{
if (array[i][k]>max)
{
max=array[i][k];
PosMaxInCol=i;
}
}
cout<<max<<endl;
for(j=0;j<razm;j++) //свапаем k-тую строку со строкой содержащей максимальное значение
{
double temp=array[PosMaxInCol][j];
array[PosMaxInCol][j]=array[k][j];
array[k][j]=temp;
}
cout<< "После свапа"<< endl;
for (i=0; i<razm; i++) //вывод матрицы
{
for (j=0;j<(razm+1); j++)
cout<<setw(7)<<array[i][j];// i - номер строки, j - номер столбца
cout<<endl;
}
for (i=k+1; i<razm; i++) //делим матрицу так, что бы получилсь одни 0
//в всех строках k-того столбца начиная со строки k+1
if (array[i][k]!=0)
{
double temp=(array[k][k] / array[i][k]);
for (j=k;j<(razm+1); j++)
array[i][j]=temp*array[i][j];
for (j=k;j<(razm+1); j++)
array[i][j]-=array[k][j];
}
cout<< "После деления и вычитания"<<endl;
for (i=0; i<razm; i++) //вывод матрицы
{
for (j=0;j<(razm+1); j++)
cout<<setw(7)<<array[i][j];// i - номер строки, j - номер столбца
cout<<endl;
}
}
double *x=new double[razm];
for(i=razm-1;i>=0;i--)
{
double s=0;
for(j=razm-1;j>i;j--)
s+=x[j]*array[i][j];
x[i]=(array[i][razm]-s)/array[i][i];
}
cout<<"решение системы:\n";
for (i=0; i<razm; i++)
cout<<"X"<<i+1<<"="<<x[i]<<endl;
system("pause");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment