20.11.2009, 18:04 | #1 (permalink) |
Новичок
Регистрация: 19.11.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите найти ошибку в коде С++
вот код: #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int n = 4; int A[4][4] = {{2, 0, 7, 1},{0, 2, 0, 0},{1, 2, -1, -1},{-1, -2, 1, 2}}; int C[4] = {11, 6, 2, 0}; float X[4] = {1, 1, 1, 1}, X1[4]; float delta = 0.05; float maxdelta = 1; while ( maxdelta >= delta ) { for (int i = 0; i < n; i++) { X1[i] = -C[i]; for (int j = 0; j < n; j++) { if (i != j) { X1[i] += A[i][j] * X[j]; } } X1[i] /= -A[i][i]; } maxdelta = fabs(X[0] - X1[0]); for (int i = 0; i < n; i++) { if (maxdelta < fabs(X[i] - X1[i])) maxdelta = fabs(X[i] - X1[i]); X[i] = X1[i]; } } for (int i = 0; i < n; i++) printf("X[%i] = %5.2f\n", i+1, X[i]); system ("pause"); } никак не могу найти ошыбку....... |
20.11.2009, 18:04 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
По вашему вопросу так же нашлись совпадения, советую почитать Помогите найти ошибку в программе Помогите найти ошибку, Pascal abc Задача на массивы, Pascal. Помогите найти ошибку |
21.11.2009, 00:42 | #3 (permalink) |
Новичок
Регистрация: 19.11.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
он компилируется, но работает не правильно (выдает результат: -1.#J). Вот задание: решить СЛАУ методом Якоби:
2*x1+7*x3+x4=11 2*x2=6 x1+2*x2-x3-x4=2 -x1-2*x2+x3+2*x4=0 Последний раз редактировалось Aleksandr89; 21.11.2009 в 00:53 |
21.11.2009, 01:20 | #4 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
Код:
int A[4][4] = {{2, 0, 7, 1},{0, 2, 0, 0},{1, 2, -1, -1},{-1, -2, 1, 2}}; int C[4] = {11, 6, 2, 0}; float X[4] = {1, 1, 1, 1}, X1[4]; float delta = 0.05; float maxdelta = 1; Код:
double A[4][4] = {{2, 0, 7, 1},{0, 2, 0, 0},{1, 2, -1, -1},{-1, -2, 1, 2}}; double C[4] = {11, 6, 2, 0}; double X[4] = {1, 1, 1, 1}, X1[4]; double delta = 0.05; double maxdelta = 1; |
21.11.2009, 01:55 | #5 (permalink) |
Новичок
Регистрация: 19.11.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
не помогает, теперь выдает результат: 0.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
21.11.2009, 07:51 | #6 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
Код:
printf("X[%i] = %5.2f\n", i+1, X[i]); Код:
printf("X[%d] = %5.2lf\n", i+1, X[i]); Последний раз редактировалось Long Cat; 21.11.2009 в 08:28 |
21.11.2009, 13:12 | #7 (permalink) |
Новичок
Регистрация: 19.11.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Отформатировал вот результат:
Код:
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { double n = 4; double A[4][4] = {{2, 0, 7, 1},{0, 2, 0, 0},{1, 2, -1, -1},{-1, -2, 1, 2}}; double C[4] = {11, 6, 2, 0}; double X[4] = {1, 1, 1, 1}, X1[4]; double delta = 0.05; double maxdelta = 1; while ( maxdelta >= delta ) { for (int i = 0; i < n; i++) { X1[i] = -C[i]; for (int j = 0; j < n; j++) { if (i != j) { X1[i] += A[i][j] * X[j]; } } X1[i] /= -A[i][i]; } maxdelta = fabs(X[0] - X1[0]); for (int h = 0; h < n; h++) { if (maxdelta < fabs(X[h] - X1[h])) maxdelta = fabs(X[h] - X1[h]); X[h] = X1[h]; } } for (int i = 0; i < n; i++) printf("X[%d] = %lf\n", i+1, X[i]); system ("pause"); } |
21.11.2009, 13:19 | #8 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
Код:
if (maxdelta < fabs(X[h] - X1[h])) maxdelta = fabs(X[h] - X1[h]); X[h] = X1[h]; Код:
if (maxdelta < fabs(X[h] - X1[h])) { maxdelta = fabs(X[h] - X1[h]); X[h] = X1[h]; } Код:
if (maxdelta < fabs(X[h] - X1[h])) { maxdelta = fabs(X[h] - X1[h]); } X[h] = X1[h]; и да, верните обратно int n=4; |
21.11.2009, 13:36 | #9 (permalink) |
Новичок
Регистрация: 19.11.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Код:
if (maxdelta < fabs(X[h] - X1[h])) { maxdelta = fabs(X[h] - X1[h]); X[h] = X1[h]; } Код:
if (maxdelta < fabs(X[h] - X1[h])) { maxdelta = fabs(X[h] - X1[h]); } X[h] = X1[h]; Код:
if (maxdelta < fabs(X[h] - X1[h])) maxdelta = fabs(X[h] - X1[h]); X[h] = X1[h]; |
21.11.2009, 13:54 | #10 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
Метод Якоби — Википедия
- готовая реализация метода Якоби. Обратите внимание на то, что перед осуществлением итераций требуется выполнить преобразования матрицы в вектора правой части. Последний раз редактировалось Long Cat; 21.11.2009 в 14:03 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|