[Tự học lập trình C/C++] Bài 11: Hàm (function)

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

1. Khái niệm hàm (function)
Hàm là một khối lệnh được thực hiện khi nó được gọi từ một điểm khác của chương trình.

2. Khai báo hàm
  <KDL> <Tên hàm> ([tham số])  
     {      
       Khối lệnh;...    
     }
 
   Trong đó: 
  - <KDL>: kiểu dữ liệu được trả về của hàm.     
  - <Tên hàm>: tên gọi của hàm.     
  - [tham số]: các tham số (có nhiều bao nhiêu cũng được tuỳ theo nhu cầu).   
    + Một tham số bao gồm tên kiểu dữ liệu sau đó là tên của tham số giống như khi khai báo biến (ví dụ int x) và đóng vai trò bên trong hàm như bất kì biến nào khác.  
    + Chúng dùng để truyền tham số cho hàm khi nó được gọi.  
    + Các tham số khác nhau được ngăn cách bởi các dấu phẩy.    
    + Tham số có thể có hoặc không.  
   
  - Khối lệnh: thân của hàm. Nó có thể là một lệnh đơn hay một khối lệnh. 
 
Ví dụ:
 // hàm tính tổng 2 số nguyên
 int Tong( int a, int b)
  {
  int s = a + b;  
  return s;  
  }

 // hàm in ra màn hình các số chăn <100.
 void InSoChan()
  {
  cout<<"\n In so chan: ";  
  for(int i=0; i<=100; i++)  
  if (i%2==0)  
    cout<<i<<"; ";
  }

3. Tham số của hàm
- Tham trị:
+ Là những tham số không có sự thay đổi khi hàm được gọi
+ Khai báo:
 <KDL> <tham so>,

Ví dụ:
 int Tong(int a, int b) // a,b là tham trị
 {  ... }

- Tham biến:
+ Là những tham số có sự thay đổi khi hàm được gọi
+ Khai báo:
 <KDL> &<tham so>,

Ví dụ:
 int Tong(int &a, int &b) // a,b là tham biến
 {  ... }

4. Sử dụng hàm trong các trường hợp:  
  - Khối lệnh lặp đi lặp lại nhiều lần  
  - Các khối lệnh phức tạp  
  - Một xử lý có chứa nhiều xử lý thành phần  
  - Sử dụng hàm giúp dễ quản lý, dễ chỉnh sửa và sửa lỗi chương trình.  
  - Ngoài ra các hàm còn dùng để xây dựng các thư viên.   
  - Gọi hàm mỗi khi sử dụng. Gọi hàm thông qua tên hàm, các tham số và kiểu dữ liệu trả về.

5. Hàm đệ quy
  Hàm đệ quy là hàm gọi đến chính nó.

  Ví dụ:  
  // Tính 1+2+3+...+n. Hàm Tong gọi đến chính nó  
    int Tong(int n){
    if (n==1)
    return 1;    
    return Tong(n-1)+n;    
    }


 
---------------------------------
** VÍ DỤ
---------------------------------

Ví dụ 1:

+ Yêu cầu: Giải và biên luận phương trình bậc 2, một ẩn.

+ Code:

#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

// Khai bao he so

float a,b,c;
// Ham nhap he so
void NhapHS(){
cout<<"\n Nhap he so a,b,c: ";
cin>>a>>b>>c;
}

// Ham giai phuong trinh bac1
void GiaiBac1(float a, float b){
if(a==0)
if(b==0)
cout<<"\n PT vo so nghiem.";
else
cout<<"\n PT vo nghiem.";
else
cout<<"\n PT co nghiem. x= "<<-b/a;

}

// Ham giai phuong trinh bac2
void GiaiBac2(float a, float b, float c){
if(a==0) // suy bien thanh bac1
GiaiBac1(b,c); // goi ham
else
{
float d; //d: delta
d=b*b-4*a*c;
if (d<0)
cout<<"\n PT vo nghiem ";

if (d==0)
cout<<"\n PT co nghiem kep: x1=x2= "<< -b/(2*a);
if (d>0)
{
float x1 = (-b-(float)sqrt(d))/(2*a);
float x2 = (-b-(float)sqrt(d))/(2*a);
cout<<"\n PT co 2 nghiem: x1= "<<x1<<" ; x2= "<<x2;
}
}
}

// ham main
int main() {
// goi ham nham he so
NhapHS();
// Goi ham giai PT bac 2
GiaiBac2(a,b,c);
   return 0;
}

-----------------

Ví dụ 2:

+ Yêu cầu: Viết chương trình nhập vào hai số, hoán đổi 2 số với nhau.
   (sử dụng tham biến)
 
+ Code:

#include <iostream>
#include <conio.h>

using namespace std;

// Ham hoan doi
void HoanDoi(int &a, int &b){
int t; // bien trung gian
t=a;
a=b; 
b=t;
}

