[CPP] Lập trình hàm trong C++

by | Aug 5, 2024 | Uncategorized | 0 comments

Giới thiệu về hàm trong lập trình

Hàm là một khối mã thực hiện một nhiệm vụ cụ thể và có thể được gọi từ bất kỳ đâu trong chương trình. Sử dụng hàm giúp mã nguồn trở nên dễ đọc, bảo trì và tái sử dụng. Dưới đây là cách thiết kế và sử dụng hàm trong lập trình C++.

Ví dụ giới thiệu:

Dưới đây là một ví dụ về hàm trong C++ được tái sử dụng nhiều lần trong chương trình với nhiều giá trị khác nhau. Xét một hàm để tính diện tích của một hình chữ nhật và gọi hàm này với các giá trị khác nhau từ hàm main.

Ví dụ: Tính diện tích hình chữ nhật

Khai báo và định nghĩa hàm

#include <iostream>
using namespace std;

// Khai báo hàm tính diện tích hình chữ nhật
double calculateArea(double width, double height);

// Định nghĩa hàm
double calculateArea(double width, double height) {
    return width * height;
}

int main() {
    // Gọi hàm với các giá trị khác nhau
    double width1 = 5.0, height1 = 10.0;
    double width2 = 3.5, height2 = 7.8;
    double width3 = 6.2, height3 = 4.4;

    // Tính diện tích cho các hình chữ nhật khác nhau
    double area1 = calculateArea(width1, height1);
    double area2 = calculateArea(width2, height2);
    double area3 = calculateArea(width3, height3);

    // Xuất kết quả
    cout << "Dien tich cua hinh chu nhat thu nhat: " << area1 << " (don vi dien tich)" << endl;
    cout << "Dien tich cua hinh chu nhat thu hai: " << area2 << " (don vi dien tich)" << endl;
    cout << "Dien tich cua hinh chu nhat thu ba: " << area3 << " (don vi dien tich)" << endl;

    return 0;
}

Giải thích

  1. Khai báo hàm:
   double calculateArea(double width, double height);
  • Hàm calculateArea có hai tham số kiểu double: width (chiều rộng) và height (chiều cao).
  • Hàm trả về giá trị kiểu double, là diện tích của hình chữ nhật.
  1. Định nghĩa hàm:
   double calculateArea(double width, double height) {
       return width * height;
   }
  • Hàm nhận hai tham số widthheight, sau đó trả về diện tích tính bằng công thức width * height.
  1. Gọi hàm từ main với các giá trị khác nhau:
  • Trong hàm main, chúng ta khai báo các biến width1, height1, width2, height2, width3, và height3.
  • Gọi hàm calculateArea với các cặp giá trị khác nhau để tính diện tích cho từng hình chữ nhật.
  • Xuất kết quả ra màn hình bằng cách sử dụng cout.

Kết quả

Chương trình sẽ xuất diện tích của ba hình chữ nhật khác nhau, tính toán bằng cách gọi hàm calculateArea với các tham số khác nhau.

Cấu trúc của một hàm

  1. Khai báo hàm (Function Declaration/Prototype): Khai báo hàm trước khi sử dụng.
  2. Định nghĩa hàm (Function Definition): Viết chi tiết các lệnh thực thi trong hàm.
  3. Gọi hàm (Function Call): Sử dụng hàm trong chương trình.

Cách khai báo và định nghĩa hàm

Khai báo hàm

return_type function_name(parameter_list);
  • return_type: Kiểu dữ liệu của giá trị trả về (nếu không có giá trị trả về thì dùng void).
  • function_name: Tên của hàm.
  • parameter_list: Danh sách các tham số, bao gồm kiểu dữ liệu và tên tham số, ngăn cách bởi dấu phẩy.
  • Trong lập trình thi đấu, phần khai báo hàm này có thể được lược bỏ để tiết kiệm thời gian.

Định nghĩa hàm

return_type function_name(parameter_list) {
    // Body of the function
}

Ví dụ minh họa

1. Hàm không có tham số và không trả về giá trị

#include <iostream>
using namespace std;

// Khai báo hàm
void greet();

// Định nghĩa hàm
void greet() {
    cout << "Hello, World!" << endl;
}

int main() {
    greet(); // Gọi hàm
    return 0;
}

2. Hàm có tham số và không trả về giá trị

#include <iostream>
using namespace std;

// Khai báo hàm
void greet(string name);

// Định nghĩa hàm
void greet(string name) {
    cout << "Hello, " << name << "!" << endl;
}

int main() {
    greet("Alice"); // Gọi hàm với tham số
    return 0;
}

3. Hàm có tham số và trả về giá trị

#include <iostream>
using namespace std;

// Khai báo hàm
int add(int a, int b);

// Định nghĩa hàm
int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(5, 3); // Gọi hàm và nhận giá trị trả về
    cout << "Tong: " << result << endl;
    return 0;
}

4. Hàm có tham số mặc định

#include <iostream>
using namespace std;

// Khai báo hàm với tham số mặc định
void greet(string name = "Guest");

// Định nghĩa hàm
void greet(string name) {
    cout << "Hello, " << name << "!" << endl;
}

int main() {
    greet(); // Gọi hàm không truyền tham số, sử dụng giá trị mặc định
    greet("Bob"); // Gọi hàm với tham số
    return 0;
}

Tính đệ quy trong hàm

Hàm đệ quy là hàm tự gọi chính nó. Dưới đây là ví dụ về tính giai thừa bằng đệ quy.

#include <iostream>
using namespace std;

// Khai báo và định nghĩa hàm đệ quy tính giai thừa
int factorial(int n) {
    if (n <= 1) return 1;
    else return n * factorial(n - 1);
}

int main() {
    int number = 5;
    cout << "Giai thua cua " << number << " la: " << factorial(number) << endl;
    return 0;
}

Tổng kết

  • Hàm giúp chia chương trình thành các phần nhỏ, dễ quản lý và tái sử dụng.
  • Việc khai báo và định nghĩa hàm phải tuân thủ đúng cú pháp.
  • Tham số mặc định và tính đệ quy là những tính năng mạnh mẽ của hàm trong C++.

Thông qua các ví dụ trên, bạn có thể dễ dàng hiểu cách thiết kế và sử dụng hàm trong lập trình C++.