Menu
CoddyTech

Ôn tập: điều phối máy tính

Thuộc phần Lập trình hướng đối tượng trong hành trình C của Coddy. Bài học 37 trên 61.

challenge icon

Thử thách

Dễ

Tạo một máy tính bằng bảng điều phối. Bạn sẽ tạo một mảng con trỏ hàm ánh xạ mã phép toán với hàm tương ứng, sau đó dùng mảng này để thực hiện phép tính.

Viết chương trình:

  1. Tạo một typedef có tên Operation cho con trỏ hàm nhận hai tham số int và trả về một int
  2. Định nghĩa bốn hàm số học:
    • add: trả về a + b
    • sub: trả về a - b
    • mul: trả về a * b
    • divide: trả về a / b (phép chia lấy phần nguyên)
  3. Trong main, tạo một bảng điều phối: một mảng gồm 4 con trỏ hàm Operation, trong đó chỉ số 0 là add, chỉ số 1 là sub, chỉ số 2 là mul và chỉ số 3 là divide
  4. Đọc ba đầu vào: hai số nguyên và một mã phép toán (0-3)
  5. Dùng mã phép toán làm chỉ số để truy cập bảng điều phối và gọi hàm tương ứng
  6. In ra kết quả

Bạn sẽ nhận ba đầu vào: số thứ nhất, số thứ hai và mã phép toán (0 cho add, 1 cho sub, 2 cho mul, 3 cho divide).

Đầu ra của bạn phải là một số nguyên duy nhất: kết quả của phép toán:

7

Trong ví dụ này, với đầu vào là 10, 3, 1: mã phép toán 1 chọn sub từ bảng điều phối, nên ta tính 10 - 3 = 7.

Điểm mấu chốt ở đây là dùng chỉ số mảng để chọn hàm: không cần câu lệnh if hay switch. Bảng điều phối của bạn sẽ có dạng:

Operation ops[4] = {add, sub, mul, divide};

Sau đó gọi hàm bằng: ops[code](a, b)

Tự làm thử

#include <stdio.h>

// TODO: Tạo một typedef tên là 'Operation' cho con trỏ hàm (function)
// nhận hai tham số kiểu int và trả về một giá trị kiểu int


// TODO: Định nghĩa bốn hàm số học: add, sub, mul, divide


int main() {
    // Đọc đầu vào
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: Tạo bảng điều phối (mảng gồm 4 con trỏ hàm Operation)
    // Operation ops[4] = { ... };
    
    // TODO: Dùng mã phép toán để gọi hàm phù hợp
    // và lưu kết quả
    int result;
    
    // In ra kết quả
    printf("%d\n", result);
    
    return 0;
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C online