2.簡単なプログラムの作成

ここでは,関数電卓で行う程度の計算のプログラムが作成できるようになることを目標とします。

更新の途中です!
 2.1) Cのプログラムの書き方
 ここでは,Cの最初のプログラムとして,ディスプレイに文字を表示するプログラムを紹介し,それを使ってCの最も基礎的な文法を説明します.
Cのプログラムで,文字を表示するには,次のように書きます.
※以後,ソース・コードと実行結果を下の図のようにそれぞれ左右に並べて表示します.

 プログラム例 2.1.1  実行結果
  #include <stdio.h>
  void main(void){
      printf("ABCDEFG\n");
      printf("abcdefg\n");
  }
  ABCDEFG
  abcdefg
  

このプログラムで、コンピュータに、文字を表示させる部分は、
    printf(“ABCDEFG\n”);
    printf(“abcdefg\n”);
の2行だろうということは、読めば、すぐに予想できるとおもいます。ここに書いたprintf()は、文字や数値を表示するために使われます。printf()の後ろには,セミコロン()がついていますが、これは、1つの文の終わりを示します。文はは処理あるいは仕事の最小単位です。上のプログラムは2つの文からなります。
 ここで、プログラムをもう一度見てください。文字を表示する部分が、printf(“…”)の2行だけだとすると、他の部分は不要ではないかと思うかも知れません。しかし、C言語には、C言語でプログラムを書くためのルールが決められています。これを、C言語の文法と呼びますが、上記2行以外の部分も絶対に必要なのです。C言語を修得すると言うことは、C言語の文法を知るということなのです。(「文法を知っている」=「プログラムが作れる」ではありません。しかし、文法を知らなければプログラムは作れません。)
 それでは、上のプログラムをとおして、まず、最初に覚えなければならないCの文法を説明しましょう。
Cのプログラムでは,実行したい内容を,void main(void){ }の{ }中に書きます。この部分は、main関数と呼ばれます。通常、C言語は、関数という単位でプログラムを構成します。一般的な関数の説明は後述しますが、Cのプログラムには、main関数と呼ばれる関数が必ず1つ存在しなければなりません。 main()関数の上方は、ヘッダー部と呼ばれ、C言語ではここに、コンパイラーへの指示を記述します。この例では、#include <stdio.h>と書いてありますが、これは、コンパイラーに、「このプログラムをコンパイルするとき,この位置に,stdio.hというファイルを組込んでから、コンパイルして下さい」ということを指示します.このファイルは,コンパイラーに付属しているもので,私たちが準備する必要はありません.printf()関数を使うときは必ず必要となります.また、文字を表示するときは、printf("")関数を使い、表示したい文字を””の間に書くというのも文法の1つです。


 2.2) printf("")関数について
 printf は print function(関数) の略だと覚えておいてください。(^_^;)
基本的な構造は,
    printf(      );
です。( )で囲まれた部分に出力したいものを持ってきます。ここで、一つ決まり事があります。文字を ” ” で囲まないといけないという点です。
では、「こんにちは!」の後に「ようこそ」と表示させてみましょう。

 プログラム例 2.2.1  実行結果
  #include <stdio.h>
  void main(void){
      printf("こんにちは!");
      printf("ようこそ");
  }
  
  こんにちは!ようこそ
  





あれ?命令を二つ使ったのに画面では同じ一行に続けて表示されましたね。これには理由があります。実は、画面の文字の出力位置をいちいちプログラマーが変えてやる必要があるのです。次の行に移ることを「改行(かいぎょう)」と言います。ワープロを使ったことがある人ならおなじみだと思います。この改行の命令は¥nです。この命令を printfのダブル・クォーツ(” ”)の中の希望する箇所に挿入します。次の例を見てください。


 プログラム例 2.2.2  実行結果
  #include <stdio.h>
  void main(void){
      printf("こんにちは!\n");
      printf("ようこそ");
  }
  
  こんにちは!
  ようこそ
  




 赤で強調したところに注目してください。¥n を挿入した次の文字で改行されています。キーボードの【Enter】キーを押すのと同じ効果が得られます.
