לולאת for

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



לולאת for
 
מאת: ארז קלר


 להורדת דוגמאות הקוד

לולאת for היא הלולאה השכיחה והפופולארית ביותר בשימוש.
for היא מילה שמורה בשפת #C.
נשתמש בלולאת for בכל פעם שנצטרך לחזור על פקודה או סדרת פקודות מספר ידוע מראש של פעמים.
לדוגמה: צייר 1000 עיגולים, קלוט 250 מספרים.
 
תחביר:
 
 
for(initializer; boolean expression; update)
{
         statement 1;
         statement 2;
          …
          statement N;
}


דוגמה (ForSample01):
 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         for (int i = 0; i < 20; i++) 
 6  :         { 
 7  :             Console.Write("*"); 
 8  :         } 
 9  :         Console.WriteLine(); 
 10 :     } 
 11 : } 
פלט:
פלט תוכנית הדוגמה ForSample01

לולאת for מורכבת משני חלקים: כותרת הלולאה וגוף ההודעה.

כותרת

 
for (int i = 0; i < 20; i++)
{
    Console.Write("*");
}

 

הכותרת מתחילה בפקודה for, בכותרת נגדיר ונבדוק את מספר החזרות שיתבצעו, הכותרת מורכבת משלושה מקטעים:
1.המקטע הראשון הוא מקטע האתחול של הלולאה, הוא נקרא "Initializer" והוא מתבצע פעם אחת בלבד, בכניסה הראשונה ללולאה.
    בתוכנית הדוגמה מוגדר במקטע הראשון משתנה בשם i אשר מאותחל ב- 0.
    משתנה זה נהרס ויוצא מטווח ההכרה (scope) כאשר הלולאה מסתיימת .
    במקטע האתחול ניתן להשתמש במשתנה שהוגדר ואף אותחל קודם לכן, לדוגמה:      
int i = 0;
for (I; i<20; i++)
{
{

 

במקרה זה טווח ההכרה של המשתנה i הוא מעבר לאורך החיים (life time) של הלולאה.
2. המקטע השני של הכותרת נקרא "boolean expression" או "condition" והוא מגדיר ביטוי בוליאני שייבדק כתנאי להמשך ביצוע הלולאה. הביטוי בוליאני יכול       להיות פשוט או פשוט או מורכב. התנאי נבדק החל מהאיטראציה הראשונה, כל עוד ערכו של הביטוי true הלולאה תמשיך להתקיים.
    יתכן מצב שבו הלולאה לא תתבצע ולו פעם אחת.
    בדוגמה, כך עוד ערכו של i קטן מ-20 הלולאה תמשיך.
3. המקטע השלישי מכונה "update" או "step". במקטע זה מתעדכן ערכו של המשתנה i, על מנת שהלולאה תוכל תסתיים.
    אם ערכו של i לא ישתנה הלולאה לעולם לא תסתיים משום שהתוצאה של המקטע השני לעולם יהיה true.

שימו לב שהתו ';' מפריד בין המקטעים של כותרת הלולאה.


גוף הלולאה


 
for (int i = 0; i < 20; i++)
{
    Console.Write("*");
}

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

 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         for (int i = 20; i > 0; i--) 
 6  :         { 
 7  :             Console.WriteLine(i); 
 8  :         } 
 9  :     } 
 10 : } 
פלט:
פלט התוכנית ForSample02

במקרה זה ערכו ההתחלתי של i הוא  20 (שורה XXX), בכל איטראציה מופחת 1 מערכו של i.
כל עוד ערכו של i גדול מ- 0 הלולאה תמשיך להתקיים ותבצע איטראציה נוספת.
 
לא חייבים לשנות את ערכו של המשתנה i ב-1, ניתן לשנותו בכל ערך אחר, לדוגמה (ForSample03):

 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         for (int i = 0; i < 100; i += 12) 
 6  :         { 
 7  :             Console.WriteLine(i); 
 8  :         } 
 9  :     } 
 10 : } 
פלט:
פלט התוכנית ForSample03

כל שלושת המקטעים של כותרת הלולאה הינם אופציונאליים,
הלולאה הנ"ל היא חוקית:

 
for(;;)
{
     Console.WriteLine("Never ending loop");       
}   
היא חוקית אולם בעייתית משום שמדובר למעשה בלולאה אין סופית.

ממה צריך להיזהר, שימו לב לקוד הבא:
 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         for (int i = 0; i < 20; i--) 
 6  :         { 
 7  :             Console.Write("*"); 
 8  :         } 
 9  :         Console.WriteLine(); 
 10 :     } 
 11 : } 
 
מה הבעיה איתו?
במקום לקדם את i בכל איטראציה, מחסירים ממנו 1, תיאורטית הלולאה לא תסתיים לעולם כי תמיד i יהיה קטן מ-20 (מעשית מתי שהוא הלולאה תסתיים אבל היא לבטח לא תעשה מה שציפינו שהיא תעשה).