Войти

Показать полную графическую версию : Помогите найти ошибку


Bokslaitner
01-11-2012, 19:56
Матрица с наследованием
Алгоритм нахождения элементов вектора:
Сумма элементов непарных рядов матрицы

#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "Unit1.h"
#include <vcl.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

typedef float mat [5][5];
typedef float vec [5];

class matr
{mat b; int n; int mk;
public:
matr(int in, int im);
void set_b(mat b);};

class vect:public matr
{vec d;
public:
vect(int in,int im);
void set_v(mat b, vec d, int n, int mk);};

class func:public vect
{public:
func (int in, int im);
float gfunc(vec d, int n, int mk);};

matr::matr(int in,int im)
{n=in; mk=im;}
void matr::set_b(mat b)
{for(int i=0;i<n;i++)
for(int j=0;j<mk;j++)
b[i][j]=pow(2,i-j)*x*(fabs(i-4)+2*log*(pow(0.5+(j+1),2)));}

vect::vect(int in,int im) :matr(in,im){}
void vect::set_v(mat b,vec d,int n,int mk)
{for(int i=0;i<n;i++)
d[i]=b[i][0]-b[i][4];}

func::func(int in,int im) :vect(in,im){}
float func::gfunc(vec d,int n,int mk)
{float s=0;
for(int i=0;i<n;i++)
for(int k=0;k<i;k++)
s=s+log*(fabs(pow(d[i],3)-(pow(d[k],-2)));
return s;}

int k=5; int m=5; mat a; vec x;
void __fastcall TForm1::FormCreate(TObject *Sender)
{SG1->Cells[0][0]="Стлб/Стр";
for(int i=0;i<m;i++)
{SG1->Cells[i+1][0]=IntToStr(i)+" столбец";
SG2->Cells[i][0]=IntToStr(i)+" столбец";}
for(int j=0;j<k;j++)
SG1->Cells[0][j+1]=IntToStr(j)+" строка";}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{matr cm(k,m);
cm.set_b(a);
for(int i=0;i<k;i++)
for(int j=0;j<m;j++)
SG1->Cells[j+1][i+1]=FloatToStrF(a[i][j],ffFixed,5,3);}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{vect cv(k,m);
cv.set_v(a,x,k,m);
for(int j=0;j<m;j++)
SG2->Cells[0][j+1]=FloatToStrF(x[j],ffFixed,5,3);}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{func fg(k,m);
float g=fg.gfunc(x,k,m);
Edit1->Text=FloatToStrF(g,ffFixed,5,3);}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------


На всякий случай выложил файл с формулами.

Beyound
01-11-2012, 21:23
кодом оформь. никто себя уважающий эту кашу разбирать не будет

Bokslaitner
01-11-2012, 21:45
Дело в том, что мы изучаем только С++ (до сих пор), собственно я не могу разобраться с вектором

class func:public vect
{public:
func (int in, int im);
float gfunc(vec d, int n, int mk);};

matr::matr(int in,int im)
{n=in; mk=im;}
void matr::set_b(mat b)
{for(int i=0;i<n;i++)
for(int j=0;j<mk;j++)
b[i][j]=pow(2,i-j)*x*(fabs(i-4)+2*log*(pow(0.5+(j+1),2)));}

И в этих строчках все время выбивается ошибка

lxa85
01-11-2012, 22:03
Bokslaitner, передавай преподавателю привет, и скажи, чтобы он строже относился к оформлению кода.
Где комментарии в коде??
Какая ошибка?
Разбивай сложные строки на несколько строк, вводи дополнительные переменные, отладочные выводы промежуточных значений переменных, смотри, где она "спотыкается".
Я так понимаю, среда разработки C++Builder. В нем должен быть неплохой отладчик. Выполняй трассировку программы.




© OSzone.net 2001-2012