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 |