יציאה מלולאות מקוננות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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 יוצא מיד גם מהלולאה הפנימית וגם מהלולאה החיצונית. הדבר שימושי במיוחד כשמחפשים במבני נתונים דו־ממדיים ורוצים להפסיק את החיפוש לגמרי ברגע שמוצאים את מה שמחפשים.
אתגר
קלבאתגר הזה תתרגלו שימוש בהוראות break עם תווית כדי לצאת מלולאות מקוננות בעת חיפוש ברשת דו־ממדית. עליכם למצוא מספר יעד מסוים ברשת ולהפסיק את החיפוש מיד לאחר מציאתו.
תקבלו שתי קלטים:
- מחרוזת שמייצגת את ממדי הרשת בתבנית
"rows,cols"(למשל,"3,4") - מחרוזת שמייצגת את מספר היעד שיש לחפש (למשל,
"7")
הרשת הדו־ממדית הבאה של מספרים נתונה לכם:
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
}עליכם:
- לנתח את הממדים מהקלט הראשון כדי לקבוע בכמה שורות ועמודות לחפש
- לנתח את מספר היעד מהקלט השני
- להשתמש בלולאות מקוננות עם
breakעם תווית כדי לחפש ברשת - כשתמצאו את מספר היעד, להדפיס
"Found [target] at position ([row], [col])"ולצאת מיד משתי הלולאות באמצעותbreakעם תווית - אם תשלימו את החיפוש בלי למצוא את היעד, להדפיס
"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 בעל תווית כדי לחפש את היעד
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין