Menu
Coddy logo textTech

יציאה מלולאות מקוננות

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

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

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

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 1 {
            break outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
}

בדוגמה הזו, כאשר התנאי i == 1 && j == 1 מתקיים, break outer יוצא מיד גם מהלולאה הפנימית וגם מהלולאה החיצונית. הדבר שימושי במיוחד כשמחפשים במבני נתונים דו־ממדיים ורוצים להפסיק את החיפוש לגמרי ברגע שמוצאים את מה שמחפשים.

challenge icon

אתגר

קל

באתגר הזה תתרגלו שימוש בהוראות break עם תווית כדי לצאת מלולאות מקוננות בעת חיפוש ברשת דו־ממדית. עליכם למצוא מספר יעד מסוים ברשת ולהפסיק את החיפוש מיד לאחר מציאתו.

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

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

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

grid := [][]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}

עליכם:

  1. לנתח את הממדים מהקלט הראשון כדי לקבוע בכמה שורות ועמודות לחפש
  2. לנתח את מספר היעד מהקלט השני
  3. להשתמש בלולאות מקוננות עם break עם תווית כדי לחפש ברשת
  4. כשתמצאו את מספר היעד, להדפיס "Found [target] at position ([row], [col])" ולצאת מיד משתי הלולאות באמצעות break עם תווית
  5. אם תשלימו את החיפוש בלי למצוא את היעד, להדפיס "Target [target] not found"

יש לדווח על המיקום באמצעות אינדקסים שמתחילים ב־0 (השורה הראשונה היא 0, העמודה הראשונה היא 0).

נסו בעצמכם

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    // קראו את הקלט
    var dimensions string
    var targetStr string
    fmt.Scanln(&dimensions)
    fmt.Scanln(&targetStr)
    
    // פענחו את הממדים
    dimParts := strings.Split(dimensions, ",")
    rows, _ := strconv.Atoi(dimParts[0])
    cols, _ := strconv.Atoi(dimParts[1])
    
    // פענחו את מספר היעד
    target, _ := strconv.Atoi(targetStr)
    
    // רשת מוגדרת מראש
    grid := [][]int{
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
    }
    
    // TODO: כתבו את הקוד שלכם למטה
    // השתמשו בלולאות מקוננות עם break בעל תווית כדי לחפש את היעד
    
}
quiz iconבחנו את עצמכם

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

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

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