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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 23:05   #1
Nekesh
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 10
По умолчанию отладка программы

здравствуйте Гении
помогите пожалуйста тупице
исправить глюк в программе
суть вводится 2 матрицы
a и y
затем находится
at-транспонированная а
затем ata-это перемножение at и a
затем обратная от аta
затем эта обратная умножается на at получаем матрицу ataat
а затем еее умножаем на вектор(матрицу с ku строк и 1 столбцом)
так вот вроде бы все норм на этапе подсчета ataat программа считает хрен знает что(((
пожалуйста помогите разобраться
если кто готов помочь отпишитесь я код куда нить скину
Nekesh вне форума Ответить с цитированием
Старый 22.10.2010, 11:52   #2
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Это настолько секретный код, что его нельзя выложить прямо тут?
coinkrsk вне форума Ответить с цитированием
Старый 22.10.2010, 15:21   #3
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Сюда и бросай. У меня по математике куча подобных заданий лень ручками считать, проще и интереснее написать код.
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 22.10.2010, 22:53   #4
Nekesh
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 10
По умолчанию

#include <vcl.h>
#include <stdlib.h>
#include <math.h>
#include <values.h>
#pragma hdrstop
#include "TrC.h"
bool E_1(float *buf, int col);
void changerow(float *buf, int i, int j, int col);
void matrumn(float **q,float **w,float **r,int size);
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int ku=0;//количество узлов
float **a;
float *y;
float *x;

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(a)
{
for(int i;i<ku;++i)
delete [] a[i];
delete [] a;
}
if(y) delete y;
if(x) delete x;
ku=StrToInt( Edit1->Text);
StGA->RowCount=ku;
StGA->ColCount=ku;
StGY->RowCount=ku;
StGX->RowCount=ku;
GrBA->Visible=true;
GrBY->Visible=true;
for (int i=0; i<ku; i++)
for (int j=0; j<ku; j++)
StGA->Cells[i][j]=IntToStr(0);
for (int i=0; i<ku; i++)
StGY->Cells[0][i]=IntToStr(0);
a=new float *[ku];
for (int i=0; i < ku; i++)
a[i]=new float [ku];
y=new float [ku];
x=new float [ku];
}
//возвращает false, если не может найти обр. матрицу
bool E_1(float **a, int col)
{
float *buf = new float[col*col];
for(int i=0;i<ku;++i)
for(int j=0;j<ku;++j)
buf[i*col+j]=a[i][j];
float *resbuf = new float[col*col];
/*buf и resbuf - матрицы размером row-строк на col-столбцов
это одномерные массивы, доступ к элементу (i,j) - типа buf[i*col+j]
buf - заданная матрица,
resbuf - выходная такого же размера
(сначала она единичная)
*/
for(int i=0;i<col;++i)
for(int j=0;j<col;++j)
{
if(i==j)
resbuf[i*col+j] = 1.;
else
resbuf[i*col+j] = 0.;
}
float del,mul;
//Идем вниз
for(int f, i=0; i<col; ++i)
{
f=col-1;
while( fabs(buf[i*col+i])<=MINFLOAT ) // <=> while( buf[i*col+i]==0 )
{//диагональный элемент равен 0
if(f==i)
return false; // ошибка: линейно-зависимая матрица;
//переставляем строки, пока не найдем с ненулевым элементом
changerow(buf, i, f, col);
changerow(resbuf, i, f--, col);
}
del = buf[i*col+i];
if( fabs(del - 1.)>MINFLOAT ) // <=> if( del!=1 )
{
buf[i*col+i] = 1.;
for(int j=i+1; j<col; ++j)
buf[i*col+j] /= del;
for(int j=0; j<col; ++j)
resbuf[i*col+j]/=del;
}
for(int k=i+1; k<col; ++k)
{
if( fabs(buf[k*col+i])>MINFLOAT ) // <=> if(buf[k*col+i]!=0.)
{
mul = buf[k*col+i];
buf[k*col+i] = 0.;
for(int j=i+1; j<col; ++j)
buf[k*col+j] -= mul*buf[i*col+j];
for(int j=0; j<col; ++j)
resbuf[k*col+j] -= mul*resbuf[i*col+j];
}
}
}
//идем вверх
for(int i=col; --i>=0; )
{
for(int k=i; --k>=0; )
{
if( fabs(buf[k*col+i])>MINFLOAT) // <=> if(buf[k*col+i]!=0.)
{
mul = buf[k*col+i];
buf[k*col+i] = 0.;
for(int j=0; j<col; ++j)
resbuf[k*col+j] -= mul*resbuf[i*col+j];
}
}
}
for(int i=0;i<col;++i)
for(int j=0;j<col;++j)
a[i][j]=resbuf[i*col+j];
return true;

}

//меняет строки i и j местами
void changerow(float *buf, int i, int j, int col)
{
int sz = sizeof(float)*col;
float *help = new float[sz];
memcpy(help, &buf[i*col], sz);
memcpy(&buf[i*col], &buf[j*col], sz);
memcpy(&buf[j*col], help, sz);
delete help;

}
void matrumn(float **q,float **w,float **r,int size)
{

for(int i = 0; i < size; i++)
for(int j = 0; j < size; j++)
{
r[i][j] = 0;
for(int k = 0; k < size; k++)
r[i][j] += (q[i][k] * w[k][j]);
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
GrBX->Visible=true;
for (int i=0; i<ku; i++)
y[i]=StrToFloat(StGY->Cells[0][i]);


for (int i=0; i<ku; i++)
for (int j=0; j<ku; j++)
a[i][j]=StrToFloat( StGA->Cells[i][j]);
float **at;
at=new float *[ku];
for (int i=0; i < ku; i++)
at[i]=new float [ku];

for (int i=0; i<ku;i++)
for(int j=0;j<ku;j++)
at[i][j]=a[j][i];
float **ata;
ata=new float *[ku];
for (int i=0; i < ku; i++)
ata[i]=new float [ku];

matrumn(at,a,ata,ku);
if(E_1(ata, ku))
{
float **ataat;
ataat=new float *[ku];
for (int i=0; i < ku; i++)
ataat[i]=new float [ku];
for(int i = 0; i < ku; i++)
for(int j = 0; j < ku; j++)
{
ataat[i][j]=0;
for(int k = 0; k < ku; k++)
ataat[i][j] += ((at[i][k]) * (ata[k][j]));
}
for (int i=0; i<ku;i++)
for(int j=0;j<ku;j++)
StG1->Cells[i][j]=ataat[i][j];
for(int i = 0; i < ku; i++)
{
x[i] = 0;
for(int k = 0; k < ku; k++)
x[i] += (ataat[i][k] * y[k]);
}

for (int i=0; i<ku; i++)
StGX->Cells[0][i]=FloatToStrF(x[i],ffNumber, 1, 1);


for(int i;i<ku;++i)
delete [] ataat[i];
delete [] ataat;

}
else
for (int i=0; i<ku; ++i)
for (int j=0; j<ku; ++j)
StGA->Cells[i][j]="NULL";

for(int i;i<ku;++i)
delete [] at[i];
delete [] at;

for(int i;i<ku;++i)
delete [] ata[i];
delete [] ata;



}
Nekesh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отладка программы tanek Помощь студентам 3 01.04.2010 21:52
Отладка программы в с++ immor Общие вопросы C/C++ 2 31.05.2009 21:56
отладка программы honest Помощь студентам 1 18.03.2009 06:58
Отладка программы lenuxoid Общие вопросы Delphi 1 22.12.2008 19:29
Отладка программы ЭД4-0014 Помощь студентам 0 06.06.2008 21:21