Bài 36.3. Mô Phỏng Hệ Thống Đồ Họa Đa Dạng - [Độ khó: Khá]
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ể:
HinhTron
(Circle): Thêm thuộc tínhbanKinh
(radius). Phương thứctinhDienTich()
sẽ tính diện tích hình tròn (PI * banKinh * banKinh
). Phương thứcve()
sẽ in ra thông tin cụ thể của hình tròn.HinhChuNhat
(Rectangle): Thêm thuộc tínhchieuDai
(length) vàchieuRong
(width). Phương thứctinhDienTich()
sẽ tính diện tích hình chữ nhật (chieuDai * chieuRong
). Phương thứcve()
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