Bài 36.3. Mô Phỏng Hệ Thống Đồ Họa Đa Dạng - [Độ khó: Khá]


LÀM BÀI

Points: 10 (partial)
Time limit: 2.0s
Memory limit: 64M

Author:
Problem type

Bài 36.3. Mô Phỏng Hệ Thống Đồ Họa Đa Dạng - [Độ khó: Khá]

Bạn đang làm việc cho một công ty phát triển phần mềm đồ họa và được giao nhiệm vụ xây dựng một hệ thống để vẽ các hình học cơ bản. Hệ thống cần hỗ trợ nhiều loại hình khác nhau (hình tròn, hình chữ nhật) và có khả năng mở rộng để thêm các hình mới trong tương lai. Điều quan trọng là có thể thao tác trên các hình này một cách tổng quát thông qua một giao diện chung.

Mô tả bài tập

Bạn cần thiết kế một lớp cơ sở trừu tượng HinhHoc (Shape) với các thuộc tính chung như mauSac (color) và viTriX, viTriY (coordinates). Lớp này phải có một phương thức thuần ảo tinhDienTich() (calculate area) và một phương thức ảo ve() (draw) để mô phỏng việc vẽ hình. Phương thức ve() sẽ in ra thông tin về hình và màu sắc.

Kế thừa từ HinhHoc để tạo hai lớp cụ thể:

  1. HinhTron (Circle): Thêm thuộc tính banKinh (radius). Phương thức tinhDienTich() sẽ tính diện tích hình tròn (PI * banKinh * banKinh). Phương thức ve() sẽ in ra thông tin cụ thể của hình tròn.
  2. HinhChuNhat (Rectangle): Thêm thuộc tính chieuDai (length) và chieuRong (width). Phương thức tinhDienTich() sẽ tính diện tích hình chữ nhật (chieuDai * chieuRong). Phương thức ve() sẽ in ra thông tin cụ thể của hình chữ nhật.

Chương trình của bạn sẽ đọc một danh sách các hình và sau đó: a. Tính tổng diện tích của tất cả các hình. b. Mô phỏng việc vẽ từng hình theo thứ tự đã nhập.

Hãy đảm bảo sử dụng con trỏ hoặc tham chiếu tới lớp cơ sở để lưu trữ và thao tác với các đối tượng hình học.

INPUT FORMAT

Dòng đầu tiên chứa số nguyên N (1 <= N <= 100), là số lượng hình học. N dòng tiếp theo, mỗi dòng mô tả một hình:

  • Nếu là hình tròn: TRON <mau_sac> <x> <y> <ban_kinh>
  • Nếu là hình chữ nhật: CHU_NHAT <mau_sac> <x> <y> <chieu_dai> <chieu_rong>

Trong đó:

  • <mau_sac>: Chuỗi (ví dụ: Red, Blue, Green).
  • <x>, <y>: Số nguyên (tọa độ).
  • <ban_kinh>, <chieu_dai>, <chieu_rong>: Số thực dương.

Ràng buộc:

  • Bán kính, chiều dài, chiều rộng từ 0.1 đến 100.0.
  • Tọa độ từ -1000 đến 1000.
  • PI có thể lấy giá trị 3.14159.
OUTPUT FORMAT

Đầu tiên, in ra tổng diện tích của tất cả các hình, làm tròn đến 2 chữ số thập phân. Sau đó, cho mỗi hình trong danh sách theo thứ tự nhập, in ra thông tin "vẽ" của nó. Định dạng:

  • Tổng diện tích: Tong dien tich: [tong_dien_tich]
  • Hình tròn: Ve hinh tron mau [mau_sac] tai ([x],[y]) voi ban kinh [ban_kinh]. Dien tich: [dien_tich].
  • Hình chữ nhật: Ve hinh chu nhat mau [mau_sac] tai ([x],[y]) voi chieu dai [chieu_dai] va chieu rong [chieu_rong]. Dien tich: [dien_tich]. Diện tích, bán kính, chiều dài, chiều rộng in với 2 chữ số thập phân.
Ví dụ:

Input:

2
TRON Red 10 20 5.0
CHU_NHAT Blue 0 0 10.0 4.0

Output:

Tong dien tich: 118.54
Ve hinh tron mau Red tai (10,20) voi ban kinh 5.00. Dien tich: 78.54.
Ve hinh chu nhat mau Blue tai (0,0) voi chieu dai 10.00 va chieu rong 4.00. Dien tich: 40.00.

Giải thích:

  • Hình tròn: Bán kính 5.0. Diện tích = 3.14159 * 5.0 * 5.0 = 78.53975 ~ 78.54.
  • Hình chữ nhật: Chiều dài 10.0, chiều rộng 4.0. Diện tích = 10.0 * 4.0 = 40.00.
  • Tổng diện tích = 78.54 + 40.00 = 118.54.
  • Các phương thức ve() được gọi polymorphically, hiển thị thông tin chi tiết cho từng loại hình.


Comments

There are no comments at the moment.

Zalo