סיכום – שטחי צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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
עבודה עם קבציםרשימות עם מחלקהפונקציות בנאימתודות print ו-formatמאמתים ופונקציות עזרחזרה – טמפרטורות2גנריות ומתודות של S3
גנריות ו־UseMethodמתודות ברירת מחדלמתודות לגנריות הבסיסיסודות NextMethodסיכום – שטחי צורותתרגלו בעצמכם: קומפיילר R אונליין