Menu
Coddy logo textTech

Tekrar - Hayvanat Bahçesi Bakıcısı

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

challenge icon

Görev

Orta

Beş dosya üzerinde S4 sınıflarından oluşan bir hayvanat bahçesi oluşturun.

  • Animal.R: name ve kg yuvalarına sahip sanal Animal sınıfı, food_kg(a) jeneriği ve Animal için Leo the lion eats 9.5 kg çıktısını (sınıf adı küçük harfle, besin miktarı bir ondalık basamakla) ve yeni bir satırı yazdıran bir show() yöntemi.
  • Mammal.R: Animal içeren sanal Mammal sınıfı.
  • Lion.R ve Elephant.R: ağırlıklarının sırasıyla %5'ini ve %4'ünü tüketen memeliler.
  • Parrot.R: word adlı ek yuvaya sahip bir hayvan (memeli değil); 0.1 kg tüketir ve show() yöntemi hayvan satırını, ardından callNextMethod() ile Polly says hello çıktısını yazdırır.

Sağlanan kod lion Leo 190, elephant Ella 4000 veya parrot Polly 1 hello satırlarını okur; her hayvanı, toplam besin miktarını, memelilerin sayısını ve Animal sınıfının sanal olup olmadığını yazdırır.

Kodunuz Animal.R, Mammal.R, Lion.R, Elephant.R ve Parrot.R dosyalarına gider. main.R sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
zoo <- list()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  kg <- as.numeric(p[3])
  a <- switch(p[1],
    lion = new("Lion", name = p[2], kg = kg),
    elephant = new("Elephant", name = p[2], kg = kg),
    parrot = new("Parrot", name = p[2], kg = kg, word = p[4]))
  zoo[[length(zoo) + 1]] <- a
  print(a)
}
cat(sprintf("food per day: %.1f kg", sum(vapply(zoo, food_kg, numeric(1)))), "\n", sep = "")
cat("mammals: ", sum(vapply(zoo, is, logical(1), "Mammal")), "\n", sep = "")
cat("Animal is virtual: ", isVirtualClass("Animal"), "\n", sep = "")

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

Kendi başına pratik yap: Online R derleyicisi