התלמיד המצטיין
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 26 מתוך 64.
אתגר
בינוניהוסיפו את הפקודה TOP. ודאו שכל הפקודות מהשלבים הקודמים ממשיכות לפעול בדיוק כמו קודם.
TOP: החזירו אתTop:ואחריו את התלמיד עם הממוצע הגבוה ביותר ואת הממוצע שלו עם ספרה אחת אחרי הנקודה בתוך סוגריים, למשלTop: ada (92.0). דלגו על תלמידים שאין להם ציונים. כשיש שוויון בממוצעים, בחרו בתלמיד ששמו מופיע ראשון בסדר אלפביתי. כשלאף תלמיד אין ציונים, החזירו אתTop: none.
הקוד שסופק מעביר כל שורת קלט אל gradebook() כפקודה אחת, ומדפיס כל תשובה שהוחזרה בשורה נפרדת. שם הוא מילה אחת באותיות קטנות, והקלט מכיל רק את הפקודות שתוארו עד כה.
נסו בעצמכם
average_text <- function(scores) {
if (length(scores) == 0) "no grades" else sprintf("%.1f", mean(scores))
}
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))
}
} else if (parts[1] == "AVG") {
if (!(name %in% names(grades))) {
replies <- c(replies, paste("no student", name))
} else {
replies <- c(replies, paste0(name, ": ", average_text(grades[[name]])))
}
} else if (parts[1] == "REPORT") {
for (student in sort(names(grades))) {
replies <- c(replies, paste0(student, ": ", average_text(grades[[student]])))
}
replies <- c(replies, paste("Class average:", average_text(unlist(grades))))
}
}
replies
}
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין