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