Programming II Report#3

 ProgramingII Report#2 <- TOP -> ProgramingII Report#4


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

~ 目次 ~

  1. 3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを作成
  2. 1-1. 入力ソース
  3. 1-2. 実行結果
  4. 3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。
  5. 2-1. 入力ソース
  6. 2-2. 実行結果
  7. 例題を参考に、階乗計算を再帰プログラムにより作成し、for文による階乗計算との違いを考察せよ。
  8. 3-1. 入力ソース
  9. 3-2. 実行結果
  10. 感想

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

1-1.入力ソース


//↓円錐の体積を求める↓
class Frustum{ 
        double l = Math.PI;
        double vol(double r,double h){ //円柱の体積を求めるメソッド
            return(r*r*h*this.l/3);
        }
    }

//↓球体の体積を求める↓
class Sphere extends Frustum{ //クラスFrustumを継承 
        double vol(double r){   //Frustumクラスのメソッドをオーバーライド
            return (r*r*r*super.l*4/3);
        }
    }

//↓三角柱の体積を求める↓
class Prism extends Frustum{   //クラスFustumを継承
    public double vol(double r,double h,double l){  //Frustumクラスのメソッドをオーバーライド
        return (r*h*l/2);
        }
    }
class Total extends Frustum{
      public static void main(String args[]){ 
            Sphere  VS = new Sphere();  //Sphereオブジェクトを作成
            Frustum VF = new Frustum(); //Frustumオブジェクトを作成
            Prism   VP = new Prism();   //Prismオブジェクトを作成
            System.out.print("半径10\nの球体の体積");
            System.out.println("  = "+VS.vol(10));
            System.out.print("半径10\n高さ20\nの円錐の体積");
            System.out.println("  = "+VF.vol(10,20));
            System.out.print("底辺10\n縦15\n高さ20\nの三角柱の体積");
            System.out.println("  = "+VP.vol(10,15,20));
    }
}

1-2. 実行結果
[nw0604:~/dokusyu3/toi1] j06004% java Total
半径10
の球体の体積  = 4188.790204786391
半径10
高さ20
の円錐の体積  = 2094.3951023931954
底辺10
縦15
高さ20
の三角柱の体積  = 1500.0

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

2-1.入力ソース


//↓円の外周を求める↓
class Circumference{
    double circumference(double r){
        return(2*r*Math.PI);
        }
    double circumference2(double r){
        return(2*r*Math.PI);
        }
    }
//↓円の面積を求める↓
class Surface extends Circumference{
    double surface(double r){
        return(r*r*Math.PI);
        }
    double surface2(double r){
        return(r*r*Math.PI);
    }
}

class Menseki extends Circumference{
    double surface(double r){//球体の表面積を求めるクラス
        return(4*r*r*r*Math.PI);
        }
    public static void main(String args[]){
    Circumference a = new Circumference();
    Surface b = new Surface();
    Menseki c = new Menseki();
    double SS = (b.surface2(20)*(a.circumference(10)/a.circumference2(20))+(b.surface(10)));
    System.out.print("半径10\n母線20\nの表面積="+SS+"\n\n");
    System.out.print("半径10\nの球体の表面積="+c.surface(10)+"\n");
    }
}

2-2. 実行結果
[nw0604:~/dokusyu3/toi2] j06004% java Menseki
半径10
母線20
の表面積=942.4777960769379

半径10
の球体の表面積=12566.370614359172

3. 例題を参考に、階乗計算を再帰プログラムにより作成し、for文による階乗計算との違いを考察せよ。

3-1.入力ソース


import java.io.*;

class factrial {

  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.print("再帰呼び出しによる階乗計算 => ");
    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));

  }

}

実行結果
[nw0604:~/dokusyu3/toi3] j06004% java factrial
input natural number: 5
for文を使った階乗計算      => 5! =120
再帰呼び出しによる階乗計算 => 5! =120

4. 感想
いつも通りに課題が終わりませんでした。
時間があるとつい遊んだりだらだらしたりしてしまい行動しないことが分かりました。
気付ばもう年末ですね。