Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- class Kompleksni {
- double re, im;
- public:
- Kompleksni(double re = 0, double im = 0) : re(re), im(im) {}
- friend Kompleksni operator +(const Kompleksni &a) { return a; }
- friend Kompleksni operator -(const Kompleksni &a) { return {-a.re, -a.im}; }
- friend Kompleksni operator +(const Kompleksni &a, const Kompleksni &b) {
- return {a.re + b.re, a.im + b.im};
- }
- friend Kompleksni operator -(const Kompleksni &a, const Kompleksni &b) {
- return Kompleksni(a.re - b.re, a.im - b.im);
- }
- friend Kompleksni operator *(const Kompleksni &a, const Kompleksni &b) {
- return {a.re * b.re - a.im * b.im, a.re * b.im + a.im * b.re};
- }
- friend Kompleksni operator /(const Kompleksni &a, const Kompleksni &b) {
- double pomocna(b.re * b.re + b.im * b.im);
- return {(a.re * b.re + a.im * b.im) / pomocna, (a.im * b.re - a.re * b.im) / pomocna};
- }
- /* friend bool operator ==(const Kompleksni &a, const Kompleksni &b) {
- return a.re == b.re && a.im == b.im;
- }
- friend bool operator !=(const Kompleksni &a, const Kompleksni &b) {
- return !(a == b);
- }
- */ friend Kompleksni &operator +=(Kompleksni &a, const Kompleksni &b) {
- a.re += b.re; a.im += b.im;
- return a;
- }
- friend Kompleksni &operator -=(Kompleksni &a, const Kompleksni &b) {
- a.re -= b.re; a.im -= b.im;
- return a;
- }
- friend Kompleksni &operator *=(Kompleksni &a, const Kompleksni &b) {
- double pomocna(a.re * b.im + a.im * b.re);
- a.re = a.re * b.re - a.im * b.im; a.im = pomocna;
- return a;
- }
- friend Kompleksni &operator /=(Kompleksni &a, const Kompleksni &b) {
- double pom1(a.im * b.re - a.re * b.im), pom2(b.re * b.re + b.im * b.im);
- a.re = (a.re * b.re + a.im * b.im) / pom2; a.im = pom1 / pom2;
- return a;
- }
- friend std::ostream &operator <<(std::ostream &tok, const Kompleksni &a) {
- if(a.re!=0 && a.im>0){
- if(a.im == 1) tok << a.re << "+" << "i";
- else tok << a.re << "+" << a.im << "i";
- }
- if(a.re==0 && a.im==0) tok << a.re;
- if(a.re==0 && (a.im > 0)){
- if(a.im == 1) tok << "i";
- else tok << a.im << "i";
- }
- if(a.re==0 && (a.im < 0)){
- if(a.im == -1) tok << "-i";
- else tok << a.im << "i";
- }
- if((a.re != 0) && a.im == 0 ) tok << a.re;
- if(a.im < 0 && a.re != 0){
- if(a.im == -1) tok << a.re << "-" << "i";
- else tok << a.re << a.im << "i";
- }
- return tok;
- }
- friend std::istream &operator >>(std::istream &tok, Kompleksni &a);
- friend double real(const Kompleksni &a) { return a.re; }
- friend double imag(const Kompleksni &a) { return a.im; }
- friend double abs(const Kompleksni &a) {
- return std::sqrt(a.re * a.re + a.im * a.im);
- }
- friend double arg(const Kompleksni &a) { return std::atan2(a.im, a.re); }
- friend Kompleksni conj(const Kompleksni &a) { return {a.re, -a.im}; }
- friend Kompleksni sqrt(const Kompleksni &a) {
- double rho(std::sqrt(abs(a))), phi(arg(a) / 2);
- return {rho * cos(phi), rho * sin(phi)};
- }
- };
- int main ()
- {
- std::cout << Kompleksni(-1, 3) << " " << Kompleksni(-1, -1) << " " << Kompleksni(-1, -5) << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement