next up previous contents index
: ピクチャコントロールへの描画の基礎知識 : 数値積分法 : レイアウト   目次   索引

プログラムの実装手順

計算ボタンをダブルクリックすると,メンバ関数の追加のダイアログがでる。 ここでOKボタンをクリックすると,次のようなOnButton2()イベントハンドラが表示される。

\framebox{
\begin{tabular}{l}
void CTrapeDlg::OnButton2() \\
\{\\
\hspace{1cm...
...ODO: この位置にコントロール通知ハンドラ用のコードを追加する\\
\}
\end{tabular}}

そこで,$ \{ \}$の中に開始点,終了点,分割数を読んで,台形公式を用いて積分を求めるためのプログラムを次のように書く。

=======================================================
void CTrapeDlg::OnButton2()
{
//開始点$ a$,終了点$ b$,分割数$ n$を読み込む。
UpdateData(TRUE);
double a = m_Edit1;
double b = m_Edit2;
int n = m_Edit3;
//区間幅 $ h = (b-a)/n$を決める。
double h = (b-a)/n;
// $ sum = f(x_{1}) + f(x_{2}) + \cdots + f(x_{n-1})$を関数 $ F(x)=x^{2} - 2$を用いて求める。
double sum=0;
double x;
for(int i = 1; i $ <$ n; i++){
x = a + i*h;
sum = sum + F(x);
}
//和を台形公式より求める。
double s=0; s = (h/2.0)* (F(a) + F(b) + 2*sum);
m_Output.Format("%2.8lf",s);
UpdateData(FALSE);
}
=======================================================

ユーザ関数の追加 関数 F(x) のスケルトンを CTrapeDlg.cppに付け加える。このために ClassView から CTrapeDlgでマウスの右ボタンをクリックすると表示されるメニューから メンバ関数の追加 を選択すると、下のメンバ関数の入力画面となる。

\begin{figure}\begin{center}
\includegraphics[width=12cm]{FIG/figure7-3.eps}
\end{center}\vspace{-0.6cm}
\end{figure}
ここで,関数の型はdoubleを入力し,関数の宣言にはF(double x)を入力する。最後に,アクセス制御はPrivateのラジオボタンをチェックする。

F は CTrapeDlg.cpp の中だけで必要な関数であるため、アクセスは private とする。設定すると、関数 F の編集モードに自動的に移行する。

設定したのは CTrapeDlg のメンバー関数であるため, double F(double x) ではなく、

double CTrapeDlg::F(couble x)

になっている。 C++では,クラスの中でメンバ関数を宣言するときには,スコープ解決子::はいらないが,クラスの外で,メンバ関数を宣言するときには,どのクラスに属しているかを知らせるために, クラス名::関数名 という書き方をする。 さて,最後にF()関数の中身を書く。

=======================================================
dobule CTrapeDlg::F(double x)
{
return x*x - 2;
}
=======================================================
これで,積分をするプログラムは完成。



Administrator 平成16年7月8日