課題:Report#3:体積・表面積公式クラスの作成{~12/11(Mon)}
Taiseki.java
01:class Keisan { 02: int rippou(int a, int b, int h) { 03: return a * b * h; 04: } 05: double entyu(int r, int h){ 06: return r * r * Math.PI * h; 07: } 08: double ensui(int r, int h){ 09: return r * r * Math.PI * h / 3; 10: } 11:} 12: 13:class Taiseki { 14: public static void main(String args[]){ 15: int x, y, z, ri; 16: double ent,ens; 17: Keisan enzan = new Keisan(); 18: x = 5; 19: y = 5; 20: z = 10; 21: ri = enzan.rippou(x, y, z); 22: ent = enzan.entyu(x, z); 23: ens = enzan.ensui(x, z); 24: System.out.println("縦の長さ" + x); 25: System.out.println("横の長さ" + y); 26: System.out.println("高さ" + z); 27: System.out.println("立方体の体積" + ri); 28: System.out.println(); 29: System.out.println("半径" + x); 30: System.out.println("高さ" + z); 31: System.out.println("円柱の体積" + ent); 32: System.out.println(); 33: System.out.println("半径" + x); 34: System.out.println("高さ" + z); 35: System.out.println("円錐の体積" + ens); 36: } 37:} |
[nw0602:~/prog2] j06002% javac Taiseki.java [nw0602:~/prog2] j06002% java Taiseki 縦の長さ5 横の長さ5 高さ10 立方体の体積250 半径5 高さ10 円柱の体積785.3981633974483 半径5 高さ10 円錐の体積261.79938779914943 |
このプログラムでは、立方体、円柱、円錐の体積を求めている。 まず始めに、[Keisan]クラスを作成し、それぞれの体積を求めるように計算式 を入力する。 この計算式にある[Math.PI]とは、数学のπを表す。(π=3.1415926535……) 立方体の体積は底面積*高さなので縦をa、横をb、高さをhと置いて計算式を立 てた。よって体積=(a*b*h)となる。 円柱の体積も同じく底面積*高さなので、底面の半径をr、高さをhと置いて計 算式を立てた。よって体積=(r*r*Math.PI*h)となる。 円錐の体積は底面積*高さ/3なので、底面の半径をr、高さをhと置いて計算式 を立てる。よって体積=(r*r*Math.PI*h/3)となる。 次に、mainであるTaisekiクラスを作成する。 ここで、円柱&円錐はπを利用するため、浮動小数点を扱うのdoubleで変数を宣言した。 他の変数はint型で領域を確保する。 また、始めに作ったKeisanクラスを利用するためにオブジェクト変数をそれぞ れ宣言する。 そして宣言した[ x, y, z ]にそれぞれ数字を代入。 その値をenzanで呼び出したKeisan内のメソッドにそれぞれ代入し、帰って来 た値をそれぞれ変数[ri][ent][ens]へ格納する。 24行から下はその結果を出力するという意味である。 |
Hyoumen.java
01:class Keisan{ 02: double ball(int r, int h){ 03: return 4 * Math.PI *r * r; 04: } 05: double entyu(int r, int h){ 06: return 2 * r * r * Math.PI + h * 2 * r * Math.PI; 07: } 08:} 09:class Hyoumen{ 10: public static void main(String args[]){ 11: int x, y; 12: double ba, en; 13: Keisan enzan = new Keisan(); 14: x = 5; 15: y = 4; 16: ba = enzan.ball(x, y); 17: en = enzan.entyu(x, y); 18: System.out.println("半径" + x); 19: System.out.println("高さ" + y); 20: System.out.println("球体の表面積" + ba); 21: System.out.println(); 22: System.out.println("半径" + x); 23: System.out.println("高さ" + y); 24: System.out.println("円柱の表面積" + en); 25: } 26:} |
[nw0602:~/prog2] j06002% javac Hyoumen.java [nw0602:~/prog2] j06002% java Hyoumen 半径5 高さ4 球体の表面積314.1592653589793 半径5 高さ4 円柱の表面積282.7433388230814 |
このプログラムは図形の表面積を計算するプログラムである。 まずKeisanクラスを作り、球と円柱の表面積を求めるよう返す式を書いた。 球の表面積=4πr^2より[ return 4*Math.PI*r*r]。 円柱の表面積=2*(底面の面積)+(円周*高さ)より [2*(r*r*Math.PI)+(2*r*Math.PI*h)]。 mainのHyoumenクラスでは、まず変数x,yをint型で宣言。 次に小数点以下を表示するためにbaとenをdouble型で宣言する。 このクラスの中でKeisanクラスを利用するためにenzanオブジェクトで呼び出 す。 宣言したx,yに値を入力し、その値をそれぞれenzanで呼び出したKeisanの各メ ソッドに入力し、返り値を[ba][en]に格納。 18行目以下は、その格納された値を出力している。 |
01:class factrial { 02: 03: public static void main(String args[]) throws Exception { 04: 05: BufferedReader in = new BufferedReader(new 06: InputStreamReader(System.in)\); 07: 08: System.out.print("input natural number: "); 09: int num = (new Integer(in.readLine())).intValue(); 10: 11: System.out.print("for文を使った階乗計算 => "); 12: System.out.println(num + "! =" + factfor(num)); 13: 14: System.out.print("再帰呼び出しによる階乗計算 => "); 15: System.out.println(num + "! =" + factrec(num)); 16: 17: } 18: /* for 文を使った階乗の計算 */ 19: static int factfor(int number) { 20: 21: int factrial = 1; 22: 23: for (int i = 1; i <= number; i++) { 24: factrial = i * factrial; 25: } 26: 27: return(factrial); 28: 29: } 30: 31: /* 再帰による階乗の計算 */ 32: static int factrec(int number) { 33: 34: if (number == 0) return(1); 35: return( number*factrec(number-1) ); 36:} 37:} |
[nw0602:~/prog2] j06002% javac factrial.java [nw0602:~/prog2] j06002% java factrial input natural number: 5 for文を使った階乗計算 => 5! =120 再帰呼び出しによる階乗計算 => 5! =120 |
階乗計算のfor文と再帰に対する考察。 for文の階乗計算は、factrialをまず1と宣言し、変数iにも1を代入する。 次にfactrialに[i * facrial]を代入する。 この処理をiが入力された文字まで1ずつ加え、繰り返し処理をする。 今回の計算だとnumberに5が代入される。 つまりfactrial(1)=1*factrial(0)=1*1から始まり、factrial(2)=2*factrial(1)=2*1、 factrial(3)=3*factrial(2)=3*2*1、factrial(4)=4*factrial(3)=4*3*2*1、 factrial(5)=5*factrial(4)=5*4*3*2*1となり、結果はfactrial=5!となる。 これとは違い、再帰による階乗計算はfactrec(number-1)の値、今回の場合だ とnumberが5なので5*factrec(4)=5*4*factrec(3)を使って計算することになる。 また、factrec(number)= number * factrec(number - 1)の公式と、 factrec(0)=1の定義より factrec(5)=5*factrec(4)=5*4*factrec(3)=5*4*3*factrec(2)= 5*4*3*2*factrec(1)=5!*factrec(0)=5! となり、結果的にはfactrec(5)=5!=120が演算結果となる。 |