d. 操作のポイント
1.ビジュアル・パート
ビジュアル・パーツ |
|
Mainパーツの機能設定 |
|
クラス名 |
Main |
説明 |
Main Frame |
ファイル名 |
moreTwo |
パーツタイプ |
ビジュアル・パーツ |
基底クラス |
IFrameWindow |
.hpvファイル |
なし |
.cpvファイル |
なし |
インクルード・ファイル |
なし |
2.非ビジュアル・パーツ
非ビジュアル・パーツ |
|
Quadパーツの機能設定 |
|
クラス名 |
Quad |
説明 |
二次方程式の解(Quadratic formula) |
ファイル名 |
moreTwo |
パーツタイプ |
非ビジュアル・パーツ |
基底クラス |
IStanderdNotifier |
.hpvファイル |
"Quad.hpv" |
.cpvファイル |
"Quad.cpv" |
インクルード・ファイル |
<istring.hpp> <math.h> |
Quadパーツ | ||||
属性 |
タイプ |
説明 |
優先 |
|
num1 |
double |
|
O |
|
num2 |
double |
|
O |
|
num3 |
double |
|
|
|
result1 |
double |
|
|
|
result2 |
double |
|
|
|
アクション |
タイプ |
パラメータ |
説明 |
O |
calc |
IString |
なし |
二次方程式の解 |
O |
プログラムの修正部分
IString Quad::calc()
{
double delta=iNumB*iNumB-4.0*iNumA*iNumC;// 解の公式の平方根の中
IString R;
if( iNumA==0.0 )
{
if( iNumB==0.0 ) // c = 0 の場合
{
setResult1( 0.0 );
notifyObservers(INotificationEvent(Quad::result1Id, *this));
setResult2( 0.0 );
R = "";
}
else // bx + c = 0 の場合
{
setResult1( -iNumC/iNumB );
setResult2( 0.0 );
R = "";
}
}
else
{
if( delta>=0.0 ) // 実数根の場合
{
setResult1( ( iNumB - sqrt(delta) )/2.0/iNumA );
setResult2( ( iNumB + sqrt(delta) )/2.0/iNumA );
R = ",";
}
else // 虚数根の場合
{
setResult1( iNumB/2.0/iNumA );
setResult2( sqrt(-delta)/2.0/iNumA );
R = "±i";
}
}
return R;
}
3.接続
No. |
接続元 |
接続先 |
コメント |
1 |
EntryField1 (valueAsDouble, 属性) |
Quad1 (num1, 属性) |
a |
2 |
EntryField2 (valueAsDouble, 属性) |
Quad1 (num2, 属性) |
b |
3 |
EntryField3 (valueAsDouble, 属性) |
Quad1 (num3, 属性) |
c |
4 |
EntryField4 (valueAsDouble, 属性) |
Quad1 (result1, 属性) |
xの左端の項 |
5 |
EntryField6 (valueAsDouble, 属性) |
Quad1 (result2, 属性) |
xの右端の項 |
6 |
PushButton1 (buttonClickEvent, イベント) |
Quad1 (calc, アクション) |
計算ボタン |
7 |
結線6 (actionResult, 属性) |
EntryField5 (text, 属性) |
xの中央の項 |
8 |
Quad1 (result1, イベント) |
EntryField4 (カスタム・ロジック) |
"解なし" "解不定" |
9 |
Quad1 (result2, イベント) |
EntryField6 (カスタム・ロジック) |
"" |
10 |
PushButton2 (buttonClickEvent, イベント) |
FrameWindow (close, アクション) |
終了ボタン |