תתי־הנושאים › נושא 8

נושא 8: לולאת while

צפו בסרטון ההסבר, ואז בחרו תת־נושא לתרגול.

סיכומון תחביר נושא 8: לולאת while

מבנה הלולאה

while פירושו "כל עוד". התנאי נבדק לפני כל סיבוב: אם הוא נכון, הגוף מתבצע וחוזרים לבדוק שוב. אם לא, הקוד ממשיך אחרי הלולאה. while הוא כמו for שנשאר ממנו רק התנאי: את האתחול כותבים לפני הלולאה, ואת הקידום בסוף הגוף.

int i = 0;
while (i < 3)
{
    Console.WriteLine(i);
    i++;
}

הפלט:

0
1
2

אם שום דבר בגוף לא משנה את מה שנבדק בתנאי, הלולאה לא תסתיים לעולם.

while עם זקיף

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

int sum = 0;
int price = int.Parse(Console.ReadLine());
while (price != -1)
{
    sum += price;
    price = int.Parse(Console.ReadLine());
}
Console.WriteLine(sum);

while עם מעבר חוסם

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

int money = int.Parse(Console.ReadLine());
int sum = 0;
int price = int.Parse(Console.ReadLine());
while (money >= sum + price)
{
    sum += price;
    price = int.Parse(Console.ReadLine());
}
Console.WriteLine(sum);

בלי בדיקה מוקדמת, אחרי הלולאה המשתנה כבר חצה את הגבול:

int x = 1;
while (x < 100)
{
    x = x * 2;
}
Console.WriteLine(x);

הפלט:

128

while עם דגל

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

bool found = false;
int count = 0;
while (found == false)
{
    int x = int.Parse(Console.ReadLine());
    count++;
    if (x == 99)
    {
        found = true;
    }
}
Console.WriteLine("Tries: " + count);

אפשר לשלב את הדגל עם תנאי נוסף, למשל עם זקיף: while (price != -1 && found == false). אחרי לולאה כזאת בודקים את הדגל ב‑if, כדי לדעת למה היא הסתיימה.

while מסננת קלט

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

int n = int.Parse(Console.ReadLine());
while (n < 1 || n > 10)
{
    Console.WriteLine("Try again");
    n = int.Parse(Console.ReadLine());
}
Console.WriteLine("OK: " + n);

מתי for ומתי while

כשיודעים מראש כמה פעמים הלולאה תרוץ, נוח יותר for. כשלא יודעים מראש, while.

תרגול

  1. 08.1 לולאת while — while עם זקיף 19 רמות לתרגול ‹
    מה מתרגלים ב־לולאת while — while עם זקיף C# · 190 שאלות · 19 רמות
    • לולאת while ומשמעות "כל עוד"
    • בדיקת התנאי לפני כל סיבוב
    • זקיף כערך מיוחד שמסמן את סוף הקלט
    • קלט ראשון לפני הלולאה וקלט חוזר בסוף גוף הלולאה
    • הזקיף עצמו אינו מעובד
    • זקיף שנקלט מיד בהתחלה
    • ערכים שליליים שאינם הזקיף
    • לולאה שאינה מסתיימת כשהקלט החוזר חסר
    • סכימה, ספירה, מקסימום ומעקב אחרי הערך הקודם בתוך לולאת זקיף
    • בחירת זקיף שאינו מתנגש עם קלט חוקי
  2. 08.2 לולאת while — while עם מעבר חוסם 15 רמות לתרגול ‹
    מה מתרגלים ב־לולאת while — while עם מעבר חוסם C# · 150 שאלות · 15 רמות
    • לולאת while שבתנאי שלה גבול
    • ערך שמשתנה בכל סיבוב ומתקרב לגבול
    • סיום הלולאה כשהגבול נחצה
    • הערך של המשתנה אחרי הלולאה
    • מספר הסיבובים
    • ההבדל בין < ל‑<= בגבול
    • בדיקה לפני הוספה כדי לא לחצות את הגבול
    • גבול שנקלט מהמשתמש
    • התקרבות לגבול בקלט ובלי קלט
    • לולאה שאינה מסתיימת כשהערך מדלג על הגבול
    • המרה של for ל‑while
  3. 08.3 לולאת while — while עם דגל 15 רמות לתרגול ‹
    מה מתרגלים ב־לולאת while — while עם דגל C# · 150 שאלות · 15 רמות
    • משתנה bool כדגל
    • אתחול הדגל לפני הלולאה
    • דגל בתנאי while בצורה flag == false או flag == true
    • הרמת הדגל בתוך הלולאה בעקבות תנאי
    • סיום הלולאה בבדיקה הבאה של התנאי ולא מיד
    • דגל שאינו מורם ולולאה שאינה מסתיימת
    • דגל בשילוב תנאים נוספים באמצעות && ו‑||
    • בדיקת הדגל אחרי הלולאה
    • דגל שנדרס בתוך הלולאה
    • דגל בשילוב זקיף ומונה
  4. 08.4 לולאת while — while מסננת קלט 12 רמות לתרגול ‹
    מה מתרגלים ב־לולאת while — while מסננת קלט C# · 120 שאלות · 12 רמות
    • לולאת while שחוזרת על קלט עד שהוא תקין
    • תנאי שמתאר קלט לא תקין ולא קלט תקין
    • קלט ראשון לפני הלולאה וקלט חוזר בתוך הלולאה
    • הודעת שגיאה בכל ניסיון שגוי
    • קלט תקין מהניסיון הראשון שאינו נכנס ללולאה
    • תנאי סינון עם || לטווח
    • תנאי סינון עם שארית
    • ספירת ניסיונות
    • מסננת שאחריה שימוש בערך
    • מסננת ואחריה לולאת זקיף
    • סדר השורות בתוך המסננת
‹ נושא 7: לולאת for נושא 9: לולאות מקוננות ›