プログラミングreport#3

名前:上原和樹
番号:065709D
所属:情報工学科1年次

課題

Report#3:体積・表面積公式クラスの作成{〜12/11(Mon)}

(1)体積を求めるクラス

Volume.java
public class Volume {
    //球の体積
    double sphiaVolume(double r) {
        return ((4*Math.PI*r*r*r)/3);
    }

    //直方体の体積
    double recparaVolume(double w, double h, double l) {
        return(l*h*w);
    }

    //円錐の体積
    double coneVolume(double h, double r) {
        return((Math.PI*r*r*h)/3);
    }
}

具体的な値を入力して実行

Rep3_1.java
public class Rep3_1 {

    public static void main(String args[]) {
        double r, h, w, l;

        Volume v = new Volume();
        r = 3;
        h = 5;
        l = 4;
        w = 7;
        System.out.println("**********************************");
        System.out.println("半径"+r+"の球の体積");
        System.out.println("SV="+v.sphiaVolume(r));
        System.out.println("**********************************");
        System.out.println("幅"+w+", 長さ"+l+",  高さ"+h+"の直方体の体
        積");
        System.out.println("RPV="+v.recparaVolume(w, h, l));
        System.out.println("**********************************");
        System.out.println("半径"+r+",  高さ"+h+"の円錐の体積");
        System.out.println("CV="+v.coneVolume(h,r));
    }
}

実行結果

**********************************
半径3.0の球の体積
SV=113.09733552923255
**********************************
幅7.0, 長さ4.0,  高さ5.0の直方体の体積
RPV=140.0
**********************************
半径3.0,  高さ5.0の円錐の体積
CV=47.1238898038469

プログラムの考察

(2)表面積を求めるクラス

Surface.java
public class Surface {
    //円錐の表面積
    double coneSurface(double r, double h) {
        double A1 = Math.PI*r*r;
        double R = Math.hypot(r,h);
        double A2 = R*r*Math.PI;
        return(A1+A2);
    }
    //球の表面積
    double sphireSurface(double r) {
        return(Math.PI*r*r*4);
    }
}

具体的な値を入力して実行

Rep3_2.java
public class Rep3_2 {
    public static void main(String args[]){
        double r, h;
        r = 5;
        h = 4;
        Surface SA = new Surface();
        System.out.println("************************************");
        System.out.println("半径"+r+"高さ"+h+"の円錐の表面積");
        System.out.println("SA="+SA.coneSurface(r,h));
        System.out.println("************************************");
        System.out.println("半径"+r+"の球の表面積");
        System.out.println("SA="+SA.sphireSurface(r));
        System.out.println("************************************");
    }
}

実行結果

************************************
半径5.0高さ4.0の円錐の表面積
SA=179.11985666145375
************************************
半径5.0の球の表面積
SA=314.1592653589793
************************************

プログラムの考察

(3)階乗計算プログラム

Factrial.java
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("再帰呼び出しによる階乗計算 => ");
        System.out.println(num + "! =" + factrec(num));

    }

    /* 再帰による階乗の計算 */
    static int factrec(int number) {

        if ( number == 0 ) return(1);
        return( number*factrec(number-1) );

    }

}

実行結果

input natural number: 6
再帰呼び出しによる階乗計算 => 6! =720

再帰呼び出しの考察

再帰呼び出しで繰り返し処理を行う仕組みは次の通りである。
(例)
3!を例えると、
fact(3)=3*fact(2)
中身の解らないfact(2)をもとめるためにもう一度呼び出す。
fact(2)=2*fact(1)
同様に呼び出す。
fact(1)=1*fact(0)
ここでfact(0)が現れ、fact(0)は1を返すのでそれを前の計算に戻していく。
fact(1)=1*1 => fact(2)=2*1 => fact(3)=3*2=6
という流れでの繰り返しになるのでこの繰り返しを抜けるための条件が設定されて いなければ無限ループに陥ってしまう。

for文による階乗計算との違い

結局のところ、再帰呼び出しを使わずに記述できるのであればそれにこしたこと はないといえる。

参考文献

独習Java 第3版 ジョセフ・オニール著 トップスタジオ訳