// ham main
int main() {
int a,b;
// nhap a,b
cout<<"\n a= "; cin>>a;
cout<<"\n b= "; cin>>b;
// in a,b ban dau
cout<<"\n +Truoc hoan doi:";
cout<<"\n  a = "<<a;
cout<<"\n  b = "<<b;
// Goi ham hoan doi
HoanDoi(a,b);
// in a,b sau khi hoan doi
cout<<"\n +Sau khi hoan doi:";
cout<<"\n  a = "<<a;
cout<<"\n  b = "<<b;
 return 0;
}
 
-----------------

Ví dụ 3: 

+ Yêu cầu: Viết chương trình tính S= 2! + 4! + 6! + ... + n!.
  Với n nhập vào từ bàn phím thảo mãn, n là số chẵn và 2<=n<=2014.

+ Code:

#include <iostream>
#include <conio.h>

using namespace std;

// khai bao n
int n;
// Ham Nhap n
void NhapN(){
do{
cout<<"\n n= ";
cin>>n;
if (n%2!=0 || n<2 || n>2014)
cout<<"\n Nhap lai n! ";
} while (n%2!=0 || n<2 || n>2014);
}

// Ham tinh giai thua
long GiaiThua( int a ){
long gt=1;
for(int i=1; i<=a; i++)
gt *=i;
return gt;
}

// Ham tinh S
long TinhS(int n){
long s=0;
for(int i=2; i<=n; i=i+2)
s +=GiaiThua(i);
return s;
}

// ham main
int main() {
  // goi ham nhap n
  NhapN(); 
  // Goi ham tinh S 
  cout<<"\n S = "<<TinhS(n); 
   return 0;
}

-----------------

Ví dụ 4:

+ Yêu cầu: Viết chương trình
- Nhập vào k, n (1<=k<=n<=100).
- Tinh C(k,n) (tổ hợp chập k của n).

+ Code:

#include <iostream>
#include <conio.h>

using namespace std;

// khai bao n,k
int k,n;
// Ham Nhap n
void NhapK_N(){
// nhap k
do{
cout<<"\n k= ";
cin>>k;
if (k<1 || k>100)
cout<<"\n Nhap lai k! ";
} while (k<1 || k>100);
// nhap n
do{
cout<<"\n n= ";
cin>>n;
if (n<k || n>100)
cout<<"\n Nhap lai n! ";
} while (n<k || n>100);

}

// Ham de quy tinh giai thua
long GiaiThua( int a ){
if(a==1)
return 1;
return GiaiThua(a-1)*a;
}

// Ham tinh C
int TinhC(int k, int n){
int c;
c=GiaiThua(n)/(GiaiThua(k)*GiaiThua(n-k));
return c;
}

// ham main
int main() {
  // goi ham nhap k,n
  NhapK_N(); 
  // Goi ham tinh c 
  cout<<"\n C = "<<TinhC(k,n); 
   return 0;
}

-----------------

Ví dụ 5:

+ Yêu cầu: Viết các hàm
- Nhập vào dãy số nguyên không quá 100 số
- In dãy
- Sắp xếp dãy tăng dần.

+ Code:

#include <iostream>
#include <conio.h>
#define max 100

using namespace std;

//nhap day
void NhapDay(int a[], int n) {
  for(int i=0; i<n; i++) {  
    cout<<"\n a["<<i<<"] =";
    cin>>a[i];
  }
}

//xuat day
void XuatDay(int a[],int n) {
  cout<<"\n IN DAY: ";
  for(int i=0; i<n; i++)
    cout<<a[i]<<"\t";
}

//hoan vi 2 phan tu
void Swap(int &a,int &b) {
   int t = a;
   a = b;
   b = t;
}

//thuat toan Selection Sort
void SelectionSort(int a[],int n) {
   int min; // chi so phan tu nho nhat trong day hien hanh
   for(int i=0; i<n-1; i++) {   
      min = i;  
      for(int j=i+1; j<n; j++)  
         if(a[min]>a[j])
            min = j; //ghi nhan vi tri phan tu nho nhat        
      if(min!= i)  
           Swap(a[i],a[min]); // doi chu 2 phan tu
   }
}


// Ham main
int main() {
  int a[max],n;
  cout<<"Nhap so phan tu:";
  cin>>n;
  NhapDay(a,n);
  cout<<"\n Day vua nhap la:";
  XuatDay(a,n);
  cout<<endl;
  SelectionSort (a,n);
  cout<<"\n Day vua sap xep la:";
  XuatDay(a,n);
  return 0;
 }

Khoa học C/C++
------------------------
Xem bài khác:

Quảng cáo

Загрузка...

Categories

