Skip to content

Instantly share code, notes, and snippets.

@twada
Last active June 14, 2023 08:50
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save twada/3a6b068942810b89679f to your computer and use it in GitHub Desktop.
Save twada/3a6b068942810b89679f to your computer and use it in GitHub Desktop.

課題1 整数の閉区間

区間 (Range) とは

区間とは ,数直線上のある区切りの間の数(実数)の集合のことである。区切りの数を含むか含まないかで区間の呼び方が異なり,開区間,閉区間,半開区間がある(KIT数学ナビゲーションより)。

(難しく聞こえますが、小学校の時に習った数直線のことです)

閉区間 (Closed Range) とは

区切りを含む(例えば aとbの両端を含む)場合を閉区間という。

例: 閉区間 [3,8] の場合

[3,8]
-> 下端点 (lower endpoint) が 3 , 上端点 (upper endpoint) が 8 である整数閉区間
-> 3 と 8 は区間に含まれる
-> つまり (整数閉区間だから) 3,4,5,6,7,8

閉区間 KIT数学ナビゲーションより

課題1-1 上端点、下端点

  • 下端点と上端点を与えて閉区間を生成し、閉区間から下端点と上端点を取得してみましょう
  • (「生成する」だけをテストしようとすると難しくなります。こだわりすぎないことがポイントです)
  • 下記の例はあくまで「Java っぽい言語による実装の一例」なので、使っている言語の文化に合わせて読み替えてみてください(Ruby なら、 JavaScript ならどう書くでしょうか)。

【例】

// 閉区間 [3,8] を生成
ClosedRange range = new ClosedRange(3, 8);
// [3,8] の下端点は 3
int lowerEndpoint = range.getLowerEndpoint(); // => 3
// [3,8] の上端点は 8
int upperEndpoint = range.getUpperEndpoint(); // => 8

課題1-2 文字列表現 "[a,b]"

  • 閉区間から文字列表現を取得してみましょう
  • 使っているプログラミング言語の文字列表現化メソッドについて(あるならば)調べてみましょう

【例】

// 閉区間 [3,8] の文字列表記は "[3,8]"
String notation = range.toString(); // => "[3,8]"

課題1-3 例外条件

  • 上端点より下端点が大きい閉区間を作ることはできないので、例外が発生するようにしましょう
  • 使っているテスティングフレームワークで例外をテストする方法を調べてみましょう
  • 他の例外条件があるかどうか、少し考えてみましょう(例外は、プログラミング言語によって違いが出てくる領域です)

【例】

// 上端点より下端点が大きいので [12,5] は生成できない
ClosedRange range = new ClosedRange(12, 5); // => 例外が発生する

課題1-4 帰属

  • 閉区間が指定した整数を含むか (contains) 判定してみましょう
  • テストデータについて考えましょう。例えば閉区間 "[3,8]" のとき、テストすべき数値はいくつあるでしょうか?

【例】

// [3,8] は 5 を含む
range.contains(5); // => true
// [3,8] は -1 を含まない
range.contains(-1); // => false

課題1-5 等価性

  • 閉区間が別の閉区間と等しいか (equals) 判定してみましょう
  • 使っているプログラミング言語の等価性比較メソッドについて調べてみましょう

【例】

// [3,8] は [3,8] と等しい(インスタンスは別だが、等価とみなされる)
range.equals(new ClosedRange(3, 8)); // => true
// [3,8] は [1,6] と等しくない
range.equals(c1to6); // => false

課題1-6 包含

  • 閉区間が別の閉区間を完全に含むか(contains)判定してみましょう

【例】

// [4,6] は [3,8] に含まれる
range.contains(new ClosedRange(4, 6)); // => true
// [1,10] は [3,8] に含まれない
range.contains(c1to10); // => false

クリエイティブ・コモンズ 表示 - 継承 2.1 日本 この演習問題は クリエイティブ・コモンズ 表示 - 継承 2.1 日本 ライセンスの下に提供されています。

短縮URL: http://bit.ly/1neYgRr

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment