7/21 Java プログラミング第3回,課題出題


前回の補足,復習



今回の目標


課題問題

次の問題のうち1題だけ選んで,解答しなさい.ただし,採点に際しては,各 問題の正解者(完全に正解でなくてもある程度のレベルに達した人)のうち先着 10名は加点する.解答状況は,問題ごとにWWWで見られるようにしてある.

課題問題1

分数クラスを拡張して,四則演算すべてがおこなえるようにしなさい.0によって 除算をした際のエラー処理は不要とします.

((30/251+52)*5)/(24/31-5) を計算し,浮動小数点を使った結果と一致してい ることを確かめなさい.

ヒント

結果を既約分数(分子と分母が互いに素)にするようにプログラムを作ると加 点します.既約分数にするにはユークリッドの互除法で

課題問題2

複素数クラスを作成して,四則演算をおこなえるようにしなさい.0によって 除算をした際のエラー処理は不要とします.四則演算を含む適当な例を作成し, 実行しなさい.

ヒント

実部(real part)と虚部(imaginary part)を表す2つの浮動小数点で複素数を 表します.
i * i = -1
(a + b * i) + (c + d * i) = (a + c) + (b + d) * i
(a + b * i) * (c + d * i) = (a*c-b*d)+(a*d+b*c) * i
1 / (c + d * i) = (c / ( c*c + d*d)) - (d / ( c*c + d*d)) * i;

課題問題3

100000以下の完全数をすべて求めるプログラムを書き,実行しなさい. 完全数とは,自分以外のすべての約数(1を含む)の和が自分と等しくなる数. 良く知られた完全数として,
6 = 1+2+3
がある.

ヒント

約数リスト を参考にしますが,そこのプログラムでは1を約数から除いて いるので注意してください.

完全数に関する整数論の成果(メルセンヌ素数など)を使いたい人は証明を付 記して使っても構いませんが,数学の課題ではないので特に高い評価にはなり ません.


課題問題4

2の100乗を計算するプログラムを元に,100の階乗(100! = 100 * 99 * ... * 1)を計算して10進で表示するプログラムを作成しなさい.実行結果も示すこ と.

ヒント

2の100乗の時よりも桁数を多めに確保しておかないと溢れる可能性があります.
ktanaka at ecc.u-tokyo.ac.jp