Комплексные числа

[ cpp ]

02 Jul 2012

complex.h

#ifndef COMPLEX_H
#define COMPLEX_H
#include <iostream>
using namespace std;
class Complex {
	private:
		double re,im;
	public:
		Complex(){re=0;im=0;}
		Complex(double, double);
		~Complex(){};
		Complex(const Complex&);
		friend istream& operator>>(istream &fi, Complex &x);
		friend ostream& operator<<(ostream &fo, const Complex &x);
		Complex& operator +(Complex&);
		Complex& operator -(Complex&);
		Complex& operator *(Complex&);
		Complex& operator /(Complex&);
		Complex& operator +(double);
		Complex& operator -(double);
		Complex& operator *(double);
		Complex& operator /(double);
		Complex& operator- (){
			re=-re;
			im=-im;
			return *this;
		}
		Complex& operator! (){
			im=-im;
			return *this;
		}
};
#endif

complex.cpp

#include"complex.h"
Complex::Complex(double r, double i) {re=r; im=i;}
Complex::Complex(const Complex & x){
	this->re = x.re;
	this->im = x.im;
}
istream &operator>>(istream &fi, Complex &x) {
	char c;
	fi>>x.re>>c;
	if (c=='-') {fi>>c>>x.im; x.im=-x.im;}
	else fi>>c>>x.im;
	return fi;
}
ostream &operator<<(ostream &fo, const Complex &x) {
	fo<<x.re;
	if (x.im<0) fo<<"-i"<<(-x.im); else fo<<"+i"<<x.im; return fo;
}
Complex& Complex::operator +(Complex &x){this->re=this->re+ x.re; this->im=x.im+this->im; return *this;}
Complex& Complex::operator -(Complex &x){this->re=this->re- x.re; this->im=this->im -x.im; return *this;}
Complex& Complex::operator *(Complex &x){this->re=this->re*x.re-this->im*x.im; this->im=this->re*x.im+this->im*x.re; return *this;}
Complex& Complex::operator /(Complex &x){if ((x.re==0) && (x.im==0)) {this->im=0; this->re=0; goto lab;}
	this->re=(this->re*x.re+this->im*x.im)/(x.re*x.re + x.im*x.im);
	this->im=(this->im*x.re-this->re*x.im)/(x.re*x.re + x.im*x.im);
	lab: return *this;
}
Complex& Complex::operator +(double x){re=re+x ; return *this;}
Complex& Complex::operator -(double x){re-=x; return *this;}
Complex& Complex::operator *(double x){re*=x; im*=x; return *this;}
Complex& Complex::operator /(double x){re/=x; im/=x; return *this;}

main.cpp

#include <iostream>
#include "complex.h"
int main() {
	setlocale(0, "rus");
	Complex x[3],rez;
	cout<<"Введите последовательно три комплексных числа\nв формате A+iB, либо A-iB,\n";
	cout<<"где A и B - действительные числа\n";
	for (int i=0; i<3; i++) cin>>x[i];
	cout<<"\n******************************************************\n";
	cout<<"Результат выражения\n(!("<<x[0]<<"*"<<x[2]<<"*<<"x[1]<<")/";
	cout<<x[1]<<"+"<<x[1]<<"-"<<x[2]<<"+"<<x[0]<<"/(!"<<x[1]<<"))/(-"<<x[1]<<"-"<<x[2]<<")/"<<x[0]<<"\n";
	rez = !(x[0]*x[2]*x[1]);
	rez= (rez/x[1]+x[1]-x[2]+x[0]/(!x[1]));
	rez= rez/(-x[1]-x[2])/x[0];
	cout<<"равен: "<<rez;
	return 0;
}