top > Programing2 Report3



課題
体積・表面積公式クラスの作成



目次
  1. 具体的な値を入力し、3種類以上の体積を求めるプログラム

  2. 具体的な値を入力し、2種類以上の表面積を求めるプログラム

  3. 再起プログラムによる階乗計算

  4. まとめ・感想
  5. 参考文献・参考サイト



  1. 具体的な値を入力し、3種類以上の体積を求めるプログラム
    • ソース
      class Volume{
          int Ensui (int r,int h) {
              int A = (int) (Math.PI * r * r * h / 3);
              return(A);
          }
          int Enchuu (int r,int h) {
              int B = (int) (Math.PI * r * r * h);
              return(B);
          }
          int Kyuu (int r,int h) {
              int C = (int) (4 * Math.PI * r * r * r / 3);
              return(C);
          }
      }
      class Rep3_1 {
          public static void main(String args[]) {
              int r = 3;
              int h = 10;
              Volume V = new Volume();
              int a = V.Ensui(r,h);
              int b = V.Enchuu(r,h);
              int c = V.Kyuu(r,h);
              System.out.println("Radius = " + r);
              System.out.println("Height = " + h);
              System.out.println("Cone = about " + a );
              System.out.println("Column = about  " + b );
              System.out.println("Ball = about " + c );
          }
      }
      

    • 表示結果
      Radius = 3
      Height = 10
      Cone = about 94
      Column = about  282
      Ball = about 113
      

    • ソースの考察
      このプログラムでは、円錐、円柱、球の体積を求めます。
      
      ln.1(〜14)
      class Volume{
      Volumeと言う独自のクラスを作った。
      まず、ln.2〜14のようにEnsui、Enchuu、Kyuuというint型を作り、
      中にはそれぞれ、公式を入れた。
      円錐の体積の公式
      πrrh / 3(底円の半径 r, 高さ h )
      πはそのままでは使えないのでMathクラスのPI(π)を呼び出し、それを使います。
      すると、Math.PI * r * r * h / 3となるが、
      π=3.1415926535……と、πをかけると浮動小数点が出てくるので
      結果を(int)で囲み、int型にします。
      最後に、int型のAに結果を入れ、
      Volume.Ensuiを呼び出す時にAの値を返すように
      return(A);と、returnを使う。
      以下、同様に円柱、球の公式を指定した。
      円柱の体積の公式は、πrrh(底円の半径 r, 高さ h )なので、
      Math.PI * r * r * h) となる。
      球の体積の公式は、4πrrr/ 3(球の半径 r )なので、
      4 * Math.PI * r * r * r / 3 となる。
      
      ln.17〜18
              int r = 3;
              int h = 10;
      int型のr、hにそれぞれ3、10を入れる。
      rは半径、hは高さを示す。
      
      ln.19〜22
              Volume V = new Volume();
              int a = V.Ensui(r,h);
              int b = V.Enchuu(r,h);
              int c = V.Kyuu(r,h);
      それぞれEnsui、Enchuu、Kyuuを
      Volumeクラスから呼び出し、int型のa、b、cに入れる。
      
      ln.23〜27
              System.out.println("Radius = " + r);
              System.out.println("Height = " + h);
              System.out.println("Cone = about " + a );
              System.out.println("Column = about  " + b );
              System.out.println("Ball = about " + c );
      半径、高さ、円錐の体積、円柱の体積、
      球の体積を出力。
      
      


  2. 具体的な値を入力し、2種類以上の表面積を求めるプログラム
    • ソース
      class Volume{
          int Ensui (int r,int h) {
              int A = (int) (Math.PI*r*r+Math.PI*r*h);
              return(A);
          }
          int Enchuu (int r,int h) {
              int B = (int) (Math.PI*r*r*2+2*Math.PI*r*h);
              return(B);
          }
          int Kyuu (int r,int h) {
              int C = (int) (4 * Math.PI * r * r);
              return(C);
          }
      }
      
      class Rep3_2 {
          public static void main(String args[]) {
              int r = 3;
              int h = 10;
              Volume V = new Volume();
              int a = V.Ensui(r,h);
              int b = V.Enchuu(r,h);
              int c = V.Kyuu(r,h);
              System.out.println("Radius = " + r);
              System.out.println("Height = " + h);
              System.out.println("Cone Surface area = about " + a );
              System.out.println("Column Surface area = about  " + b );
              System.out.println("Ball Surface area = about " + c );
          }
      }
      

    • 表示結果
      Radius = 3
      Height = 10
      Cone Surface area = about 122
      Column Surface area = about  245
      Ball Surface area = about 113
      

    • ソースの考察
      このプログラムは1のプログラムを元に、
      円錐、円柱、球の表面積を求めるプログラム。
      
      円錐の表面積の公式は、πrr +πrh (r = 底面の半径、h = 母線の長さ)なので、
      Math.PI*r*r+Math.PI*r*hとなる。
      
      円柱の表面積の公式は、2πrr +2πrh (r = 底面の半径、h = 高さ)なので、
      Math.PI * r * r * h) となる。
      
      球の表面積の公式は、4πrr(r = 半径)なので、
      4 * Math.PI * r * r となる。
      
      そのあとに、半径、高さ、円錐の表面積、円柱の表面積、球の表面積を出力。
      
      


  3. 再起プログラムによる階乗計算
    • ソース
      import java.io.*;
      
      class Rep3_3 {
          public static void main(String args[]) throws Exception {
      
              BufferedReader in = new BufferedReader(new InputStreamReader(System.in)\);
      
              System.out.print("input natural number: ");
              int num = (new Integer(in.readLine())).intValue();
      
              System.out.print("for      => ");
              System.out.println(num + "! =" +factfor(num));
      
              System.out.println("saiki   => " + num + "! =" + factrec(num));
          }
      
          static int factfor(int number) {
              int factrial = 1;
              for (int i = 1; i <= number; i++) {
                  factrial = i * factrial;
              }
              return(factrial);
          }
      
          static int factrec(int number) {
              if (number == 0) return(1);
              return(number*factrec(number - 1));
          }
      }
      

    • 表示結果
      input natural number: 5
      for      => 5! =120
      saiki   => 5! =120
      

    • ソースの考察
      for文で求めた階乗計算と再帰で求めた階乗計算を比べてみる。
      for文で求めた階乗計算
          static int factfor(int number) {
              int factrial = 1;
              for (int i = 1; i <= number; i++) {
                  factrial = i * factrial;
              }
              return(factrial);
          }
      仕組みは、簡単で、
      iがnumberになるまでiとfactrialをかける行為を繰り返す。
      一度繰り返す度にiに1を足して行く。
      例えば、number=5のとき、
      i=1で1*1=1
      i=2で1*2=2
      i=3で2*3=6
      i=4で6*4=24
      i=5で24*5=120
      結果、factrialには120が入り、factrialを返す。
      
      再帰で求めた階乗計算
          static int factrec(int number) {
              if (number == 0) return(1);
              return(number*factrec(number - 1));
          }
      for文では1から順序良くかけたが、再帰ではnumberから逆にかける。
      しかし、すぐには値が分からないので少しずつ戻り、
      number=0まで呼び出して値を入れる。
      例えば、number=5のとき、
      5*factrec(4)  factrec(4)が分からないのでfactrec(4)を呼び出す。
      4*factrec(3)  factrec(3)が分からないのでfactrec(3)を呼び出す。
      3*factrec(2)  factrec(2)が分からないのでfactrec(2)を呼び出す。
      2*factrec(1)  factrec(1)が分からないのでfactrec(1)を呼び出す。
      1*factrec(0)  factrec(0)=1なので、ようやく、解くことができる。
      factrec(0)=1
      factrec(1)=1*1=1
      factrec(2)=2*1=2
      factrec(3)=3*2=6
      factrec(4)=4*6=24
      factrec(5)=5*24=120
      よってfactrecには120が入り、factrialを返す。
      
      自分はとりあえず、for文の方が分かりやすくて好き。
      +for文の方が処理が少なさそう。
      しかし、文として書く場合は、再帰の方が短い。
      
  4. まとめ・感想
    再帰はあんまり好きじゃなかったです。
    今回は特に目新しい用語がなく、説明がいつもより短く済みました。
    3週間もあって長かったけど、ぎりぎりまでやらなかったのと
    テストが重なったので時間がかかったような気分になりました。
    


  5. 参考文献・参考サイト

    Webページ






Copyright since-2006 j06008 All rights reserved.