مراجعة - مساحات الأشكال
جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 11 من 57.
التحدي
متوسطأنشئ مكتبة صغيرة للأشكال موزعة على أربعة ملفات. المُنشئات مُعطاة.
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 = "")
جميع دروس البرمجة كائنية التوجه
1أساسيات S3
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكالتدرّب بنفسك: مترجم R عبر الإنترنت