計算ボタンをダブルクリックすると,メンバ関数の追加のダイアログがでる。 ここでOKボタンをクリックすると,次のようなOnButton1()イベントハンドラが表示される。
そこで,の中に試行回数を用いてを求めるためのプログラムを次のように書く。
=======================================================
void CMonteDlg::OnButton1()
{
//乱数発生回数の読み込み
UpdateData(TRUE);
int n = m_Edit1;
// n個の乱数を発生
int count = 0;
srand((unsigned) time(NULL));//種をまく
for (int i=1; i= n; i++){
double x = rand()/(RAND_MAX+1.0);//0から1間の乱数
double y = rand()/(RAND_MAX+1.0);
double xg = 100*x; //0から100の乱数に変換
double yg = 100*y;
//円の内側か調べる
if(x*x + y*y 1){
count++;
}
CString temp; //乱数の表示
temp.Format("%d %1.2lf %1.2lf rn",i,x,y);
m_sEdit3 += temp;
}
double pi = 4.0*count/n; //円周率の計算
m_sEdit2.Format("%lf" ,pi);
UpdateData(FALSE);
}
=======================================================
//描画の領域確保
CWnd* h=GetDlgItem(IDC_PICTURE);
CDC* pDC=h-GetDC();
CRect r;
h-GetClientRect(&r);
//描画領域の設定
CRgn s;
s.CreateRectRgn(0,0,100,100);
pDC-SelectClipRgn(&s);
//乱数発生回数の読み込み
UpdateData(TRUE);
int n = m_Edit1;
// n個の乱数を発生
srand((unsigned) time(NULL));//種をまく
for (int i=1; i= n; i++){
double x = rand()/(RAND_MAX+1.0);//0から1間の乱数
double y = rand()/(RAND_MAX+1.0);
double xg = 100*x; //0から100の乱数に変換
double yg = 100*y;
//円の内側か調べる
if(x*x + y*y = 1){
pDC-SetPixel((int)xg,(int)yg,RGB(255,0,0));
}
else {
pDC-SetPixel((int)xg,(int)yg,RGB(0,0,255));
}
s.DeleteObject();
h-ReleaseDC(pDC);
}