1.再利用に適したパーツとVBBファイルの作成

a. 電磁気学のクーロンの法則

1.エクスプローラ等でフォルダ名VBBの下にフォルダ名ElectroMagnetismを作成する。

  ここに、再利用できるVBBファイルとパーツを格納する。

2.第2章「プロジェクトの作り方」を参照して、ElectMag.iwpとElectMag.iwoを

  作成する。

  他のファイルは削除する。

3.ビジュアル・ビルダーを起動する。

4.「パーツ」->「新規作成」をクリックする。

  ここでは、電磁気学のクーロンの法則のパーツを作成する。

5.

非ビジュアル・パーツ

Coulombパーツの機能設定

クラス名

Coulom

説明

クーロンの法則を用いた計算

ファイル名

ElectMag(電磁気学、electromagnetism

パーツ・タイプ

非ビジュアル・パーツ

基底クラス

IStandardNotifier

.hpvファイル

"Coulomb.hpv"

.cpvファイル

"Coulomb.cpv"

インクルード・ファイル

<math.h>

 

Coulombパーツ

属性

タイプ

コメント

優先

force

double

電磁力

O

charge1

double

電荷1

O

charge2

double

電荷2

O

distance

double

距離

O

dielectric

double

比誘電率

O

アクション

タイプ

パラメータ

 

calc

int

int n

O

 

6.「ファイル」->「保管および生成」->「フィーチャー・ソース」をクリックし、

  Coulomb.cpvとCoulomb.hpvを自動作成する。

7.修正するコーディングを示す。

int Coulomb::calc(int n)
{
 double epsilon0=8.85418e-12; // F/m
 double pi=3.1415927;
 
 
switch (n)
 {
  
case 1:                // 力を求める
   
if( iDistance==0.0 || iDielectric==0.0 ) // 距離または比誘電率がゼロのとき、
   {
              // 下記のコメントのダイアログを表示する
    
IString errorText = IString("距離または比誘電率がゼロです。");
    IException exc( errorText, 0, IException::unrecoverable );
    ITHROW( exc );
   }
   
setForce( iCharge1*iCharge2/4.0/pi/epsilon0/iDielectric/iDistance/iDistance );
   break;
  case 2:              // 電荷1を求める
   
if( iChrage2==0.0 )       // 電荷2がゼロのとき、
   {
               // 下記のコメントのダイアログを表示する
    
IString errorText = IString("電荷2がゼロです。");
    IException exc( errorText, 0, IException::unrecoverable );
    ITHROW( exc );
   }
   
setCharge1( 4.0*pi*epsilon0*iDielectric*iDistance*iDistance/iCharge2 );
   break;
  case 3:               // 電荷2を求める
   
if( iChrage1==0.0 )        // 電荷1がゼロのとき、
   {
               // 下記のコメントのダイアログを表示する
    
IString errorText = IString("電荷1がゼロです。");
    IException exc( errorText, 0, IException::unrecoverable );
    ITHROW( exc );
   }
   
setCharge2( 4.0*pi*epsilon0*iDielectric*iDistance*iDistance/iCharge1 );
   break;
  case 4:               // 距離を求める
   
if( iForce==0.0 || iDielectric==0.0 ) // 力または比誘電率がゼロのとき、
   {
             // 下記のコメントのダイアログを表示する
    
IString errorText = IString("力または比誘電率がゼロです。");
    IException exc( errorText, 0, IException::unrecoverable );
    ITHROW( exc );
   }
   
setDistance( sqrt( fabs(iCharge1*iCharge2/4.0/pi/epsilon0/iDielectric/iForce) ) );
   break;
  case 5:               // 比誘電率を求める
   
if( iDistance==0.0 || iForce==0.0 ) // 距離または力がゼロのとき、
   {
             // 下記のコメントのダイアログを表示する
    
IString errorText = IString("距離または力がゼロです。");
    IException exc( errorText, 0, IException::unrecoverable );
    ITHROW( exc );
   }
   
setDielectric( fabs(iCharge1*iCharge2/4.0/pi/epsilon0/iForce/iDistance/iDistance) );
   break;
 }
 
return 0; // 計算に成功すると0を返す。
}

 例外処理

 プログラムを実行中、ゼロで割ったりして、エラーを起こしそうなところに、

 例外処理を行い、このような場合になれば計算を停止し、

 ダイアログで問題点を指摘する。

 この場合、プログラム自体は終了しないため、入力する数値を変えるだけで良い。

 以下に今回用いた例外処理を示す。

   if( iDistance==0.0 || iDielectric==0.0 )
   例外処理を行う条件(距離または比誘電率がゼロ)。

   {               
    
IString errorText = IString("距離または比誘電率がゼロです。");
    ダイアログに表示するコメント

    IException exc( errorText, 0, IException::unrecoverable );
    回復不可能なエラーが発生したことを示し、上記のコメントを表示する。

    ITHROW( exc );
    アクションを終了する。

   }
   例外処理を終了する。

 

8.あとでパーツCoulombを使えるように、覚え書きをCoulomb.html

  またはCoulomb.txtに書いておく。

 

パーツCoulombの説明

クーロンの法則

 force=charge1*charge2/(4*pi*epsilon0*dielectric*distance*distance)

  変数

   電磁力:force [N]
   電荷1:charge1 [C]
   電荷2:charge2 [C]
   距離:distance [m]
   比誘電率:dielectric

  定数

   円周率:pi=3.1415927
   真空誘電率:epsilon0=8.85418e-12

 

五つの変数のうち、四つを与え、残りの一つが求められる。

 

Coulombパーツ

属性

タイプ

コメント

優先

force

double

電磁力

O

charge1

double

電荷1

O

charge2

double

電荷2

O

distance

double

距離

O

dielectric

double

比誘電率

O

アクション

タイプ

パラメータ

 

calc

int

int n

O

 

calc(int n)について

  n=1の場合、forceが求められる。
  n=2の場合、charge1が求められる。
  n=3の場合、charge2が求められる。
  n=4の場合、distanceが求められる。
  n=5の場合、dielectricが求められる。

 すべてにおいて、分母がゼロになる場合、例外処理を行う。

 計算に成功すると0を戻す。

 例外処理のメッセージが含まれている。

 

必要なファイル

ElectMag.vbb

Coulomb.cpv

Coulomb.hpv