Menu
Coddy logo textTech

חניון

חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 55 מתוך 57.

challenge icon

אתגר

קשה

בנו חניון. Vehicle.R מגדיר את מחלקת S4 הווירטואלית Vehicle (משבצת plate), את הגנריקות size_rank(v) ו-rate(v) ואת השמות SIZES: small, medium, large עבור הדרגות 1, 2 ו-3.

  • בקבצים Motorbike.R, Car.R ו-Van.R המחלקות מוגדרות; הוסיפו את המתודות שלהן: לאופנוע דרגה 1 ותשלום של 1 לשעה, למכונית דרגה 2 ותשלום של 3 לשעה, ולוואן דרגה 3 ותשלום של 5 לשעה.
  • בקובץ Garage.R השלימו את מחלקת הייחוס Garage. השדה free מכיל את מספר המקומות הפנויים בכל דרגה, ו-parked היא רשימה לפי מספר הרישוי. park(v) תופסת מקום פנוי בדרגה של הרכב, או, אם אין מקום פנוי, בדרגה הבאה הגדולה יותר, ומחזירה parked AB12 in medium, full for AB12 או AB12 is already parked. leave(plate, hours) מפנה את המקום ומחזירה AB12 paid 9 (התעריף כפול מספר השעות, לפחות שעה אחת) או no vehicle AB12. status() מחזירה free: small 1, medium 0, large 2; parked: 1.

הקוד שסופק קורא את מספר המקומות הפנויים בפורמט small,medium,large, ואז פקודות park car AB12 (bike, car או van), leave AB12 3 או status, ומדפיס כל תשובה.

הקוד שלכם ייכתב בקבצים Vehicle.R, Motorbike.R, Car.R, Van.R ו-Garage.R. הקובץ main.R מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

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

# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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 = "")
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר R אונליין