Report#3

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

課題

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

(1)の解答プログラム


00: class keisan {  
01:     double pai = 3.14;  
02:     int shikakusui(int x, int y,int z){   
03:         return x * y * z / 3;
04:     }
05:     int sankakuchu(int x, int y, int z){
06:         return x * y / 2 * z;
07:     }
08:     double enchu(int x, int y){
09:         return x * x * pai * y;
10:     }
11: }
12: class taiseki3 {
13:     public static void main(String args[]) {
14:         int a,b,c,shi,san;
15:         double en;
16:         keisan enzan = new keisan();
17:         a = 2;
18:         b = 6;
19:         c = 4;
20:         shi = enzan.shikakusui(a, b, c);
21:         san = enzan.sankakuchu(b, c, a);
22:         en  = enzan.enchu(c, a);
23:         System.out.println("");
24:         System.out.println("四角スイの体積");
25:         System.out.println("縦の長さ   "+a);
26:         System.out.println("横の長さ   "+b);
27:         System.out.println("高さ     "+c);
28:         System.out.println("体積     "+shi);
29:         System.out.println("");
30:         System.out.println("三角チュウの体積");
31:         System.out.println("テイ面の三角形のテイ辺の長さ   "+b);
32:         System.out.println("テイ面の三角形の高さ       "+c);
33:         System.out.println("三角チュウの高さ         "+a);
34:         System.out.println("体積               "+san);
35:         System.out.println("");
36:         System.out.println("円チュウの体積");
37:         System.out.println("円の半径    "+c);
38:         System.out.println("円チュウの高さ "+a);
39:         System.out.println("体積      "+en);
40:         System.out.println("");
41:     }
42: }

実行結果


[nw0650:~/prog2/rep3] j06050% java taiseki3

四角スイの体積
縦の長さ   2
横の長さ   6
高さ     4
体積     16

三角チュウの体積
テイ面の三角形のテイ辺の長さ   6
テイ面の三角形の高さ       4
三角チュウの高さ         2
体積               24

円チュウの体積
円の半径    4
円チュウの高さ 2
体積      100.48

(1)のプログラム考察


00: keisanクラス開始。
01: double型でpaiに3.14をセット。
02: shikakusuiのメソッド(実際の計算=四角錐の体積の公式)開始。 
03: shikakusuiを計算、結果を返す。
04: shikakusuiのメソッド終了。
05: sankakuchuのメソッド(実際の計算=三角柱の体積の公式)開始。
06: sankakuchuを計算、結果を返す。
07: sankakuchuのメソッド終了。
08: enchuのメソッド(実際の計算=円柱の体積の公式)開始。
09: enchuを計算、結果を返す。
10: enchuのメソッド終了。
11: keisanクラスの終了。
12: taiseki3のクラス開始。
13: メソッド開始。
14: int型でa,b,c,shi,sanの領域確保。
15: double型でenの領域確保。
16: クラスkeisan内のメソッドを利用するため、
    クラスkeisanのオブジェクト変数enzanを作成。
17: aに2をセット。
18: bに6をセット。
19: cに4をセット。
20: enzanオブジェクト。shikakusuiメソッド使用。
  ( )内の指示から、x = a, y = b, z = c で計算。
21: enzanオブジェクト。sankakuchuメソッド使用。
  ( )内の指示から、x = b, y = c, z = a で計算。
22: enzanオブジェクト。enchuメソッド使用。
  ( )内の指示から、x = c, y = a で計算。
23: 空白を出力(=改行)。
24: 「四角錐の体積」を出力(漢字の錐は出力できずカタカナ)。
25: 「縦の長さ」を出力(aにセットしてある値)。
26: 「横の長さ」を出力(bにセットしてある値)。
27: 「高さ」を出力(cにセットしてある値)。
28: 「体積」を出力(shiでやった計算結果)。
29: 空白を出力(=改行)。
30: 「三角チュウ」を出力(漢字の柱は出力できずカタカナ)。
31: 「テイ面の三角形のテイ辺の長さ」を出力(bにセットしてある値)。
  (漢字の底は出力出来ずカタカナ)。
32: 「テイ面の三角形の高さ」を出力(cにセットしてある値)。
33: 「三角チュウの高さ」を出力(aにセットしてある値)。
34: 「体積」を出力(sanでやった計算結果)。
35: 空白を出力(=改行)。
36: 「円チュウの体積」を出力。
37: 「円の半径」を出力(cにセットした値)。
38: 「円チュウの高さ」を出力(aにセットした値)。
39: 「体積」を出力(enでやった計算結果)。
40: 空白を出力(=改行)。
41: メソッド終了。
42: taiseki3のクラス終了。


課題

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

(2)の解答プログラム


