#include <iostream>
#include <cmath>
using namespace std;
class Complex {
private :
float real;
float imaginary;
public :
void set_values( float a, float b) {
real = a;
imaginary = b;
}
// Single get() function using reference parameters
void get( float * r, float * i) { // float &r likhleo hoito
* r = real;
* i = imaginary;
}
void display( ) {
if ( imaginary < 0 ) {
cout << real << "-" << abs ( imaginary) << "i" << endl;
} else {
cout << real << "+" << imaginary << "i" << endl;
}
}
} ;
class calculation {
public :
Complex sum( Complex a, Complex b) {
Complex S;
float x1, y1, x2, y2;
a.get ( & x1, & y1) ;
b.get ( & x2, & y2) ;
float x = x1 + x2;
float y = y1 + y2;
S.set_values ( x, y) ;
return S;
}
Complex difference( Complex a, Complex b) {
Complex D;
float x1, y1, x2, y2;
a.get ( & x1, & y1) ;
b.get ( & x2, & y2) ;
float x = x1 - x2;
float y = y1 - y2;
D.set_values ( x, y) ;
return D;
}
} ;
int main( ) {
float a, b;
cout << "Enter real and imaginary parts of first complex number: " ;
cin >> a >> b;
Complex A, B, sum, diff;
A.set_values ( a, b) ;
cout << "Enter real and imaginary parts of second complex number: " ;
cin >> a >> b;
B.set_values ( a, b) ;
calculation calc;
sum = calc.sum ( A, B) ;
diff = calc.difference ( A, B) ;
cout << "\n Sum = " ;
sum.display ( ) ;
cout << "Difference = " ;
diff.display ( ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBDb21wbGV4IHsKcHJpdmF0ZToKICAgIGZsb2F0IHJlYWw7CiAgICBmbG9hdCBpbWFnaW5hcnk7CgpwdWJsaWM6CiAgICB2b2lkIHNldF92YWx1ZXMoZmxvYXQgYSwgZmxvYXQgYikgewogICAgICAgIHJlYWwgPSBhOwogICAgICAgIGltYWdpbmFyeSA9IGI7CiAgICB9CgogICAgLy8gU2luZ2xlIGdldCgpIGZ1bmN0aW9uIHVzaW5nIHJlZmVyZW5jZSBwYXJhbWV0ZXJzCiAgICB2b2lkIGdldChmbG9hdCogciwgZmxvYXQqIGkpIHsvLyBmbG9hdCAmciBsaWtobGVvIGhvaXRvIAogICAgICAgICpyID0gcmVhbDsKICAgICAgICAqaSA9IGltYWdpbmFyeTsKICAgIH0KCiAgICB2b2lkIGRpc3BsYXkoKSB7CiAgICAgICAgaWYgKGltYWdpbmFyeSA8IDApIHsKICAgICAgICAgICAgY291dCA8PCByZWFsIDw8ICItIiA8PCBhYnMoaW1hZ2luYXJ5KSA8PCAiaSIgPDwgZW5kbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3V0IDw8IHJlYWwgPDwgIisiIDw8IGltYWdpbmFyeSA8PCAiaSIgPDwgZW5kbDsKICAgICAgICB9CiAgICB9Cn07CgpjbGFzcyBjYWxjdWxhdGlvbiB7CnB1YmxpYzoKICAgIENvbXBsZXggc3VtKENvbXBsZXggYSwgQ29tcGxleCBiKSB7CiAgICAgICAgQ29tcGxleCBTOwogICAgICAgIGZsb2F0IHgxLCB5MSwgeDIsIHkyOwogICAgICAgIGEuZ2V0KCZ4MSwgJnkxKTsKICAgICAgICBiLmdldCgmeDIsICZ5Mik7CgogICAgICAgIGZsb2F0IHggPSB4MSArIHgyOwogICAgICAgIGZsb2F0IHkgPSB5MSArIHkyOwogICAgICAgIFMuc2V0X3ZhbHVlcyh4LCB5KTsKICAgICAgICByZXR1cm4gUzsKICAgIH0KCiAgICBDb21wbGV4IGRpZmZlcmVuY2UoQ29tcGxleCBhLCBDb21wbGV4IGIpIHsKICAgICAgICBDb21wbGV4IEQ7CiAgICAgICAgZmxvYXQgeDEsIHkxLCB4MiwgeTI7CiAgICAgICAgYS5nZXQoJngxLCAmeTEpOwogICAgICAgIGIuZ2V0KCZ4MiwgJnkyKTsKCiAgICAgICAgZmxvYXQgeCA9IHgxIC0geDI7CiAgICAgICAgZmxvYXQgeSA9IHkxIC0geTI7CiAgICAgICAgRC5zZXRfdmFsdWVzKHgsIHkpOwogICAgICAgIHJldHVybiBEOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBmbG9hdCBhLCBiOwoKICAgIGNvdXQgPDwgIkVudGVyIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBmaXJzdCBjb21wbGV4IG51bWJlcjogIjsKICAgIGNpbiA+PiBhID4+IGI7CiAgICBDb21wbGV4IEEsIEIsIHN1bSwgZGlmZjsKICAgIEEuc2V0X3ZhbHVlcyhhLCBiKTsKCiAgICBjb3V0IDw8ICJFbnRlciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2Ygc2Vjb25kIGNvbXBsZXggbnVtYmVyOiAiOwogICAgY2luID4+IGEgPj4gYjsKICAgIEIuc2V0X3ZhbHVlcyhhLCBiKTsKCiAgICBjYWxjdWxhdGlvbiBjYWxjOwogICAgc3VtID0gY2FsYy5zdW0oQSwgQik7CiAgICBkaWZmID0gY2FsYy5kaWZmZXJlbmNlKEEsIEIpOwoKICAgIGNvdXQgPDwgIlxuU3VtID0gIjsKICAgIHN1bS5kaXNwbGF5KCk7CiAgICBjb3V0IDw8ICJEaWZmZXJlbmNlID0gIjsKICAgIGRpZmYuZGlzcGxheSgpOwoKICAgIHJldHVybiAwOwp9Cg==