Форум программистов, компьютерный форум CyberForum.ru

Решить СЛАУ методом Гаусса (проверить) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
16.12.2012, 17:38     Решить СЛАУ методом Гаусса (проверить) #1
Есть код!компилируется без ошибок.Задача программы решить СЛАУ методом Гаусса
Но я не понимаю почему вывод информации осуществляется некорректно, ребят помогите разобраться пожалуйста!

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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#define N 20
#include <CONIO.H>
#include <STDIO.H>
#include <MATH.H>
 
void glavelem(int k,double mas[][N+1],int n,int otv[]);
 
int main(void)
 
 
{
 
double mas[N] [N+1];
double x[N];
int otv[N];
int i,j,k,n;
clrscr();
do
 
{
 
printf("VVedite 4islo ypaBHeHuu cucTeMbl");
scanf("%d",&n);
if(N<n)
printf("CJluIIIkoM 6oJlbIIIoe 4ucJlo ypaBHeHuu`.IIoBTopuTe BBog\n");
 
}
 
while(N<n);
printf("BBeguTe cucTemy\n");
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
scanf("%lf",&mas[i][j]);
clrscr();
printf("CuCTeMa\n");
for(i=0;i<n;i++)
 
{
 
for(j=0;j<n+1;j++)
printf("%7.2f",mas[i][j]);
printf("\n");
 
}
 
for(i=0;i<n+1;i++)
otv[i]=i;
for(k=0;k<n;k++)
glavelem(k,mas,n,otv);
if(fabs(mas[k][k])<0.0001)
 
{
 
printf("CucTeMa He uMeeT eguHcTBeHHoro PeIIIeHu9l");
return(0);
 
}
 
for(j=n;j>=k;j--)
mas[k][j]/=mas[k][k];
for(i=k+1;i<n;i++)
for(j=n;j>=k;j--)
mas[i][j]-=mas[k][j]*mas[i][k];
 
 
 
for(i=0;i<n;i++)
x[i]=mas[i][n];
for(i=n-2;i>=0;i--)
for(j=i+1;j<n;j++)
x[i]-=x[j]*mas[i][j];
printf("otvet\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==otv[j])
 
{
 
printf("%f\n",x[j]);
break;
 
}
 
return(0);
 
}
 
void glavelem(int k, double mas[][N+1], int n, int otv[])
 
{
 
int i,j,i_max=k,j_max=k;
double temp;
for(i=k;i<n;i++)
for(j=k;j<n;j++)
if(fabs(mas[i_max][j_max])<fabs(mas[i][j]))
 
{
 
i_max=i;
j_max=j;
 
}
 
for(j=k;j<n+1;j++)
 
{
 
temp=mas[k][j];
mas[k][j]=mas[i_max][j];
mas[i_max][j]=temp;
 
}
 
for(i=0;i<n;i++)
 
{
 
temp=mas[i][k];
mas[i][k]=mas[i][j_max];
mas[i][j_max]=temp;
 
}
 
i=otv[k];
otv[k]=otv[j_max];
otv[j_max]=i;
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 17:52     Решить СЛАУ методом Гаусса (проверить) #2
Ну незнаю кому захочется разбираться.
вообще в таких ситуациях раз все скомпилировалось, но не работает - явно ошибка логическая.
значит твои действия таковы
1) Решаешь какой нибудь маленький пример согласно алгоритму, описанного программой
2) Желательно проверить его в MatLabe MathCade ну или еще где нибудь
3) И начинать отлаживать программу. На каждом шаге сравниваешь результат, сделаный компьютером с твоим результатом. Если где то что то не сошлось - видимо в этом месте неправильно описан алгоритм. Тогда мозговой штурм
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
16.12.2012, 18:00  [ТС]     Решить СЛАУ методом Гаусса (проверить) #3
ты не понял!он нормально работает, все выводит но выводит не корректно!
я думаю что это как то связано (возможно) со способом вывода!
ход решения правильный 100%
проверял не один человек!
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 18:02     Решить СЛАУ методом Гаусса (проверить) #4
Некоректно для меня значит неправильно) Раз неправильно - значит неправильный алгоритм или ты неправильно его записал. Что конкретнее не так он выводит? С другой стороны решение может и правильно, но где то ты его записал неправильно - отуда логический баг...
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
16.12.2012, 18:10  [ТС]     Решить СЛАУ методом Гаусса (проверить) #5
При вводе 1го уравнения системы, состоящей из 3 уравнений, и нажатия клавиши enter для перехода на следующую строку, для ввода следующей системы выходит сообщение в виде всех вариантов вывода т.е. ВВедите уравнение, Число уравнений слишком большое и тд и тп и причем эти сообщения не прекращают выводиться до тех пор пока я не закрою окно компилятора
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 18:11     Решить СЛАУ методом Гаусса (проверить) #6
Цитата Сообщение от Максим1827 Посмотреть сообщение
ты не понял!он нормально работает, все выводит но выводит не корректно!
я думаю что это как то связано (возможно) со способом вывода!
ход решения правильный 100%
проверял не один человек!
тогда непонятно как программа работает и все выводит...и о боже, что это за новый алфавит...
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
16.12.2012, 18:12  [ТС]     Решить СЛАУ методом Гаусса (проверить) #7
именно поэтому я тут
Oleshko
 Аватар для Oleshko
