Menu
CoddyTech

Rekap: Luas Bangun

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 11 dari 57.

challenge icon

Tantangan

Sedang

Buat library kecil untuk bentuk geometri dalam empat file. Konstruktor sudah disediakan.

  • Shape.R: fungsi generik area(shape, ...), perimeter(shape, ...), dan describe(shape, ...). method default area() dan perimeter() berhenti dengan unknown shape: hexagon (gunakan call. = FALSE). describe() default mengembalikan circle: area 3.14, perimeter 6.28, yang dibuat dari class pertama bentuk dan kedua fungsi generik, dengan dua angka desimal.
  • Circle.R, Rectangle.R, Triangle.R: method area dan perimeter untuk setiap bentuk. Segitiga memiliki sisi a, b, c; luasnya adalah sqrt(s * (s - a) * (s - b) * (s - c)), dengan s setengah dari keliling.

Kode yang disediakan membaca baris circle 1, rectangle 2 3, triangle 3 4 5 atau nama lainnya, mencetak describe() atau error: beserta pesannya, lalu mencetak total luas.

Tulis kodemu di Shape.R, Circle.R, Rectangle.R, dan Triangle.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

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

# Kode input/output yang disediakan: biarkan apa adanya
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 = "")

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online