Menu
Coddy logo textTech

Revisão - Áreas de formas

Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 11 de 57.

challenge icon

Desafio

Médio

Construa uma pequena biblioteca de formas em quatro arquivos. Os construtores são fornecidos.

  • Shape.R: os genéricos area(shape, ...), perimeter(shape, ...) e describe(shape, ...). Os métodos padrão area() e perimeter() interrompem a execução com unknown shape: hexagon (use call. = FALSE). O describe() padrão retorna circle: area 3.14, perimeter 6.28, construído a partir da primeira classe da forma e dos dois genéricos, com duas casas decimais.
  • Circle.R, Rectangle.R, Triangle.R: os métodos area e perimeter de cada forma. Um triângulo tem os lados a, b, c; sua área é sqrt(s * (s - a) * (s - b) * (s - c)), com s igual à metade do perímetro.

O código fornecido lê linhas como circle 1, rectangle 2 3, triangle 3 4 5 ou qualquer outro nome, imprime describe() ou error: e a mensagem e, por fim, a área total.

Seu código deve ficar em Shape.R, Circle.R, Rectangle.R e Triangle.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

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

# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de R online