(1)3種類以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。
(2)2種類以上の表面積を求めるクラスを作成し、同様に実行せよ。
(3)例題を参考に、階乗計算を再帰プログラムにより作成し、for文による階乗計算との違いを考察せよ。
i.円柱の体積と表面積
【entyu.java】
sorce 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class entyu { double taiseki(int r,int h){ return r*r*3.14*h; } double menseki(int r,int h){ double teimen; double hyou; teimen = r * r * 3.14; hyou = 2 * r * 3.14 * h; return teimen * 2 * hyou; } }
実行結果はこちら==> iv.実行結果
~・~・~・~・~・~・~・~【考察】~・~・~・~・~・~・~・~
3,4行目
体積を求めるメソッド。メインメソッドから半径、高さとなる値を受け取り、面積を求めreturnで返している。
7~13行目
表面積を求めるメソッド。
rは円の半径。hは円柱の高さ。returnで表面積を返している。
ii.円錐の体積と表面積
【ensui.class】
sorce 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class ensui { double taiseki(int r,int h){ entyu obj1 = new entyu(); return obj1.taiseki(r,h) / 3; } double menseki(int r,int h){ double a,b,c; a = r * r * h * h; b = a * 3.14; c = b * (2*r*3.14/360); return c + r*r*3.14; } }
実行結果はこちら==> iv.実行結果
~・~・~・~・~・~・~・~【考察】~・~・~・~・~・~・~・~
2~6行目
円錐の体積を求めるメソッド。円柱の面積の1/3b倍なので円柱の体積を求めるメソッドを利用している。
7~13行目
円錐の表面積を求めるメソッド。底面の円の半径r,円錐の高さhとしている。
iii.球の体積と表面積
【kyu.class】
sorce 1 2 3 4 5 6 7 8 9 10 11 class kyu{ double taiseki(int r){ double d; d = 4*r*r*r*3.14; d = d/3; return(d); } double menseki(int r){ return 4*r*r*3.14; } }
実行結果はこちら==> iv.実行結果
~・~・~・~・~・~・~・~【考察】~・~・~・~・~・~・~・~
2~7行目
球の体積を求めるメソッド。rは半径。
8~10行目
球の表面積を求めるメソッド。rは半径。
iv.実行結果
円柱、円錐、球この3つの体積と表面積を求めるクラスを
1つのファイルにまとめて,出力。
【keisan.java】
sorce 1 2 3 4 5 6 7 8 9 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 class entyu { double taiseki(int r,int h){ return r*r*3.14*h; } double menseki(int r,int h){ double teimen; double hyou; teimen = r * r * 3.14; hyou = 2 * r * 3.14 * h; return teimen * 2 * hyou; } } class ensui { double taiseki(int r,int h){ entyu obj1 = new entyu(); return obj1.taiseki(r,h) / 3; } double menseki(int r,int h){ double a,b,c; a = r * r * h * h; b = a * 3.14; c = b * (2*r*3.14/360); return c + r*r*3.14; } } class kyu{ double taiseki(int r){ double d; d = 4*r*r*r*3.14; d = d/3; return(d); } double menseki(int r){ return 4*r*r*3.14; } } class keisan{ public static void main(String args[]){ int r=3,h=5; double entyu_tai; double entyu_men; double ensui_tai; double ensui_men; double kyu_tai; double kyu_men; entyu obj1 = new entyu(); ensui obj2 = new ensui(); kyu obj3 = new kyu(); entyu_tai = obj1.taiseki(r,h); entyu_men = obj1.menseki(r,h); ensui_tai = obj2.taiseki(r,h); ensui_men = obj2.menseki(r,h); kyu_tai = obj3.taiseki(r); kyu_men = obj3.menseki(r); System.out.println("entyu_tai:" + entyu_tai); System.out.println("entyu_men:" + entyu_men); System.out.println("ensui_tai:" + ensui_tai); System.out.println("ensui_men:" + ensui_men); System.out.println("kyu_tai:" + kyu_tai); System.out.println("kyu_men:" + kyu_men); } }
実行結果 1 2 3 4 5 6 entyu_tai:141.3 entyu_men:5324.184 ensui_tai:47.1 ensui_men:65.2335 kyu_tai:113.04 kyu_men:113.04
~・~・~・~・~・~・~【考察】~・~・~・~・~・~・~
1~14行目
円柱の体積と表面積を求めるクラス。
15~28行目
円錐の体積と表面積を求めるクラス。
29~39行目
球の体積と表面積を求めるクラス
43~48行目
変数を宣言。
entyu==円柱
ensui==円錐
kyu==球
tai==体積
men==表面積
を表している。
50~52行目
double型で上の3つのクラスにあるメソッドのオブジェクトを作成。
v.階乗計算
【saiki.java】
sorce 1 2 3 4 5 6 7 8 9 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 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)); }
~・~・~・~・~・~・~【考察】~・~・~・~・~・~・~
7~10行目
コンソールからの入力を読み取る。
21~27行目
for文による階乗計算。コンソールから受け取った値だけfor文をまわし、
まわした回数をfactrialにかけることによって階乗計算を行っている。33=38行目
再帰プログラムによる階乗計算。
returnで、「受け取った値×factrec(number-1)」となっており、戻り値に自身のメソッドが含まれている。なのでnumberを1減らして、またfactrecを呼び出す。これを繰り返して階乗計算を行っている。vi.感想
今回の課題は・・・難しいというよりめんどくさい。って感じで、後回しにしてたら時間に追われて大変忙しくなりました。
体積、表面積を求めるのも難なくでき、再帰プログラムもできたんですがね・・・
あと、ソースコードのコンパイル時にひらがなの「る」「を」があるとエラーがでるのであえて抜いてあります。現在原因調査中です。