1 Востаннє редагувалося RosOle (15.05.2014 08:24:33)

Тема: Будь ласка допоможіть з побудовою графіка

Ось така задача:

Задано xп=-1, xк=1, dx=0.2, yп=-2, yк=2, dy=0.2, z=1.32. Відповідно до номера варіанту потрібно розробити програму для двовимірного табулювання функцій a=f[x,y,z,b] і b=f[x,y,z] за незалежними змінними х і y згідно з математичними виразами, наведеними у задачі 1.1. Побудувати двовимірні графіки цих функцій.

Побудова одновимырного графіка при табулюванні по змінній Х ніяких труднощів не склала..от з двох вимірним табулюванням халепа.

Свій варіант програми завантажую... виконано вссе крім побудови графіка.

//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

class ZavdClass {
        float a, b;
public:

        ZavdClass() {a=1; b=1;}
        void Fn_b(float x, float y, float z);
        void Fn_a(float x, float y, float z);
        void TabX(float xp, float xk, float dx,
                        float y, float z);
        float getA()
                {return a;}
        float getB()
                {return b;}

        float Faktr(int n);
        void showZavd()
                {
                Form1->Edit5->Text=FloatToStrF(b,ffFixed,2,3);
                Form1->Edit6->Text=FloatToStrF(a,ffFixed,2,3);
                }

        void ZavdClass::TabXY(double xp, double xk, double dx,
                     double yp, double yk, double dy, double z);

                };
void ZavdClass::Fn_b(float x, float y, float z)
{
        float b1=y+atan(pow(fabs(x*x+z),0.1));
        float b2=3*z+pow(sin(pow(y+z,3)),2);
        float b3=y*exp(-((x+z)/(y+z)));
        b=y*(b1/b2+b3);
}

void ZavdClass::Fn_a(float x, float y, float z)
{
        float a1=sqrt(pow(fabs(x*x-z),0.3));
        float a2=pow(fabs(y+2*b),1./3);
        float a3=1+x+y*y/Faktr(2)+z*z*z/Faktr(3);
        a=(a1-a2)/a3;
}

float ZavdClass::Faktr(int n)
{
        float f=1;
        if(n > 1)
                for(int i=2; i<=n; i++)
                        f*=i;
        return f;
}

void ZavdClass::TabX(float xp, float xk, float dx,
                float y, float z)
{       ZavdClass Zavd;
        Form1->Memo1->Lines->Add("Одновимірне табулювання функції:");
        Form1->Memo1->Lines->Add(" ");
        float x=xp;
        while(x<=xk){
                Fn_b(x, y, z);
                Fn_a(x, y, z);
                Form1->Memo1->Lines->Append(FloatToStrF(x,ffFixed,2,2)+'\t'+FloatToStrF(getA(),ffFixed,2,2)+'\t'+FloatToStrF(getB(),ffFixed,2,2));
                Form1->Series1->Add(getB(),FloatToStrF(x,ffFixed,2,2),clRed);
                Form1->Series1->Add(getA(),FloatToStrF(x,ffFixed,2,2),clGreen);
                x+=dx;
        }
}
void ZavdClass::TabXY(double xp, double xk, double dx,
                     double yp, double yk, double dy, double z)
{
        Form1->Memo1->Lines->Add(" ");
        Form1->Memo1->Lines->Add("\n\nДвохвимірне табулювання функції:\n\n");
        Form1->Memo1->Lines->Add(" ");
        double y=yp;
        while(y<=yk){
                double x=xp;
                AnsiString  A;
                  while(x<=xk){
                        Fn_b(x, y, z);
                        Fn_a(x, y, z);
                        A=A+FloatToStrF(getA(),ffFixed,2,2)+"\t";
                       
                        x+=dx;
                }
                 Form1->Memo1->Lines->Add(A);
                 Form1->Series3->Add(getA(),FloatToStrF(y,ffFixed,2,2),clRed);
                y+=dy;
        }
}



//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
 int Nv=StrToInt(Edit1->Text);
        float x=0.48*Nv;
        Edit2->Text= FloatToStrF(x,ffFixed,2,2);
        float y=0.47*Nv;
        Edit3->Text= FloatToStrF(y,ffFixed,2,2);
        float z=1.32*Nv;
        Edit4->Text= FloatToStrF(z,ffFixed,2,2);
        float Xp=-1*Nv;
        Edit7->Text= FloatToStrF(Xp,ffFixed,2,2);
        float Xk=1*Nv;
        Edit8->Text= FloatToStrF(Xk,ffFixed,2,2);
        float dX=0.1*Nv;
        Edit9->Text= FloatToStrF(dX,ffFixed,2,2);
        float   Yp=-2;
        Edit10->Text= FloatToStrF(Yp,ffFixed,2,2);
        float   Yk=2;
        Edit11->Text= FloatToStrF(Yk,ffFixed,2,2);
        float   dY=0.2;
        Edit12->Text= FloatToStrF(dY,ffFixed,2,2);

        ZavdClass Zavd;
        if (CheckBox2->Checked) Zavd.TabX(Xp,Xk,dX,y,z);
        if (CheckBox3->Checked) Zavd.TabXY(Xp,Xk,dX,Yp,Yk,dY,z);
        if (CheckBox1->Checked)
                {
                Zavd.Fn_b(x, y, z);
                Zavd.Fn_a(x, y, z);
                Zavd.showZavd();
                }
        BitBtn1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
Edit2->Text=" ";
Edit3->Text=" ";
Edit4->Text=" ";
Edit5->Text=" ";
Edit6->Text=" ";
Edit7->Text=" ";
Edit8->Text=" ";
Edit9->Text=" ";
Edit10->Text=" ";
Edit11->Text=" ";
Edit12->Text=" ";
Memo1->Lines->Clear();
Series1->Clear();
Chart1->AddSeries(Series1);
Series2->Clear();
Chart1->AddSeries(Series2);
Series3->Clear();
Chart2->AddSeries(Series3);

BitBtn1->Enabled=true;
}
//---------------------------------------------------------------------------
Post's attachments

1.3.rar 437.92 kb, 285 downloads since 2014-05-15 

2

Re: Будь ласка допоможіть з побудовою графіка

Викладіть будь-ласка код прям на форум, не забудьте тег code. Тим Ви прибільшите ймовірність того, що Вам хтось допоможе.

Подякували: RosOle1