Menu
Coddy logo textTech

Tekrar - Şekil Alanları

Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 11 / 57.

challenge icon

Görev

Orta

Dört dosya üzerinde küçük bir şekil kitaplığı oluşturun. Yapıcılar verilmiştir.

  • Shape.R: area(shape, ...), perimeter(shape, ...) ve describe(shape, ...) generic'leri. Varsayılan area() ve perimeter() yöntemleri unknown shape: hexagon ile durmalıdır (call. = FALSE kullanın). Varsayılan describe(), şeklin ilk sınıfı ve iki generic kullanılarak, iki ondalık basamakla oluşturulan circle: area 3.14, perimeter 6.28 değerini döndürür.
  • Circle.R, Rectangle.R, Triangle.R: her şeklin area ve perimeter yöntemleri. Bir üçgenin a, b, c kenarları vardır; alanı, s çevrenin yarısı olmak üzere sqrt(s * (s - a) * (s - b) * (s - c)) şeklindedir.

Verilen kod; circle 1, rectangle 2 3, triangle 3 4 5 veya başka herhangi bir adı içeren satırları okur, describe() ya da error: ile birlikte mesajı yazdırır ve son olarak toplam alanı yazdırır.

Kodunuz Shape.R, Circle.R, Rectangle.R ve Triangle.R dosyalarına yazılmalıdır. main.R, verilen girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

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

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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 = "")

Nesne Tabanlı Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi