Menu
Coddy logo textTech

Wiederholung – Flächeninhalte von Formen

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

challenge icon

Aufgabe

Mittel

Erstelle eine kleine Shape-Bibliothek über vier Dateien. Die Konstruktoren sind vorgegeben.

  • Shape.R: die Generics area(shape, ...), perimeter(shape, ...) und describe(shape, ...). Die Standardmethoden area() und perimeter() brechen mit unknown shape: hexagon ab (verwende call. = FALSE). Das standardmäßige describe() gibt circle: area 3.14, perimeter 6.28 zurück, zusammengesetzt aus der ersten Klasse der Shape und den beiden Generics, mit zwei Dezimalstellen.
  • Circle.R, Rectangle.R, Triangle.R: die area- und perimeter-Methoden jeder Shape. Ein Dreieck hat die Seiten a, b, c; seine Fläche ist sqrt(s * (s - a) * (s - b) * (s - c)), wobei s der halbe Umfang ist.

Der bereitgestellte Code liest Zeilen wie circle 1, rectangle 2 3, triangle 3 4 5 oder einen beliebigen anderen Namen ein, gibt describe() oder error: und die Meldung aus und schließlich die Gesamtfläche.

Dein Code gehört in Shape.R, Circle.R, Rectangle.R und Triangle.R. main.R enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

source("Shape.R")
source("Circle.R")
source("Rectangle.R")
source("Triangle.R")

# Gelieferter Input/Output-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
total <- 0
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  n <- as.numeric(p[-1])
  s <- switch(p[1],
    circle = new_circle(n[1]),
    rectangle = new_rectangle(n[1], n[2]),
    triangle = new_triangle(n[1], n[2], n[3]),
    structure(list(), class = p[1]))
  out <- tryCatch({
    total <- total + area(s)
    describe(s)
  }, error = function(e) paste("error:", conditionMessage(e)))
  cat(out, "\n", sep = "")
}
cat(sprintf("total area: %.2f", total), "\n", sep = "")

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-R-Compiler