|
안녕하십니까....볼랜드초보자입니다.
그래프 그리는 프로그램은 만들다 잘 되지 않아 이렇게 고수님들에게
글 올립니다. 비례제어 게인에 따른 그래프 그리는 것인데...
일단 프로그램이 시작되면 그래프의 x축과 y축을 그리고 밑에 게인이나 반복구간
을 받아 그래프를 그리는 것입니다.
주기횟수라 되어 있는 것을 TextEdit로 받아 그 숫자 만큼 배열을 생성하고
계산하여 그래프 구간을 조정할려고 했습니다.
그런데 실행 시키면 프로그램이 멈추어 버리네요...
동적으로 배열을 생성하는 부분이 잘 못 된것 같은데...
비슷하게 짜서 그냥 C++언어에 돌려보면 그냥 돌아 가거든요...
비주얼 계열 언어라서 그런가...
아무튼 한번 봐 주시겠습니까....
일단 프로그램을 실행 시키면 좌표축과 첫화면은 뜨는데...실행버튼만 누르면
에러 박스가 뜨면서 프로그램이 다운 되어 버리는 군요....
일단 의심이 가는 소스 부분을 올립니다.
초보니까 프로그램 최적화고 뭐고 없이 그냥 막 짠 프로그램이니까...
뭐 이따위로 코딩했냐고 욕하지 마세요...^^;
그럼 수고 하시고요...좋은 답변 기다립니다....
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
int CountXstep=50; //주기 횟수
double Xstep=700/(double)CountXstep; //x축 간격
double CountYstep1=StrToFloat(Edit4->Text);
double Ystep1=250/CountYstep1;
double CountYstep2=1+StrToFloat(Edit5->Text);
double Ystep2=120/CountYstep2;
PaintBox1->Canvas->Pen->Color=clBlue;
PaintBox1->Canvas->Pen->Style=psSolid;
PaintBox1->Canvas->MoveTo(30,20);
PaintBox1->Canvas->LineTo(30,300);
PaintBox1->Canvas->MoveTo(0,270);
PaintBox1->Canvas->LineTo(730,270);
PaintBox2->Canvas->Pen->Color=clBlue;
PaintBox2->Canvas->Pen->Style=psSolid;
PaintBox2->Canvas->MoveTo(30,20);
PaintBox2->Canvas->LineTo(30,150);
PaintBox2->Canvas->MoveTo(0,140);
PaintBox2->Canvas->LineTo(730,140);
//x축 시간 간격 그리기
for (int i=0;i<=CountXstep;i++)
{
if((i%10)==0)
{
PaintBox1->Canvas->Pen->Color=clRed;
PaintBox2->Canvas->Pen->Color=clRed;
PaintBox1->Canvas->MoveTo(30+Xstep*i,260);
PaintBox1->Canvas->LineTo(30+Xstep*i,270);
PaintBox2->Canvas->MoveTo(30+Xstep*i,130);
PaintBox2->Canvas->LineTo(30+Xstep*i,140);
PaintBox1->Canvas->Pen->Color=clBlue;
PaintBox2->Canvas->Pen->Color=clBlue;
}
else
{
PaintBox1->Canvas->MoveTo(30+Xstep*i,265);
PaintBox1->Canvas->LineTo(30+Xstep*i,270);
PaintBox2->Canvas->MoveTo(30+Xstep*i,135);
PaintBox2->Canvas->LineTo(30+Xstep*i,140);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PaintBox1->Refresh();
PaintBox2->Refresh();
int CountXstep=50; //주기 횟수 <-----여기부터
double Xstep=700/(double)CountXstep; //x축 간격
double *E2=new double[CountXstep], *I=new double[CountXstep];
double *E2p=new double[CountXstep], *Ip=new double[CountXstep];
double *E2m=new double[CountXstep], *Im=new double[CountXstep];
<------여기까지 때문인것 같은데....
//double E2p[CountXstep],Ip[CountXstep];
//double E2m[CountXstep],Im[CountXstep];
double CountYstep1=StrToFloat(Edit4->Text);
double Ystep1=250/CountYstep1;
double CountYstep2=1+StrToFloat(Edit5->Text);
double Ystep2=120/CountYstep2;
double Es=StrToFloat(Edit6->Text);
E2[0]=0; E2[1]=0; E2[2]=0;
E2m[0]=0; E2m[1]=0; E2m[2]=0;
E2p[0]=0; E2p[1]=0; E2p[2]=0;
I[0]=0; I[1]=0; I[2]=0;
Im[0]=0; Im[1]=0; Im[2]=0;
Ip[0]=0; Ip[1]=0; Ip[2]=0;
Kp=StrToFloat(Edit1->Text);
Alpa=StrToFloat(Edit2->Text);
Kpp=Kp+Alpa;
Kpm=Kp-Alpa;
PaintBox1->Canvas->Pen->Style=psSolid;
for (int k=3;k<=CountXstep;k++)
{
E2[k]=1.493*E2[k-1]-0.507*E2[k-2]+0.014*E2[k-3]
+1.57*I[k-1]-1.21*I[k-2]-0.36*I[k-3];
I[k]=Kp*(Es-E2[k])+I[k-1];
if (I[k]>CountYstep2-1)
I[k]=CountYstep2-1;
E2m[k]=1.493*E2m[k-1]-0.507*E2m[k-2]+0.014*E2m[k-3]
+1.57*Im[k-1]-1.21*Im[k-2]-0.36*Im[k-3];
Im[k]=Kpm*(Es-E2m[k])+Im[k-1];
if (Im[k]>CountYstep2-1)
Im[k]=CountYstep2-1;
E2p[k]=1.493*E2p[k-1]-0.507*E2p[k-2]+0.014*E2p[k-3]
+1.57*Ip[k-1]-1.21*Ip[k-2]-0.36*Ip[k-3];
Ip[k]=Kpp*(Es-E2m[k])+Im[k-1];
if (Ip[k]>CountYstep2-1)
Ip[k]=CountYstep2-1;
}
//설정값 그리기
PaintBox1->Canvas->Pen->Color=clNavy;
PaintBox1->Canvas->Pen->Style=psDash;
PaintBox1->Canvas->MoveTo(30,270-Ystep1*Es);
PaintBox1->Canvas->LineTo(730,270-Ystep1*Es);
for (int i=0;i<=CountXstep-4;i++)
{
PaintBox1->Canvas->Pen->Color=clLime;
PaintBox1->Canvas->Pen->Style=psSolid;
PaintBox1->Canvas->MoveTo(30+i*Xstep,270-Ystep1*E2[i+3]);
PaintBox1->Canvas->LineTo(30+(i+1)*Xstep,270-Ystep1*E2[i+4]);
PaintBox2->Canvas->Pen->Color=clLime;
PaintBox2->Canvas->Pen->Style=psSolid;
PaintBox2->Canvas->MoveTo(30+i*Xstep,140-Ystep2*I[i+3]);
PaintBox2->Canvas->LineTo(30+(i+1)*Xstep,140-Ystep2*I[i+4]);
PaintBox1->Canvas->Pen->Color=clRed;
PaintBox1->Canvas->Pen->Style=psSolid;
PaintBox1->Canvas->MoveTo(30+i*Xstep,270-Ystep1*E2m[i+3]);
PaintBox1->Canvas->LineTo(30+(i+1)*Xstep,270-Ystep1*E2m[i+4]);
PaintBox2->Canvas->Pen->Color=clRed;
PaintBox2->Canvas->Pen->Style=psSolid;
PaintBox2->Canvas->MoveTo(30+i*Xstep,140-Ystep2*Im[i+3]);
PaintBox2->Canvas->LineTo(30+(i+1)*Xstep,140-Ystep2*Im[i+4]);
PaintBox1->Canvas->Pen->Color=clTeal;
PaintBox1->Canvas->Pen->Style=psSolid;
PaintBox1->Canvas->MoveTo(30+i*Xstep,270-Ystep1*E2p[i+3]);
PaintBox1->Canvas->LineTo(30+(i+1)*Xstep,270-Ystep1*E2p[i+4]);
PaintBox2->Canvas->Pen->Color=clTeal;
PaintBox2->Canvas->Pen->Style=psSolid;
PaintBox2->Canvas->MoveTo(30+i*Xstep,140-Ystep2*Ip[i+3]);
PaintBox2->Canvas->LineTo(30+(i+1)*Xstep,140-Ystep2*Ip[i+4]);
}
delete[] E2;
delete[] I;
delete[] E2m;
delete[] Im;
delete[] E2p;
delete[] Ip;
}
//---------------------------------------------------------------------------
|