では、少し遊んでみましょう。

 プログラム例 2.2.3  実行結果
  #include <stdio.h>
  void main(void){
      printf("こ\nんに\tちは!");
      printf("\nよ\nう\nこそ");
  }
  
  こ
  んに    ちは!
  よ
  う
  こそ
  


 結果を見れば効果のほどがわかると思います。ここで¥tという命令が出てきました。これは、タブといって、(キーボードTABキーを押すことと同じことで)文字いくつか分程のスペースを空けてくれます。これには実際には深い意味があって、画面出力時の位置揃えをしてくれる重要な命令ですの。しかし、今はそこまで意識して使う必要は無いでしょう。
これ以外も、¥の付く命令は画面上で出力位置を調整する命令として広く使われます。これをエスケープシーケンスと言います。紹介したもの以外の代表的なものを以下に紹介しておきます。


エスケープシーケンス  説 明
 \a ビープ音 (アラート)
 \bバックスペース(【BS】キーと同じ効果)  .
 \v垂直タブ
 \'シングル クォーテーション
 \"ダブル クォーテーション
 \\円記号
 \?クェスチョン マーク (文字)


 2.3) ここまでの文法のまとめ

次の図は,プログラムの枠組みです。

    #include <stdio.h>
    void main(void){
        .........................
        .........................
        ここに実行すべき内容を書く
        .........................
        .........................
    }

 図中、青色の文字の部分は今のところ変更しないものだと思っておいてください。赤色の文字の部分には,コンピュータに実行させたい事を実行順に上から順番に書いていきます。
 C言語でプログラムを書く際の重要な注意事項があります。それは、一つの命令が終われば ; (セミコロン)を忘れずに付けるということです。これは、何回同じことを言っても良く忘れるものです。

 2.4) 算術演算
 CPUにできるのは,算術演算(四則演算,さんすうのけいさん)です.三角関数、対数、積分、微分のような数学の計算をする機能はありません。このような計算をしようと思えば、すべて、算術演算に置き換えて計算させます。数値計算法という科目がありますが、このような方法を学習する科目です。
2数の和と差を求め表示するプログラムを次に示します。

 プログラム例 2.4.1  実行結果
  #include <stdio.h>
  void main(void){
      int a, b, c, d;
      a = 20;
      b = 30;
      printf(“a=%d b=%d\n”,a,b);
      c= a + b;
      d= a - b;
      printf(“和=%d 差=%d\n”, c, d);
  }
  a=20 b=30
  和=50 差=-10
  










 このプログラムも各行が何を意味するかは、読めば予想できるとおもいます。計算を実行するときは,通常,変数に数値を代入して(記憶させて)実行します.プログラム中 a=20 や b=30 は,それぞれ,変数 a, b にそれぞれ 20, 30 を代入する(記憶させる)という意味です.()のことを代入演算子と呼びます。また, c=a+b, d=a-b は,それぞれaとbの和,差を変数c,dに代入するという意味です.()や()は、算術演算子とよばれます。この=(イコール)は数学で言う「等号」ではありません!あくまで「代入」です!!ちなみに、等号の場合は「==」とイコールを2つつなげた記号で表わしますが、まだ覚えなくて結構です。イメージ的には
  A ← A × 2
といった感じでしょうか。この例で、わかりにくい部分は、
   int a, b, c, d;
の部分だとおもいます。
この行の記述は、変数宣言とよばれ、以下で使用する変数の名前と型とを宣言します。文中intは、変数a,b,c,dが整数値(Integer)を記憶する整数型変数であることを意味します。宣言の仕方ですが、いくつかのルールがあります。
   int a, b, c;
このように複数の同じ型の変数を一度に宣言できます。また、
   int a=30;
のように、変数の宣言時に値を代入することができす.これを変数の初期化といいます。
次に、ここでもprintf()関数が使われていますが、今度は、変数に代入された数値を表示するのに使われています。ただ単に、文字を表示する場合と比べ、少々面倒な記述が必要になります。変数a,bの内容を表示する
   printf(“a=%d b=%d\n”,a,b);
では、””の中に、%dが2個あります。これらは、変数a,bに対応しています。その働きは、変数の内容の表示のしかた(これを書式とよぶ)を指定し、書式指定子と呼ばれます。%dは整数値を表示することを意味します。


 2.5) 実数の算術演算
 次に,実数値の計算プログラムを紹介しましょう.
