Menu
CoddyTech

Ôn tập: trình quản lý Point

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 11 trên 61.

challenge icon

Thử thách

Dễ

Hãy xây dựng một module Point hoàn chỉnh để quản lý tọa độ 2D. Thử thách ôn tập này kết hợp mọi điều bạn đã học về cách xem struct như đối tượng: dùng con trỏ để thay đổi trạng thái và con trỏ const cho các thao tác chỉ đọc.

Bạn sẽ tạo ba tệp:

  • point.h: Khai báo một struct Point có hai thành viên số nguyên: x và y. Đồng thời khai báo hai hàm đóng vai trò như phương thức:
    • point_move: nhận một con trỏ đến Point cùng với hai số nguyên (dx và dy), rồi dịch chuyển vị trí của điểm bằng cách cộng các giá trị này vào x và y
    • point_print: nhận một con trỏ const đến Point và hiển thị tọa độ của điểm (hàm này không được thay đổi điểm)
    Dùng các chỉ thị bảo vệ include với ký hiệu POINT_H.
  • point.c: Cài đặt cả hai hàm. Hãy cân nhắc kỹ hàm nào cần con trỏ thông thường để thay đổi điểm và hàm nào dùng con trỏ const để đọc an toàn mà không thay đổi điểm.
  • main.c: Tạo một Point, di chuyển điểm đó và hiển thị vị trí của nó ở các thời điểm khác nhau.

Bạn sẽ nhận được bốn đầu vào số nguyên: giá trị x ban đầu, giá trị y ban đầu, giá trị dx (khoảng cách di chuyển theo chiều ngang) và giá trị dy (khoảng cách di chuyển theo chiều dọc).

Trong tệp chính, khởi tạo một Point với tọa độ ban đầu, in ra vị trí ban đầu, di chuyển điểm theo các giá trị đã cho, rồi in ra vị trí mới.

Hàm point_print cần in ra theo định dạng sau:

Point: ({x}, {y})

Ví dụ, với các đầu vào 3, 5, 2 và -1, đầu ra sẽ là:

Point: (3, 5)
Point: (5, 4)

Tự làm thử

#include <stdio.h>
#include "point.h"

int main() {
    // Đọc các giá trị đầu vào
    int x, y, dx, dy;
    scanf("%d", &x);
    scanf("%d", &y);
    scanf("%d", &dx);
    scanf("%d", &dy);
    
    // TODO: Tạo một Point với tọa độ ban đầu (x, y)
    
    // TODO: In ra vị trí ban đầu bằng point_print
    
    // TODO: Di chuyển điểm theo (dx, dy) bằng point_move
    
    // TODO: In ra vị trí mới bằng point_print
    
    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