Menu
Coddy logo textTech

Récapitulatif - Aires des formes

Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 11 sur 57.

challenge icon

Défi

Moyen

Construisez une petite bibliothèque de formes répartie sur quatre fichiers. Les constructeurs sont fournis.

  • Shape.R : les génériques area(shape, ...), perimeter(shape, ...) et describe(shape, ...). Les méthodes par défaut area() et perimeter() s'arrêtent avec unknown shape: hexagon (utilisez call. = FALSE). La méthode par défaut describe() renvoie circle: area 3.14, perimeter 6.28, construit à partir de la première classe de la forme et des deux génériques, avec deux décimales.
  • Circle.R, Rectangle.R, Triangle.R : les méthodes area et perimeter de chaque forme. Un triangle possède les côtés a, b, c ; son aire est sqrt(s * (s - a) * (s - b) * (s - c)), où s est la moitié du périmètre.

Le code fourni lit les lignes circle 1, rectangle 2 3, triangle 3 4 5 ou tout autre nom, affiche describe() ou error: suivi du message, puis affiche finalement l'aire totale.

Votre code doit être placé dans Shape.R, Circle.R, Rectangle.R et Triangle.R. main.R contient le code fourni d'entrée/sortie et ne peut pas être modifié.

Essayez vous-même

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

# Code d'entrée/sortie fourni : le laisser tel quel
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 = "")

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur R en ligne