アプリケーションの作成

プロジェクトファイル(ProjectExample.lzh)

1.「ファイル->新規作成->アプリケーション」

Form1:メインのウインドウの作成 Valarray1.cppValarray1.h

2.「ファイル->新規作成->ユニット」

クラス SineCurve:計算用の関数の作成 sine.cppsine.h

3.Valarray.cppを表示してから、「ファイル->ユニットヘッダーファイルの追加」を用いてsine.hを追加する。

4.計算用クラスファイルを示す。

オブジェクト指向のため、クラスSineCurve内の変数(フィールド)には外部から直接変更できないようにしている。そのために、get関数とset関数を作成し、これらの関数(メソッド)を通して、フィールドを変更できるようにしている。

さらに、各get関数とset関数内で、単位の変換等を行い、クラス内の計算はMKS単位系(SI単位系)で行うようにすること。

Valarrayに関しては、「変数に関して」を参照してください。

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

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

sine.hファイル

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

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

#ifndef sineH

#define sineH

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

// 挿入開始

#include <valarray.h>

#include <math.h>

using namespace std;

class SineCurve

{

public:

        SineCurve();

        ~SineCurve();

// Calculation of sine curve

public:

        void __fastcall calculationOfSineCurve();

        void __fastcall setTime(valarray<double>&);

        valarray<double> __fastcall getTime();

        void __fastcall setValue(valarray<double>&);

        valarray<double> __fastcall getValue();

        void __fastcall setNumberOfData(int);

        int __fastcall getNumberOfData();

        void __fastcall setAmplitude(double);

        double __fastcall getAmplitude();

        void __fastcall setFrequency(double);

        double __fastcall getFrequency();

        void __fastcall setPhase(double);

        double __fastcall getPhase();

        valarray<double>        iTime;

        valarray<double>        iValue;

        double                  iAmplitude;

        double                  iFrequency;

        double                  iPhase;

        int                     iNumberOfData;

};

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

extern PACKAGE SineCurve C;

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

// 挿入終了

#endif


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

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

sine.cppファイル

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

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

#include <vcl.h>

#pragma hdrstop

// 挿入開始

#include "sine.h"

SineCurve       C;

// 挿入終了

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

#pragma package(smart_init)

// 挿入開始

const double pi=3.141592;  // 定数πを定義

SineCurve::SineCurve()

{

}

SineCurve::~SineCurve()

{

}

void __fastcall SineCurve::calculationOfSineCurve()

{

        valarray<double>        temp;

        temp = 2.0*pi*iFrequency*iTime + iPhase;

        iValue = iAmplitude*sin(temp);

        return;

}

void __fastcall SineCurve::setTime(valarray<double>& aTime )

{

        iTime.resize(iNumberOfData);

        iTime = aTime*1E-3;  // ミリ秒を秒に変換して計算する

        return;

}

valarray<double> __fastcall SineCurve::getTime()

{

        return iTime*1E3;      // 秒をミリ秒に変換して返す

}

void __fastcall SineCurve::setValue(valarray<double>& aValue )

{

        iValue.resize(iNumberOfData);

        iValue = aValue;

        return;

}

valarray<double> __fastcall SineCurve::getValue()

{

        return iValue;

}

void __fastcall SineCurve::setNumberOfData(int aNumberOfData)

{

        iNumberOfData = aNumberOfData;

        return;

}

int __fastcall SineCurve::getNumberOfData()

{

        return iNumberOfData;

}

void __fastcall SineCurve::setAmplitude(double aAmplitude)

{

        iAmplitude = aAmplitude;

        return;

}

double __fastcall SineCurve::getAmplitude()

{

        return iAmplitude;

}

void __fastcall SineCurve::setFrequency(double aFrequency)

{

        iFrequency = aFrequency;

        return;

}

double __fastcall SineCurve::getFrequency()

{

        return iFrequency;

}

void __fastcall SineCurve::setPhase(double aPhase)

{

        iPhase = pi*aPhase/180;    // 度をラジアンに変換して計算する(180度がπである)

        return;

}

double __fastcall SineCurve::getPhase()

{

        return (180*iPhase/pi);    // ラジアンを度に変換して返す

}

// 挿入終了

5.表示用ファイルを示す。

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

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

Valarray1.hファイル

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

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

#ifndef Valarray1H

#define Valarray1H

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Chart.hpp>

#include <ExtCtrls.hpp>

#include <Series.hpp>

#include <TeEngine.hpp>

#include <TeeProcs.hpp>

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

class TForm1 : public TForm

{

__published:              // IDE 管理のコンポーネント

        TLabel *Label1;

        TLabel *Label2;

        TLabel *Label3;

        TLabel *Label4;

        TLabel *Label5;

        TEdit *EditAmplitude;

        TEdit *EditFrequency;

        TEdit *EditPhase;

        TEdit *EditBeginTime;

        TEdit *EditEndTime;

        TLabel *Label6;

        TEdit *EditDeltaTime;

        TLabel *Label7;

        TLabel *Label8;

        TChart *ChartSineCurve;

        TFastLineSeries *Series1;

        TButton *ButtonCalculation;

        TLabel *Label9;

        void __fastcall ButtonCalculationClick(TObject *Sender);

private:  // ユーザー宣言

public:                 // ユーザー宣言

        __fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1;

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

#endif


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

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

Valarray1.cppファイル

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

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

#include <vcl.h>

#pragma hdrstop

#include "Valarray1.h"

// 挿入開始

#include <valarray.h>

#include "sine.h"

//  挿入終了

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

void __fastcall TForm1::ButtonCalculationClick(TObject *Sender)

{

        valarray<double>        time;

        valarray<double>        value;

        int                     numberOfData;

        int     i;

        C.setAmplitude( EditAmplitude->Text.ToDouble() );

        C.setFrequency( EditFrequency->Text.ToDouble() );

        C.setPhase( EditPhase->Text.ToDouble() );

        numberOfData = (EditEndTime->Text.ToDouble() - EditBeginTime->Text.ToDouble() )/EditDeltaTime->Text.ToDouble();

        C.setNumberOfData(numberOfData);

        time.resize(numberOfData);

        value.resize(numberOfData);

        for(i=0; i<time.size(); i++)

        {

                time[i] = EditBeginTime->Text.ToDouble() + EditDeltaTime->Text.ToDouble()*i;

        }

        C.setTime( time );

        C.calculationOfSineCurve();

        value = C.getValue();

        ChartSineCurve->Series[0]->Clear();

        for(i=0; i<time.size(); i++)

        {

                ChartSineCurve->Series[0]->AddXY(time[i], value[i], "", clTeeColor);

        }

}

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