Menu
Coddy logo textTech

ממוצעי תלמידים

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

challenge icon

אתגר

קל

הוסיפו את הפקודה AVG. ודאו שכל הפקודות מהשלבים הקודמים ממשיכות לעבוד בדיוק כמו קודם.

  • AVG <name>: השיבו no student <name> עבור תלמיד לא מוכר, <name>: no grades עבור תלמיד שאין לו ציונים, ואחרת <name>: ואחריו ממוצע הציונים שלו, עם ספרה אחת אחרי הנקודה, כגון ada: 88.8.

פונקציית עזר שממירה וקטור של ציונים ל-no grades או לממוצע בפורמט המתאים תהיה שימושית שוב בשלב הבא.

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

נסו בעצמכם

gradebook <- function(commands) {
  grades <- list()
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    name <- parts[2]
    if (parts[1] == "ADD") {
      if (name %in% names(grades)) {
        replies <- c(replies, paste(name, "already exists"))
      } else {
        grades[[name]] <- numeric(0)
        replies <- c(replies, paste("added", name))
      }
    } else if (parts[1] == "GRADE") {
      if (!(name %in% names(grades))) {
        replies <- c(replies, paste("no student", name))
      } else {
        score <- as.numeric(parts[3])
        grades[[name]] <- c(grades[[name]], score)
        replies <- c(replies, paste("recorded", score, "for", name))
      }
    }
  }
  replies
}

# קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

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

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