出産前後の痔にはご注意!

今日プログラミングの授業で、下記のような課題が出されました。
課題1
1-1 FractionWithSimplify2クラスを,次のように改良した
サブクラス(クラス名はFractionWithSimplify4とする)を作成して下さい。
なお、改良にあたってはsuperを使うこと。
  ※ 補足説明:FractionWithSimplify2 を改良するには,
FractionWithSimplify2を "継承する" FractionWithSimplify4
を作成して下さい.つまり,作成する FractionWithSimplify4
クラスは,FractionWithSimplify2 の子クラスになります.
  ・改良点1:コンストラクタの改良
    FractionWithSimplify2クラスのコンストラクタをそのまま呼び出す。
  ・改良点2:outメソッドの追加
   分数の値を表示するメソッドを追加。
  ・改良点3:simplifyメソッドの改良
   約分前の値と約分後の値を表示するようにsimplifyメソッドを改良。値の表示にはoutメソッドを用いること。
  例) FractionWithSimplify4 f = new FractionWithSimplify(2,8);
を実行すると、画面に
     約分前の値=2/8
約分後の値=1/4  と表示される。
ヒント:上記改良点1~3を同時に実現したFractionWithSimplify4クラスのプログラムリスト(FractionWithSimplify4だけで良い)を書いて下さい。
・課題2
1-2 1-1で作成したFractionWithSimplify4クラスの動作が正しいことを確認するプログラムを作成し、作成したプログラムのリストを書いて下さい。
 課題3 1-2のプログラムの結果を書いて下さい。
一応、
class FractionWithSimplify4 extends FractionWithSimplify2{
FractionWithSimplify4() {
bunsi = 0;
bunbo = 1;
this.simplify();
}
FractionWithSimplify4(int n) {
bunsi = n;
bunbo = 1;
this.simplify();
}
FractionWithSimplify4(int n, int d) {
bunsi = n;
bunbo = d;
this.simplify();
}
void simplify() {
int gcd;
int abs_n, abs_d;

abs_n = StrictMath.abs(this.bunsi);
abs_d = StrictMath.abs(this.bunbo);

if (abs_d < abs_n) {
gcd = abs_n;
} else {
gcd = abs_d;
}
do {
if (gcd <= 1) return;
gcd--;
} while ((this.bunbo % gcd !=0) || (this.bunsi % gcd !=0));

this.bunbo /= gcd;
this.bunsi /= gcd;

if (this.bunbo < 0) {
this.bunbo = this.bunbo * -1;
this.bunsi = this.bunsi * -1;
}
}
Fraction add(int num) {
this.bunsi += this.bunbo * num;
this.simplify();
return this;
}
FractionWithSimplify4 add(FractionWithSimplify4 f) {
this.bunsi = this.bunsi * f.bunbo + this.bunbo * f.bunsi;
this.bunbo *= f.bunbo;
this.simplify();
return this;
}
}
課題1のFractionWithSimplify2クラスはここまではやったのですけど、よく分かりません。あと課題2がよく分からないのです。
どうか課題1~3の回答をよろしくお願いします。

A 回答 (1件)

FractionWithSimplify2クラスがどういうものか分からないので、どうしようもないです。

この回答への補足

FractionWithSimplify2クラスは、
class FractionWithSimplify2 extend FractionWithSimplify1{
FractionWithSimplify2(){
bunsi = 0;
bunbo = 1;
this.simplify();
}
FractionWithSimplify2(int n){
bunsi = n;
bunbo = 1;
this.simplify();
}
FractionWithSimplify2(int n,int d){
bunsi = n;
bunbo = d;
this.simplify();
}
void simplify(){
int gcd;
int abs_n,abs_d;

abs_n=StrictMath.abs(this.bunsi);
abs_d=StrictMath.abs(this.bunbo);

if (abs_d < abs_n){
gcd = abs_n;
}else{
gcd = abs_d;
}
do{
if(gcd <= 1)return;
gcd --;
}While((this.bunbo % gcd !=0)¦¦(this.bunsi % gcd !=0));

this.bunbo /= gcd;
this.bunsi /= gcd;
}
Fraction add(int num){
this.bunsi += this.bunbo * num;
this simplify();
return this;
}
FractionWithSimplify2 add(FractionWithSimplify2 f){
this.bunsi = this.bunsi * f.bunbo + this bunbo * f.bunsi;
this.bunbo *= f.bunbo;
this.simplify();
return this;
}
}
のことです。

補足日時:2007/11/07 14:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング