マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第7章 関数の学習
第16話 円周率の計算
実行結果

(
n = 10 3.30452
n = 100 3.16042
n = 1000 3.14356
n = 10000 3.14179
n = 100000 3.14161
n = 1000000 3.14159
)
を実現するコード例
#include<iostream>//インクルードファイルiostreamの読み込み
#include<conio.h>//while(!_kbhit());を使うためのお呪い
#include<string> //文字列変数を使えるようにするために組み込む
#include <iomanip> //setprecisionを使えるように組み込む
#include <cmath>//powなどを使うときに必要
#include <ctime>//time()(←現時刻発生する関数)を使うために必要
//#include<math.h>//平方根sqrt(x)を求めるために必要←#include <cmath>があるので不要でした。2026年3月3日訂正
using namespace std;//coutを使うときに必要なお呪い
double f(double n);//円周率を求める
int main() {//私は社長だ。
double y = f(10);//円周率を求める
cout << "n = " << 10 << " " <<
y << endl;
y = f(100);//円周率を求める
cout << "n = " << 100 << " " <<
y << endl;
y = f(1000);//円周率を求める
cout << "n = " << 1000 << " " <<
y << endl;
y = f(10000);//円周率を求める
cout << "n = " << 10000 << " "
<< y << endl;
y = f(100000);//円周率を求める
cout << "n = " << 100000 << " "
<< y << endl;
y = f(1000000);//円周率を求める
cout << "n = " << 1000000 << " "
<< y << endl;
while (!_kbhit());//待機させるための命令
return 0;//int main() を終わるためのお呪い
}
//円周率を求める
double f(double n) {
double x = 0;//倍精度の実数型変数を定義して0に初期化
double d = 1 / n;
for (double i = 0; i < n; i++) {
x = x + d * sqrt(1 - (i * d) * (i * d));
}
return(4 * x);
}
第17話の課題です。
double y = f(10);//円周率を求める
cout << "n = " << 10 << " " <<
y << endl;
y = f(100);//円周率を求める
cout << "n = " << 100 << " " <<
y << endl;
y = f(1000);//円周率を求める
cout << "n = " << 1000 << " " <<
y << endl;
y = f(10000);//円周率を求める
cout << "n = " << 10000 << " "
<< y << endl;
y = f(100000);//円周率を求める
cout << "n = " << 100000 << " "
<< y << endl;
y = f(1000000);//円周率を求める
cout << "n = " << 1000000 << " "
<< y << endl;
の部分はあまりに泥臭いので洗練させましょう。
ヒントは2次元for文です。
結構頭が混乱しますよ。
でも粘り強くやりましょう。
中のfor文は制御変数を減じていきます。
for (double j = ?; j >= 0; j--) {
試行錯誤を繰り返しましょう。

(
n = 10 3.30452
n = 100 3.16042
n = 1000 3.14356
n = 10000 3.14179
n = 100000 3.14161
n = 1000000 3.14159
)
ただし、
cout << fixed << setprecision(0);//小数部分を表示させない
cout << fixed << setprecision(5);//小数第5位まで表示
といった新しい小道具が必要となります。
cout << "n = " << 100000 << " "
<< y << endl;
はint型でしたのでそのまま表示されますが、
n をdouble型にするので新しい小道具が必要となるのです。
第7章第15話へ 第7章第17話へ
本講義トップへ