次のプログラムは,2個の実数の和を求めるプログラムです.変数宣言や書式指定子を整数の計算の場合と比較してみて下さい。
 プログラム例 2.5.1  実行結果
  #include <stdio.h>
  void main(void){
      float a, b, c, d;
      a = 2.32;
      b = 3.46;
      printf(“a=%f b=%f\n”, a, b);
      c= a + b;
      d= a - b;
      printf(“和=%f 差=%f\n”, c, d);
  }
  
  a=2.32 b=3.46
  和=5.78 差=-1.14
  










 C言語では,整数と実数(浮動小数点数,小数点付きの数値)を分けて取り扱います.実数の計算をするときは,変数をfloat型やdouble型で宣言します.
上記のプログラム中の
   float a, b, c, d;
の行がそうです.float型の変数は,有効桁数が7桁程度です.そのため,計算の精度が要求される科学技術計算のような数値計算では15桁程度の有効桁数をもつdouble型の変数を使います.
   double a, b, c, d;
 整数と実数では,その型だけでなく,書式指定子も異なります.実数の書式指定子には,他にも
   %f , %e , %g
などがあります.
たとえば,0.00602は,書式指定史を%eで指定すれば, 6.02e-3 となります.e-3は10のー3乗という意味です.
書式指定子 %g は,%f または %e のいずれか適当な形式で出力されます.
試しに,上記のプログラム例2.5.1の書式指定子を%eに書き換えてみます.両プログラムの実行結果を比較してみてください.

 プログラム例 2.5.2  実行結果
  #include <stdio.h>
  void main(void){
      double a, b, c, d;
      a = 0.232;
      b = 0.346;
      printf("a=%e b=%e\n", a, b);
      c= a * b;
      d= a / b;
      printf("積=%e 商=%e\n", c, d);
  }
  
  a=2.320000e-001 b=3.460000e-001
  積=8.027200e-002  商=6.705202e-001
  










 2.6) 型宣言子,演算子,書式指定子の一覧
 2つの算術演算のプログラムを紹介しましたが、変数名をa,b,c,dの4つ使っています。変数名は、アルファベット、数字、( _ )(アンダースコア)を組みあわせて、勝手に作ってかまいません。そこで、通常は、プログラムを読んだとき、その変数が何を記憶する変数であるかすぐわかるように工夫します。例えば、次のように変数名を作ることができます。
   wa = a + b、  kingaku = tanka * suryo、   menseki = tate * yoko
 ただし,先頭の文字はアルファベットまたは( _ )アンダースコアでなければなりません.

型宣言子   説 明
 int整数型変数を宣言する
 longint型の倍の桁を記憶する整数型変数を宣言する
 float実数型変数を宣言する
 double 桁数がfloat型の倍の実数を記憶する実数型変数を宣言する。
通常、科学技術計算をするときはfloatよりdoubleを使う方が常識的です。
 char文字を記憶する変数を宣言する
 …他にも多数あります。文法の本で調べてみて下さい.


算術演算子  説 明
  +  和を求める
  ―  差を求める
  *  積を求める
  /  商を求める
  %  剰余を求める(整数を整数で割った時の余りを求める)


代入演算子  説 明
 =  変数に値を代入する


書式指定子 
整数の場合 説 明
  %d  整数を表示する。
  %5d  整数を5桁で表示する。ただし、実際の桁数が5桁に満たないときは、5桁のうち左側は空白を表示します。(5はここで仮に決めたもの、必要に応じて値を指定すればよい)
実数の場合 説 明
  %f  実数値を表示する.
  %7.3f  実数を符号や小数点などを含めて7桁で表示し、そのうち小数部を3桁で表示する.(7.3fの7.3はここで仮にそのような値に設定しただけ、必要に応じて指定すればよい)
  %e  実数を10のn乗形式で表示する。
 %15.10e符号,小数点などを含め全桁15桁中,小数部10桁
  %g  %eか%fのいづれかの形式で表示、判断はprintf()関数にまかせる。


※注意長い数式の場合、和・差・商・積の計算順番が変わることで答えが変わることがあります。
例えば、
   X = 4 + 6 * 4 − 8 / 2 + 6;
こういう、見た目にもややこしい数式には区切り毎にカッコをつけてあげましょう。
  (例) X = (4 + ( 6 * (4 − 8)) / 2 ) + 6;
