
for בתוך do while, או while בתוך for.for. כדי לאפשר ציור חוזר, עוטפים את הקלט והציור בלולאת do while חיצונית, שרצה כל עוד המשתמש מכניס מספר חיובי. כשמכניסים 0 או מספר שלילי התוכנית מסתיימת.j, כי i כבר תפוס.i לא משתנה, ולכן מודפסים 10 פעמים אותו מספר באותה שורה. כשמדפיסים j, מקבלים בכל שורה את המספרים 1 עד 10.הטקסט המלא של הדקות הראשונות בהרצאה «לולאה בתוך לולאה - Nested Loop» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו הולכים לראות עדיין בנושא הלולאות נקרא לולאה מקוננת. באנגלית זה נקרא Nested Loop. מה זה אומר? זה אומר לולאה בתוך לולאה.
למה זה נושא סופר חשוב בעולם האלגוריתמיקה? בכל תוכנית כמעט בעולם קורה מצב שאנחנו רוצים לבצע איזושהי לולאה, אבל אנחנו רוצים לבצע את הלולאה עצמה שוב ושוב פעמים.
זה אומר שיש לנו לולאה בתוך לולאה אחרת. אם את כל הסיפור הזה אנחנו רוצים לבצע שוב ושוב פעמים, זה כבר הופך לשלוש לולאות מקוננות. יכול להיות ארבע לולאות מקוננות וכולי, אבל זה כבר הופך להיות מאוד נדיר, אבל זה גם כן קיים.
אנחנו הולכים לראות דוגמה ללולאה בתוך לולאה פעם אחת בלבד, כלומר שתי לולאות מקוננות מה שנקרא. אז בואו נראה דוגמה לפעילות כזאת. נניח שאנחנו רוצים לומר למשתמש Enter a number for drawing one line.
נקלוט את המספר שלו, רוצה כמובן קונברג'ן ואנחנו רוצים עכשיו פשוט מאוד לצייר קו של בוא נניח כוכביות על המסך אז כמובן שהלולאה שאנחנו נבחר כאן זה לולאת 4 וכמובן שצריכה להיות לנו לולאה אחת ויחידה שעושה את זה כל מה שאנחנו רוצים לעשות זה i שווה 1 כל עוד i קטן או שווה לNAM זה אומר שהוא רץ בדיוק NAM פעמים אנחנו רוצים להציג על המסך כוכבית אחת סך הכל יודפסו פה
נם כוכביות בוא נניח שאחרי זה נראה תשואה נריץ את זה נקבל 10 ואנחנו רואים שאנחנו מדפיסים 10 כוכביות נקבל 3 ואנחנו רואים שאנחנו מדפיסים 3 כוכביות נקבל 20 ויש לנו 20 כוכביות עכשיו בואו נשדרג את התוכנית ונגיד למשתמש לעשות את זה שוב ושוב עד שבוא
נניח הוא מכניס איזשהו מספר לדוגמה 0 ברגע שהוא הכניס 0 אנחנו רוצים לצאת או שלילי בואו משדרג את זה enter number for drawing כיוונתי לכתוב פה one line for ending enter 0 or negative number בסדר יש לנו פה את הקלט ומה שאנחנו רוצים לעשות זה לעטוף בעצם את כל זה באיזושהי לולאה בוא נניח לולאת do
כרגע כי קודם כל אנחנו רוצים לקלוט ואחר כך לבצע את הפעולה יש לנו פה while num אנחנו רואים שהוא לא מכיר את num ולכן נוציא את num פה החוצה במקום להגדיר אותו בתוך הלולאה while num גדול מאפס תמשיך ותבקש עוד מספר ועוד מספר אפילו את זה אפשר להוציא גם כן החוצה שההצגה הזאת תצג פעם אחת אז בואו נריץ enter a number for drawing one line for ending enter zero or
negative number אז בואו נניח שאנחנו מכניסים 10 ואנחנו רואים one line נכניס ואנחנו רואים קו באורך 30. נכניס 5, נכניס 2, נכניס 1, 7, מינוס 8, תוכנית הסתיימה.
עכשיו, מה שקרה כאן זה לולאת דו-וייל חיצונית, שרצה כל עוד המשתמש מכניס מספר חיובי, ובתוכה לולאה, לולאת פור פנימית שהיא הלולאה המקוננת, שסך הכל מה שהיא עושה זה מציירת את אותו קו שהלקוח רצה לראות, שאנחנו רצינו להראות לו.
אז זאתי דוגמה ראשונה ללולאה מקוננת. עכשיו, לולאה מקוננת לא מדברת על סוג הלולאה. זה סך הכל אומר לולאה כלשהי בתוך לולאה כלשהי אחרת.
וזה יכול להיות for בתוך do while כמו שראינו כרגע, זה יכול להיות for בתוך while, while בתוך for, do while בתוך while, כל לולאה שאתם מכירים יכולה להיות בתוך כל לולאה אחרת.
בואו ניקח דוגמה נוספת. נניח שאנחנו רוצים לצייר את בואו נניח לוח הכפל בגודל 5 על 5 או אפילו בואו נצייר את לוח הכפל המלא. לוח הכפל המלא אומר כזה דבר יש לנו 1 עד 10 לאחר מכן יש לנו 2 עד 20 בכפולות של 2 שורה חדשה יש לנו 3 עד 30 ולבסוף ככה שורה שורה לבסוף יש לנו 10 עד 100. לצורך
כך אנחנו בעצם רוצים להציג שבה יש לנו שורות, וכל שורה יכולה להתבצע על ידי לולאה אחת ויחידה. אבל אנחנו רוצים 10 שורות, ולכן יש לנו פה עוד לולאה שעוטפת את הלולאה הפנימית.
שתי הלולאות, נכון שהן יהיו לולאות פור, מפני שאנחנו יודעים בדיוק כמה לרוץ בכל לולאה. במקרה הקודם, שהשתמשנו פה בלולאת do while, אנחנו לא ידענו כמה לרוץ, כי אנחנו לא ידענו כמה פעמים הלקוח הולך להכניס מספר חיובי, לכן לא היינו יכולים כל כך לעשות לולאת 4
או שהיינו יכולים אבל זה היה קצת לא טבעי. לולאת do while או לולאת while יכולות לרוץ אם אנחנו בעצם לא יודעים לפני ההתחלה של הלולאה כמה פעמים הלולאה הולכת לרוץ אלא רק תוך כדי הריצה אנחנו יודעים מתי להפסיק.
לולאת 4 אם אנחנו יודעים מההתחלה כמה בדיוק לרוץ אפילו שקיבלנו את הנתון מהמשתמש לפני ביצוע הלולאה לולאת 4 יותר מתאימה. ולכן לולאה אחת אחראית על השורות והיא היא יכולה להתחיל מ-1 ולהסתיים ב-10.
כאן יש לנו 10 שורות. אם אני פה אדפיס סתם את i ואירד שורה אני אראה שיש לי 1 עד 10. אז ככה אני יכול לשלוט על מספר שורות ולהציג 10 שורות.
אבל אני לא רוצה להציג 1 עד 10. אני רוצה בתוך הלולאה להציג את כל המספרים מ-1 עד 10 באיתרציה הראשונה,