Menu
Coddy logo textTech

סיכום – תור המשימות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 41 מתוך 57.

challenge icon

אתגר

בינוני

בנה תור משימות משתי מחלקות Reference. שתי ההגדרות עטופות ב־suppressMessages().

  • Task בקובץ Task.R: השדות title, priority (מספרי) ו־done (לוגי); initialize מגדירה את done ל־FALSE אם לא ניתן לו ערך; label() מחזירה [x] fix (3) עבור משימה שהושלמה או [ ] fix (3).
  • TaskQueue בקובץ TaskQueue.R: השדה tasks (ערך מסוג list); add(title, priority) מוסיפה Task חדשה ומחזירה invisible(.self); next_task() מחזירה את הכותרת של המשימה הפתוחה בעלת העדיפות הגבוהה ביותר (ובמקרה של שוויון, זו שנוספה ראשונה), או nothing; complete(title) מסמנת את המשימה הפתוחה הראשונה עם הכותרת הזאת כהושלמה ומחזירה TRUE, או FALSE; report() מחזירה תווית אחת לכל משימה, לפי סדר הוספתן, ואז open: 2.

הקוד שסופק קורא את add fix 3, את next ואת done fix, ואז מוסיף שתי משימות בקריאה משורשרת אחת ומדפיס את הדוח.

הקוד שלך צריך להיכתב בקבצים Task.R ו־TaskQueue.R. הקובץ main.R מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

source("Task.R")
source("TaskQueue.R")

# קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
q <- TaskQueue$new()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  if (p[1] == "add") {
    q$add(p[2], as.numeric(p[3]))
  } else if (p[1] == "next") {
    cat("next: ", q$next_task(), "\n", sep = "")
  } else if (p[1] == "done") {
    cat(if (q$complete(p[2])) "completed " else "no open task ", p[2], "\n", sep = "")
  }
}
q$add("late", 1)$add("later", 1)
writeLines(q$report())

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר R אונליין