C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[7317] 동적 메모리 할당에 관한 문제인데요...좀 봐주세요...(초보)
최선웅 [tbgm] 1836 읽음    2001-05-10 05:30
안녕하십니까....볼랜드초보자입니다.
그래프 그리는 프로그램은 만들다 잘 되지 않아 이렇게 고수님들에게
글 올립니다. 비례제어 게인에 따른 그래프 그리는 것인데...
일단 프로그램이 시작되면 그래프의 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;




}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
7317 동적 메모리 할당에 관한 문제인데요...좀 봐주세요...(초보) 최선웅 1836 2001/05/10
8393     Re:동적 메모리 할당에 관한 문제인데요...좀 봐주세요...(초보) 아름드리 1755 2001/06/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.