Страница 1 из 1

Нужно переделать (С++ Builder)

Добавлено: 24 апр 2014, 14:53
nuka
можно ли переделать.. программу... чтоб она результат показывала на консолле... а не в форме... если можно... можете переделать ....

Код: Выделить всё

#include <vcl.h>
#include <fstream.h>
#include <iostream.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
const int n=10;
float x_i[n+1];
float f_i[n+1];
float a_i[n+1],b_i[n+1],y_i[n+1],z;
int i,k,m;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Chart1->Visible=False;StringGrid1->Visible=False;
}
//---------------------------------------------------------------------------
float sqr(float chislo)
{
return chislo*chislo;
}
//---------------------------------------------------------------------------
float q_k(int k,float x_i)
{
if (k==0) return 1;
if (k==1) return x_i-b_i[0];
return (x_i-b_i[k-1])*q_k(k-1,x_i)-y_i[k-2]*q_k(k-2,x_i);
}
//---------------------------------------------------------------------------
void MNK(float* x,float* f,int n,int m,float* a)
{
b_i[0]=0;
for(i=0;i<=n;i++) b_i[0]=b_i[0]+x[i];
b_i[0]=b_i[0]/(n+1);
for(k=1;k<=(m-1);k++) {
b_i[k]=0;z=0;
for (i=0;i<=n;i++) { b_i[k]=b_i[k]+x[i]*sqr(q_k(k,x[i]));
z=z+sqr(q_k(k,x[i]));}
b_i[k]=b_i[k]/z;
y_i[k-1]=0;z=0;
for (i=0;i<=n;i++) {y_i[k-1]=y_i[k-1]+x[i]*q_k(k,x[i])*q_k(k-1,x[i]);
z=z+sqr(q_k(k-1,x[i]));}
y_i[k-1]=y_i[k-1]/z;
}
for (k=0;k<=m;k++) {
a[k]=0;z=0;
for (i=0;i<=n;i++) {a[k]=a[k]+f[i]*q_k(k,x[i]);
z=z+sqr(q_k(k,x[i]));}
a[k]=a[k]/z;}
}
//---------------------------------------------------------------------------
float P_m(float x,float* a,int m)
{
z=0;
for(int k=0;k<=m;k++) z=z+a[k]*q_k(k,x);
return z;
}
//---------------------------------------------------------------------------
void grafik()
{
float h;
h=(x_i[n]-x_i[0])/40;
Form1->Chart1->Series[0]->Clear();
Form1->Chart1->Series[1]->Clear();
for(i = 0;i<=n;i++) Form1->Chart1->Series[1]->AddXY(x_i[i],f_i[i]);
for(i = 0;i<=40;i++)Form1->Chart1->Series[0]->AddXY(x_i[0]+i*h,P_m(x_i[0]+i*h,a_i,m));
}
//---------------------------------------------------------------------------

float S(float* a,float* f,float* x,int m,int n)
{
float d;
d=0;
for (i=0;i<=n;i++)
d=d+sqr(P_m(x[i],a,m)-f[i]);
return d;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void table()
{
Form1->StringGrid1->Cols[0]->Strings[0]="x_i";
Form1->StringGrid1->Cols[1]->Strings[0]="f_i";
for (i=0;i<=n;i++)
Form1->StringGrid1->Cols[i+2]->Strings[0]="P_"+IntToStr(i);
for (i=0;i<=n;i++) {
Form1->StringGrid1->Cols[0]->Strings[i+1]=FloatToStrF(x_i[i],ffFixed,1,2);
Form1->StringGrid1->Cols[1]->Strings[i+1]=FloatToStrF(f_i[i],ffFixed,1,2);}
for (i=0;i<=n;i++)
Form1->StringGrid1->Cols[m+2]->Strings[i+1]=FloatToStrF(P_m(x_i[i],a_i,m),ffFixed,1,2);
Form1->StringGrid1->Cols[m+2]->Strings[12]=FloatToStrF(S(a_i,f_i,x_i,m,n),ffExponent,3,2);
Form1->StringGrid1->Cols[1]->Strings[12]="S=";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void vvoddan(float* f,float* x)
{
ifstream infile("dannie.txt");
i=0;
char buff[6];
while (!infile.eof())
{
infile.getline(buff,sizeof(buff));
if (i<11) {x[i]=StrToFloat(buff);}
else {f[i-11]=StrToFloat(buff);}
i++;
}
infile.close();
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
m=StrToInt(Form1->Edit1->Text);
vvoddan(f_i,x_i);
MNK(x_i,f_i,n,m,a_i);
grafik();
table();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (Button2->Caption=="Ãðàôèê") {Button2->Caption="Òàáëèöà";
Chart1->Visible=False;StringGrid1->Visible=True;}
else {Button2->Caption="Ãðàôèê";
Chart1->Visible=True;StringGrid1->Visible=False;}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TForm1::CSpinButton1DownClick(TObject *Sender)
{
if (StrToInt(Edit1->Text)!=0) Form1->Edit1->Text=IntToStr(StrToInt(Form1->Edit1->Text)-1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CSpinButton1UpClick(TObject *Sender)
{
if (StrToInt(Edit1->Text)!=10) Form1->Edit1->Text=IntToStr(StrToInt(Form1->Edit1->Text)+1);
}
//---------------------------------------------------------------------------

Re: Нужно переделать (С++ Builder)

Добавлено: 24 апр 2014, 16:07
Romeo
Можно переделать, чтобы выводило таблицу в консоль. График нарисовать в консоле не получится.

Делать за тебя никто не будет, так как это ничему тебя не научат. Готов помогать советами. Вместо билдеровского StringGrid заведи матрицу (двумерный массив), и заполняй результатами его (функция table). Затем эту матрицу выведи в консоль.