Menu
Coddy logo textTech

Повторение — площади фигур

Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 11 из 57.

challenge icon

Задание

Средне

Создайте небольшую библиотеку фигур в четырёх файлах. Конструкторы предоставлены.

  • Shape.R: обобщённые функции area(shape, ...), perimeter(shape, ...) и describe(shape, ...). Методы по умолчанию area() и perimeter() завершаются с сообщением unknown shape: hexagon (используйте call. = FALSE). Метод по умолчанию describe() возвращает circle: area 3.14, perimeter 6.28, сформированное на основе первого класса фигуры и двух обобщённых функций, с двумя знаками после запятой.
  • Circle.R, Rectangle.R, Triangle.R: методы area и perimeter для каждой фигуры. У треугольника есть стороны a, b, c; его площадь вычисляется как sqrt(s * (s - a) * (s - b) * (s - c)), где s — половина периметра.

Предоставленный код считывает строки circle 1, rectangle 2 3, triangle 3 4 5 или любое другое имя, выводит describe() либо error: и сообщение, а затем общую площадь.

Ваш код должен находиться в файлах Shape.R, Circle.R, Rectangle.R и Triangle.R. В main.R содержится предоставленный код ввода/вывода, и его нельзя изменять.

Попробуйте сами

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

# Предоставленный код ввода/вывода: оставьте его как есть
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 = "")

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор R