学校の課題で虚数(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.
No.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)
などというものを定義する方法もあるのです。
返事が遅くなってすいません。haporunさんのHintで何とかできそうです。ありがとうございます。はじめ課題が出たとき「なんだめちゃかんたんじゃん!」とか思ってしまったのですが、いざやり始めたら結構難しかったです、、。
No.1
- 回答日時:
虚数の計算ではなくて複素数の計算ではないでしょうか?
real part と imaginary part をメンバ変数として持つ
complex というクラスを作り、<<, >>, +, -, *, ==, !=
といった演算子をオーバーロードして、いろいろな計算が
できるようなclassを作りましょう、という課題では
ないでしょうか。
たとえば i は実数部が 0 で虚数部が 1 で、これを
仮に {0, 1} と表したとき、{0, 1}ともう一つの{0, 1}
掛け算したとき、実数部が -1 で虚数部が 0 の{-1, 0}
という結果になるような計算を実装してみましょう、
ということだと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# [至急]Project Euler:#17Number letter countsコード入力出力解説 2 2022/09/24 02:46
- 英語 できるだけ直訳で英語の翻訳をお願いします。(英語→日本語) 1 2022/10/15 20:59
- C言語・C++・C# [至急]Project Euler:#21Amicable numbersコード、入力、出力、解説 1 2022/09/25 05:58
- 英語 構文把握 6 2022/04/26 17:54
- 大学受験 英作文の添削をお願いしたいです。 2 2022/08/19 20:37
- C言語・C++・C# Project Euler #6 Sum square difference 至急教えてください。 1 2022/09/17 16:16
- 英語 この英文は格調高いのでしょうか? 3 2022/06/03 18:55
- 英語 この英文は平易な反面格調高いですか? 1 2023/01/15 12:04
- 英語 A new paradigm is essential, where the peri-implan 2 2023/06/23 23:08
- 英語 Although such definitions appear adequate to descr 1 2023/06/29 15:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaでのある数の小数点乗に...
-
65536は2の何乗なのでしょうか?
-
EXCELなどで「返す」という表現
-
等高線を計算したい
-
C言語の課題で、1年の秒数を計...
-
VBでReplace
-
排他的論理和 BCC(水平パリテ...
-
関数型プログラミングとオブジ...
-
数値計算の高速化 (cos, sin, exp)
-
matlab計算での進捗状況を知りたい
-
C言語によるガンマ関数の記述
-
モジュロ
-
エクセルVBA 他の仕事を止...
-
0xf0=256?
-
バッチファイルでウインドウを...
-
VBAで・・・
-
10進数から8進数へ
-
VB6で正確なミリ秒を計測したい...
-
VBAの再計算が反映されない件に...
-
円の最小二乗法のプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
C言語の課題で、1年の秒数を計...
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
変化させるセルが変化しない
-
CとFORTRANの計算速度はどちら...
-
数値計算の高速化 (cos, sin, exp)
-
なぜオーバーフローになるので...
-
モジュラス103の計算とは何でし...
-
C# 計算処理中に実行中ウィン...
-
モジュロ
-
C言語についてです。 再帰を使...
-
60進数の四則計算
-
引き放し法による除算アルゴリ...
-
Perlで時間の計算
-
CRC8を教えてください
-
傾いた四角形内の範囲の条件式
おすすめ情報