לולאות מקוננות
חלק מהיחידה יסודות במסלול ה-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הלולאה החיצונית שולטת בשורות, ואילו הלולאה הפנימית מטפלת בכל עמודה בתוך אותה שורה. לאחר השלמת כל שורה, אנחנו מדפיסים שורה חדשה כדי לעבור לשורה הבאה.
אתגר
קלקראו שני מספרים מהקלט: 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() כדי להדפיס ערכים המופרדים ברווחים, עם ירידת שורה אחרי כל שורההשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטריםתרגלו בעצמכם: קומפיילר R אונליין