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