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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2012, 00:00   #1
katrin1702
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 3
По умолчанию Не работает метод Гаусса

Здравствуйте. Извините за беспокойство, но не могли бы разъяснить, почему программа не работает?
Всё работает как надо. Только программа выдаёт нулевой результат.
Я думаю, ошибка в самом методе Гаусса с переменными.
Программа компилируется без ошибок.
Введённая матрица размера m=3, её элементы:
2 -3 6
5 8 -9
1 1 7
Столбец свободных членов:
4
5
8
Код:
[C]
FILE *f;
int m, i, j;
int **matrix;
f = fopen("input.txt", "r");
if (!f) exit(1);

fscanf(f, "%d", &m);
matrix = (int**)calloc (m, sizeof(int*));
if (matrix == NULL) exit(2);
for (i=0; i < m; i++)
{
matrix[i] = (int*)calloc (m+1, sizeof(int));
if (matrix[i] == NULL) exit(2);
for (j=0; j < m && fscanf(f, "%d", &matrix[i][j]); j++)
printf("%d ", matrix[i][j]);

printf("\n");
}
for(int pp=0; pp < m; pp++)
fscanf(f, "%d", &matrix[pp][m+1]);
// Печать расширенной матрицы системы
printf("Rashirennaya matritsa sistemi imeet vid:\n");
for (i = 0; i < m; i++)
{
for(j=0;j<m;j++)
printf("%d ",matrix[i][j]);
printf("= %d \n",matrix[i][m+1]);
}
//Прямой ход метода Гаусса
//1.Поиск ведущего элемента
for(k=0;k<m;k++)
{
im=k;am=fabs(a[k][k]);
for(l=k;l<m;l++)
if(fabs(a[l][k])>am)
{
im=l;am=fabs(a[l][k]);
}
//2. Ведущий элемент найден. Переставляем строки
for(j=0;j<=m+1;j++)
{
p=matrix[k][j];
matrix[k][j]=matrix[im][j];
matrix[im][j]=p;
}
//3.Исключаем k-е неизвестное из уравнений с номерами, большими k
for(i=k+1;i<m;i++)
{
p=matrix[i][k]/matrix[k][k];
for(j=k+1;j<m+1;j++) matrix[i][j]-=p*matrix[k][j];
}
}
//Обратный ход метода Гаусса
for(k=m;k;k--)
{
for(j=k+1;j<m;j++) matrix[k][m+1]-=matrix[k][j]*matrix[j][m+1];
}
//Вывод результатов
printf("Reshenie sistemi:\n");
for(i=0;i<m;i++) printf("%10.4f",matrix[i][m+1]);
return 0;
}
[/C]
Изображения
Тип файла: jpg Безымянный.jpg (23.7 Кб, 123 просмотров)
katrin1702 вне форума Ответить с цитированием
Старый 25.12.2012, 00:47   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Код:
p=matrix[i][k]/matrix[k][k];
 for(j=k+1;j<m+1;j++) matrix[i][j]-=p*matrix[k][j];
Надо помнить: Инт на инт есть инт. Поэтому p у вас в большинстве случаев равно 0...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 25.12.2012, 01:44   #3
katrin1702
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 3
По умолчанию

Т.е., что мне нужно сделать?
katrin1702 вне форума Ответить с цитированием
Старый 25.12.2012, 02:06   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

1. Осознать, что в ходе метода в матрице могут появится нецелые элеметы - матрица должна быть не целая.
2. Если р будет целым, то результат обрежится - р тоже должна быть не целой.

По-моему, это простейшая логика...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 25.12.2012, 02:22   #5
katrin1702
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 3
По умолчанию

Я имела ввиду, как мне это в коде реализовать?
katrin1702 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод простых операций и метод гаусса зейделя tarasman11 Паскаль, Turbo Pascal, PascalABC.NET 1 23.09.2012 14:46
Метод Гаусса TMTGamer Visual C++ 4 25.12.2011 15:02
метод Гаусса aank10 Общие вопросы C/C++ 0 22.06.2011 16:25
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08