第05週目課題

課題0501

コンソールに三角形の3辺a,b,cの長さをそれぞれ入力させ、その三角形が二等辺三角形、正三角形、それ以外の三角形のうちいずれに属するかを表示するプログラム TriangleCheck.java をパッケージ j1.lesson05 に作成しなさい。

コンソールへの入力要求は次のように表示する。

辺aの長さを入力:
辺bの長さを入力:
辺cの長さを入力:

必ず、辺a,b,cの順に入力させ、それぞれの辺の長さは整数を指定できること。今回は辺a,b,cから三角形を作れない場合は考慮しなくても良い (そのようなテストは行わない)。

結果の表示方法は次の通りとする。

入力された三角形は通常の三角形
入力された三角形は二等辺三角形
入力された三角形は正三角形

結果の例

仮に、入力に3, 5, 5を順番に指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

辺aの長さを入力:3
辺bの長さを入力:5
辺cの長さを入力:5
入力された三角形は二等辺三角形

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson05 にクラス TriangleCheck を作成 (ファイル名は TriangleCheck.javaとなる)
  2. クラス TriangleCheck 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「TriangleCheck に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. テスト項目「TriangleCheck に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson05 に TriangleCheck クラスが存在していない。パッケージやクラス名を確認
クラスがpublicで宣言されていません class の前に public の指定がない。
mainメソッドが存在しません public static void main(String[]) が存在していない。mainという名前やString[]の部分を確認
mainメソッドがpublicで宣言されていません mainメソッドを作る際に public が抜けている。
mainメソッドがstaticで宣言されていません mainメソッドを作る際に static が抜けている。
mainメソッドがvoidで宣言されていません mainメソッドを作る際に void 以外を指定している。
mainメソッドにthrows IOExceptionの指定がありません mainメソッドを作る際にthrows IOExceptionの指定を行っていない。

機能テスト

メッセージ 詳細
余計な入力を待っていると考えられます コンソール入力を取得する命令を4回以上行っていないか確認
次の入力を変換できませんでした (???) ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認
期待された結果と異なります 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す

テスト項目一覧

テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。

テスト項目名 テスト内容
test111 入力が順に1,1,1
test112 入力が順に1,1,2
test121 入力が順に1,2,1
test211 入力が順に2,1,1
test221 入力が順に2,2,1
test212 入力が順に2,1,2
test122 入力が順に1,2,2
test123 入力が順に1,2,3
test231 入力が順に2,3,1
test312 入力が順に3,1,2

課題0502

コンソールから0以上100以下の整数を繰り返し入力させ、その範囲外の値が入力された際に繰り返しを終了し、そこまでに入力された0以上100以下の値の平均値を表示するプログラム ScoreAverage.java をパッケージ j1.lesson05 に作成しなさい。

0以上100以下の整数を入力させる、コンソールへの入力要求は次のように表示する。この入力要求は入力のたびに表示させる。

値を入力してください:

0以上100以下の値以外が入力されたら繰り返しを終了し、最後に以下のように結果を表示させる。

平均は x

ただし、xの部分にはそこまでに入力された0以上100以下の値の平均値を出力すること。
ここの値は整数でも実数でもかまわない。整数の場合は小数点以下を切り捨てること。

このとき、0以上100以下の整数が一度も入力されなかった場合は以下のように出力する。

入力はありません

結果の例

入力にそれぞれ85, 100, 76, -1を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

値を入力してください:85
値を入力してください:100
値を入力してください:76
値を入力してください:-1
平均は87

入力の最初に-1を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

値を入力してください:-1
入力はありません

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson05 にクラス ScoreAverage を作成 (ファイル名は ScoreAverage.javaとなる)
  2. クラス ScoreAverage 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「ScoreAverage に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. テスト項目「ScoreAverage に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson05 に ScoreAverage クラスが存在していない。パッケージやクラス名を確認
クラスがpublicで宣言されていません class の前に public の指定がない。
mainメソッドが存在しません public static void main(String[]) が存在していない。mainという名前やString[]の部分を確認
mainメソッドがpublicで宣言されていません mainメソッドを作る際に public が抜けている。
mainメソッドがstaticで宣言されていません mainメソッドを作る際に static が抜けている。
mainメソッドがvoidで宣言されていません mainメソッドを作る際に void 以外を指定している。
mainメソッドにthrows IOExceptionの指定がありません mainメソッドを作る際にthrows IOExceptionの指定を行っていない。

機能テスト

メッセージ 詳細
余計な入力を待っていると考えられます コンソール入力を取得する命令を4回以上行っていないか確認
次の入力を変換できませんでした (???) ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認
期待された結果と異なります 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す
無限ループの可能性 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認

テスト項目一覧

テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。

テスト項目名 テスト内容
testLower 入力が順に0, -1
testUpper 入力が100, -1
testLowerOver 入力が -1
testUpperOver 入力が 101
testSenarioShort 入力が順に 1, 10, 2, -1
testSenarioLong 入力が順に 10, 21, 32, 43, 54, -1

課題0503 (optional)

コンソールに1以上9以下の整数を入力させ、入力された値の段の九九を表示するプログラム MultRow.java をパッケージ j1.lesson05 に作成しなさい。

