Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
McRowan
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 23
1

Помогите написать программу для решения слау методом Гаусса

09.05.2012, 02:57. Просмотров 3127. Ответов 3
Метки нет (Все метки)

Осталось как обычно пару дней до сдачи курсовой, а она еще не готова! Помогите пожалуйста.
Вот код, который чуть-чуть работает
Главная проблема в том, чтобы привести систему к диагональному виду без дробных коэффициентов, там возможно 0/0.... линейную комбинацию осуществить нужно верно. Однако нужно произвести сортировку так, чтобы на диагонали при каждом шаге не было "0". И сложно с обратным ходом.
Помогите, умоляю!!!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// курсовая.cpp : Defines the entry point for the console application.
 // курсовая.cpp: определяет точку входа для консольного приложения.
 //
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <cstdlib>
#include <cstdlib>
using namespace std;
 
bool CProg()
 {
cout << "\n" << "Продолжим? (1-да) "<<"\t";
char c;
 cin >> c;
return c=='1';
}
 
 int main ()
 {
setlocale (0,"");
do
 {
int i(0), j(0);
 cout << "Введите число неизвестных" << endl;
cin >> n;
int MassivA[20][20], MassivC[20], MassivItog[20][20];
double x[20];
cout << "Введите коэффициенты" << endl;
for ( i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
 cin >> MassivA [i][j];
 cout << endl;
 }
cout << "Введите солбец свободных членов" << endl;
for ( i = 0; i < n; ++i)
 {
cin >> MassivC [i];
 cout << endl;
 } 
//заполняем окончательный массив 
for ( i = 0; i < n; ++i)
 {
for ( j = 0; j < n; ++j)
 MassivItog[i][j] = MassivA [i][j];
for ( j = n; j < n+1; ++j)
 MassivItog[i][j] = MassivC [i];
 }
cout <<"Полная система" << endl;
for ( i = 0; i < n; ++i)
{
for (j = 0; j < n +1; ++j)
{
 cout.setf(ios::left);
 cout.width (7);
 cout << MassivItog [i][j] << '\t';
 }
 cout << endl;
 }
cout << "------------------------------------------------" << endl;
// сортировка на диагональных местах не должно быть "0", нужно соединить с прямым ходом
for (i = 0; i < n - 1 ; ++i)
for (j = 0; j < n+1 ; ++j)
if (MassivItog[i][j] == 0)
if (MassivItog[i+1][j] != 0)
 {
int t = MassivItog[i][j];
 MassivItog[i][j] = MassivItog[i+1][j];
 MassivItog[i+1][j] = t;
 }
//прямой ход
for (i = 0; i < n ; ++i) 
{
int a = MassivItog[i][i];
for (j = i + 1; j < n; ++j)
 {
int b = MassivItog[j][i];
for ( int k = 0; k < n+1; ++k)
MassivItog[j][k] = a * MassivItog[j][k] - b * MassivItog[i][k];
 }
 }
cout << "-------------------------------" << endl;
for ( j = 0; j < n; ++j)
{
for (int k = 0; k < n + 1 ; ++k)
{
 cout.setf(ios::left);
 cout.width (7);
 cout << MassivItog [j][k] << '\t';
 }
 cout << endl;
 }
 
 //вывод матрицы треугольного вида
 cout <<"Матрица приведенная к треугольному виду:"<< endl;
for (j = 0; j < Sys.n; j++)
 {
for (i = 0; i < Sys.n + 1; i++)
{
 cout.setf(ios::left);
 cout.width (7);
 cout << MassivItog[j][i] << '\t';
 }
 cout << endl;
 }
 
//обратный ход еще не осуществлен
 
 
 }
while (CProg());
}
0
Вложения
Тип файла: doc курсовая.doc (38.0 Кб, 46 просмотров)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 02:57
Ответы с готовыми решениями:

Разработать программу для решения СЛАУ методом Гаусса.
Разработать программу для решения СЛАУ методом Гаусса. вот заданный массив...

Кто сможет? Написать функцию для решения СЛАУ методом Гаусса
Кто может написать функцию для решения СЛАУ методом Гаусса используя базовые знания.

Написать программу, реализующую метод Гаусса для решения СЛАУ с постолбцовым выбором главного элемента
Добрый день. Очень прошу вас помочь мне с программой для лабораторной. Программа должна : -...