当たり前ですが、( と ) の数は等しくなるようにしないといけません。


 2.7) 変数とメモリー
 C言語でプログラムを組むときは、変数がどのようにメモリー中で、配置されるかということをイメージできる必要があります。整数の算術演算プログラムを例に、プログラムが実行される過程で、メモリーがどのように使われるかを説明します。
 先に「メモリーとアドレス」のところで説明をしたように、メモリーは、1バイト単位で区切られ(とします)、アドレスがつけられています。プログラムを主記憶に載せると、下図に示すように、一連のメモリー領域にプログラムが記憶されます。この領域をコード領域とよびます。CPUは、その先頭から順にプログラムを読み込んで解読、実行することになります。
CPUがa=20(すなわち変数aに20を代入せよ)の文を実行すると、CPUはメモリーのあいているところに、変数aという名前をつけます。そしてその領域に数値20を記憶させます。b、c、dに遭遇したときも同様な作業をします。各変数とも4つの番地を占めていますが、これは、int型変数が4バイトのサイズをもつ、言い換えれれば、整数は4バイトで表現すると決められているからです。
 コード領域に対し、変数を集めた領域をメモリーのデータ領域とよびます。
コード領域、あるいは、データ領域をメモリーのどこに作るかは基本ソフトが決めます。基本ソフトは、コンピュータを管理するプログラムなのです。


 
  番地 
省略 
  
a = 20;
b = 30;
printf(“a=%d b=%d\n”,a,b); 
c= a + b;
d= a - b;
printf(“和=%d 差=%d\n”, c, d);
変数a 2000  20
2001
2002
2003
変数b 2004  30
2005
2006
2007
変数c 2008  50
2009
2010
2011
変数d 2012 −10
2013
2014
2015
  2016  


 2.8) 変数型と変数のサイズ

 数値を記憶するスペースは、変数の型で決められています。ただし、例外もあります。
   int型変数   4バイ
   long型変数   4バイト
   float型変数  4バイト
   double型変数  8バイト


 しかし、何の為にこのようなスペースの違いが必要なのでしょうか?それは、コンピュータの物理的な構造に関係しています。変数とは数学的に言えば元々数値の入れ物です。変数にはあらゆる数値を入れることが出来ます。コンピュータに限って言えば、変数に文字だって入れることが出来る、万能の入れ物なのです。この入れ物をどのように確保するのか?コンピュータにはメモリーという、文具ではノートに相当する、書きこんだり消去したりすることが可能な部分があります。変数を利用する際は、必要なスペースをここから確保して、その変数専用のスペースにしてしまいます。普段、私達が数学で使う変数は、計算が進むに従って整数になったり小数になったり、無理数になったり複素数になったり、中にいれるものが刻々と変化します。中に何をいれるかによって必要な入れ物の大きさが変わってきます。コンピュータの持つメモリーというスペースは容量が限られています。少ない資源をたくさんの変数やプログラムで共有しなければなりません。よって、そういうメモリー使用上の無駄を省くために変数型という概念が生まれました。変数の扱える値の種類、範囲の上限をあらかじめ決めておくことで、無駄な領域を確保してしまうことを防ぐことが出来ます。何十桁もの大きな数字を扱うときはそれなりの大きなスペースが必要です。また、ある変数が一桁の数値しか扱わないとしたらほんの少しのスペースしか利用しません。これらに同じだけのスペースを与えていたのではメモリーの無駄遣いになってしまいます。この無駄を省くために変数を使う前に「この変数はどのような数値を扱い、その値の下限(最小値)・上限(最大値)はいくつであるか」ということを宣言しておく必要があるのです。この宣言を変数宣言といいます。変数を使いたい場合は必ず使用前に宣言する必要があります。 変数の型と扱える数値の範囲の一覧です。

変数の型 扱う数値の種類 扱う値の範囲
int 整数 システムに依存
unsigned int 整数 システムに依存
char 文字 -128 から 127
unsigned char 文字 0 から 255
short 整数 -32,768 から 32,767
unsigned short 整数 0 から 65,535
long 整数 -2,147,483,648 から 2,147,483,647
unsigned long 整数 0 から 4,294,967,295
float 実数(浮動小数点) 3.4E +/- 38 (有効数値7 桁)
double 実数(浮動小数点) 1.7E +/- 308 (有効数値15 桁)
long double 実数(浮動小数点) 1.2E +/- 4932 (有効数値19 桁)


