Menu
Coddy logo textTech

Repaso: áreas de figuras

Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 11 de 57.

challenge icon

Desafío

Intermedio

Construye una pequeña biblioteca de formas en cuatro archivos. Los constructores ya están proporcionados.

  • Shape.R: los genéricos area(shape, ...), perimeter(shape, ...) y describe(shape, ...). Los métodos predeterminados area() y perimeter() se detienen con unknown shape: hexagon (usa call. = FALSE). El describe() predeterminado devuelve circle: area 3.14, perimeter 6.28, construido a partir de la primera clase de la forma y de los dos genéricos, con dos decimales.
  • Circle.R, Rectangle.R, Triangle.R: los métodos area y perimeter de cada forma. Un triángulo tiene los lados a, b, c; su área es sqrt(s * (s - a) * (s - b) * (s - c)), donde s es la mitad del perímetro.

El código proporcionado lee líneas circle 1, rectangle 2 3, triangle 3 4 5 o cualquier otro nombre, imprime describe() o error: y el mensaje, y finalmente el área total.

Tu código va en Shape.R, Circle.R, Rectangle.R y Triangle.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

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

# Código de entrada/salida suministrado: déjalo tal como está
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 = "")

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online