19 July 2016

#define trong lập trình c là gì

Đây là từ khóa tiền xử lý, dùng để định nghĩa tên một hằng hoặc kiểu gì đó…. nó giúp code "nhanh gọn" hơn nhưng những beginner cũng đừng quá lạm dụng !

Có lẽ đã quen kiểu “#define PI 3.14…..” hoặc #define một giá trị nào đấy.
#define FOR(i,a,b) for (int i = a; i < b; i++)
Đây là một vòng lặp for và bạn có thể sử dụng nó đơn giản về sau bằng cú pháp: FOR(i,3,5); (chạy từ 3 -> 5) ….. hoặc FOR(i, 1, 100); (chạy từ 1->100)
#define for(i,n) for(int i=0;i<n; i++)
chạy từ 0 đến bé hơn n. dùng for(i, 5); tức sẽ cho chạy từ 0 đến <5. thay vì cứ phải code lại dài dòng, như vậy ngắn hơn phải không?
#define R1 return 1
thậm chí define cho cả giá trị trả về luôn.
#define CL(a,x) memset(x, a, sizeof(x));
nhìn hàm memset chắc cũng biết rồi nhỉ. (cần có thư viện string).
#define filein freopen("in.txt","r",stdin)
Có thể dùng cho cả thao tác mở file.(tất nhiên là đóng cũng được).
#define pr(x) printf("Case %d: ",x) in một số nguyên x bằng cú pháp pr(x);
#define sc(n) scanf("%d",&n) nhập một số nguyên n bằng cú pháp sc(n);
#define C1(x) cin >> x // gõ C1(x); có vẻ nhanh hơn cin >> x;
#define C2(x, y) cin >> x >> y // tương tự nhưng nhập 2 số
#define C3(x, y, z) cin >> x >> y >> z // nhập 3 số
nhập xuất thông thường..
#define pb push_back
push_back cũng ngắn hơn nhiều rồi.(cần có thư viện vector)
#define max(a, b) ((a) > (b) ? (a) : (b))
tìm max 2 số a và b bằng cú pháp max(a, b);
Và còn nhiều nữa……………….Nhưng để tìm max cho bất kỳ kiểu nào (int, float, double..) thì sao?
Bạn có nhớ template là gì? là một từ khóa của C++ đặc trưng cho việc tổng quát hóa việc xử lý với các kiểu dữ liệu khác nhau.
template <class T> inline T max(T a, T b){ return a > b ? a : b;}
tìm max 2 số a và b thì chỉ cần dùng cú pháp max(a, b); là xong
template<class T>T sq(T a){ return (a*a); }
// tính a^2 bằng cú pháp sq(a);
template<class T>T gcd(T a,T b){ return (b==0) ? a : gcd(b,a%b); }
// ước số chung lớn nhất của 2 số a, b bằng cú pháp gcd(a, b);
template<class T>T lcm(T a,T b){ return (a/gcd(a,b))*b; }
// ……….nhỏ nhất
template<class T>T Pow(T n,T p) { T res=n; for(T i=1;i<p; i++){ res *= n; } return res; }
// chỉ là một hàm Pow thôi.
template<class T>bool isPrime(T n){ for(T i=2; i*i<=n; i++){ if(n%i==0) return false; } return true; }
// kiểm tra số nguyên tố.
…………….. còn rất nhiều nữa và bạn có thể tự nghĩ ra. tham khảo thêm typedef
có thể một số không cần thiết lắm nhưng mục đích của bài này là giới thiệu cho bạn biết những “khả năng” của #define và template có thể làm được mà bạn chưa biết.

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang