Programming II Report#3
ProgramingII Report#2 <- TOP -> ProgramingII Report#4
課題内容
- 3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。
- 2種以上の面積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。
- 例題を参考に、階乗計算を再帰プログラムにより作成し、for文による階乗計算との違いを考察せよ。
~ 目次 ~
- 3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを作成
- 1-1. 入力ソース
- 1-2. 実行結果
- 3種以上の体積を求めるクラスを作成し、具体的な値を入力しプログラムを実行せよ。
- 2-1. 入力ソース
- 2-2. 実行結果
- 例題を参考に、階乗計算を再帰プログラムにより作成し、for文による階乗計算との違いを考察せよ。
- 3-1. 入力ソース
- 3-2. 実行結果
- 感想
|
//↓円錐の体積を求める↓
class Frustum{
double l = Math.PI;
double vol(double r,double h){ //円柱の体積を求めるメソッド
return(r*r*h*this.l/3);
}
}
//↓球体の体積を求める↓
class Sphere extends Frustum{ //クラスFrustumを継承
double vol(double r){ //Frustumクラスのメソッドをオーバーライド
return (r*r*r*super.l*4/3);
}
}
//↓三角柱の体積を求める↓
class Prism extends Frustum{ //クラスFustumを継承
public double vol(double r,double h,double l){ //Frustumクラスのメソッドをオーバーライド
return (r*h*l/2);
}
}
class Total extends Frustum{
public static void main(String args[]){
Sphere VS = new Sphere(); //Sphereオブジェクトを作成
Frustum VF = new Frustum(); //Frustumオブジェクトを作成
Prism VP = new Prism(); //Prismオブジェクトを作成
System.out.print("半径10\nの球体の体積");
System.out.println(" = "+VS.vol(10));
System.out.print("半径10\n高さ20\nの円錐の体積");
System.out.println(" = "+VF.vol(10,20));
System.out.print("底辺10\n縦15\n高さ20\nの三角柱の体積");
System.out.println(" = "+VP.vol(10,15,20));
}
}
|
- 2行から7行まで円錐の体積を求めるクラスを作成
- 5行の「this.l」はこのクラスで宣言した変数を使用するという意味
- 10行から15行はスーパークラスのFustumを継承して11行でメソッドをオーバーライドしている
[nw0604:~/dokusyu3/toi1] j06004% java Total
半径10
の球体の体積 = 4188.790204786391
半径10
高さ20
の円錐の体積 = 2094.3951023931954
底辺10
縦15
高さ20
の三角柱の体積 = 1500.0
|
//↓円の外周を求める↓
class Circumference{
double circumference(double r){
return(2*r*Math.PI);
}
double circumference2(double r){
return(2*r*Math.PI);
}
}
//↓円の面積を求める↓
class Surface extends Circumference{
double surface(double r){
return(r*r*Math.PI);
}
double surface2(double r){
return(r*r*Math.PI);
}
}
class Menseki extends Circumference{
double surface(double r){//球体の表面積を求めるクラス
return(4*r*r*r*Math.PI);
}
public static void main(String args[]){
Circumference a = new Circumference();
Surface b = new Surface();
Menseki c = new Menseki();
double SS = (b.surface2(20)*(a.circumference(10)/a.circumference2(20))+(b.surface(10)));
System.out.print("半径10\n母線20\nの表面積="+SS+"\n\n");
System.out.print("半径10\nの球体の表面積="+c.surface(10)+"\n");
}
}
|
[nw0604:~/dokusyu3/toi2] j06004% java Menseki
半径10
母線20
の表面積=942.4777960769379
半径10
の球体の表面積=12566.370614359172
|
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));
}
}
|
[nw0604:~/dokusyu3/toi3] j06004% java factrial
input natural number: 5
for文を使った階乗計算 => 5! =120
再帰呼び出しによる階乗計算 => 5! =120
いつも通りに課題が終わりませんでした。
時間があるとつい遊んだりだらだらしたりしてしまい行動しないことが分かりました。
気付ばもう年末ですね。