Menu
Coddy logo textTech

repeat ו־break

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 49 מתוך 64.

repeat מריצה את גוף הלולאה שוב ושוב, עד ש-break שבתוכה עוצרת את הלולאה. היא מתאימה ללולאה שתנאי היציאה שלה ידוע רק באמצע הגוף:

n <- 1
repeat {
  n <- n * 2
  if (n > 50) break
}
print(n)

פלט:

[1] 64

רצף קולץ הוא דוגמה: מחלקים את המספרים הזוגיים ב־2, הופכים את המספרים האי־זוגיים ל־3n + 1, ועוצרים ב־1. מספר הצעדים אינו ידוע מראש:

n <- 6
steps <- 0
repeat {
  if (n == 1) break
  n <- if (n %% 2 == 0) n / 2 else 3 * n + 1
  steps <- steps + 1
}
print(steps)

פלט:

[1] 8

next מדלג על שארית האיטרציה הנוכחית ומתחיל את הבאה. הוא פועל בלולאות repeat, while ו־for:

for (x in 1:8) {
  if (x %% 3 == 0) next
  cat(x, "")
}
cat("\n")

פלט:

1 2 4 5 7 8 

לולאת repeat ללא break שניתן להגיע אליו לעולם לא מסתיימת. השתמשו במונה כמגבלת בטיחות כשהיציאה תלויה בנתונים:

total <- 0
tries <- 0
repeat {
  tries <- tries + 1
  total <- total + tries
  if (total >= 20 || tries == 100) break
}
print(c(tries, total))

פלט:

[1]  6 21
challenge icon

אתגר

קל

השלימו את digital_root(n). החליפו את n בסכום הספרות שלו עד שנותרת ספרה אחת, והחזירו <result> after <steps> steps: עבור 9875 מתקבל 2 after 3 steps (9875, 29, 11, 2). למספר שכבר מורכב מספרה אחת נדרשים 0 צעדים.

sum(as.numeric(strsplit(as.character(n), "")[[1]])) מחברת את הספרות של n.

הקוד שסופק קורא את n ומדפיס את הערך שהוחזר.

נסו בעצמכם

digital_root <- function(n) {
  # כתבו את הקוד שלכם כאן
  ""
}

# קוד הקלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

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