00: class keisan{
01:     double pai = 3.14;
02:     int rippoutai(int x){
03:         return x*x*4;
04:     }
05:     double enhyo(int x){
06:         return 4 * pai * x * x;
07:     }
08: }
09: class hyomenseki2 {
10:     public static void main(String args[]) {
11:         int a,b,rip;
12:         double en;
13:         keisan enzan = new keisan();
14:         a = 3;
15:         b = 5;
16:         rip = enzan.rippoutai(a);
17:         en = enzan.enhyo(b);
18:         System.out.println("");
19:         System.out.println("立ポウ体の表面積");
20:         System.out.println("1辺の長さ "+a);
21:         System.out.println("表面積   "+rip);
22:         System.out.println("");
23:         System.out.println("円の表面積");
24:         System.out.println("円の半径 "+b);
25:         System.out.println("表面積  "+en);
26:         System.out.println("");
27:     }
28: }

実行結果

 

[fukuchihirokazu-no-ibook-g4:~/prog2/rep3] j06050% java hyomenseki2

立ポウ体の表面積
1辺の長さ 3
表面積   36

円の表面積
円の半径 5
表面積  314.0

(2)のプログラム考察

                                                          

00: keisanクラスの開始。
01: double形でpaiに3.14をセット。
02: rippoutaiメソッド(実際の計算=立方体の表面式の公式)を開始。
03: rippoutaiを計算し、結果を返す。
04: rippoutaiメソッド終了。
05: enhyoメソッド(実際の計算=円の表面積の公式)を開始。
06: enhyoを計算し、結果を返す。
07: enhyoメソッド終了。
08: keisanクラスの終了。
09: hyomenseki2のクラス開始。
10: メソッド開始。
11: int型でa,b,ripの領域確保。
12: double型でenの領域確保。
13: クラスkeisan内のメソッドを利用するため、
    クラスkeisanのオブジェクト変数enzanを作成。
14: aに3をセット。
15: bに5をセット。
16: enzanオブジェクト。ripputaiメソッド使用。
  ( )内の指示から、x = a で計算。
17: enzanオブジェクト。enhyoメソッド使用。
  ( )内の指示から、x = b で計算。
18: 空白を出力(=改行)。
19: 「立ポウ体」を出力(漢字の方は出力出来ずカタカナ)。
20: 「1辺の長さ」を出力(aにセットした値)。
21: 「表面積」を出力(ripでやった計算結果)。
22: 空白を出力(=改行)。
23: 「円の表面積」を出力。
24: 「円の半径」を出力(bにセットした値)。
25: 「表面積」を出力(enでやった計算結果)。
26: 空白を出力(=改行)。
27: メソッド終了。
28: hyomenseki2のクラス終了。


課題

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

(3)の解答プログラム

 

00: import java.io.*;

01: class factrial {
02:   public static void main(String args[]) throws Exception {
03:     BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
04:     System.out.print("input natural number: ");
05:     int num = (new Integer(in.readLine())).intValue();
06:     System.out.print("for文を使った階乗計算      => ");
07:     System.out.println(num + "! =" + factfor(num));
08:     System.out.print("再帰呼び出しによる階乗計算 => ");
09:     System.out.println(num + "! =" + factrec(num));
10:   }

      /* for 文を使った階乗の計算 */
11:   static int factfor(int number) {
12:    int factrial = 1;
13:     for (int i = 1; i <= number; i++) {
14:      factrial = i * factrial;
15:     }
16:     return(factrial);
17:   }

      /* 再帰による階乗の計算 */
18:   static int factrec(int number) {
19:     if (number == 0) return(1);
20:     return(number * factrec(numebr-1));
21:   }
22: }

実行結果


[fukuchihirokazu-no-ibook-g4:~/prog2/rep3] j06050% java factrial
input natural number: 4
for文を使った階乗計算    => 4! =24
再帰呼び出しによる階乗計算 => 4! =24

(3)のプログラム考察

 

00: java.io.*をインポート。
01: factrialのクラス開始。
02: メソッド開始。
03: 数値の入力を受け付けるための領域確保。
04: 「input natural number:」を出力。
05: 数値の入力、受付。
06: 「for文を使った階乗計算      => 」を出力。
07: 「入力した数値」「!」「=」「factfor()の計算結果」の順に出力。
08: 「再帰呼び出しによる階乗計算 => 」を出力。
09: 「入力した数値」「!」「=」「factrec()の計算結果」の順に出力。
10: メソッド終了。
11: factforのメソッド(for 文を使った階乗の計算)を開始。
12: int型でfactrialに1をセット。
13: for文開始。初期値i = 1 として、i が number を上回るまで + i 。
14: factrial × i を計算。
  今回の場合は1 x 1 x 2 x 3 x 4 となる。
15: for文終了。
16: 計算結果を返す。
17: factforのメソッドを終了。
18: factrecのメソッド(再帰による階乗の計算)を開始。
19: if文。もし入力された値が0なら、計算結果は1を返す。
20: 入力されたのが0以外の場合、
  (入力数値)x ( 入力数値 - 1) x ((入力数値 -1)-1) x ・・を繰り返す。
  今回の場合は 4 x 3 x 2 x 1 となる。
21: factrecのメソッド終了。
22: factrialクラスの終了。


反省・感想


戻る。