Menu
Coddy logo textTech

המשך לולאה מסוימת

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 3 מתוך 68.

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

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

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 0 {
            continue outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
    fmt.Println("End of outer loop iteration")
}

בדוגמה הזו, כאשר i == 1 && j == 0, הפקודה continue outer מדלגת על שארית האיטרציה הנוכחית של הלולאה החיצונית, כולל הלולאה הפנימית וההודעה "End of outer loop iteration". לאחר מכן התוכנית עוברת ישירות לאיטרציה הבאה של הלולאה החיצונית, שבה i הופך ל-2.

challenge icon

אתגר

קל

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

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

  • מחרוזת שמייצגת את מספר השורות לעיבוד (לדוגמה, "4")
  • מחרוזת שמייצגת מספר של תנאי הדילוג (לדוגמה, "3")

מערך הנתונים הדו־ממדי הבא מסופק לכם:

data := [][]int{
    {1, 2, 3, 4, 5},
    {6, 7, 8, 9, 10},
    {11, 12, 13, 14, 15},
    {16, 17, 18, 19, 20},
    {21, 22, 23, 24, 25}
}

המשימה שלכם היא:

  1. לנתח את מספר השורות מהקלט הראשון כדי לקבוע כמה שורות לעבד
  2. לנתח את מספר תנאי הדילוג מהקלט השני
  3. להשתמש בלולאות מקוננות עם continue מתויגת כדי לעבד את הנתונים
  4. לבדוק בכל שורה את הערך של כל עמודה באותה שורה
  5. אם מצאתם את מספר תנאי הדילוג באחת מהעמודות של שורה, להשתמש ב-continue מתויגת כדי לדלג על המשך העיבוד של אותה שורה ולעבור לשורה הבאה
  6. בשורות שאינן מכילות את מספר תנאי הדילוג, להדפיס "Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]"
  7. בשורות שמכילות את מספר תנאי הדילוג, להדפיס "Skipping row [row_number] due to condition"

יש לדווח על מספרי השורות באמצעות אינדוקס שמתחיל ב-0 (השורה הראשונה היא 0). עבדו רק על מספר השורות שצוין בקלט הראשון, ובדקו רק את 5 העמודות הראשונות בכל שורה.

נסו בעצמכם

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // קראו את הקלט
    var rowsInput string
    var skipConditionInput string
    fmt.Scanln(&rowsInput)
    fmt.Scanln(&skipConditionInput)
    
    // המירו את הקלט לערכים מתאימים
    numRows, _ := strconv.Atoi(rowsInput)
    skipCondition, _ := strconv.Atoi(skipConditionInput)
    
    // מערך נתונים דו־ממדי נתון
    data := [][]int{
        {1, 2, 3, 4, 5},
        {6, 7, 8, 9, 10},
        {11, 12, 13, 14, 15},
        {16, 17, 18, 19, 20},
        {21, 22, 23, 24, 25},
    }
    
    // TODO: כתבו את הקוד שלכם בהמשך
    // השתמשו בלולאות מקוננות עם continue מסומן כדי לעבד את הנתונים
    // בדקו בכל שורה אם היא מכילה את המספר של תנאי הדילוג
    // הדפיסו הודעות מתאימות בהתאם לשאלה אם התנאי מתקיים
    
}
quiz iconבחנו את עצמכם

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

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

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