Написать программу для решения системы уравнений методом Гаусса (c++)
Добрый вечер! Нужно написать программу для решения системы уравнений методом Гаусса. Уравнений...

Решения СЛАУ методом Гаусса по шагу
Добрый день! Очередной раз прошу советов! Имеется СЛАУ, которое требуется решить методом Гаусса...

3
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
09.05.2012, 12:42 2
Так-с. Сначала покритикуем код.
Цитата Сообщение от McRowan Посмотреть сообщение
int MassivA[20][20], MassivC[20], MassivItog[20][20];
-- такие вещи делаются динамическими массивами, и без "сферических в вакууме" 20.

Цитата Сообщение от McRowan Посмотреть сообщение
// сортировка на диагональных местах не должно быть "0", нужно соединить с прямым ходом
-- здесь есть 2 минуса. 1-й в том, что 0 у вас может выйти и не в самом начале, а позднее, когда вы уже отнимете несколько строк. Второй в том, что у вас и на следующей строке в этом столбце может стоять 0, и тогда проблемма не решена.
Теперь советы.
1) Массивы обьявляем так:
C++
1
2
3
4
5
6
7
8
int* *MassivA=new int*[n];
int* MassivC=new int[n];
int* *MassivItog=new int*[n];
for(int i=0; i<n; i++)
{
MassivA[i]=new int[n];
MassivItog[i]=new int[n+1];
}
2) Прямой проход:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
for(int i=0; i<n; i++)
{
if(MassivItog[i][i]!=0)
{
int a = MassivItog[i][i];
for (j = i + 1; j < n; ++j)
 {
int b = MassivItog[j][i];
for ( int k = 0; k < n+1; ++k)
MassivItog[j][k] = a * MassivItog[j][k] - b * MassivItog[i][k];
 }
}
else
{
bool flag=false;//Этот флаг нам говорит, есть ли строки с не 0 в этом столбце
for(int j=i+1; j<n; j++)
if(MassivItog[j][i]!=0)
{
flag=true;
for(int k=0; k<n+1; k++)
{
int tmp=0;
tmp=MassivItog[i][k];
MassivItog[i][k]=MassivItog[j][k];
MassivItog[j][k]=tmp;
}
break;
}
if(flag==flase)
{
printf("System has no solunions, or it has infinity solutions\n");
system("PAUSE");
return 0;
}
else
i--;
}
}
На обратном проходе у нас уже не могут быть 0 на главной диагонали.
Отнимаем и не паримся. Даже более того, отнимаем от столбца свободных членов, а в матрице просто зануляем.
C++
1
2
3
4
5
6
7
8
9
10
for(int i=n-1; i>0; i--)
{
int a=MassivItog[i][i];
for(int j=i-1; j>=0; j++)
{
int b=MassivItog[j][i];
MassivItog[j][n]=a*MassivItog[j][n]-b*MassivItog[i][n];
MassivItog[j][i]=0;
}
}
2
McRowan
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 23
09.05.2012, 19:39  [ТС] 3
Спасибо огромное!!! Вы очень выручили. Я на самом деле понимала, что при вычитании строк могут получаться нули, причем не в изначальной матрице.
Цитата Сообщение от McRowan Посмотреть сообщение
нужно произвести сортировку так, чтобы на диагонали при каждом шаге не было "0".
Именно это я и имела в виду. А с динамическими массивами я на самом деле сразу делала, но ступила, и решила переписать... В общем дура...
Только, кажется при обратном ходе опечатка,
Цитата Сообщение от UFO94 Посмотреть сообщение
for(int j=i-1; j>=0; j++)
возможно должно быть j--, а при выводе программа работает отлично. прогнала ее пару раз на разных значениях - все как и должно быть!

Спасибо большущее!!!!
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
09.05.2012, 23:22 4
Да, там j--, это я сплоховал. Привык уже писать циклы от 0 до n с увеличением....
0
09.05.2012, 23:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2012, 23:22

Решения СЛАУ методом Гаусса за главным элементом
Нужна консольная программа, которая решает систему трех линейных уравнений данным методом.

Нужен рабочий пример решения СЛАУ методом Гаусса
Нужен рабочий (ну или более менее рабочий) код для решения СЛАУ методом Гауса на С++. Уже...

Метод Гаусса для решения СЛАУ
Здравствуйте! У меня есть алгоритм решения СЛАУ методом Гаусса, но почему-то он не работает((( Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.