Powtórzenie — pola figur
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 11 z 57.
Wyzwanie
ŚredniZbuduj niewielką bibliotekę kształtów w czterech plikach. Konstruktory są podane.
Shape.R: metody generycznearea(shape, ...),perimeter(shape, ...)idescribe(shape, ...). Domyślne metodyarea()iperimeter()przerywają działanie z komunikatemunknown shape: hexagon(użyjcall. = FALSE). Domyślna metodadescribe()zwracacircle: area 3.14, perimeter 6.28, utworzony na podstawie pierwszej klasy kształtu oraz dwóch metod generycznych, z dwoma miejscami po przecinku.Circle.R,Rectangle.R,Triangle.R: metodyareaiperimeterdla każdego kształtu. Trójkąt ma bokia,b,c; jego pole wynosisqrt(s * (s - a) * (s - b) * (s - c)), gdziesto połowa obwodu.
Dostarczony kod odczytuje wiersze circle 1, rectangle 2 3, triangle 3 4 5 lub dowolną inną nazwę, wypisuje describe() albo error: i komunikat, a na końcu łączne pole.
Umieść swój kod w plikach Shape.R, Circle.R, Rectangle.R i Triangle.R. Plik main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
source("Shape.R")
source("Circle.R")
source("Rectangle.R")
source("Triangle.R")
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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 = "")
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy S3
Praca z plikamiListy z klasąFunkcje konstruktoraMetody print i formatWalidatory i funkcje pomocniczePowtórzenie — temperatury4Enkapsulacja w R
Domknięcia jako obiektyŚrodowiska jako obiektyFunkcje dostępoweOchrona stanuPodsumowanie – parkometr2Generics i metody S3
Generics i UseMethodMetody domyślneMetody dla podstawowych genericsPodstawy NextMethodPowtórzenie — pola figur5Klasy S4
Definiowanie klas S4Sloty i dostępSprawdzanie poprawnościMetody wyświetlaniaPodsumowanie – katalog produktów8Klasy referencyjne
Definiowanie klas referencyjnychMetody i aktualizacja pólSemantyka kopiowaniaDziedziczenie i callSuperPodsumowanie – kolejka zadań11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książek3Dziedziczenie S3
Wektory klasKolejność wyszukiwania metodRozszerzanie za pomocą NextMethodSprawdzanie za pomocą inherits()Powtórzenie — lista płac pracownikówPoćwicz samodzielnie: Kompilator R online