Trong quá trình lập trình việc sử dụng các hàm toán học là rất phổ biến, ngôn ngữ C++ cung cấp cho bạn một thư viện là math.h chứa các hàm toán học và thư viện Algorithm chứa các hàm thuật toán. Bài viết này mình sẽ cung cấp cho bạn cách sử dụng và ví dụ minh họa cho các hàm toán học và thuật toán thông dụng.
1. Các Hàm Toán Học Phổ Biến
Các hàm toán học trong thư viện math.h đều có tham số là một số thuộc kiểu double và có kiểu trả về là double, bạn không cần phải nhớ hết mọi hàm mà chỉ cần nhớ cho mình một vài hàm quan trọng được sử dụng thường xuyên.
STT | Hàm | Chức năng |
1 | pow(x, y) | Trả về xy |
2 | sqrt(x) | Trả về căn bậc 2 của x |
3 | cbrt(x) | Trả về căn bậc 3 của x |
4 | ceil(x) | Trả về số nguyên nhỏ nhất lớn hơn hoặc bằng x, tương đương phép làm tròn lên |
5 | floor(x) | Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng x, tương đương phép làm tròn xuống |
6 | round(x) | Trả về số nguyên gần x nhất phụ thuộc phần thập phân |
7 | fabs(x) | Trả về trị tuyệt đối của số x |
8 | exp(x) | Trả về ex |
9 | fmod(x, y) | Trả về số dư khi chia x cho y |
10 | log(x) | Trả về logarit tự nhiên của x |
11 | log10(x) | Trả về logarit thập phân của x |
12 | cos(x) | Trả về giá trị hàm cos với x là radian |
13 | sin(x) | Trả về giá trị hàm sin với x là radian |
14 | tan(x) | Trả về giá trị hàm tan với x là radian |
15 | acos(x) | Trả về giá trị hàm arccos với x là radian |
16 | asin(x) | Trả về giá trị hàm arcsin với x là radian |
17 | atan(x) | Trả về giá trị hàm arctan với x là radian |
Hàm pow(x,y) : Trả về lũy thừa xy, lưu ý là hàm này trả về số thực double nên nếu bạn muốn tính lũy thừa với x và y nguyên thì cần lưu kết quả dưới dạng số nguyên hoặc ép kiểu khi in ra.
Ví dụ 1:
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
int a = 2, b = 10;
cout << a << "^" << b << " = " << (int)pow(a, b) << endl;
//Tính căn bậc 5
int n = 100;
double res = pow(n, 1.0 / 5);
cout << fixed << setprecision(3) << res << endl;
return 0;
}
Output :
2.512
Hàm sqrt(x) : Tính căn bậc 2 của x
Ví dụ 2 :
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
int n = 100;
int can = (int)sqrt(n);
cout << can << endl;
double res = sqrt(1000);
cout << fixed << setprecision(2) << res << endl;
return 0;
}
Output :
31.62
Hàm cbrt(x) : Trả về căn bậc 3 của x
Ví dụ 3 :
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
int n = 27;
int can = (int)cbrt(n);
cout << can << endl;
double res = cbrt(100);
cout << fixed << setprecision(2) << res << endl;
return 0;
}
Output :
4.64
Hàm ceil(x) : Trả về số nguyên khi làm tròn phần thập phân của x lên, ví dụ x là 2.3 hay 2.8 thì khi sử dụng hàm ceil ta sẽ thu được số 3.
Ví dụ 4 :
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
double a = 3.14;
double b = 3.8;
cout << (int)ceil(a) << " " << (int)ceil(b) << endl;
return 0;
}
Output :
Hàm floor(x) : Trả về số nguyên khi làm tròn phần thập phân của x xuống, ví dụ x là 2.3 hay 2.8 thì khi sử dụng hàm ceil ta sẽ thu được số 2.
Ví dụ 5 :
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
double a = 3.14;
double b = 3.8;
cout << (int)floor(a) << " " << (int)floor(b) << endl;
return 0;
}
Output :
Hàm round(x) : Làm tròn dựa vào phần thập phân của x, nếu phần thập phân của x lớn hơn hoặc bằng 0.5 thì sẽ làm tròn lên, ngược lại sẽ làm tròn xuống
Ví dụ 6 :
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
double a = 3.14;
double b = 3.8;
cout << (int)round(a) << " " << (int)round(b) << endl;
return 0;
}
Output :
Hàm abs(x) : Trả về giá trị tuyệt đối của x, hàm này nằm trong thư viện stdlib.h
Ví dụ 7 :
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
cout << abs(10) << " " << abs(-100) << endl;
return 0;
}
Output :
2. Thư Viện Algorithm
Algorithm là thư viện chứa các hàm thuật toán phổ biến, tuy nhiên các hàm này chủ yếu dùng cho dãy mảng. Hiện tại bạn sẽ làm quen với một vài hàm cơ bản trong thư viện này trước, sau khi học phần mảng thì mình sẽ giới thiệu các hàm khác trong thư viện này.
Khi sử dụng thư viện này bạn cần inlcude vào chương trình của mình.
Hàm swap
Hàm này sẽ hoán đổi giá trị của 2 biến, bạn có thể tự code hoán đổi giá trị 2 biến hoặc sử dụng hàm có sẵn.
#include <algorithm>
#include <iomanip>
using namespace std;
int main(){
int a = 100, b = 200;
//Dùng hàm có sẵn swap(a, b);
cout << a << " " << b << endl;
//Tự code
char x = '@', y = '#';
char temp = x; x = y; y = temp;
cout << x << ' ' << y << endl;
return 0;
}
Output :
# @
Hàm min
Hàm min sẽ trả về giá trị nhỏ hơn trong 2 hoặc nhiều số, trong trường hợp bạn áp dụng hàm min với nhiều số thì cần thêm ngoặc nhọn {}
#include <algorithm>
#include <iomanip>
using namespace std;
int main(){
int a = 100, b = 200;
cout << "Min(" << a << ", " << b << ") = " << min(a, b) << endl;
cout << "Min(10, 20, 15, 4) = " << min({10, 20, 15, 4}) << endl;
cout << "Min('d', 'b', 'z',) = " << min({'d', 'b', 'z'}) << endl;
return 0;
}
Output :
Min(10, 20, 15, 4) = 4
Min('d', 'b', 'z',) = b
Hàm max
Hàm max sẽ trả về giá trị lớn hơn trong 2 hoặc nhiều số, trong trường hợp bạn áp dụng hàm max với nhiều số thì cần thêm ngoặc nhọn {}
#include <algorithm>
#include <iomanip>
using namespace std;
int main(){
int a = 100, b = 200;
cout << "Max(" << a << ", " << b << ") = " << max(a, b) << endl;
cout << "Max(10, 20, 15, 4) = " << max({10, 20, 15, 4}) << endl;
cout << "Max('d', 'b', 'z',) = " << max({'d', 'b', 'z'}) << endl;
return 0;
}
Output :
Max(10, 20, 15, 4) = 20
Max('d', 'b', 'z',) = z