Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مساحات الأشكال

جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 11 من 57.

challenge icon

التحدي

متوسط

أنشئ مكتبة صغيرة للأشكال موزعة على أربعة ملفات. المُنشئات مُعطاة.

  • 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 = "")

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم R عبر الإنترنت