Menu
CoddyTech

לולאות מקוננות

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

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

rows <- 3
cols <- 2
for (i in 1:rows) {
  for (j in 1:cols) {
    cat("i =", i, ", j =", j, "\n")
  }
}

פלט:

i = 1 , j = 1 
i = 1 , j = 2 
i = 2 , j = 1 
i = 2 , j = 2 
i = 3 , j = 1 
i = 3 , j = 2

עבור כל ערך של i, הלולאה הפנימית עוברת על כל הערכים של j. כאשר i הוא 1, j נע מ-1 עד 2. לאחר מכן i הופך ל-2, ו-j מתחיל מחדש מ-1 עד 2. rows ו-cols לעולם אינם משתנים: הם רק אומרים ללולאות מתי לעצור.

דוגמה מעשית היא יצירת תבנית כפל פשוטה:

for (row in 1:3) {
  for (col in 1:3) {
    cat(row * col, " ")
  }
  cat("\n")
}

פלט:

1  2  3  
2  4  6  
3  6  9

הלולאה החיצונית שולטת בשורות, ואילו הלולאה הפנימית מטפלת בכל עמודה בתוך אותה שורה. לאחר השלמת כל שורה, אנחנו מדפיסים שורה חדשה כדי לעבור לשורה הבאה.

challenge icon

אתגר

קל

קראו שני מספרים מהקלט: rows ו־cols.

השתמשו בלולאות מקוננות כדי להדפיס מלבן של מספרים, שבו כל תא מכיל את סכום מספר השורה ומספר העמודה שלו. השורות ממוספרות מ־1 עד rows, והעמודות ממוספרות מ־1 עד cols.

הדפיסו כל שורה בשורה נפרדת, כשהערכים מופרדים ברווח יחיד. השתמשו ב־cat() לפלט, והוסיפו ירידת שורה אחרי כל שורה.

לדוגמה, אם הקלטים הם 3 ו־4, הפלט אמור להיות:

2 3 4 5 
3 4 5 6 
4 5 6 7

בשורה הראשונה (שורה 1), הערכים הם 1+1=2, 1+2=3, 1+3=4, 1+4=5. בשורה השנייה (שורה 2), הערכים הם 2+1=3, 2+2=4, 2+3=5, 2+4=6, וכן הלאה.

cat() מוסיפה רווח בין הערכים שמעבירים לה, ולכן cat(row + col, "") מדפיסה את המספר ואחריו בדיוק רווח אחד.

השתמשו במונה חדש לכל לולאה (לדוגמה, row עבור השורות ו־col עבור המספרים בשורה) והשוו אותו ל־rows או ל־cols. אל תשנו את rows ואת cols עצמם: כל שורה צריכה שוב את cols.

נסו בעצמכם

# קראו את הקלט
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)

# TODO: כתבו את הקוד שלכם למטה
# השתמשו בלולאות מקוננות כדי להדפיס מלבן שבו כל תא מכיל row + column
# השתמשו ב־cat() כדי להדפיס ערכים המופרדים ברווחים, עם ירידת שורה אחרי כל שורה
quiz iconבחנו את עצמכם

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

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

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