課題1 C++版

fukusosu.h


#include <iostream>
class Fukusosu {
 private:
  double real;
  double imaginary;
 public:
  Fukusosu();
  Fukusosu(double _r, double _i);
  Fukusosu operator*(const Fukusosu& b)const ;
  Fukusosu kyoyaku() const;
  Fukusosu operator/(const Fukusosu& b) const ;
  Fukusosu operator=(const Fukusosu& b);
  friend std::ostream& operator<<(std::ostream& os,const Fukusosu& b);
};

kadai11.cpp


#include <iostream>
#include "fukusosu.h"

int main(){
  Fukusosu f[]={{1.0,0},{0,-2.0},{-3.0,4.0},{5.0,-6.0},{0.0,0.0}};
  for(int i=0; i<(sizeof f)/(sizeof f[0]); ++i){
    std::cout << f[i] << std::endl;
  }
}

kadai12.cpp


#include <iostream>
#include "fukusosu.h"

int main(){
  Fukusosu f[]={{1.0,0},{0,-2.0},{-3.0,0},{5.0,-6.0},{0.0,0.0}};
  Fukusosu g[]={{2.0,0},{0,-5.0},{0,4.0},{-2.0,1.0},{0.0,0.0}};

  for(int i=0; i<(sizeof f)/(sizeof f[0]); ++i){
    std::cout << "(" << f[i] << ") * (" << g[i] << ") = " 
	      << (f[i] * g[i])
	      << std::endl;
  }
}

kadai13.cpp


#include <iostream>
#include "fukusosu.h"

int main(){
  Fukusosu f[]={{1.0,0},{0,-2.0},{-3.0,4.0},{5.0,-6.0},{0.0,0.0}};
  for(int i=0; i<(sizeof f)/(sizeof f[0]); ++i){
    std::cout << f[i] << "の共役は" << f[i].kyoyaku() << std::endl;
  }
}

kadai14.cpp


#include <iostream>
#include "fukusosu.h"

int main(){
  Fukusosu f[]={{1.0,0},{0,-2.0},{-3.0,0},{5.0,-6.0},{0.0,0.0}};
  Fukusosu g[]={{2.0,0},{0,-5.0},{0,4.0},{-2.0,1.0},{0.0,1.0}};
  
  for(int i=0; i<(sizeof f)/(sizeof f[0]); ++i){
    std::cout << "(" << f[i] << ") / (" << g[i] << ") = "
	      << (f[i] / g[i]) << std::endl;
  }
}

fukusosu.cpp


#include <iostream>
#include "fukusosu.h"

Fukusosu::Fukusosu(double _r, double _i):real(_r),imaginary(_i){}
Fukusosu::Fukusosu():real(0),imaginary(0){}
Fukusosu Fukusosu::operator=(const Fukusosu& b){
  real = b.real;
  imaginary = b.imaginary;
  return *this;
}
Fukusosu Fukusosu::operator*(const Fukusosu& b) const {
  Fukusosu result(real * b.real - imaginary * b.imaginary,
		  real * b.imaginary + imaginary * b.real);
  return result;
}
Fukusosu Fukusosu::kyoyaku() const{
  Fukusosu result(real,-imaginary);
  return result;
}
Fukusosu Fukusosu::operator/(const Fukusosu& b) const {
  Fukusosu k = b * b.kyoyaku();
  Fukusosu result = *this * b.kyoyaku();
  result.real /= k.real;
  result.imaginary /= k.real;
  return result;
}
std::ostream& operator<<(std::ostream& os, const Fukusosu& b){
  if((b.real!=0)||(b.imaginary==0)){
    os << b.real << std::showpos ;
  } 
  if(b.imaginary!=0){
    os << b.imaginary << 'i';
  }
  os << std::noshowpos;
  return os;
}

坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科