Повторение — площади фигур
Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 11 из 57.
Задание
СреднеСоздайте небольшую библиотеку фигур в четырёх файлах. Конструкторы предоставлены.
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 = "")
Все уроки раздела Объектно-ориентированное программирование
1Основы S3
Работа с файламиСписки с классомФункции-конструкторыМетоды print и formatВалидаторы и вспомогательные функцииПовторение — температуры4Инкапсуляция в R
Замыкания как объектыОкружения как объектыФункции доступаЗащита состоянияПовторение — парковочный счётчик7S4 Наследование
Расширение с помощью containscallNextMethodВиртуальные классыПроверка типов с помощью is()Повторение — смотритель зоопарка10Шаблоны проектирования, часть 2
Шаблон «Декоратор»Шаблон «Строитель»Шаблон «Состояние»Шаблон «Итератор»2Обобщённые функции и методы S3
Обобщённые функции и UseMethodМетоды по умолчаниюМетоды для базовых обобщённых функцийОсновы NextMethodПовторение — площади фигур5Классы S4
Определение классов S4Слоты и доступПроверка корректностиМетоды showПовторение — каталог товаров8Ссылочные классы
Определение ссылочных классовМетоды и обновление полейСемантика копированияНаследование и callSuperПовторение — очередь задач11Проект: Управление библиотекой
Книги и читателиВыдача книг3Наследование S3
Векторы классовПорядок поиска методовРасширение с помощью NextMethodПроверка с помощью inherits()Повторение — расчёт зарплаты сотрудниковПотренируйтесь самостоятельно: Онлайн-компилятор R