アプリ版:「スタンプのみでお礼する」機能のリリースについて

学校の課題で虚数(Complex Number)の計算をしなければいけません。
虚数はi^2=-1, i^3=-i... ですよね? それをどういう風に表現したらいいのかまったくわからないのですが、その部分のヒントいただけないでしょうか?
一応、下のが問題です、、、、。

Write a class called complex to enable operations on complex numbers through the overloaded >> and << operators (to read in and output complex numbers).

Complex numbers are of the form: realPart + imaginaryPart*i, where i =sqrt(-1)

So overload <<, >>, +, -, *, ==, != to perform the appropriate operations.

i.e. Complex1 + Complex2 should add the real parts of both numbers and the two complex parts of both numbers.

A 回答 (2件)

Cですか? C++ですか?


C++ならクラスを定義して、+や/に虚数演算を定義できますが、Cでは虚数と虚数、虚数と実数の演算をするそれぞれの関数を作らなければなりません。

虚数という型はありません。
虚数はR^2のベクトルですから、
typedef struct _COMP{ double x, y; } COMP;
などとして、ベクトルのように扱いましょう。

あとはそのデータ型に対する関数を定義するのです。

/*z1 := z1 + z2 = (x1 + x2, y1 + y2)*/
void compadd(COMP *z1, COMP *z2){
z1->x += z2->x;
z1->y += z2->y;
}
/*z1 := z1 * z2 = (x1 * x2 - y1 * y2, x1 * y2 + x2 * y1)*/
void compsqr(COMP *z1, COMP *z2){
double s = z1->x, t = z1->y;
z1->x = s * z2->x - t * z2->y;
z1->y = s * z2->y + t * z2->x;
}
/*あと引き算とか割り算とか*/

虚数はi^2 = -1という定義のしかたもありますが、ベクトル演算として
z1 + z2 = (x1 + x2, y1 + y2)
z1 * z2 = (x1 * x2 - y1 * y2, x1 * y2 + x2 * y1)
などというものを定義する方法もあるのです。
    • good
    • 0
この回答へのお礼

返事が遅くなってすいません。haporunさんのHintで何とかできそうです。ありがとうございます。はじめ課題が出たとき「なんだめちゃかんたんじゃん!」とか思ってしまったのですが、いざやり始めたら結構難しかったです、、。

お礼日時:2002/05/13 09:35

虚数の計算ではなくて複素数の計算ではないでしょうか?


real part と imaginary part をメンバ変数として持つ
complex というクラスを作り、<<, >>, +, -, *, ==, !=
といった演算子をオーバーロードして、いろいろな計算が
できるようなclassを作りましょう、という課題では
ないでしょうか。

たとえば i は実数部が 0 で虚数部が 1 で、これを
仮に {0, 1} と表したとき、{0, 1}ともう一つの{0, 1}
掛け算したとき、実数部が -1 で虚数部が 0 の{-1, 0}
という結果になるような計算を実装してみましょう、
ということだと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!