マルチスレッド版数独自動生成ソフト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話へ

本講義トップへ