Menu
Coddy logo textTech

Parkhaus

Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 55 von 57.

challenge icon

Aufgabe

Schwer

Erstelle ein Parkhaus. Vehicle.R deklariert die virtuelle S4-Klasse Vehicle (Slot plate), die Generics size_rank(v) und rate(v) sowie die Namen SIZES: small, medium, large für die Ränge 1, 2 und 3.

  • In Motorbike.R, Car.R und Van.R werden die Klassen deklariert; füge ihre Methoden hinzu: Ein Motorrad hat Rang 1 und zahlt 1 pro Stunde, ein Auto Rang 2 und 3 pro Stunde, ein Lieferwagen Rang 3 und 5 pro Stunde.
  • Vervollständige in Garage.R die Referenzklasse Garage. Ihr Feld free enthält die freien Stellplätze pro Rang, und parked ist eine nach Kennzeichen indizierte Liste. park(v) nimmt einen freien Stellplatz des eigenen Fahrzeugrangs oder, falls keiner frei ist, des nächsthöheren Rangs und gibt parked AB12 in medium, full for AB12 oder AB12 is already parked zurück. leave(plate, hours) gibt den Stellplatz frei und gibt AB12 paid 9 (den Tarif multipliziert mit der Anzahl der Stunden, mindestens 1 Stunde) oder no vehicle AB12 zurück. status() gibt free: small 1, medium 0, large 2; parked: 1 zurück.

Der bereitgestellte Code liest die freien Stellplätze als small,medium,large ein, anschließend die Befehle park car AB12 (bike, car oder van), leave AB12 3 oder status, und gibt jede Antwort aus.

Dein Code gehört in Vehicle.R, Motorbike.R, Car.R, Van.R und Garage.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

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

# Gelieferter Input-/Output-Code: belasse ihn wie er ist
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 = "")
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-R-Compiler