第4講 同じことの繰り返し=for文の学習
第7話 階乗を求めるアプリその2
niu
(13!はすでに限界を超えていて、正しく計算されていません。)
を実現するプログラム例
#include<stdio.h>
long f(int n);
int main(){
  int n;
  for(n=1;n<=20;n++){
    printf("%d!=",n);
    printf("%ld\n",f(n));
  }
  return(0);
}
long f(int n){
  int i,w;
  w=1;
  for(i=1;i<=n;i++){
    w=w*i;
  }
  return(w);
}
コピペ用添付ファイル


さて、次にfor文を使って円周率を求める計算を考えたいと思いますが、
さすがにこれは、小学生や中学生の皆さんに理解できるように、
説明することは出来ません。
申し訳ないのですが、以降と次話は、
小学生や中学生の皆さんは読み飛ばして、
第5講のif文の学習に進んで下さい。
ただし、難しくても挑戦してみたい小学生や中学生は
以降も読んでください。
完全には理解できないでしょうが、雰囲気だけでも味わってください。
以降
は小学生や中学生の皆さんのための説明です。


円の面積の公式は円の面積でした。
(πは円周率ですし、rは半径です。
円の面積の公式は、半径×半径×円周率でしたね。
円の面積はそれを表しています。数学では×は省略するのです。)

したがって、r=1のとき、円の面積はちょうどπ
(半径×半径×円周率=1×1×円周率=円周率ですね。)
ですから、半径1の円の面積を計算すればよいのです。
半径1の面積を計算するためには、
1/4円
1/4円
の面積を計算して、4倍すればよいのです。
では、1/4円の面積はどのように計算したらよいでしょうか。
積分
小さい長方形に分けて足していけば、円の面積に近い値が出ます。
長方形の横幅を小さくしていけば、誤差は小さくなっていきます。

横幅をキーボードから取得できるようにしてやって、
横幅とともに計算値がπに近づいていく様子を観察できるようにしてみましょう。
横幅をdとすると、1個目の長方形の縦は1ですから、その面積は
d×1=d
です。
では2個目の長方形の面積はどうでしょうか。
縦がわからないとわかりません。
1/4円の方程式は、円の方程式でした。
(高校2年生で習います。ルート1−xの2乗と読みます。
意味は、2乗する(同じ数を2回かけること)とqwになる数です。
例えば、2乗すると9になる数は3ですから、erwr=3です。
2乗すると9になる数をerwrで表すということです。
縦yは、横xのqweqという関数になるということです。
例えば、x=0.1ならqw=1−0.1×0.1=1−0.01=0.99です。
2乗すると0.99になる数は、0.9949です。
0.9949×0.9949が約0.99になりますよね。電卓で確認してください。
ですから、横軸が
0.1のとき縦軸は0.9949になります。
同様に、x=0.2ならqw=1−0.2×0.2=1−0.04=0.96です。
2乗すると0.96になる数は、0.9798です。
ですから、横軸が
0.2のとき縦軸は0.9897になります。
x=0.3ならqw=1−0.3×0.3=1−0.09=0.91です。
2乗すると0.91になる数は、0.9539です。
ですから、横軸が
0.3のとき縦軸は0.9539になります。
以降同様にして、
横軸
0.4のとき縦軸0.9165
横軸0.5のとき縦軸0.8660
横軸
0.6のとき縦軸0.8000
横軸0.7のとき縦軸0.7141
横軸
0.8のとき縦軸0.6000
横軸
0.9のとき縦軸0.4359
横軸
1.0のとき縦軸0.0000
積分
最初は、横が増えても縦は少しずつしか減少しなかったのに、
だんだん勢いが増して減少幅が大きくなっていることが分かります。
上の円のグラフと対応しているでしょう。
ですから、縦yは縦xに従いqweqになるということが分かると思います。
関数というのは
の間に関係があるということを表しています。
係するだということで、yはxの関数というわけです。

ですから、2個目の長方形の縦は、積分第1です。従って、その面積は長方形面積
3個目は縦が積分第2で、面積は2番目長方形面積
4個目は縦が積分第3で、面積は3番目長方形面積
以下同様にして、
n個目は縦が積分第nで、面積はn番目長方形面積

したがって、1/4円の面積は積分(総和)
すなわち変形を計算すればよいのです。


C言語やC++でルートxを計算させるときは、
sqrt(x)とします。そして、sqrt()を使うときには、
冒頭に、
#include<math.h>
と記述しておく必要があります。
では、プログラムコードを考えてみてください。

合計を計算するwと横幅dは、doubleで宣言しておき、
for文の制御変数iと区切り数nは大きい数も実験できるようにlong型にしましょう。
そのとき、d=1/n; とすると、dは0になってしまいます。
long型同士の計算結果はlong型になるのでした。
左辺がdouble型ですから、右辺の型も一致させなければなりません。
型を強制的に変換させることをキャストといいます。
キャストするには、
   d=1/(double)n;
とします。(double)nによって、
long型であったnはdouble型に強制的に変換されます。
ヒントとして、sqrt()の中身を書いておきましょう。
sqrt(1-((double)i*d)*((double)i*d));
1
2
3
4
5

第6話へ 第8話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