コンソールへの入力要求は次のように表示する。

1以上9以下の整数を入力してください:

結果の出力方法は、全ての出力の値を2桁にそろえるために、出力の値が1~9の場合は01~09と表示すること。
また、一つ一つの出力の値はスペースで区切ること。

つまり、2の段が指定された場合は以下のように出力する。

02 04 06 08 10 12 14 16 18

また、コンソールに1以上9以下でない数値が入力された場合には、以下のように表示すること。

1以上9以下の整数を入力してください

結果の例

仮に、入力に3を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

1以上9以下の整数を入力してください:3
03 06 09 12 15 18 21 24 27

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson05 にクラス MultRow を作成 (ファイル名は MultRow.java となる)
  2. クラス Dichotomy 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「MultRow に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. テスト項目「MultRow に対する機能テスト」をパス

ヒント

九九なので、繰り返す回数が 9 回と暗黙のうちに指定されている。

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson05 に MultRow クラスが存在していない。パッケージやクラス名を確認
クラスがpublicで宣言されていません class の前に public の指定がない。
mainメソッドが存在しません public static void main(String[]) が存在していない。mainという名前やString[]の部分を確認
mainメソッドがpublicで宣言されていません mainメソッドを作る際に public が抜けている。
mainメソッドがstaticで宣言されていません mainメソッドを作る際に static が抜けている。
mainメソッドがvoidで宣言されていません mainメソッドを作る際に void 以外を指定している。
mainメソッドにthrows IOExceptionの指定がありません mainメソッドを作る際にthrows IOExceptionの指定を行っていない。

機能テスト

メッセージ 詳細
余計な入力を待っていると考えられます コンソール入力を取得する命令を2回以上行っていないか確認
次の入力を変換できませんでした (???) ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認
期待された結果と異なります 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す

テスト項目一覧

テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。

テスト項目名 テスト内容
testM5 入力が-5
testM1 入力が-1
test0 入力が0
test1 入力が1
test2 入力が2
test3 入力が3
test4 入力が4
test5 入力が5
test6 入力が6
test7 入力が7
test8 入力が8
test9 入力が9
test10 入力が10
test15 入力が15

課題0504 (optional)

コンソールに実数を一つ入力させ、その値の平方根の近似値を二分法を用いて計算するプログラム Dichotomy.java をパッケージ j1.lesson05 に作成しなさい。

ある関数 f(x) について、区間 [a,b] で f(x)=0 となる x がひとつだけ存在することが分かっている場合、
二分法を用いて解の近似値を求めることができる。

コンソールに入力された値を n とし、その平方根を x と置くと、次の式が求まる。


0 <= n < 1 である場合 f(x) = 0 となる x の値は、[0,1]の間に一つだけ存在し、
1 <= n である場合 f(x) = 0 となる x の値は、[0,n]の間に一つだけ存在するので、
以下のような手順でこのxの近似値を計算できる

  1. a = 0, b = n とおく (n < 1 のときは b = 1 とおく)
  2. c = (a + b) / 2 とおく
  3. 次の条件を判定
  4. b - a が十分に小さくなったら終了、そのとき 解の近似値は c
  5. 十分に小さくなるまで、現在のa,bを用いて 2 へ戻る

本課題では、b - a < 0.0001 となるまで収斂を繰り返すこと。

コンソールへの入力要求は次のように表示する。

正の値を入力:

入力された値に対してその平方根の近似を計算し、以下のように表示する。

結果は x

ただし、x の部分には絶対誤差が0.0001未満の入力された値に対する平方根を出力すること。

また、コンソールへ0未満の値が入力された場合、以下のように表示してプログラムを終了させる。

正の値を入力してください

結果の例

入力に2.25を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。
正の値を入力:2.25
結果は1.4999771118164062

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson05 にクラス Dichotomy を作成 (ファイル名は Dichotomy.java となる)
  2. クラス Dichotomy 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「Dichotomy に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. テスト項目「Dichotomy に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson05 に Dichotomy クラスが存在していない。パッケージやクラス名を確認
クラスがpublicで宣言されていません class の前に public の指定がない。
mainメソッドが存在しません public static void main(String[]) が存在していない。mainという名前やString[]の部分を確認
mainメソッドがpublicで宣言されていません mainメソッドを作る際に public が抜けている。
mainメソッドがstaticで宣言されていません mainメソッドを作る際に static が抜けている。
mainメソッドがvoidで宣言されていません mainメソッドを作る際に void 以外を指定している。
mainメソッドにthrows IOExceptionの指定がありません mainメソッドを作る際にthrows IOExceptionの指定を行っていない。

機能テスト

メッセージ 詳細
余計な入力を待っていると考えられます コンソール入力を取得する命令を2回以上行っていないか確認
次の入力を変換できませんでした (???) ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認
期待された結果と異なります 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す
無限ループの可能性 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認

テスト項目一覧

テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。

テスト項目名 テスト内容
testM5 入力が-5
testM1 入力が-1
testMini 入力が0.0000001
test1 入力が1
test2 入力が2
test3 入力が3
test10 入力が10
test255 入力が255