以下の仕様を満たすプログラムを作成せよ。また、テストケースを考えよ。
Review01
コンソールより重量を入力させ、その重量にあった郵便料金を表示するプログラム。
外部の仕様
ユーザが入力した重量にあった郵便料金を表示する。
主な処理の流れ
"重量を整数で入力してください[g]:" とコンソールに出力する。 ユーザによる入力を受け取る。(注1)(注2) "料金はxx円です。" とコンソールに出力する。
- 注1: 0以下の入力に対しては"正の整数を入力してください。"とコンソールに出力して終了する。
- 注2: 4kg以上は"4kg以上は取り扱いできません。"とコンソールに出力して終了する。
料金
- 50g未満 120円
- 100g未満 140円
- 150g未満 200円
- 250g未満 240円
- 500g未満 390円
- 1kg未満 580円
- 2kg未満 850円
- 4kg未満 1,150円
- 4kg以上は取り扱いできない
内部の仕様
料金の計算はif-else文の連鎖を利用する。
Review02
3乗の和を計算するプログラム。
外部の仕様
ユーザが入力した自然数nに対して1からnまでの3乗の和を出力する。
主な処理の流れ
"自然数nを入力してください:" とコンソールに出力する。 ユーザによるnの入力を受け取る。(注1) 1からnまでの3乗の和をコンソールに出力する。
- 注1: 0以下の入力に対しては"正の整数を入力してください。"とコンソールに出力して終了する。
内部の仕様
和の計算にはforループを使う。
テストのためには次の3乗和の公式が助けになる
(n(n+1)/2)^2
Review03
複利計算を行うプログラム。
外部の仕様
元金を何倍にしたいかという希望の数値と利率をユーザが指定すると、1年ごとの複利計算を行い、必要な年数を出力する。
主な処理の流れ
"元金を何倍にしたいですか?> " とコンソールに出力する。 ユーザによる希望の数値の入力を受け取る。(注1) "利率は[%]> " とコンソールに出力する。 ユーザによる利率の入力を受け取る。(注2) "xx年かかります。" と出力する。
- 注1: 1.0以下だったら"1.0より大きい数を入力してください。"と出力して終了する。
- 注2: 0以下だったら"正の数を入力してください。"と出力して終了する。
Review04
単位の換算を行うプログラム。
外部の仕様
原油を米ガロンと英ガロンでそれぞれ指定して、合計体積をリットルで表示する。
主な処理の流れ
"買い付ける原油(単位は米ガロン): " とコンソールに出力する。 ユーザによる入力を受け取る。(注1) "買い付ける原油(単位は英ガロン): " とコンソールに出力する。 ユーザによる入力を受け取る。(注2) "合計体積はxxxリットルです。" と出力する。
- 注1,2: 0以下の入力に対しては"正の数を入力してください。"とコンソールに出力して終了する。
度量衡
米ガロンと英ガロンはそれぞれ違う単位であり、次の式でリットルに換算できる。
- 1米ガロン = 3.8リットル
- 1英ガロン = 4.5リットル
内部の仕様
- usGallonToLiter
- ukGallonToLiter
というメソッドを作成し、mainメソッドから呼び出して利用する。
- usGallonToLiterメソッドは米ガロンを引数として受け取り、リットルに換算した値を返す。
- ukGallonToLiterメソッドは英ガロンを引数として受け取り、リットルに換算した値を返す。
Review05
mのn乗の計算を行うプログラム。
外部の仕様
mとnをユーザに入力させ、mのn乗を出力する。
主な処理の流れ
"mを入力> " とコンソールに出力する。 ユーザによる入力を受け取る。(注1) "nを入力> " とコンソールに出力する。 ユーザによる入力を受け取る。(注2) "mのn乗はxxx"
- 注1,2: 0以下の入力に対しては"正の数を入力してください。"とコンソールに出力して終了する。
内部の仕様
powerというメソッドを作成し、mainメソッドから呼び出して利用する。
powerメソッドは2つの引数x,yを受け取りxのy乗を返す。xは実数、yは非負の整数とする。
powerメソッドは
- y=0のときは1を返す。
- yが奇数、つまりy=2n+1と表されるときは再帰呼び出しpower(x,n)の戻り値zを利用しx*z*zを返す。
- yが偶数、つまりy=2nと表されるときは再帰呼び出しpower(x,n)の戻り値zを利用しz*zを返す。
Review05a
Review05 の仕様を以下のように変更する。
外部および内部の仕様
powerメソッドの呼び出し回数を数えるためのクラスフィールドcountを使い、
"powerメソッドの呼び出し回数は" count
という出力を追加する。これに伴いpowerメソッドにはクラスフィールドcountの値を1増やす命令を追加する。
Review06
データ検索を行うプログラム。
外部および内部の仕様
- mainメソッドは、int配列型変数sampleを宣言し、 {1,2,3,5,6,3,2,0}に初期化する。
- mainメソッドは、ユーザの整数値の入力inputを受け取る。
- mainメソッドは、配列sampleと入力されたinputをm1メソッドに渡す。
- m1メソッドは、渡されたint型配列に対して末尾から、整数値を検索し、一致するものがあったときは、そのインデックスを返し、一致するものがなければ、-1を返すものとする。
- mainメソッドは、m1の戻り値をみて、以下のいずれかを適切に出力する。
- "index= xxx" または "not found"
Review11 (optional)
Review01 の内部の仕様だけを以下のように変更する。
内部の仕様
- 料金の変わり目の重量を順にint配列weightに格納しておく。
- 対応する料金をint配列rateに格納しておく。
- 入力された重量がweight[k-1]以上weight[k]未満のときrate[k]を出力するものとする。(k>0)
料金表が大きい場合、つまり配列の長さが大きくなる場合はif-elseの連鎖で書くのは大変である。以下の擬似コードを参考にしてもよい。入力された重量をforループで配列weightの各要素と順に比較していくのがひとつの方法だ。
配列weightのインデックスiについて0から最後まで繰り返す { if ( 重量 < weight[i] ){ ループを終了 } }
Review12 (optional)
Review02 を以下のように変更する。
外部の仕様
Review02 の処理を対話ループの中で行うように変更する。具体的には以下の擬似コードのようにする。
while(true){ "自然数nを入力してください:" とコンソールに出力する。 ユーザによるnの入力を受け取る。 nが0以下なら、ループを抜ける 1からnまでの3乗の和をコンソールに出力する。 }
Review13 (optional)
Review03 を以下のように改良する。
外部の仕様
Review03 の処理を対話ループの中で行うように変更する。具体的には以下の擬似コードのようにする。
while(true){ "元金を何倍にしたいですか?> " とコンソールに出力する。 ユーザによる希望の数値の入力を受け取る。 入力された値が1以下なら終了する。 "利率は[%]> " とコンソールに出力する。 ユーザによる利率の入力を受け取る。 "xx年かかります。" と出力する。 }