TDD Boot Camp(TDDBC) - TDDBC仙台08/課題 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!TDDBC仙台08課題:複素数

!!虚数単位

'''虚数単位'''(きょすうたんい : imaginary unit)とは、−1 の平方根(2乗して −1 になる数)である2つの数のうちの1つの数のことである(どちらかを特定することはできない)。
そのような数を記号で '''i''' で表す。

([[Wikipedia|https://ja.wikipedia.org/wiki/%E8%99%9A%E6%95%B0%E5%8D%98%E4%BD%8D]] より抜粋)

!!複素数

a, b を実数として形式的に a + bi の形に書かれる式を一種の数と見做して '''複素数''' (ふくそすう : complex number) と呼ぶ。

複素数 a + bi に対して、a をその '''実部''' (じつぶ : real part) といい、b をその '''虚部''' (きょぶ : imaginary part) という。

([[Wikipedia|https://ja.wikipedia.org/wiki/%E8%A4%87%E7%B4%A0%E6%95%B0]] より抜粋)

!!虚数と純虚数

'''虚数'''(きょすう : imaginary number)とは、実数ではない複素数のことである。

すなわち、複素数 a + bi(a, b は実数、i は虚数単位)のうち、b ≠ 0 を満たすものである。

また、a = 0 かつ b ≠ 0 を満たすものを '''純虚数''' (じゅんきょすう : purely imaginary number) という。

([[Wikipedia|https://ja.wikipedia.org/wiki/%E8%99%9A%E6%95%B0]] より抜粋)

!!ガウス整数

'''ガウス整数'''(ガウスせいすう : Gaussian integer)とは、実部と虚部が共に整数である複素数のことである。

すなわち、a + bi(a, b は整数)の形の数のことである。ここで i は虚数単位を表す。

([[Wikipedia|https://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%E6%95%B4%E6%95%B0]] より抜粋)


!!課題1 純虚数

!!!課題1−1 純虚数の生成と文字列表記の取得

* '''虚部''' (きょぶ : imaginary part) を与えて '''純虚数''' (じゅんきょすう : purely imaginary number) を生成してください
** ただし、 虚部は「0ではない整数」とします
* 生成した純虚数から '''文字列表記''' (notation) を取得してください
** 虚部が b である純虚数の文字列表記は bi となります
** ただし、 虚部が 1 および -1 である純虚数の文字列表記は、 それぞれ i と -i となります (1i, -1i でないことに注意)

【例】
// 虚部 に 4 を与えて 純虚数 を生成
PurelyImaginaryNumber sut = new PurelyImaginaryNumber(4);
// 文字列表記は 4i
String notation = sut.getNotation(); // => 4i
// 虚部 に 0 を与えて 純虚数 は生成することができない
new PurelyImaginaryNumber(0); // => エラー

!!!課題1−2 同一性の判定

* 任意の2つの純虚数について、その同一性を判定してください
* 虚部が同一の値を持つ純虚数同士を同一であるとみなします

!!!課題1−3 共役の取得

任意の純虚数 bi に対して、その虚部の符号だけが異なる純虚数 -bi を '''共役''' (きょうやく : conjugate) と呼びます

* 任意の純虚数の共役を取得してください

!!課題2 虚数 (実部 ≠ 0)

!!!課題2−1 虚数の生成と文字列表記の取得

* '''実部''' (実部 : real part) と '''虚部''' (きょぶ : imaginary part) を与えて '''虚数''' (きょすう : imaginary number) を生成してください
** ただし、 実部および虚部は 「0ではない整数」とします
* 生成した虚数から文字列表記を取得してください
** 実部が a、 虚部が b である虚数の文字列表記は a + bi となります
** ただし、 虚部が負の数である虚数の文字列表記は  a - bi となります (b < 0) (a + (-b)i ではないことに注意)

!!!課題2−2 同一性の判定

* 任意の2つの虚数について、その同一性を判定してください
* 実部および虚部が同一の値を持つ虚数同士を同一であるとみなします

!!!課題2−3 共役の取得

任意の虚数 a + bi に対して、その虚部の符号だけが異なる純虚数 a - bi を '''共役''' (きょうやく : conjugate) と呼びます

* 任意の虚数の共役を取得してください
** ただし、任意の虚数 a + bi に対する共役は、その虚部の符号だけが異なる虚数 a - bi です

!!課題3 虚数 (実部 = 0 を許容)

!!!課題3−1 虚数の拡張と純虚数との統合

* 課題2で作成した虚数について、実部に整数0を与えることを許容するように拡張してください
** その際、実部が 0 である虚数と、純虚数について、その虚部同士が同一の値である場合、同一として扱えるように拡張してください
** (例) 実部が 0 で虚部が 4 である虚数と、虚部が 4 である純虚数は同一である
* 実部が 0 で虚部が b である虚数の文字列表現は bi となります (0 + bi ではないことに注意)

!!課題4 ガウス整数 (虚部 = 0 を許容)

虚部に 0 を許容し、ガウス整数を導入します

!!!課題4−1 ガウス整数の生成と虚数および純虚数との統合

* 実部と虚部を与えて '''ガウス整数''' (がうすせいすう : Gaussian integer) を生成してください
** ただし、実部 ≠ 0 かつ 虚部 ≠ 0 であるガウス整数は、虚数と同一に扱えるようにしてください
** ただし、実部 = 0 かつ 虚部 ≠ 0 であるガウス整数は、純虚数と同一に扱えるようにしてください
** (補足) ただし、実部 ≠ 0 かつ 虚部 = 0 であるガウス整数は、'''整数と同一に扱える必要はありません'''

!!!課題4−2 ガウス整数の文字列表記の取得

* 生成したガウス整数から文字列表記を取得してください
** ただし、実部が a で虚部が 0 であるガウス整数の文字列表記は a となります (a + 0i ではないことに注意)

!!!課題4−3 ガウス整数の共役の取得

* 任意のガウス整数の共役を取得してください
** ただし、実部が a で虚部が 0 であるガウス整数 a に対する共役は a です

!!課題5 ガウス整数同士の演算

!!!課題5−1 ガウス整数同士の加算

* 任意の2つのガウス整数について、加算結果を取得してください
** ガウス整数 (a + bi) と (c + di) の加算結果は、 (a + c) + (b + d)i となります

!!!課題5−2 ガウス整数同士の減算

* 任意の2つのガウス整数について、減算結果を取得してください
** ガウス整数 (a + bi) と (c + di) の減算結果は、 (a - c) + (b - d)i となります

!!!課題5−3 ガウス整数同士の乗算

* 任意の2つのガウス整数について、乗算結果を取得してください
** ガウス整数 (a + bi) と (c + di) の乗算結果は、 (ac - bd) + (ad + bc)i となります
** (補足) (a + bi) * (c + di) = a * (c + di) + bi * (c + di) = (ac - bd) + (ad + bc)i

!!課題6 複素数 (実部 及び 虚部 に 有理数 を許容)

!!有理数

'''有理数'''(ゆうりすう : rational number) とは、二つの整数 a, b (ただし b は 0 でない)をもちいて a/b という分数で表せる数のことをいう。
([[Wikipedia|https://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%E6%95%B4%E6%95%B0]] より抜粋)

!!!課題6−1 ガウス整数を複素数に拡張

* 課題5までに作成したガウス整数の実部と虚部に「有理数」を許容し、'''複素数''' (複素数 : complex number) を扱えるように拡張してください

!!!課題6−2 複素数同士の除算

* 任意の2つの複素数について、除算結果を取得してください
** 複素数 (a + bi) と (c + di) の除算結果は、 (ac + bd) / (c^2 + d^2) + (bc - ad)i / (c^2 + d^2) となります
** (補足) (a + bi) / (c + di) = (a + bi)(c - di) / (c + di)(c - di) = (ac + bd) / (c^2 + d^2) + (bc - ad)i / (c^2 + d^2)

!!課題7 複素数 (実部 及び 虚部 に 実数 を許容)

!!!課題7−1 複素数の実部及び虚部で実数を扱えるように拡張

* 課題6で作成した複素数の実部と虚部に実数を許容するように拡張してください

!ライセンス
[[クリエイティブ・コモンズ・ライセンス|http://i.creativecommons.org/l/by-sa/2.1/jp/88x31.png]]
この演習問題は [[クリエイティブ・コモンズ 表示 - 継承 2.1 日本 ライセンスの下に提供されています。|http://creativecommons.org/licenses/by-sa/2.1/jp/]]