第3講 for文の学習
第8話 ライプニッツの公式によるπの計算
ライプニッツの公式によって円周率πを求めるプログラムコード例
#include<iostream>
#include <iomanip>
using namespace std;
void main(){
double w=0,h=-1;
long n;
cout<<"計算回数は?"<<endl;
scanf("%d",&n);
for(long i=0;i<n;i++){
h=(-1)*h;
w=w+h*(1/(2*(double)i+1));
}
cout<<"円周率="<< setprecision(20) <<4*w<<endl;
}
実行例
今回も実験結果を表にしてみましょう。
正しい円周率 | 3.1415926535897932 |
n=100 | 3.1315929035585537 |
n=1000 | 3.1405926538397941 |
n=10000 | 3.1414926535900345 |
n=100000 | 3.1415826535897198 |
n=1000000 | 3.1415916535897743 |
n=10000000 | 3.1415925535897915 |
n=100000000 | 3.141592643589326 |
n=1000000000 | 3.1415926525880504 |
計算回数(項数)の増大に従って、円周率に近づいていく様子が分かります。
円周率を求める方法としてウォリスの公式
π/2=(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*(8/7)*(8/9)*(10/9)*・・・
があります。
この公式の規則性自体に?の方もいらっしゃると思いますので、
分子と分母を分けて書いてみましょう。
分子: 2,2,4,4,6,6,8,8,10,10,・・・
分母: 1,3,3,5,5,7,7,9,9,11,11,・・・
これをfor文で実現するには、かなり頭をひねらないといけませんよ。
これも初心者には、難しすぎる課題ですから、
参考として、
を実現するコードを書いておきましょう。
#include<iostream>
#include <iomanip>
using namespace std;
void main(){
int c1=0,c2=1;
for(int i=0;i<20;i++){
if(i%2==0)c1++;
if(i%2==1)c2++;
cout<<2*c1<<"/"<<(2*c2-1)<<"
";
}
}
if(i%2==0)c1++;
if(i%2==1)c2++;
は次の講で学ぶif文です。
m%nはmをnで割ったときの余りを計算する式です。
ですから5%2なら答えは1でし、6%2なら答えは0です。
i%2の答えが1になるときは、iは奇数ですし、
答えが0になるときは、iは偶数です。
==は数学のイコールです。
=はイコールではなく代入でした。
つまり、=は←とイメージした方が良いものでした。
数学の=(イコール=等しい)は、C、C++、Javaの各言語では==で表すのです。
c1++はc1=c1+1と同じでしたね。
if(条件式)A;
は()の中の条件式が正しければAを実行し、正しくないときには何もしない、
という命令文です。ですから、
if(i%2==0)c1++;
はiが2で割ったときに余りが0ならc1++を実行しなさい、
すなわち、
iが偶数ならc1++を実行しなさいですし、
if(i%2==1)c2++;
は、iを2で割ったときに余りが1ならc2++を実行しなさい、
すなわち、
iが奇数ならc2++を実行しなさいです。
if文は、次の第4講で学ぶものですから、
今の講でif文を使うコードは、反則かも知れませんが、
プログラミングはいろいろな学習項目が有機的に関連し合っていて、
複合的な課題になることが多い、
ということでご了承して下さい。
では、皆さんウォリスの公式によって円周率を求めて下さい。
第7話へ 第9話へ
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