Menu
Coddy logo textTech

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

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 אונליין