0
複素数に使用するクラス魔法に問題があります。 2つの複素数を乗算したいと思い、2つの値(re、im)を返したいとします。私はオーバーロード演算子を使用しますが、2つの値を返す方法はわかりません。私はこの式(a1 + b1i) ∗ (a2 + b2i) = (a1a2 − b1b2 + (a1b2 +a2b1)i)
を使いたいと思っています。私はリターンが欲しい。複素数乗算を使用して2つの値を返すC++クラス
これは私のコードです:
class Complex{
private:
double realteil;
double imaginearteil;
public:
Complex(){
imaginearteil=0;
realteil=0;
}
Complex(double real): realteil(real){
imaginearteil = 0;
}
Complex(double real, double imaginear){
this -> realteil = real;
this -> imaginearteil = imaginear;
}
double abs() const{
double result = this -> realteil * this -> realteil + this -> imaginearteil * this -> imaginearteil;
result = pow(result,0.5);
return result;
}
Complex konjugiert() const{
Complex result;
result.realteil = this -> realteil;
result.imaginearteil = this -> imaginearteil - 2*imaginearteil;
return result;
}
Complex operator + (const Complex &c){
Complex result;
result.realteil = this -> realteil + c.realteil;
result.imaginearteil = this -> imaginearteil + c.imaginearteil;
return result;
}
Complex operator - (const Complex &c){
Complex result;
result.realteil = this -> realteil - c.realteil;
result.imaginearteil = this -> imaginearteil - c.imaginearteil;
return result;
}
Complex operator * (const Complex &b){
return ((this -> realteil * b.realteil) - (this -> imaginearteil * b.imaginearteil))
- ((this -> realteil * b.imaginearteil) + (b.realteil * this -> imaginearteil));
}
Complex operator/(const Complex &b){ }
ostream& printPolar(ostream&) const{
double temp = realteil*realteil + imaginearteil*imaginearteil;
double r = pow(temp,0.5);
double Q;
if(r == 0){
Q=0;
}
if(imaginearteil >=0) {
Q = acos(realteil/r);
}
if(imaginearteil < 0){
Q = -acos(realteil/r);
}
}
friend ostream& operator << (ostream& output, const Complex& a);
};
ostream& operator << (ostream& output, const Complex& a){
if(a.imaginearteil == 0)
output << a.realteil;
if(a.imaginearteil < 0)
output << a.realteil <<a.imaginearteil<<"i";
if(a.imaginearteil > 0)
output << a.realteil <<"+" <<a.imaginearteil<<"i";
return output;
}
int main() {
Complex a,b(3),c(7,2),d(1.5,-3.2);
cout <<c<<endl;
cout <<c.konjugiert();
a = c*d;
cout << a;
//cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
// Complex x=(b+2)*(c-d.abs())/(b-c.konjugiert()*d);
return 0;
}
は、私はこの結果を除いようwoudl main()
Complex a,b(3),c(7,2),d(1.5,-3.2);
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
Complex x=(b+2)*(c-d.abs())/(b-c.konjugiert()*d);
cout<<x<<" ";
x.printPolar(cout);
cout<<endl;
でこれを実行したい:
0 3 7+2i 1.5-3.2i
0.363472-0.698001i (0.786967,-1.0907)
1-3.5i
2をretrunする方法もう一つの問題、値Q,r
からostream& printPolar(ostream&) const
まで?
これはすでに 'operator +'と 'operator-'で行っています。 –
このプロパティの使い方は?私は自分の質問を編集して結果を出します。 – lukassz
'Complex'を返しますか?しかし、あなたが主張するなら、 'std :: tie'を使うことができます。 – Mine