レポート#3

学籍番号065703E
氏名 伊佐琢磨


課題

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

目次

    
  1. 体積を求めるプログラム
  2. 考察1
  3. 表面積を求めるプログラム
  4. 考察2
  5. 階乗計算のプログラム
  6. 考察3
  7. 感想

体積を求めるプログラム

ソースコード

1class Taiseki2 {
2double tyokuhoutai (double w,double h,double l) {直方体の体積を求める
3 return(w*h*l);
4 }
5
6 double entyu (double r,double h) {円柱の体積を求める
7 return(r*r*Math.PI*h);
8 }
9
10 double en (double r) {円の体積を求める
11 return(4/3*Math.PI*r*r*r);
12 }
13}
14
15class Taiseki {
16 public static void main(String args[]){
17 double w,h,l,r,tyoku,ent,en;
18 l = 8;縦の長さを8に
19 w = 5;横の長さ5に
20 h = 10;高さを10に
21 r = 9;半径を9に
22 Taiseki2 v = new Taiseki2();
23 tyoku = v.tyokuhoutai(w,h,l);
24 ent = v.entyu(r,h);
25 en = v.en(r);
26 System.out.println("縦の長さ = " + l );
27 System.out.println("横の長さ =" + w );
28 System.out.println("高さ =" + h);
29 System.out.println("直方体の体積 =" + tyoku );
30 System.out.println("半径 =" + r );
31 System.out.println("高さ =" + h);
32 System.out.println("円柱の体積 =" + ent );
33 System.out.println("半径 =" + r);
34 System.out.println("円の体積 =" + en);
35 }
36}

実行結果

1[nw0603:~] j06003% javac Taiseki.java
2[nw0603:~] j06003% java Taiseki
3縦の長さ = 8.0
4横の長さ =5.0
5高さ =10.0
6直方体の体積 =400.0
7半径 =9.0
8高さ =10.0
9円柱の体積 =2544.690049407732
10半径 =9.0
11円の体積 =2290.221044466959

考察1

double型で直方体、円柱、円の計算過程を表示させ、その中に使う変数を宣言している。Math.PIで円周率を表すことができる。次のクラスで縦、横、高さ、半径の大きさなどを入力。Taiseki2クラスを使う為に新しいオブジェクト宣言して関連づけている。その計算結果を26から34行目で表示させている。

表面積を求めるプログラム

   

ソースコード

   
1class Menseki2 {
2 double entyu(double r,double h){円柱の表面積を求める
3 return(r*r*Math.PI+2*Math.PI*r*h);
4}
5
6 double en(double r) {円の表面積を求める
7 return(4*Math.PI*r*r);
8}
9}
10
11class Menseki {
12 public static void main(String args[]) {
13 double r,h,ent,en;
14 h = 10;高さを10に
15 r = 9;半径を9に
16 Menseki2 m = new Menseki2();
17 ent = m.entyu(r,h);
18 en = m.en(r);
19 System.out.println("高さ =" + h );
20 System.out.println("半径 =" + r );
21 System.out.println("円柱の表面積 =" + ent );
22 System.out.println("半径 =" + r );
23 System.out.println("円の表面積 =" + en );
24}
25}

実行結果

1[nw0603:~] j06003% javac Menseki.java
2[nw0603:~] j06003% java Menseki
3高さ =10.0
4半径 =9.0
5円柱の表面積 =819.9556825869361
6半径 =9.0
7円の表面積 =1017.8760197630929

考察2

このソースは表面積を求めるプログラムです。計算過程は体積をもとめるのと同じような過程で計算されています。

階乗計算のプログラム

   

ソースコード

1import java.io.*;
2class factrial {
3
4public static void main(String args[]) throws Exception {
5BufferedReader in = new BufferedReader(new InputStreamReader(System.in)\);
6
7System.out.print("input natural number: ");
8int num = (new Integer(in.readLine())).intValue();
9
10System.out.print("for文を使った階乗計算 => ");
11System.out.println(num + "! =" + factfor(num));
12
13System.out.print("再帰呼び出しによる階乗計算 => ");
14System.out.println(num + "! =" + factrec(num));
15}
16 /* for 文を使った階乗の計算 */
17 static int factfor(int number) {
18
19int factrial = 1;
20
21for (int i = 1; i <= number; i++) {
22factrial = i * factrial;
23}
24return(factrial);
25}
26/* 再帰による階乗の計算 */
27static int factrec(int number) {
28if ( number == 0) return(1);
29return( number*factrec(number-1));
30}
31}

実行結果

1[nw0603:~] j06003% java factrial
2input natural number: 4
3for文を使った階乗計算 => 4! =24
4再帰呼び出しによる階乗計算 => 4! =24

考察3

for文使った階乗計算の過程
初めfactrialという値に1を代入する。for文でiという変数を宣言しiがnumberという値より小さい場合にiに1を足してfactrialをかける。そのかけられた値をまたfactrialという変数として宣言し、これをかけていく。 例numberを4とした場合まずiが4より小さいのでiに1を足して2にする。それとfactrialの1をかけて2となる。これがfactrialになり、またif文に戻りiが4より小さいので1を足して3となりこれとさっきのfactrialの2をかけて6になる。これを4まで繰り返して24となる。
再起呼び出しによる階乗計算
factrecに数字を代入してそれをまとめて計算している。この場合4なので4*factrec(3)となる。factrec(3)は3*factrec(2)を表していて、factrec(2)は2*factrec(1)、factrec(1)は1*factrec(0)でfactrec(0)は 1となっている。最終的には4*3*2*1となり4の階乗の計算をしている。

感想

テストとかさなってたりと忙しいことがあっての課題だったので大変でした。体積や表面積を求めるのは小学生のときの簡単な計算方法だったので楽でした。あとスタイルシートの使い方でファイルを作ってそれにいろいろ宣言して同じディレクトリにいれてるとそれが反映されるのがビックリでした!!先頭で宣言しないといけないと思っていたし、やり方とかも分からなかったので一つ勉強になりました。やっぱテストとかぶるのがきついです。

参考文献

独習Javaなど