コンピュータ基礎および演習II

演習問題(中級・上級)

解答は earth.mlab.im.dendai.ac.jp/home/submit/1I-Computer2/[初級の出題日]/[学籍番号] のディレクトリに提出しなさい。 ソースファイル (〜.java) のみを提出すること。

ファイルの送信には ftp ソフトを用いる。 Linux の gFTP を使った提出方法 (実験室のマニュアル) を参照すること。

なお、中級・上級問題は楽しめる範囲で取り組めばよい。

問題1

平面上の2つの円の距離を求めるプログラムを作成しなさい。 ファイル名は DistanceBetweenCircles.java とする。 なお、2つの円が重なっている場合は考慮しなくてよい。

平面上の任意の円を表すには、これまでと違い、中心の位置情報が必要である。 円のクラス名はこれまで同様 Circle とするが、 中心の位置と半径を属性として持つようにすること。 適切なコンストラクタも用意すること。

class Circle {

    /** 他の円との距離 */
    double calcDistance(Circle c) {
        ....
    }
}

class DistanceBetweenCircles {
    public static void main(String[] args) {
        Circle c1 = new ...
        Circle c2 = new ...

        System.out.println("2つの円の距離: " + c1.calcDistance(c2));
    }
}

なお、実数 x の平方根は Math.sqrt(x) とすると求まる (今回は使う必要がある)。

ヒント: Circle クラスの属性 (例えば radius, x, y) を得るメソッド getRadius(), getX(), getY() を用意するとよい。

備考: 点を表すクラスを使うのもよい。

問題2

X 地点と Y 地点の間は 4500m 離れている。 今、秒速 20 m で X 地点から Y 地点へ向かう A 車と、 秒速 25 m で Y 地点から X 地点へ向かう B 車が同時に出発したとする。 2 つの車について、 1 秒ごとの車の位置を表示し、 何秒後にどの地点ですれ違うかを表示するプログラムを書きなさい。 ファイル名は MeetingCars.java とする。

このプログラムは車を表すクラス Car を定義して計算するのが良い。 クラス Car は属性として、

を持ち、メソッドとして、

を持つクラスとして考えるのが一つの方法である。

X 地点から Y 地点へ向かう A 車は位置 0 から 速度 20 で走り、 Y 地点から X 地点へ向かう B 車は位置 4500 から速度 -25 で走ると考え、 2 車の位置を求めれば良い。

問題3

前回(の問題3)までのあらすじ: あなたは某RPG作成ソフトにハマり、もっと自由に機能を追加したいと思い、 自分で RPG のプログラムを作ることにした。 登場人物のクラス名は Charactor、ファイル名は RPG.java とした。

以下の条件に従い、プログラムを改良しなさい。 ファイル名は RPG2.java とする。

1. 引数のあるコンストラクタ

インスタンスを生成する際に、引数のあるコンストラクタを使用するよう改良しなさい。 インスタンス生成時に必ずセットする属性や必ず実行するメソッドはコンストラクタ内の処理とするとよい。

2. オーバロード

オーバロード(overload)により、同じ種類の動作だが条件の異なる動作を、 1つのメソッド名で定義しなさい。 もちろん、引数の型か引数の個数のどちらかは異なる必要がある。

例: move(距離) と move(距離, 速度)

参考

もし必要であれば、Math.random() により double の乱数(0.0以上1.0未満)を得ることができる。