unsigned とは正負のうち負の数が存在しないことを意味します。「システムに依存」とは、使用するコンピュータの種類によって範囲が変わるので一概には言えないという意味です。「有効数値」とは別の言い方だと「精度」という事になります。変数自体は何十桁も扱えるのですが、そのうち上位何桁が正確な数値であるかを(微妙には少し違いますが(笑))意味します。浮動小数点とは、コンピュータで小数点を含む数値を扱うときに用いる独特の方式で、例えば423.51 という数学的な数値は4.2351×(10の2乗)という表記法で置き換えます(物理学の分野では標準で使う方式です)。さらにコンピュータ式に表現すると
4.2351E+2
となります。この(E+2)意味は、10の(+2)乗を表わしています。つまり、0.00059は5.9E−4(10の−4乗)となります。


 2.9) 割り算のときの注意点. 定数の型にも気をつけよう!!
 怖い話を紹介しましょう!
次のプログラムのソースコードと実行結果をよく比べてみて下さい.理解できますか?

 プログラム例 2.5.1  実行結果
  #include <stdio.h>
  void main(void){
    printf("1) 10 / 3 = %d\n", 10 / 3);
    printf("2) 10 / 3 = %f\n", 10 / 3);
    printf("3) 10. / 3.= %f\n", 10. / 3.);
    printf("4) 10. / 3.= %d\n", 10. / 3.);
  }
  1) 10 / 3 = 3
  2) 10 / 3 = 0.000000
  3) 10. / 3.= 3.333333
  4) 10. / 3.= -1431655765
 



 上のプログラム,わかりましたか?
ちょっとのミスで,大変なことになりますね!結論を先に言えば,定数でも型や書式指定子を意識しなくてはいけないと言うことですね.結果をまとめて整理してみます.
 1)定数を整数として扱うなら,書式指定子は %d などの整数型の書式指定子を使う
 2)定数を実数として扱うなら小数点をつけ,書式指定史は %f などの実数型の書式指定子を使う
   注)3. 3.0 と同じ意味です.
ということになります.気をつけましょう!

 このような現象は,なにも定数同士の計算に限りません.変数同士の演算,あるいは変数と定数を含む式の計算でも同様です.
   int x,y;
   float z;
   x = 10;
   y =3;
   z = x / y;
 この場合、z = 3.0000000000・・・となってしまいます。あれ、どうして3.3333333333・・・とならないのでしょうか?
それは、x と y に原因があります。この2変数は,共に整数型です!よって、割り算の結果、小数点以下は切り捨てられ、「整数」にされてしまいます!この問題の回避法には二種類考えられます。一つは割り算が出てくるんだから最初から float や double 型で宣言する。もう一つは、途中で型を変更する。後者のことを「型キャスト」もしくは「型変換」と言います。途中で変換する場合は変換したい変数の前にカッコでくくった型名を記載します。
  (例)y = (float)a;
これで、変数 a は float 型に変換されます。これを割り算に応用すると先程の例では
  z = (float)x /y;
となります。この場合、x と y のどちらを変換してもOKです。両方変換しても大丈夫です。また、
   Z = 10 / 3; 
これは整数型とみなされます。
   Z = 10.0 / 3.0;
 これは浮動小数点型とみなされます。
このように、数値に小数点を入れるか入れないかで型が決まってしまいますので注意してください。

 プログラムで数式を書くときは,一般に,整数のどうしの計算(式)なら,
   y=3*x*x+2*x+5;
実数どうしの計算(式)なら,
   y=3.*x*x+2.*x+5.;(あるいは,y=3.0*x*x+2.0*x+5.0)
と書きます.これは,とても大切なことです.


 2.10) 数学関数
 先に、CPUには、三角関数や対数計算をする機能はないと説明しましたが、これを四則演算で計算するのは面倒です。そこで、それらをコンパイラーメーカーが作成し、ライブラリーファイルというファイルに保存、プログラムを作るとき、簡単に利用できるようにしています。これらの関数は数学関数と呼ばれます。
 プログラム例 2.5.1  実行結果
  #include <stdio.h>
  #include <math.h> 
  void main(void){
      double x, y; 
      x=3.141/4.;
      y=sin(x); 
      printf("sin(%f(rad))の値は%fです。\n",x,y);
      x=3.; 
      y=log(x); 
      printf("%fの対数は、%fです。",x,y);
      x=2.0.;
      y=sqrt(x); 
      printf("%fの平方根は%fです。",x,y);
  }
  
  sin(0.785250(rad))の値は0.707002です。
  3.000000の対数は、1.098612です。
  2.000000の平方根は1.414214です。
  














