Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 21:17   #1
DEGRESS
Новичок
Джуниор
 
Регистрация: 07.04.2011
Сообщений: 1
Печаль метод Жордана-Гаусса С++

Есть готовая, работающая программа, нахождения решения системы линейных уравнений по методу Жордана-Гаусса. Суть его в том, что если ведущий элемент ноль, то вместо этой строки подставляется строка, где первый элемент самый большой по модулю.
Но мне в пограмме не понятно несколько стррок. Объясните пожалуйста. Вот собственно код:

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

void main()
{
int colPos, rowPos;
int i, j, k, razm;
double max;
double temp;
int m_nCols;
int m_nRows;
double** array;
double* parray;
unsigned int* ListVar;
double* x;
cout<<"введите размерность\n";
cin>>razm;
cout<<"введите матрицу:\n";

m_nRows=razm;
m_nCols=m_nRows+1;
parray=new double[m_nRows*m_nCols];
array=new double*[m_nRows];
for (i=0; i<m_nRows; i++)
{
*(array+i)=parray+i*m_nCols;
}

ListVar=new unsigned int[m_nCols-1];
for (j=0; j<m_nCols-1; j++)
ListVar[j]=j+1;

x=new double[razm];

for (i=0; i<m_nRows-1; i++)
x[i]=i+1;

for (i=0; i<razm; i++)
for (j=0;j<(razm+1); j++)
cin>>array[i][j];
for (k=0; k<m_nRows-1; k++)
{
colPos=rowPos=k;
max=array[k][k];
for (i=k; i<m_nRows; i++)
for (j=k+1; j<m_nCols-1; j++)
if (abs(array[i][j])>max)
{
max=array[i][j];
rowPos=i;
colPos=j;
}

for (i=0; i<m_nRows; i++)
{
//ВОТ ТУТ HАЧИНАЕТСЯ "НЕПОНЯТНО"

temp=array[i][k];
array[i][k]=array[i][colPos];
array[i][colPos]=temp;
}

for (j=0; j<m_nCols; j++)
{
temp=array[k][j];
array[k][j]=array[rowPos][j];
array[rowPos][j]=temp;
}

temp=ListVar[k];
ListVar[k]=ListVar[colPos];
ListVar[colPos]=temp;

//ВОТ ТУТ ЗАКАНЧИВАЕТСЯ "НЕПОНЯТНО"
for (j=m_nCols-1; j>=0; j--)
{
array[k][j]/=array[k][k];

}
for (j=0; j<m_nCols; j++)
array[k][j];
for (i=k+1; i<m_nRows; i++)
for (j=m_nCols-1; j>=0; j--)
array[i][j]-=array[k][j]*array[i][k];
}

double s=0;
x[m_nRows-1]=array[m_nRows-1][m_nCols-1]/
array[m_nRows-1][m_nCols-2];
for (i=m_nRows-2; i>=0; i--)
{
s=0;
for (k=i+1; k<m_nRows; k++)
s+=array[i][k]*x[k];
x[i]=array[i][m_nCols-1]-s;
}
cout<<"решение системы:\n";
for (i=0; i<m_nRows; i++)
cout<<"X"<<i+1<<"="<<x[i]<<endl;
}
DEGRESS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить программу в с++ метод Жордана-Гаусса Doha Общие вопросы C/C++ 1 28.03.2011 17:15
Pascal. Решение СЛАУ методом Гаусса-Жордана 2easy4me Помощь студентам 5 23.03.2011 18:56
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08