Menu
CoddyTech

לולאה מקוננת

חלק מהיחידה יסודות במסלול ה-GDScript של Coddy. שיעור 49 מתוך 92.

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

var rows := 3
var cols := 2
for i in range(rows):
	print("Outer: ", i)
	for j in range(cols):
		print("  Inner: ", j)
Outer: 0
  Inner: 0
  Inner: 1
Outer: 1
  Inner: 0
  Inner: 1
Outer: 2
  Inner: 0
  Inner: 1

הבלוק הפנימי מוזח בשתי רמות. הוא רץ rows x cols = 3 x 2 = 6 פעמים בסך הכול. j מתחיל שוב מ־0 בכל פעם שהלולאה החיצונית רצה, בעוד rows ו־cols נשארים ללא שינוי ורק אומרים ללולאות מתי לעצור.

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

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

for row in range(2):
	var line := ""
	for col in range(3):
		line += "*"
	print(line)
***
***

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

challenge icon

אתגר

קל

התוכנית קוראת שני מספרים שלמים: rows ו-cols.

השתמש בלולאות מקוננות כדי להדפיס מלבן של כוכביות (*) עם rows שורות ו-cols כוכביות בכל שורה.

עבור הקלטים 3 ו-4, הפלט הוא:

****
****
****

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

נסו בעצמכם

extends Node

func _ready():
	var rows := int(OS.read_string_from_stdin())
	var cols := int(OS.read_string_from_stdin())
	# לולאה חיצונית: איטרציה אחת לכל שורה
	# לולאה פנימית: הוסף כוכבית אחת לכל עמודה
quiz iconבחנו את עצמכם

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

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

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