Menu
Coddy logo textTech

אריתמטיקה של וקטורים ומחזוריות

חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 69 מתוך 78.

כשמבצעים פעולות חשבון בין שני וקטורים באותו אורך, R מחילה את הפעולה על כל איבר בנפרד:

a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)

פלט:

[1] 11 22 33

אבל מה קורה כאשר לאורכי הווקטורים יש אורכים שונים? ב-R נעשה שימוש בהתנהגות שנקראת מחזוריות. הווקטור הקצר יותר חוזר על עצמו כדי להתאים לאורך של הווקטור הארוך יותר:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

פלט:

[1]  10 200  30 400  50 600

כאן, נעשה שימוש חוזר ב־multiplier כדי להפוך אותו ל־c(10, 100, 10, 100, 10, 100) לפני הכפל. הדבר שימושי במיוחד כשעובדים עם ערך יחיד:

prices <- c(10, 20, 30)
print(prices * 1.1)

פלט:

[1] 11 22 33

הערך היחיד 1.1 משוכפל כדי להתאים לאורך של prices. יש להיזהר כשאורך הווקטור הארוך יותר אינו כפולה של אורך הווקטור הקצר יותר, מכיוון ש-R עדיין יבצע את הפעולה, אך עשוי להציג אזהרה על שכפול חלקי.

challenge icon

אתגר

קל

תקבלו שתי שורות קלט:

  1. רשימת מספרים מופרדים בפסיקים המייצגים ערכי בסיס (למשל, 10,20,30,40,50,60)
  2. רשימת מכפילים מופרדים בפסיקים (למשל, 2,5)

באמצעות אריתמטיקה של וקטורים ומחזור:

  1. צרו וקטור מספרי מערכי הבסיס
  2. צרו וקטור מספרי מהמכפילים
  3. הכפילו את ערכי הבסיס במכפילים (R תחזור על הווקטור הקצר יותר)
  4. הדפיסו את תוצאת הכפל
  5. הוסיפו 100 לכל איבר בערכי הבסיס המקוריים (מחזור של ערך יחיד)
  6. הדפיסו את תוצאת החיבור
  7. החסירו את וקטור המכפילים מווקטור ערכי הבסיס
  8. הדפיסו את תוצאת החיסור

לדוגמה, אם הקלט הוא:

5,10,15,20,25,30
3,7

הפלט אמור להיות:

[1]  15  70  45 140  75 210
[1] 105 110 115 120 125 130
[1]  2  3 12 13 22 23

הסבר:

  • כפל: המכפילים c(3, 7) חוזרים במחזור ל-c(3, 7, 3, 7, 3, 7), והתוצאה היא 5*3, 10*7, 15*3, 20*7, 25*3, 30*7
  • חיבור: הערך היחיד 100 חוזר במחזור כדי להתווסף לכל איבר
  • חיסור: המכפילים חוזרים במחזור שוב, והתוצאה היא 5-3, 10-7, 15-3, 20-7, 25-3, 30-7

נסו בעצמכם

# קראו את הקלט
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# המירו את הערכים המופרדים בפסיקים לווקטורים מספריים
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])

# TODO: כתבו את הקוד שלכם למטה
# 1. הכפילו את base_values ב-multipliers (מִחזור הערכים יתבצע אוטומטית)
# 2. הדפיסו את תוצאת הכפל
# 3. הוסיפו 100 לכל איבר ב-base_values
# 4. הדפיסו את תוצאת החיבור
# 5. החסירו את multipliers מ-base_values
# 6. הדפיסו את תוצאת החיסור
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

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