Menu
Coddy logo textTech

Riepilogo - Aree delle forme

Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 11 di 57.

challenge icon

Sfida

Medio

Crea una piccola libreria di forme in quattro file. I costruttori sono forniti.

  • Shape.R: i generici area(shape, ...), perimeter(shape, ...) e describe(shape, ...). I metodi predefiniti area() e perimeter() si interrompono con unknown shape: hexagon (usa call. = FALSE). Il metodo predefinito describe() restituisce circle: area 3.14, perimeter 6.28, costruito a partire dalla prima classe della forma e dai due generici, con due cifre decimali.
  • Circle.R, Rectangle.R, Triangle.R: i metodi area e perimeter per ciascuna forma. Un triangolo ha i lati a, b, c; la sua area è sqrt(s * (s - a) * (s - b) * (s - c)), con s pari alla metà del perimetro.

Il codice fornito legge righe come circle 1, rectangle 2 3, triangle 3 4 5 o qualsiasi altro nome, stampa describe() oppure error: e il messaggio, e infine l'area totale.

Il tuo codice va inserito in Shape.R, Circle.R, Rectangle.R e Triangle.R. main.R contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

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

# Codice di input/output fornito: lascialo così com'è
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 = "")

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore R online