→ חזרו אחורה

פרק 4 - לולאות

⏱ 16 דקות קריאה

בפרק ההקדמה למדנו שהמחשב מבצע פקודות אחת אחרי השנייה, לפי הסדר. לפעמים אנחנו דווקא רוצים שהוא יחזור על אותה פעולה כמה פעמים - למשל להדפיס 100 מספרים, או לבדוק כל תלמיד ברשימה. במקום לכתוב את אותה שורת קוד הרבה פעמים, נשתמש בלולאה.

1. מהי לולאה?

לולאה היא מבנה שמריץ קטע קוד כמה פעמים ברציפות. מספר הפעמים תלוי בתנאי או במונה. חשוב להבין: זו עדיין אותה עקרון של "פקודה אחרי פקודה" - הלולאה רק גורמת למחשב "לחזור אחורה" ולהריץ שוב את אותן שורות.

2. לולאת while

לולאת while רצה כל עוד התנאי נכון.

Java

int i = 1;

while (i <= 5) {
    System.out.println(i);
    i++;
}
            

בהתחלה i שווה ל-1.

כל עוד i <= 5, הלולאה תמשיך לרוץ.

בכל סיבוב אנחנו מדפיסים את i ואז מגדילים אותו ב-1.

3. לולאת for

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

Java

for (int i = 1; i <= 5; i++) {
    System.out.println(i);
}
            
מבנה הלולאה: בתוך הסוגריים של for יש 3 חלקים: אתחול, תנאי, ועדכון.

4. מתי for ומתי while?

לולאת for מתאימה כשאנחנו יודעים מראש כמה פעמים נרצה לחזור (למשל בדיוק 10 פעמים).

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

5. צבירה ומניה: לולאה שמחשבת סכום

אחד השימושים הכי נפוצים בלולאות הוא לצבור ערכים - למשל לחשב את הסכום של כמה מספרים. לשם כך נשתמש במשתנה נוסף שנקרא לפעמים "צובר" (Accumulator), שמתחיל מ-0 ומצטבר בכל סיבוב.

Java

int sum = 0;

for (int i = 1; i <= 10; i++) {
    sum = sum + i;
}

System.out.println(sum);
            

sum מתחיל ב-0 - עדיין לא צברנו כלום.

בכל סיבוב אנחנו מוסיפים ל-sum את המספר הנוכחי של i.

בסוף הלולאה, sum מכיל את הסכום של כל המספרים מ-1 עד 10, כלומר 55.

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

6. לולאות מקוננות

אפשר לשים לולאה אחת בתוך לולאה אחרת - זה נקרא לולאה מקוננת (Nested Loop). הלולאה הפנימית רצה במלואה בכל סיבוב יחיד של הלולאה החיצונית.

Java

for (int row = 1; row <= 3; row++) {
    for (int col = 1; col <= 3; col++) {
        System.out.print(row * col + " ");
    }
    System.out.println();
}
            
שימו לב: בכל סיבוב של row, הלולאה הפנימית עם col רצה שלוש פעמים שלמות מההתחלה. בהמשך נשתמש ברעיון הזה כדי לעבוד עם מערכים דו-ממדיים.

7. טעויות נפוצות

שכחתם להגדיל מונה: הלולאה עלולה להפוך ללולאה אינסופית שלא נגמרת.

שמתם תנאי לא נכון: הלולאה תרוץ יותר מדי או פחות מדי (טעות שנקראת "טעות גדר" - Off-by-one).

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

שכחתם לאפס את הצובר: אם משתנה כמו sum לא מתחיל מ-0, התוצאה תהיה שגויה.

🎓 זווית הבגרות

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

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

טעות נפוצה: "טעות גדר" (off-by-one) - שימוש ב-< במקום <= (או להפך), שגורם לדילוג על איבר אחד או להוספת איבר מיותר.

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

8. תרגול

מה יודפס למסך על ידי הקוד הבא?

Java
int count = 0;
for (int i = 1; i <= 10; i++) {
    if (i % 3 == 0) {
        count++;
    }
}
System.out.println(count);

הקוד הבא ממחיש לולאה שרצה "עד שתנאי משתנה" (לא מספר סיבובים קבוע מראש) - מה יודפס למסך?

Java
int value = 3;
int steps = 0;
while (value < 50) {
    value = value * 2;
    steps++;
}
System.out.println(steps);

כתבו לולאת for שרצה מ-0 עד 9.

כתבו שורת קוד שמגדילה את המשתנה i ב-1.

כתבו את שורת ההצהרה של משתנה צובר בשם sum שמתחיל מ-0.

בתוך לולאה, כתבו את שורת הקוד שמוסיפה את i לתוך הצובר sum.

פרק 3 - תנאים פרק 5 - מערכים