☆課題☆
(1)3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。
(2)2種以上の表面積を求めるクラスを作成し、同様に実行せよ。
(3)例題を参考に、階乗計算を再帰プログラムにより作成し、for文による階乗計算との違いを考察せよ。
(1)のプログラム
- class out{
- double DICE (double l) { //さいころ
- double S;
- S = l*l;
- return (S*l);
- }
- double TOTE (double r, double h) { //円柱
- double S;
- S = r*r*Math.PI;
- return (S*h);
- }
- double SOFT (double r, double h) { //円錐
- double S;
- S = r*r*Math.PI;
- return (S*h/3);
- }
- }
-
- public class rep_3 {
- public static void main(String args[]){
- double l, r, h, DICE, TOTE, SOFT;
- out C = new out();
- l = 20;
- h = 30;
- r = 10;
- DICE = C.DICE(l);
- TOTE = C.TOTE(r, h);
- SOFT = C.SOFT(r, h);
- System.out.println("length =" + l );
- System.out.println("Volume of DICE =" + DICE);
- System.out.println("length =" + r );
- System.out.println("height =" + h );
- System.out.println("Volume of TOTEM POLE =" + TOTE);
- System.out.println("Radius =" + r );
- System.out.println("height =" + h );
- System.out.println("Volume of SOFTCREEM =" + SOFT);
- }
- }
実行結果
length =20.0
Volume of DICE =8000.0
length =10.0
height =30.0
Volume of TOTEM POLE =9424.77796076938
Radius =10.0
height =30.0
Volume of SOFTCREEM =3141.592653589793
(1)のプログラムの解説
1.〜6.まで
さいころとかいってただの立方体の体積だったりする。
一辺の長さlを3回かけただけ。
7.〜11.まで
トーテムポールなのでTOTE。やっぱりただの円柱。
まず底面積を求めようと半径かける半径かける円周率(Math.PI)。
それから高さをかけて体積のできあがり。
12.〜16.まで
ソフトクリームみたいなのでSOFT。完全にこじつけ。円錐ってなんかあるかな。
円錐の体積は円柱の3分の1だったりする。
22.
上のクラスoutを下のメインクラス内に呼び出している。
23.〜25.
実際に値を入力。
26.〜28.
クラスoutの中のDICEの値をDICEに入れている。他も同様。
29.〜36.
出力部分。値の他にその計算に使った値も書き出してある。
(2)のプログラム
- class out {
- public static double TOTE(double r, double h) { //円柱
- double S, SS;
- S = r*r*Math.PI;
- SS = 2*r*Math.PI*h;
- return(S*2+SS);
- }
- public static double SOFT(double r, double h) { //円錐
- double S, l, SS;
- S = r*r*Math.PI;
- l = Math.hypot(r, h);
- SS = l*r*Math.PI;
- return(S+SS);
- }
- }
-
- public class rep__3 {
- public static void main(String args[]) {
- double l, r, h, TOTE, SOFT;
- out C = new out();
- l = 20;
- h = 30;
- r = 10;
- TOTE = C.TOTE(r, h);
- SOFT = C.SOFT(r, h);
- System.out.println("length =" + r );
- System.out.println("height =" + h );
- System.out.println("surface =" + TOTE);
- System.out.println("radius =" + r );
- System.out.println("height =" + h );
- System.out.println("surface =" + SOFT);
- }
- }
実行結果
length =10.0
height =30.0
surface =2513.2741228718346
radius =10.0
height =30.0
surface =1307.6180919385893
(2)のプログラムの解説
2.〜7.まで
円柱の表面積を求めるプログラム。
Sは底面積。半径かける半径かける円周率(Math.PI)。
SSは側面積。直径かける円周率かける高さ。
底面は二つあるので2倍している。
8.〜14.まで
円錐の表面積を求めるプログラム。
Sは底面積。それは上のと同じように求める。
SSは側面積。求めるには母線かける半径かける円周率。
母線の求め方はMath.hypot(r,h)これでrの2乗+hの2乗の平方根がとれる=母線。
底面積と側面積を合わせたら表面積のできあがり。
17.〜32.まで
体積を求めるプログラムと同じ流れなので省略。
(3)のプログラム
- import java.io.*;
- class saiki {
-
- public static void main(String args[]) throws Exception {
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- int num = (new Integer(in.readLine())).intValue();
-
- System.out.println("for文での階乗 => ");
- System.out.println(num + "! =" + factfor(num));
- System.out.println("再帰呼び出しでの階乗 => ");
- System.out.println(num + "! =" + factrec(num));
- }
-
- static int factfor(int number) { //for文を使った階乗プログラム
- 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) );
- }
- }
実行結果
4
for文での階乗 =>
4! =24
再帰呼び出しでの階乗 =>
4! =24
(3)のプログラムの解説(どうなっているかの考察)
1.
標準入出力。java.ioに含まれるパッケージを全て使えるようにする。
8.〜11.
numに入力した文字が入る。そしてfactforの関数にnumの数字を渡す。factrecに同じようにする。
14.〜19.
iは1からはじめて入力した数字よりも小さかったら1増やすfor文。
4を入力した場合2かける3かける4になる。(階乗)
22.〜24.
number*factrec(number-1)に入力した文字がはいり、
return(4*factrec(3));
↓
return(3*factrec(2));
↓
return(2*factrec(1));
↓
return(1*factrec(0));
↓
return(1);で1になるので
1×1。
後は今までの値が順々に掛けられていき階乗計算となる。
感想
いつも始めるのが少し遅い。
今回はちょっと遅すぎて他の中間テストとかぶり、近頃はほとんど寝ていない。
まあプログラムよりもテストの影響の方が大きいが。中間テストの期間中はプログラミングの課題は無くして欲しい…o(;△;)o