ממוצעי תלמידים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 24 מתוך 64.
אתגר
קלהוסיפו את הפקודה 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")
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין