23 thg 10, 2010

Cách sử dụng hàm con trong C và C++

Đăng ngày: 11:22 23-01-2010
Thư mục: C++
Trong các bài mình thường dùng hàm con, vì như vậy chương trình sẽ rõ ràng hơn, nhất là với chương trình lớn. Vì vậy khi viết chương trình các bạn hãy làm quen với hàm con. Mình lấy một ví dụ về hàm con để tính tổ hợp chập k của n phần tử:

#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
int k,n,t;
cout<<"Nhap k: "; cin>>k;
cout<<"Nhap n: "; cin>>n;
t = giaithua(n)/(giaithua(k)*giaithua(n-k));
cout<<"To hop chap k cua n phan tu la: "<<t;
getch();
}
/* Các bạn để ý trong chương trình xuất hiện một hàm lạ là giaithua(). Hàm này có tác dụng tính giai thừa của biến làm đối số của nó. Ví dụ giaithua(n), nếu n có giá trị là 5 thì giaithua(n) có giá trị là 120. Nghĩa là khi n=5 "chui" vào trong hàm thì khi đi ra khỏi hàm, hàm có giá trị trả về là giaithua(n) = 120.
Nếu một hàm nào đó mà bạn sử dụng có trong thư viện rồi thì bạn chỉ việc khai báo thư viện trong khai báo #include. Còn nếu không, bạn phải khai báo hàm đấy dưới dạng hàm con. Trong chương trình này thì hàm giaithua() không có trong thư viện nào cả, vì vậy bạn phải khai báo nếu không chương trình sẽ báo lỗi. Bạn có thể khai báo hàm con trước hoặc sau hàm main() đều được. Hàm giaithua() có giá trị trả về là một số nguyên nên bạn khai báo int trước khai báo hàm. Hàm giaithua() được khai báo sau hàm void main() như sau: */
int giaithua(int m) //lưu ý tham số m hay là n cũng được, không sợ trùng lặp biến n trong main() 
{
int gt,i;
gt=1;
for(i=1;i<=m;i++)
gt=gt*i; //khi thoát khỏi vòng for thì gt có giá trị là giai thừa của m
return gt; //giá trị của gt sẽ được truyền cho giá trị của hàm
}
/* Khi đó sử dụng giaithua(k) thì m sẽ được thay thế bằng k bên trong hàm. Chương trình sẽ dịch tuần tự như sau.
- đầu tiên chương trình bắt đầu dịch từ dòng sau chữ void main()
- khi thấy clrscr(), chương trình vào thư viện conio.h để kiểm tra và nó xóa toàn bộ màn hình.
- khi thấy khai báo int k,n,t; chương trình sẽ cấp bộ nhớ cho các biến này và lưu nó vào chỗ nào đấy của bộ nhơ RAM.
- gặp cout<<"Nhap k: "; chương trình sẽ vào thư viện iostream.h để kiểm tra và in ra màn hình dòng chữ "Nhap k: "
- gặp cin>>k; chương trình sẽ có tác dụng truyền giá trị nhập vào từ bàn phím cho biến k.
- tương tự đối với dòng cout<<"Nhap n: "; cin>>n;
- tiếp theo đến dòng t = giaithua(n)/(giaithua(k)*giaithua(n-k)); trước tiên chương trình sẽ đọc giaithua(n), khi đó chương trình mở hàm giaithua(m) khai báo bên dưới ra và giá trị của m được tính cho giá trị của n và chương trình đọc tuần tự trong hàm giaithua(m), khi kết thúc hàm, chương trình đóng hàm giaithua lại và giaithua(n) có giá trị là giai thừa của n. Tiếp đến khi gặp giaithua(k) chương trình lại nhảy xuống hàm giaithua(m), giá trị m được tính cho giá trị của k, tương tự như vậy khi gặp giaithua(n-k). Cuối cùng t sẽ là giá trị tổ hợp chập k của n phần tử.
- dòng tiếp theo chương trình sẽ in ra giá trị của t;
- đến dòng getch(), chương trình sẽ tìm nó trong thư viện conio.h và dừng lại màn hình chờ người dùng nhập vào phím bất kỳ.
- khi người dùng nhấn phím bất kỳ thì chương trình kết thúc, giải phóng toàn bộ bộ nhớ của các biến và các hàm.
Hàm có thể trả về giá trị là kiểu int, kiểu float ... hoặc là không có giá trị trả về, khi đó nó được khai báo là void. Ví dụ hàm sau:
void thongbao()
{
cout<<"Xin chao cac ban!";
}
Hàm này chỉ có tác dụng in ra một câu thông báo chứ chẳng cần phải trả về giá trị gì cả. */

Không có nhận xét nào:

Đăng nhận xét