Menu
CoddyTech

הוספת תלמידים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 22 מתוך 64.

בפרויקט הזה תבנו ספר ציונים שקורא פקודות, אחת בכל שורה, ומשיב לכל אחת מהן. לאורך חמישה שלבים הוא ילמד להוסיף תלמידים, לתעד ציונים, לדווח על ממוצעים ולמצוא את התלמיד עם הציון הגבוה ביותר. בכל שלב מרחיבים את אותה פונקציה gradebook(commands).

ADD ada
GRADE ada 90
AVG ada
REPORT
TOP

הציונים מאוחסנים ברשימה בעלת שמות: השם של כל תלמיד משויך לווקטור מספרי של הציונים שלו. רשימה מתאימה כאן כי לכל תלמיד יש כמה ערכים.

grades <- list()
grades[["ada"]] <- numeric(0)
grades[["ada"]] <- c(grades[["ada"]], 90)
print(length(grades[["ada"]]))
print(names(grades))

פלט:

[1] 1
[1] "ada"

numeric(0) הוא וקטור מספרי ריק. השמה של c() לא תעבוד כאן: הערך שלו הוא NULL, והשמה של NULL מסירה פריט מהרשימה.

כל פקודה מפוצלת לפי רווחים, כך ש־parts[1] היא הפקודה ו־parts[2] הוא השם. שרשרת if / else if בוחרת מה לעשות:

for (cmd in commands) {
  parts <- strsplit(cmd, " ")[[1]]
  name <- parts[2]
  if (parts[1] == "ADD") {
    # טפל ב-ADD
  }
}

התשובות נאספות באמצעות replies <- c(replies, ...) ומוחזרות בסוף.

challenge icon

אתגר

קל

השלימו את gradebook(commands) עבור הפקודה הראשונה:

  • ADD <name>: אם התלמיד חדש, שמרו אותו ללא ציונים והשיבו added <name>. אם השם כבר שמור, השיבו <name> already exists.

הקוד שסופק מעביר כל שורת קלט אל gradebook() כפקודה אחת, ומדפיס כל תשובה שהוחזרה בשורה נפרדת. שם הוא מילה אחת באותיות קטנות, והקלט מכיל רק את הפקודות שתוארו עד כה.

נסו בעצמכם

gradebook <- function(commands) {
  grades <- list()
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    name <- parts[2]
    # כתבו את הקוד שלכם כאן
  }
  replies
}

# קוד קלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

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