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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 21:28   #1
WarHamster
Пользователь
 
Регистрация: 09.08.2010
Сообщений: 48
По умолчанию Вещественное значение на матрице не вычисляется

Лаба - решение СЛУ методом Гаусса. Суть вкратце - зануляем элементы под главной диагональю матрицы и решаем получившуюся систему.
Код:
typedef vector< vector<double> > Matr;

void BuildStringGrid(TStringGrid* SG) // Шапка стрингрида
{
for(int i=1; i<SG->ColCount-1; i++) SG->Cells[i][0]="a"+IntToStr(i);
SG->Cells[SG->ColCount-1][0]="b";
for(int i=1; i<SG->RowCount; i++) SG->Cells[0][i]=i;
};

Matr GetMatr(TStringGrid* SG)  // Читает матрицу из грида
{
Matr M(SG->ColCount-1,vector<double>(SG->RowCount-1,0));
for(int i=0; i<SG->ColCount-1; i++)
        for(int j=0; j<SG->RowCount-1; j++)
                {
                M[i][j]=StrToFloat(SG->Cells[i+1][j+1]);
                };
return M;
};

void PutMatr(Matr M, TStringGrid* SG) // Пишет матрицу в грид
{
for(unsigned int i=0; i<M.size(); i++)
        for(unsigned int j=0; j<M[0].size(); j++)
        {
        SG->Cells[i+1][j+1]=M[i][j];
        };
};

Matr Triangle(Matr M)  // собственно приведение матрицы к треугольному виду
{
unsigned int step=0;
while(step!=M.size()-2)
        {
        for(unsigned int i=step; i<M.size(); i++)
                {
                for(unsigned int j=step+1; j<M[0].size(); j++)
                        {
                        M[i][j]=M[i][j]-(M[i][step]*M[step][j]/M[step][step]);  //фейл тут, 
//если значение выражения не ровно 0, значение M[i][j] просто не изменяется, даже если не перезаписывать его в ячейку
                        };
                };
        step++;
        };
return M;
};
C индексацией все в порядке, специально следил, обход по ячейкам выполняется именно так, как должно и цикл завершается вовремя, но значение пересчитываться не хочет. Что интересно, выражение M[i][j]=M[i][j]/3 нормально вывело в грид правильный ответ. В чем может быть бага?
WarHamster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оборотно-сальдовая ведомость, неужели так вычисляется? Ecosasha Свободное общение 1 13.05.2011 23:49
Не понятно, как вычисляется факториал в программе (С++) Hardander Помощь студентам 8 26.01.2011 14:19
В матрице 5*7: определить среднее значение....(язык Qbasic) Лиза) Помощь студентам 1 25.01.2011 18:43
Элементы массива a(n) вычисляется по правилу... om3n Помощь студентам 2 20.06.2010 15:30
В матрице определить номер и значение элемента. Tonik_A Паскаль, Turbo Pascal, PascalABC.NET 2 18.10.2009 13:53