Bài này sẽ giới thiệu về khái niệm hàm (function) cũng như cách xây dựng hàm. Các bạn cần nắm vững hàm bởi các bạn sẽ sử dụng hàm rất nhiều và hàm giúp bạn tổ chức chương trình tốt hơn.
1. Tại sao phải sử dụng hàm (function)
Ví dụ, cần viết chương trình tính S = a! + b! + c! với a, b, c là 3 số nguyên dương nhập từ bàn phím.
3 đoạn lệnh nhập a, b, c > 0
do {
cout<<"Nhap mot so nguyen duong:";
cin>>a;
} while (a <= 0);
do {
cout<<"Nhap mot so nguyen duong:";
cin>>b;
} while (b <= 0);
do {
cout<<"Nhap mot so nguyen duong:";
cin>>c;
} while (c <= 0);
3 đoạn lệnh tính s1 = a!, s2 = b!, s3 = c!
//s1 = a! = 1 * 2 * … * a
s1 = 1;
for (i = 2; i <= a ; i++)
s1 = s1 * i;
//s2 = b! = 1 * 2 * … * b
s2 = 1;
for (i = 2; i <= b ; i++)
s2 = s2 * i;
//s3 = c! = 1 * 2 * … * c
s3 = 1;
for (i = 2; i <= c ; i++)
s3 = s3 * i;
Nhận xét:
– Cùng một công việc có tính chất giống nhau được thực hiện nhiều lần
– Code sẽ dài dòng và rối rắm
Giải pháp: Viết 1 lần và sử dụng nhiều lần.
Đoạn lệnh nhập tổng quát, với n = a, b, c
do {
cout << "Nhap mot so nguyen duong: ";
cin >> n;
} while (n <= 0);
Đoạn lệnh tính giai thừa tổng quát với n = a, b, c
//s = n! = 1 * 2 * … * n
s = 1;
for (i = 2; i <= n ; i++)
s = s * i;
Để sử dụng những đoạn lệnh tổng quát này nhiều lần, ta đưa chúng vào hàm (function).
2. Khái niệm hàm (function)
Hàm (function) là một đoạn chương trình có tên, đầu vào và đầu ra. Hàm có chức năng giải quyết một số vấn đề chuyên biệt cho chương trình chính. Hàm được gọi nhiều lần với các tham số khác nhau.
Hàm là một đơn vị độc lập của chương trình, không cho phép xây dựng một hàm bên trong một hàm khác.
Một chương trình bao gồm một hoặc nhiều hàm. Trong đó, hàm main() là thành phần bắt buộc của chương trình.
3. Cú pháp khai báo hàm và các bước viết hàm
Cú pháp:
<kiểu trả về> <tên hàm>([danh sách tham số])
{
<các câu lệnh>
[return <giá trị>;]
}
Trong đó:
<kiểu trả về>: kiểu dữ liệu bất kỳ trong C++ (char, int, float,…). Nếu không trả về thì là void.
<tên hàm>: theo quy tắc đặt tên định danh.
<danh sách tham số>: tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu “,”
<giá trị>: trả về cho hàm qua lệnh return.
Giá trị trả về của hàm
– Được xác định dựa vào mục đích của hàm.
– Trong thân hàm, phải trả về đúng <kiểu trả về> đã định ban đầu.
– Nếu các hàm không trả về giá trị thì phải khai báo kiểu void.
Ví dụ:
int TinhTong(int a, int b)
{
int S;
…
return S;
}
Các bước viết hàm
Cần xác định các thông tin sau:
- Tên hàm.
- Hàm sẽ thực hiện công việc gì.
- Các đầu vào (nếu có).
- Đầu ra (nếu có).
Lời gọi hàm
Để sử dụng hàm thì cần định nghĩa hàm trước và gọi hàm.
#include <iostream>
using namespace std;
// declaring a function
void greet() {
cout << "Hello there!";
}
int main() {
// calling the function
greet();
return 0;
}
Lưu ý: Trong C++, hàm cần được định nghĩa trước rồi mới gọi hàm, định nghĩa sau sẽ bị lỗi. Nếu lời gọi hàm trong main() mà định nghĩa hàm ở phía dưới main() sẽ bị lỗi.
Chương trình sau sẽ báo lỗi chưa khai báo hàm greet();
#include <iostream>
using namespace std;
int main() {
// calling the function
greet();// error when calling the function
return 0;
}
// declaring a function
void greet() {
cout << "Hello there!";
}
4. Một số ví dụ sử dụng hàm
Chương trình C++ in ra số nguyên và số thực
#include <iostream>
using namespace std;
// display a number
void displayNum(int n1, float n2) {
cout << "The int number is " << n1<<endl;
cout << "The double number is " << n2<<endl;
}
int main() {
int num1 = 5;
double num2 = 5.5;
// calling the function
displayNum(num1, num2);
system("pause");
}
Kết quả
The int number is 5
The double number is 5.5
Chương trình C++ tính tổng 2 số nguyên
#include <iostream>
using namespace std;
// declaring a function
int add(int a, int b) {
return (a + b);
}
int main() {
int a;
int b;
cout<<"Input a:";
cin>>a;
cout<<"Input b:";
cin>>b;
int sum;
// calling the function and storing
// the returned value in sum
sum = add(a, b);
cout << "Sum of "<<a<<" and "<<b<<" = " << sum << endl;
system("pause");
}
Kết quả
Input a:100
Input b:78
Sum of 100 and 78 = 178
Khi sử dụng hàm, các bạn nên lưu ý kiểu trả về của hàm phải giống kiểu trả về của kết quả trong thân hàm.
#include
#include
int main() {
int n,k;
scanf(“%d”, &n);
// k = sqrt(n);
// // sqrt luon luon tra ve 1 so thuc( so thuc la co ,)
// if (k * k == n){
// printf(“it is the square number”);
// }
// else{
// printf(“it is not the square number”);
// }
if (squarenumber(n)==1) {
printf(“it is the square number”);}
else {
printf(“it is not the square number”);
}
return 0;
}
// int là khi hàm trả về số nguyên; float là số thực, char là chữ, void là hàm k trả về value.
int squarenumber(int n){
int k;
k = sqrt(n);
if (k * k == n){
return 1;
}
else{
return 0;
}
}