Trước khi viết các hàm thao tác trên các cấu trúc Số phức, ta cần khai báo cấu trúc như sau:
struct Complex { float Re; //phần thực - real float Im; //phần ảo - imaginary };
Các hàm thao tác với Complex:
Hiển thị số phức
void OutputComplex(Complex a) { if (a.Re != 0) cout << a.Re; if (a.Im != 0) { if (a.Im == -1) cout << "-i"; else if (a.Im == 1) { if (a.Re == 0) cout<<"i"; else cout<<"+i"; } else { if (a.Re != 0 && a.Im > 0) cout<<"+"<<a.Im<<"i"<<endl; else cout<<a.Im<<"i"<<endl; } } if (a.Re==0 & a.Im==0) cout<<"0"<<endl; }
Lấy mô-đun của số phức
#include<cmath> float Modulus(Complex a) { return sqrt(a.Re*a.Re+a.Im*a.Im); }
Lấy argument của số phức
#include<cmath> float Argument(Complex a) { return atan(a.Im/a.Re); }
Lấy số phức liên hợp
Complex Conjg(Complex a) { a.Im = -a.Im; return a; }
Cộng 2 số phức
Complex Add(Complex a, Complex b) { Complex c; c.Re = a.Re + b.Re; c.Im = a.Im + b.Im; return c; }
Trừ 2 số phức
Complex Sub(Complex a, Complex b) { Complex c; c.Re = a.Re - b.Re; c.Im = a.Im - b.Im; return c; }
Nhân 2 số phức
Complex Mul(Complex a, Complex b) { Complex c; c.Re = a.Re*b.Re - a.Im*b.Im; c.Im = a.Re*b.Im + a.Im*b.Re; return c; }
Chia 2 số phức
Complex Div(Complex a, Complex b) { Complex c = Mul(a, Conjg(b)); float d = b.Re*b.Re + b.Im*b.Im; c.Re /= d; c.Im /= d; return c; }
Lấy số đối của số phức qua gốc tọa độ O
Complex Inverse(Complex a) { a.Re = -a.Re; a.Im = -a.Im; return a; }
Bình phương số phức
Complex Square(Complex a) { Complex c; c.Re = a.Re - a.Im*a.Im; c.Im = 2*a.Re*a.Im; return c; } //Cách khác Complex Square(Complex a) { return Mul(a,a); }
Lấy một giá trị căn bậc 2 của số phức
Một số phức sẽ có 2 căn bậc 2, giá trị căn bậc 2 còn lại sẽ là số phức đối của giá trị đầu.
#include<cmath> Complex SquareRoot(Complex a) { Complex c; float delta = Modulus(a); if ((a.Re+delta)/2 >= 0) c.Re = sqrt((a.Re+delta)/2); else c.Re = sqrt((a.Re-delta)/2); c.Im = a.Im / c.Re / 2; return c; }
trong phần hiển thị số phức dòng 20 trong điều kiện if thiếu 1 "&" ạ
Trả lờiXóaVậy còn số phức mũ số phức thì sao ạ
Trả lờiXóa