数学関数を使うときは、ヘッダー部に次のような記述が必要です。
   #include <math.h>
また,多くの数学関数の記述のしかたは、次のようになります。
   y = sin(x)
   y = log(x)
   y = sqrt(x)


すなわち、x を与え、関数の値を計算させ y で受け取ります。このとき、xを引数(ひきすう)、yで受け取る関数の計算結果を戻り値とよびます。数学関数では引数も、戻り値もdouble型の数値として定義されています。
コンパイラーのメーカーが作ってライブラリー・ファイルに納めた関数のことをライブラリー関数とよびます。実は、これまで使ってきたprintf()関数も実は、ライブラリー関数の1つなのです。ただ、この場合は、よくみると,私たちが数学でいう関数と形は似ていますが、その機能は、計算することではないので、ピンとこないと思います。



 2.11) 主な数学関数
 使用頻度の高い数学関数の例を以下に列挙します。他は、文法書で調べてみて下さい
数学関数の定義は,一般的に書くと  戻り値の型 関数名( 引数型 引数 ) となります.
例えば,平方根を求めるため double sqrt( double x ) を使うとしましょう.
プログラム中には,
   y=sqrt(x);
と書くことになりますが,戻り値の型がdouble型なので,結果を受け取る変数yはdouble型の変数で無ければなりません.もちろん,引数も定義に従ってdouble型となります.

主な数学関数 説 明
double exp(double x)自然対数の底eのx乗を求める
double sqrt(double x) xの平方根を求める.
double pow(double x, double y)xのy乗を求める.
double log(double x)xの自然対数を求める.
double log10(double x)xの常用対数を求める.
double sin(double x)三角関数sinの値を求める.角度xの単位はラジアン
double cos(double x)cosの値を求める.
double tan(double x)tanの値を求める.
int abs(int x)整数xの絶対値を求める.
double fabs(double x)浮動小数点数(実数)の絶対値を求める.
int rand(void)疑似乱数を求める.注意)includeファイルはstdlib.hです.
int srand(void)rand()の実行に先立って実行し乱数の初期値を設定する.stdlib.h



 2.12) プログラムを書くとき便利なその他の基礎的文法
 次のプログラムは,上記の数学関数を紹介するプログラムを,ちょっと変更してみたものです.記述が,増えていますが,プログラムとしての内容は,まったく同じです.

 プログラム例 2.5.1
  /*数学関数の使い方を紹介するプログラム その2*/
  #include <stdio.h>
  #include <math.h>
  #define PI  3.1415
  void main(void){
      double x, y;
      /*三角関数の例 */
      x = PI/4.; /*角度はラジアン単位*/
      y = sin(x);
      printf("sin(%f(rad))の値は%fです。\n",x,y);
      /*対数関数の例 */
      x = 3.;
      y = log(x);
      printf("%fの対数は、%fです。",x,y);
      /*平方根を求める関数 */
      x = 2.0.;
      y = sqrt(x);
      printf("%fの平方根は%fです。",x,y);
  }
  

 /*・・・・*/の部分は,注釈行とよばれ,コンパイラーが,プログラムをコンパイルするとき,この部分は,命令(コンピュータへの指示)とはみなさず,無視されます.何のためにあるかというと,プログラムを作成する人がプログラムを読みやすく(見やすく)するため,注釈(コメント)を書くのに使います.
 もう一カ所の追加行は,次の記述です.
      #define  PI  3.1415
これは,プログラム中のPI(パイと読んで下さい)という文字を3.1415と定義しますと言う意味です.このように定義された文字PIを記号定数とよびます.プログラム中にPIが現れると,コンパイラーは,それを3.1415に置き換えてからコンパイルします.普通,記号定数は,変数と見間違えないよいうに大文字だけでつづります.
defineとは英語で定義するという意味です.


 2.13) この章を終わるにあたって
この章で説明したことを理解すれば、私たちが、電卓を使ってする程度の計算は、ほとんど、プログラムを作って計算できます!
          試してみて下さい!