Kiểu Phức Hợp (Type complex)
Kiểu tích hợp complex
là một cấu trúc với hai trường kiểu double:
struct complex
{
double real; // phần thực
double imag; // phần ảo
};
2
3
4
5
Cấu trúc này được mô tả trong phần chuyển đổi kiểu vì nó "chuyển đổi" hai số double
thành một thực thể mới, tương tự như cách các cấu trúc được chuyển thành mảng byte và ngược lại. Hơn nữa, sẽ khá khó để giới thiệu kiểu này mà không mô tả trước về các cấu trúc.
Cấu trúc complex
không có hàm tạo, vì vậy các số phức phải được tạo bằng danh sách khởi tạo.
complex c = {re, im};
Đối với các số phức, hiện tại chỉ hỗ trợ các phép toán số học và so sánh đơn giản: =, +, -, *, /, +=, -=, *=, /=, ==, !=. Hỗ trợ cho các hàm toán học sẽ được thêm vào sau.
Chú ý! Các biến phức không thể được khai báo làm đầu vào (sử dụng từ khóa
input
) cho một chương trình MQL.
Hậu tố 'i' được sử dụng để mô tả các hằng số phức (phần ảo), ví dụ:
const complex x = 1 - 2i;
const complex y = 0.5i;
2
Trong ví dụ sau (script Complex.mq5
), một số phức được tạo và bình phương.
input double r = 1;
input double i = 2;
complex c = {r, i};
complex mirror(const complex z)
{
complex result = {z.imag, z.real}; // hoán đổi phần thực và phần ảo
return result;
}
complex square(const complex z)
{
return (z * z);
}
void OnStart()
{
Print(c);
Print(square(c));
Print(square(mirror(c)));
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Với các tham số mặc định, script sẽ xuất ra như sau:
c=(1,2) / ok
square(c)=(-3,4) / ok
square(mirror(c))=(3,4) / ok
2
3
Ở đây, các cặp số trong dấu ngoặc là biểu diễn chuỗi của số phức.
Kiểu complex
có thể được truyền theo giá trị làm tham số của các hàm MQL (khác với các cấu trúc thông thường, chỉ được truyền bằng tham chiếu). Đối với các hàm được nhập từ DLL, kiểu complex
chỉ nên được truyền bằng tham chiếu.