Menu
CoddyTech

Bãi đỗ xe

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

challenge icon

Thử thách

Khó

Xây dựng một gara đỗ xe. Vehicle.R khai báo lớp S4 ảo Vehicle (slot plate), các hàm tổng quát size_rank(v) và rate(v), cùng các tên SIZES: small, medium, large tương ứng với hạng 1, 2 và 3.

  • Trong Motorbike.R, Car.R và Van.R, các lớp đã được khai báo. Hãy thêm phương thức cho chúng: xe máy có hạng 1 và trả 1 mỗi giờ, ô tô có hạng 2 và trả 3 mỗi giờ, xe van có hạng 3 và trả 5 mỗi giờ.
  • Trong Garage.R, hãy hoàn thiện lớp tham chiếu Garage. Trường free lưu số chỗ trống theo từng hạng, còn parked là danh sách theo biển số. park(v) dùng một chỗ trống thuộc hạng của xe hoặc, nếu không còn chỗ trống, dùng chỗ ở hạng lớn hơn tiếp theo, rồi trả lời parked AB12 in medium, full for AB12 hoặc AB12 is already parked. leave(plate, hours) giải phóng chỗ và trả lời AB12 paid 9 (mức phí nhân với số giờ, tối thiểu 1 giờ) hoặc no vehicle AB12. status() trả lời free: small 1, medium 0, large 2; parked: 1.

Code được cung cấp đọc số chỗ trống theo thứ tự small,medium,large, sau đó nhận các lệnh park car AB12 (bike, car hoặc van), leave AB12 3 hoặc status, rồi in ra từng câu trả lời.

Code của bạn nằm trong Vehicle.R, Motorbike.R, Car.R, Van.R và Garage.R. main.R chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.

Tự làm thử

source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
garage <- Garage$new(free = as.numeric(strsplit(input[1], ",")[[1]]))
for (line in input[-1]) {
  p <- strsplit(line, " ")[[1]]
  reply <- switch(p[1],
    park = garage$park(switch(p[2],
      bike = new("Motorbike", plate = p[3]),
      car = new("Car", plate = p[3]),
      van = new("Van", plate = p[3]))),
    leave = garage$leave(p[2], as.numeric(p[3])),
    status = garage$status())
  cat(reply, "\n", sep = "")
}

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 R online