Die Implementierung der Rechenfunktionen für Komplexe Zahlen
Um in C++ mit komplexenZahlen operieren zu koennen war es notwendig folgende Klasse zu schaffen:
Das Header file
// mathplus.h : header file
//
#include "math.h"
/////////////////////////////////////////////////////////////////////////////
// class CComplex
class CComplex
{ double getphi();
public:
double r,i;
CComplex(double a=0.0,double b=0.0);
CComplex(CComplex& c);
CComplex operator ! (); //changes real and imag part of the number
CComplex operator ~ (); //liefert die konjugiert komplexe Nummer
CComplex operator + ();
CComplex operator - ();
CComplex operator * (CComplex& b);
CComplex operator / (CComplex& b);
CComplex operator + (CComplex& b);
CComplex operator - (CComplex& b);
CComplex operator * (double b);
CComplex operator / (double b);
CComplex operator + (double b);
CComplex operator - (double b);
friend CComplex operator * (double a, CComplex& b);
friend CComplex operator / (double a, CComplex& b);
friend CComplex operator + (double a, CComplex& b);
friend CComplex operator - (double a, CComplex& b);
CComplex operator *= (CComplex& b);
CComplex operator /= (CComplex& b);
CComplex operator += (CComplex& b);
CComplex operator -= (CComplex& b);
CComplex operator *= (double b);
CComplex operator /= (double b);
CComplex operator += (double b);
CComplex operator -= (double b);
friend double cabs (CComplex& c);
friend CComplex cpow (CComplex& c,int n);
friend CComplex croot (CComplex& c,int n, int number=0);
// es wird die Loesung mit der nummer number (number
Der Body
// mathplus.cpp : implementation file
//
#include "stdafx.h"
#include "mathplus.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// class CComplex
double CComplex::getphi()
{ return atan(i/r);
}
CComplex::CComplex(double a,double b) // default: a=0 b=0!
{ r=a;
i=b;
}
CComplex::CComplex(CComplex& c)
{ *this=c;
}
CComplex CComplex::operator ! ()
{ CComplex c;
c.r=i;
c.i=r;
return c;
}
CComplex CComplex::operator ~ ()
{ CComplex c;
c.r=r;
c.i=-i;
return c;
}
CComplex CComplex::operator + ()
{ return *this;
}
CComplex CComplex::operator - ()
{ CComplex c;
c.r=-r;
c.i=-i;
return c;
}
CComplex CComplex::operator * (CComplex& b)
{ CComplex c;
c.r=r*b.r-i*b.i;
c.i=i*b.r+r*b.i;
return c;
}
CComplex CComplex::operator / (CComplex& b)
{ CComplex c;
c=~b;
c=*this*c;
c.r/=(b.r*b.r+b.i*b.i);
c.i/=(b.r*b.r+b.i*b.i);
return c;
}
CComplex CComplex::operator + (CComplex& b)
{ CComplex c;
c.r=r+b.r;
c.i=i+b.i;
return c;
}
CComplex CComplex::operator - (CComplex& b)
{ CComplex c;
c.r=r-b.r;
c.i=i-b.i;
return c;
}
CComplex CComplex::operator * (double b)
{ CComplex c;
c=b;
c=*this*c;
return c;
}
CComplex CComplex::operator / (double b)
{ CComplex c;
c=b;
c=*this/c;
return c;
}
CComplex CComplex::operator + (double b)
{ CComplex c;
c=b;
c=*this+c;
return c;
}
CComplex CComplex::operator - (double b)
{ CComplex c;
c=b;
c=*this-c;
return c;
}
CComplex operator * (double a, CComplex& b)
{ CComplex c;
c=a;
c=c*b;
return c;
}
CComplex operator / (double a, CComplex& b)
{ CComplex c;
c=a;
c=c/b;
return c;
}
CComplex operator + (double a, CComplex& b)
{ CComplex c;
c=a;
c=c+b;
return c;
}
CComplex operator - (double a, CComplex& b)
{ CComplex c;
c=a;
c=c-b;
return c;
}
CComplex CComplex::operator *= (CComplex& b)
{ r=r*b.r-i*b.i;
i=i*b.r+r*b.i;
return *this;
}
CComplex CComplex::operator /= (CComplex& b)
{ CComplex c;
c=~b;
*this*=c;
r/=(b.r*b.r+b.i*b.i);
i/=(b.r*b.r+b.i*b.i);
return *this;
}
CComplex CComplex::operator -= (CComplex& b)
{ r=r-b.r;
i=i-b.i;
return *this;
}
CComplex CComplex::operator *= (double b)
{ CComplex c;
c=b;
*this*=c;
return *this;
}
CComplex CComplex::operator /= (double b)
{ CComplex c;
c=b;
*this/=c;
return *this;
}
CComplex CComplex::operator += (double b)
{ CComplex c;
c=b;
*this+=c;
return c;
}
CComplex CComplex::operator -= (double b)
{ CComplex c;
c=b;
*this-=c;
return c;
}
double cabs (CComplex& c)
{ return sqrt(c.r*c.r+c.i*c.i);
}
CComplex cpow (CComplex& c,int n)
{ CComplex a;
double r=pow(cabs(c),n);
double phi=n*c.getphi();
a.r=r*cos(phi);
a.i=r*sin(phi);
return a;
}
CComplex croot (CComplex& c,int n, int number)
{ CComplex a;
double r=pow(cabs(c),1.0/n);
double phi=(c.getphi()*number*2*PI)/n;
a.r=r*cos(phi);
a.i=r*sin(phi);
return a;
}
CComplex csqrt (CComplex& c, int number)
{ CComplex a;
a=croot(c,2,number);
return a;
}
/////////////////////////////////////////////////////////////////////////////
// mathematical functions
double abs(double wert)
{ double retval;
(wert<0) ? (retval=-wert) : (retval=wert);
return retval;
}