課題

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


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

ソースプログラム

volume.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class calculate {
    int cube(int a) {
        return  a * a * a;
    }
    double column(int r, int h){
        return r * r * 3.14 * h;
    }
    double cone(int r, int h){
        return r * r * 3.14 * h / 3;
    }
}

class volume {
    public static void main(String args[]){
        int x, y, ri;
        double ent,ens;
        calculate enzan = new calculate();
        x = 5;
        y = 10;
        ri   = enzan.cube(x);
        ent  = enzan.column(x, y);
        ens  = enzan.cone(x, y);
        System.out.println("一辺の長さ " + x + "の立方体の体積は");
        System.out.println(ri);
        System.out.println("また、半径 " + x + "高さ " + y + "の円柱の体積は");
        System.out.println(ent);
        System.out.println("さらに、その円錐の体積は");
        System.out.println(ens + "\nです。");
    }
}

実行結果

% javac volume.java
% java volume
一辺の長さ 5の立方体の体積は
125
また、半径 5高さ 10の円柱の体積は
785.0
さらに、その円錐の体積は
261.6666666666667
です。

(2)2種以上の表面積を求めるクラスを作成し、同様に実行せよ。

ソースプログラム

surface.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Keisan{
     double cube(int a){
         return a * a * 6;
    }
    double ball(int r, int h){
        return 4 * 3.14 * r * r;
    }
}
class surface{
    public static void main(String args[]){
        int  x, y;
        double  ri, ba;           
        Keisan enzan = new Keisan();
        x = 5;
        y = 4;
        ri  = enzan.cube(x);
        ba  = enzan.ball(x, y);
        System.out.println("一辺の長さ " + x + "の立方体の表面積は");
        System.out.println(ri);
        System.out.println("また、半径 " + x + "高さ " + y + "の球体の表面積は");
        System.out.println(ba + "\nです。");
    }
}

実行結果

% javac surface.jaca
% java surface
一辺の長さ 5の立方体の表面積は
150.0
また、半径 5高さ 4の球体の表面積は
314.0
です。

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

ソースプログラム

factrial.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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;            //-----------------(a)
        for (int i = 1; i <= number; i++) {  //---------(b)
            factrial = i * factrial; //-----------------(c)
        }

        return(factrial);   //--------------------------(d)

    }

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

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

}

}

実行結果

% javac factrial.java
% java factrial
input natural number: 6
for文を使った階乗計算      => 6! =720
再帰呼び出しによる階乗計算 => 6! =720

考察

for文による階乗計算
(a)-factrialに1を代入 (b)-numberの数だけ繰り返す (c)-factrialにiの値を掛けた値を代入する (d)-factrialの値を返す
再帰呼び出しによる階乗計算
(e)-numberの値が0のときは1を返す。値が0でなければ(f)を行う (f)-numberとfactrec(number-1)の値を掛けて返す
再帰呼び出しの(f)について、例えばnumber=6の時、

になる。(factrec(6)は返す値)
すると、 となっていき、factrec(0)=1なので, となる。

感想

今回は3週間という今までで一番長い期間でしたが、テストも重なり、最終的にぎりぎりまで課題をしていました。

参考文献