8051 (1) AI (1) AI programming (1) amazon (1) Android (27) ASP (1) Assembly (17) Bài giảng (2) Bài giảng lập trình C và Cpp (16) bài giảng quản lý dự án CNTT (1) bài tập java (1) bài tập lập trình (1) Bài viết hay (62) Bản đồ tư duy (1) Bidvertiser (1) Biểu diễn thuật toán (1) bitcoin (1) blockchain (1) Blockchain là gì (1) Bubble-Sort (1) C (77) C Plus Plus (103) C sharp (11) C++ (3) cấu trúc dữ liệu giải thuật (1) Cây (tree) (2) Cây quyết định (3) CDSL phân tán (1) Chữa bài tập Java (1) code assembly (1) Công nghệ điện toán đám mây (1) Công nghệ lập trình (1) Cơ sở dữ liệu (10) CSS (2) Cuộc cách mạng công nghiệp 4.0 (1) Danh ngôn lập trình (1) Danh sách liên kết (list) (1) Datamining (4) Đại số gia tử và ứng dụng (1) đăng ký Amazon (1) Đăng ký hosting (2) đặt hàng trên Amazon (1) Đệ quy (2) Đồ họa (4) Độ phức tạp của thuật toán (1) ebook-csdl (1) ebook-giaithuat (1) ebook-laptrinh (1) ebook-phancung-mang (1) ebook-tinhocungdung (1) ebook-web (1) Exceptions (1) Genetic Algorithm (1) Giải hệ phương trình tuyến tính (5) giải thuật (3) giải thuật Đệ quy (1) Giáo trình (2) Góc học tập (34) Góc suy ngẫm (1) Google App Engine (2) Heap-Sort (1) Hệ quản trị CSDL (1) Học lập trình (125) Học lập trình C và CPP qua ví dụ (15) học lập trình Java (7) HostGator (1) hợp ngữ (1) HPH (25) HTML (1) Hướng Dẫn Đăng Ký Tên Miền và Host Trên Hostgator (1) hướng dẫn mua host (1) hướng dẫn nhận tiền (1) hướng dẫn payoneer (1) Hướng dẫn sử dụng Emu8086 (1) hướng dẫn viết báo (1) hướng đăng ký tên miền (1) Insert-sort (2) iOS (1) Java (50) Java Căn bản (5) java core (3) Java GUI (1) JavaScript (3) Kiếm tiền online (10) Kỹ thuật đồ họa máy tính (9) Kỹ thuật lập trình (16) kỹ thuật SEO (1) Lập trình 8051 với C/C++ (1) Lập trình căn bản (7) Lập trình Cơ sở dữ liệu (2) Lập trình điều khiển thiết bị (1) Lập trình hợp ngữ (1) Lập trình hướng đối tượng (38) Lập trình hướng đối tượng với Java (6) Lập trình mạng (6) Lập trình mobile (3) Lập trình nhúng (1) Lập trình trí tuệ nhân tạo (1) lập trình vi xử lý (1) lập trình viên (1) Lập trình viên độc lập (1) Luyện thi IC3 (4) Lý thuyết Cơ sở dữ liệu (2) Lý thuyết đồ thị (11) Mạng máy tính (1) Mẹo tìm kiếm trên Google (1) Merge-Sort (1) MS Access (1) Mua hàng trên Amazon (1) Nghiên cứu khoa học (1) ngon-ngu-khac (1) Ngôn ngữ lập trình (1) Nhúng code Assembly trong C\C++ (2) Những lỗi thường gặp khi lập trình (1) Oracle (1) Pascal (3) payoneer (1) people-group (1) phần cứng máy tính (1) PHP (1) Quản lý dự án CNTT (1) Queue (hàng đợi) (1) Quick-Sort (1) Seclection-sort (2) SEO (1) SQL (5) Stack (ngăn xếp) (1) Swift (8) tài liệu CNTT miễn phí (2) Tài liệu tham khảo (2) thanh toán quốc tế (1) Thiết kế Web (2) Thủ thuật máy tính (5) thuattoan-khac (1) Thuật toán (41) Thuật toán di truyền (2) Thuật toán Đệ quy (4) Thuật toán K-Mean (1) Thuật toán khác (9) Thuật toán leo đồi (1) Thuật toán ma trận (7) Thuật toán Sắp Xếp -Sort (9) Thuật toán Tìm kiếm - Search (5) Thương mại điện tử (4) Tiện ích máy tính (3) Tìm hiểu Blockchain (1) Tìm kiếm nhị phân (2) Tìm kiếm tuần tự (Line search) (2) Tin học văn phòng (5) Tin tức công nghệ (7) Tính định thức của ma trận (1) Toán rời rạc (12) Trí tuệ nhân tạo (8) Tự học lập trình Android (14) Tự học lập trình C và CPP (14) tự học lập trình iOS (8) Tự học lập trình java qua các ví dụ (7) Ứng dụng cơ sở dữ liệu (1) VB (2) vẽ ngôi nhà (1) ví dụ Assembly (1) xcode (8) XML (1) Xử lý ma trận (mảng 2 chiều) (7) Xử lý mảng 1 chiều (1) Xử lý ngoại lệ (1)