複素数

[戻る]
夏男 2005/08/30(火) 10:13:54
はじめまして。いきなりですみませんが下記のプログラムを完成を
お願いします。複素数において、実部と虚部をメンバ変数としたものは
何度もみましたが、絶対値rと偏角thetaを変数にしたこれは
わかりませんでした。.......の部分をプログラムに書き換えるみたいです。
なお、.......の行数に意味はないとのこてです。
よろしくお願いします。

#include <iostream> 
#include <cmath> 
using namespace std; 

class complex { 
  double r, theta; // r: absolute value, 
                   // theta: argument 
public: 
  complex() {r = 0.0, theta = 0.0;} 
  complex(double rr, double tt) 
    { r = rr; theta = tt; } 
  void get_r_theta(double &rr, double &tt) 
    { rr = r; tt = theta; } 
  complex operator+(complex ob2); 
  complex operator-(complex ob2); 
  complex operator*(complex ob2); 
  complex operator/(complex ob2); 
  complex operator=(complex ob2); 
}; 
complex complex::operator+(complex ob2) 
{ 
   complex temp; 
   ...................
   ...................
   ...................
   return temp; 
} 
complex complex::operator-(complex ob2) 
{ 
   complex temp; 
   ...................
   ...................
   ...................
   return temp; 
} 
complex complex::operator*(complex ob2) 
{ 
    complex temp; 
   ...................
   ...................
   ...................
    return temp; 
}
complex complex::operator/(complex ob2) 
{ 
    complex temp; 
   ...................
   ...................
   ...................
    return temp; 
} 
complex complex::operator=(complex ob2) 
{ 
   ...................
   ...................
   ...................
    return *this; 
} 

int main() 
{ 
   complex c1(1.0, 3,1416*0.33), 
           c2(2.0, 3,1416*0.2), 
           c3; 
   double rr, tt; 

   c3 = c1 + c2; 
   c3.get_r_theta(rr, tt); 
   cout << "(c1+c2) r: " << rr << ", theta: " << tt << endl; 

   c3 = c1 - c2; 
   c3.get_r_theta(rr, tt); 
   cout << "(c1-c2) r: " << rr << ", theta: " << tt << endl; 

   c3 = c1 * c2; 
   c3.get_r_theta(rr, tt); 
   cout << "(c1*c2) r: " << rr << ", theta: " << tt << endl; 

   c3 = c1 / c2; 
   c3.get_r_theta(rr, tt); 
   cout << "(c1/c2) r: " << rr << ", theta: " << tt << endl; 

   c3 = c2; 
   c3.get_r_theta(rr, tt); 
   cout << "(c3=c2) r: " << rr << ", theta: " << tt << endl; 
}

Blue 2005/08/30(火) 10:18:49
C++どうこうより、掲示板の使い方を学んだほうがいいです。
http://www.hyuki.com/writing/techask.html

> いきなりですみませんが下記のプログラムを完成をお願いします。
それで、あなたのためになるのでしょうか?
課題はなんのためにあるのでしょうか?そんなこと誰でもわかりますよね?

夏男 2005/08/30(火) 10:24:23
すみません、急いでいるのでつい。。。
PCの具合が悪く、コマンドプロンプトを用いてもコンパイルできなく
なったためお願いしました。
ちなみに私の考えた結果は以下です。
complex complex::operator+(complex ob2) 
{ 
   complex temp; 

   temp.r = r + ob2.r; 
   temp.theta = theta + ob2.theta; 

   return temp; 
} 

complex complex::operator-(complex ob2) 
{ 
   complex temp; 

   r = -r; 
   theta = -theta; 

   return temp; 
} 

complex complex::operator*(complex ob2) 
{ 
    complex temp; 

    temp.r = r * ob2.r - theta * ob2.theta; 
    temp.theta = r * ob2.theta + theta * ob2.r; 

    return temp; 
} 

complex complex::operator/(complex ob2) 
{ 
    complex temp; 

    temp.r = r / ob2.r; 
    temp.theta = theta / ob2.theta; 

    return temp; 
} 

complex complex::operator=(complex ob2) 
{ 
    r = ob2.r; 
    theta = ob2.theta; 

    return *this; 
}

夏男 2005/08/30(火) 10:41:39
急いでいたとはいえルールを無視し申し訳ありません。
この掲示板を見て不快に思う方すみません。
時間は少ないですがなんとか自分で解決してみます。
忠告してくれた方ありがとうございました。

夏男 2005/08/30(火) 10:42:06
[[解決]]
解決

Blue 2005/08/30(火) 10:49:55
解決しちゃったけど。。。。

>  double r, theta; // r: absolute value, 
>                   // theta: argument 
これって、絶対値と偏角で複素数を表してるんですよね?

各operatorの計算の仕方これであってんですかねぇ?

極形式だと、
z1 = r1( cosθ1 + i * sinθ1 )
z2 = r2( cosθ2 + i * sinθ2 )

だから、掛け算なんか r = r1 * r2, θ = θ1 + θ2 だし。。。
(もう計算できんw)

επιστημη [E-Mail] 2005/08/30(火) 11:24:04
一旦直交座標系: x+yi に変換したほが楽ちゃうかな。
てゆっか、なんで std::complex<double> 使わんのや…宿題なら自分でおやんなさい。

古いスレッドには追加発言できません。