21 / 21 / 1
Регистрация: 11.12.2012
Сообщений: 64
16.12.2012, 18:16     Решить СЛАУ методом Гаусса (проверить) #8
Цитата Сообщение от Smetanka Посмотреть сообщение
и о боже, что это за новый алфавит...
весело
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
16.12.2012, 18:18  [ТС]     Решить СЛАУ методом Гаусса (проверить) #9
Цитата Сообщение от Smetanka Посмотреть сообщение
тогда непонятно как программа работает и все выводит...и о боже, что это за новый алфавит...
какой алфавит?
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 18:24     Решить СЛАУ методом Гаусса (проверить) #10
Незнаю...у меня работает, что то выводит. Никаких зацикливаний и.т.д. Может вы пытались что то не то ввести?
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
16.12.2012, 18:25  [ТС]     Решить СЛАУ методом Гаусса (проверить) #11
а как вы вводили?
и в каком компиляторе работаете?я TC30
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 18:30     Решить СЛАУ методом Гаусса (проверить) #12
Цитата Сообщение от Максим1827 Посмотреть сообщение
какой алфавит?
C++
1
printf("CJluIIIkoM 6oJlbIIIoe 4ucJlo ypaBHeHuu`.IIoBTopuTe BBog\n");
Добавлено через 1 минуту
Цитата Сообщение от Максим1827 Посмотреть сообщение
а как вы вводили?
и в каком компиляторе работаете?я TC30
Вводил количество уравнений(например 3). Потом вводил в строчку по 3 произвольные цифры. Итого таких строчек 4(прим.) Потом появлялась какая то матрица, и сообщение что ответа нет. Компилятор VisualStudio. Да и не в компиляторе дело...
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
16.12.2012, 18:35  [ТС]     Решить СЛАУ методом Гаусса (проверить) #13
все!я разобрался!спасибо за пояснения!все работает!а теперь вот я реально задумался над правильностью алгоритмов, т.к. он мне не решает систему а выводит сообщение о том что система не имеет единственного решения.а мне надо решить ее в любом случае
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 18:37     Решить СЛАУ методом Гаусса (проверить)
Еще ссылки по теме:

C++ Решение СЛАУ методом Гаусса
C++ Решение СЛАУ методом Гаусса
СЛАУ методом Гаусса C++

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

Или воспользуйтесь поиском по форуму:
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 18:37     Решить СЛАУ методом Гаусса (проверить) #14
Максим1827, И научитесь вводить русские буквы) И еще смотрите за стилем написания кода. Не скидывайте все в кучу. А то неудобно просматривать такой код...
Yandex
Объявления
16.12.2012, 18:37     Решить СЛАУ методом Гаусса (проверить)
Ответ Создать тему
Опции темы

Текущее время: 08:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru