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