» נושאי לימוד
» נושאי לימוד
יום שבת 4 במאי 2024
לולאת WHILE
דף ראשי  פרק 3 :יסודות שפת פסקל  לולאות  לולאת WHILE גרסה להדפסה

לולאת WHILE

 

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

לצרכים אלו קיימות לולאות ה-while וה-reapet.

נתחיל בלולאת ה-while.

 

דוגמא:

כתוב תוכנית המסכמת את סכום הקניות של לקוחות בחנות מסוימת. התוכנית מסיימת את פעולתה כאשר הוקש מספר שלילי (אין מחיר שלילי למוצר)

 

 

פתרון:

 

program PAYMENT;

  { תוכנית המסכמת פדיון של מוצרים בחנות מסוימת}

var

   SUM: real; (* סך כל הפדיון – צובר*)

   PAY: real; (* מחיר שהלקוח שילם *)

 

procedure INPUT_PAY;

   { תת-תוכנית לקליטת סכום הקניה }

begin

    write (' = הקש את סכום הקניה –

           סכום  שלילי יסיים את התוכנית ');

    readln (PAY);

end;

 

************* התוכנית הראשית***********)

begin

  { איפוס הצובר – קביעת ערך התחלתי }

  SUM:=0;

  {קביעת ערך התחלתי לתנאי היציאה מהלולאה}

  INPUT_PAY; (* יכול להיות שלא הייתה אפילו

                                פעם אחת *)

       { while לולאת }

  While PAY>=0 do (* כל עוד הסכום שהוקש אינו שלילי *)

  begin

    SUM:=SUM+PAY; (* סיכום הקניה לפדיון *)

    INPUT_PAY; (*קלוט את סכום הקניה הבאה *)

  end;

     {פלט}

  writeln (SUM, ' =  הפידיון הכללי');

end.

 

 

 להורדת הדוגמא לחץ כאן

 

דוגמת ריצה:

 

 

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

 

המבנה הכללי של לולאת while:

 

do תנאי while

 

begin

  ;הוראה                   

                                                ·                       

                                                        גוף  הלולאה    ·                       

                                                ·                       

                                                ·                       

                                           ;הוראה                   

                                                                                       ;end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

שימו  כי אחרי ה-do אין נקודה-פסיק כי זו רק התחלת הוראת ה-while.

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

 

לדוגמא:

 

 

X:=0;

while X<100 do

X:=X+1;

 

 

 

 

 

 

 

 

לולאה זו, אינה עושה דבר מלבד השהיית פעולת התוכנית.

 

חובה לקבוע ערך לתנאי היציאה מהלולאה, לפני התחלת הלולאה.

 

הבדיקה ליציאה מהלולאה היא בהתחלה, ולכן יכול להיות מקרה שהלולאה לא תבוצע אפילו פעם אחת!

 

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

בלולאת while התנאי ליציאה מהלולאה נמצא בתחילת הלולאה!

יש לקבוע ערך התחלתי לפני כניסה להוראת while לתנאי היציאה!

 

דוגמא:

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

 

פתרון:

לצורך חישוב הממוצע יש לבצע צבירה של:

א.    סכום הציונים.

ב.     מספר התלמידים (מספר הציונים)

 

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

 

program NAME;

var

   MARK: real; (* הציון הנקלט *)

   I: integer; (* צובר מספר התלמידים *)

   S: real; (* צובר סכום הציונים ומאחסן בסוף את הממוצע *)

procedure INPUT_MARK;

   { תת תוכנית לקליטת הציון הבא }

begin

   { הוראות קלט פלט }

end;

   ·       

   · קטע הבא לפני תת תוכנית זו

   ·       

procedure MEAN;

   { תת תוכנית המחשבת ממוצע של מספר ציונים לא ידוע }

begin

   { קביעת ערכים התחלתיים }

   S:=0; (* ערך התחלתי לצובר *)

   I:=0; (* ערך התחלתי לצובר מספר התלמידים *)

   INPUT_MARK;(* MARK תת תוכנית הקולטת ציון למשתנה*)

              (*    , תת תוכנית זו לא מופיעה בדוגמא*)

              (*    נניח שהיא קיימת. *)

   { לולאה }

   while MARK >=0 do  (*  כל עוד הציון שהוקש אינו שלילי *)

   begin

      S:=S+MARK; (* צבירת הציונים *)

      I:=I+1; (* מניית מספר הציונים *)

      INPUT_MARK; (* קליטת ציון חדש *)

   end;

   { חישוב הממוצע: מספר הציונים / סכום הציונים }

   if I<>0 then

   begin

        { חישוב הממוצע אפשרי אם המכנה שונה מאפס }

       S:=S/I;

       writeln (S,'= ממוצע הציונים');

       end else writeln ('  לא נקלטו ציוני תלמידים');

   end;

    ·       

    ·  קטע הבא אחרי תת תוכנית זו

    ·       

 

 

 

נציין את ההיגיון הפשוט בהוראת ה-while. ממש כמו בשפת היום-יום.

       "כל עוד הינך תלמיד עליך להישמע להוראות המורים..."

 

 

 11-03-04 / 10:06  עודכן ,  01-09-03 / 18:01  נוצר ע"י כפיר מרגי  בתאריך 
 לולאת FOR-המשך - הקודםהבא - לולאת WHILE-המשך 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 4