☆課題3☆

体積・表面積公式クラスの作成
* (1)3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。
* (2)2種以上の表面積を求めるクラスを作成し、同様に実行せよ。
* (3)例題を参考に、階乗計算を再帰プログラムにより作成し、for文による階乗計算との違いを考察せよ。



課題1 3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。


Taiseki.java
class Calculation {
    void Cal(double r) {
        System.out.println("球の体積 = " + r*r*r*Math.PI*4/3);
    }
    void Cal(double r, double h) {
        System.out.println("三角錐の体積 = " + Math.PI*r*r*h/3);
    }
    void Cal(double x, double y, double h) {
        System.out.println("四角柱の体積 = " + x*y*h);
    }
}

class Taiseki {
    public static void main(String args[]) {
        Calculation obj = new Calculation();
        obj.Cal(1);
        obj.Cal(1,2);
        obj.Cal(1,2,3);
    }
}


実行結果
球の体積 = 4.1887902047863905
三角錐の体積 = 2.0943951023931953
四角柱の体積 = 6.0




課題2 2種以上の表面積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。


Hyomen.java
class Calculation {
    void Cal(double r) {
        System.out.println("球の表面積 = " + r*r*Math.PI*4);
    }
    void Cal(double x, double y, double h) {
        System.out.println("四角柱の表面積 = " + (2*x*y+2*x*h+2*y*h));
    }
}

class Hyomen {
    public static void main(String args[]) {
        Calculation obj = new Calculation();
        obj.Cal(1);
        obj.Cal(1,2,3);
    }
}


実行結果
球の表面積 = 12.566370614359172
四角柱の表面積 = 22.0





〜体積・表面積プログラムの考察〜

    「オーバーロード」について

  • 「Taiseki.java」「Hyomen.java」の Calculationクラスには"Cal()メソッド"が複数存在している。 このように、同じ名前の複数のメソッドを、同じクラス内に定義する事を『オーバーロード』という。
  • メソッドをオーバーロードするときは、各メソッドの引数の型・個数が異なるようにする。 Taiseki.javaの場合
    void Cal(double r) 
    void Cal(double r, double h) 
    void Cal(double x, double y, double h) 
    
    と引数の型は同じであるが、個数が異なるのでオーバーロードできる。 Hyomen.javaの場合
    void Cal(double r)  
    void Cal(double x, double y, double h) 
    
    と引数の型は同じであるが、個数が異なるのでこっちもオーバーロードできる。
    • 「体積の公式」について

    • 球の体積の公式は「4/3×π×半径×半径×半径」なので『r*r*r*Math.PI*4/3』と記述する。
    • 三角錐の体積の公式は「1/3×π×半径×半径」なので『Math.PI*r*r/3』と記述する。
    • 四角柱の体積の公式は「底面積×高さ」なので『r*r*r*Math.PI*4/3』と記述する。

      「表面積の公式」について

    • 球の表面積の公式は「4×π×半径×半径」なので『r*r*Math.PI*4』と記述する。
    • 四角柱の表面積の公式は側面積の和のなので『2*x*y+2*x*h+2*y*h』と記述する。

      「obj.Cal()」について

    • obj.Cal()にいれた個数が等しいところへ飛んで値を代入している。

      具体例:「Taiseki.java」では『obj.Cal(1,2);』と2つの数値を入力すれば
              void Cal(double r, double h) {
              System.out.println("三角錐の体積 = " + Math.PI*r*r*h/3);
          }
      
      の処理を行う。rには1hには2が格納される。




      階乗プログラム Factrial.java
      import java.io.*;
      
      class Factrial{
          public static void main(String args[]) throws Exception{
              BufferedReader in = new BufferedReader(new
                                                     InputStreamReader(Syste\m.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("再帰呼び出しによる階乗計算  => " + num + "! =" + factrec(num)\);
          }
      
      
         /* for文を使った階乗計算 */
          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
      再帰呼び出しによる階乗計算 => 5! =120
      



      〜階乗プログラムの考察〜

      ・for文のによる階乗計算はfactrec,iの初期値を1とし、factrecとiとをかけ、factrecに代入している
      事が分かる。あとはiをインクリメントによる階乗計算をしている事となる。
      ・再帰呼び出しによる階乗計算(今回は5の階乗)5 * factrec(4)となる。factrec(4)が分からないので
      再びfactrecを呼び出し、factrec(4)を計算する。
      また、factrial(4) = 4 * factrec(3)となって同じように再びfactrecを呼び出す。
      これを繰り返し、0の階乗の時1を返すより、factrec(1)〜(5),の値が分かったので階乗計算を行える。


      〜感想〜

      一番シンプルなプログラムで書いてみた。
      今回はオーバロードしか使っていないが次からは継承やオーバーライドなど
      を含むプログラムを作れればいいなと思った。