לולאת FOR
מבנה לולאת FOR:
do ערך סופי to ערך התחלתי =: משתנה הלולאה for begin ;הוראה ;הוראה · · · ;הוראה ;end
|
דוגמא לשימוש:
כתוב תוכנית המדפיסה שורה בת 30 כוכביות.
פתרון:
להורדת הדוגמא לחץ כאן
תוצאת ריצה:
בלולאה זו נדרש שהפקודה write תבוצע 30 פעמים בדיוק. ההוראה:
for I:=1 to 30 do היא ההוראה הקובעת כמה פעמים יש לבצע את ה-write .
המשתנה I נקרא משתנה לולאה או מונה הלולאה.סופר כמה פעמים בוצעה הלולאה.
תחילה (מיד אחרי ה-for) קובעים את ערכו לערך התחלתי ולאחר ה-to קובעים את הערך אליו יגיע בסיום הלולאה (הערך הסופי). לאחר ה-do נמצאת ההוראה אותה צריך לבצע. לאחר כל ביצוע של הוראה זו, מקודם אוטומטית הערך של I ב-1. כאשר הערך של I גדול מהערך הסופי, מסתיימת הלולאה ועוברים לביצוע של ההוראה הבאה אחרי הלולאה.
כאשר יש צורך בגוף הלולאה לבצע יותר מפקודה אחת, יירשם בלוק פנימי וכל הבלוק יבוצע מספר פעמים שדורשת הלולאה.
מספר הפעמים שמבוצע גוף הלולאה = (ערך התחלתי) – (ערך סופי) + 1 |
בדוגמא הנ"ל מספר הפעמים שמבוצע גוף הלולאה הוא: 1+30-1=30 פעמים.
שימו: אם הערך של מונה הלולאה לא גדול מערך הסופי, גוף הלולאה יבוצע! כלומר אם כתבנו בטעות:
for I:=10 to 1 do הוראה; |
ההוראה לא תבוצע אפילו פעם אחת כי מלכתחילה הערך שהוצב ב-I גדול מהערך הסופי.
מכיוון שמספר הפעמים שיש לבצע את הלולאה הוא מספר שלם (לא ניתן לבצע חצי או שליש לולאה) משתנה הלולאה חייב להיות מסוג integer.
דוגמא:
כתוב תוכנית הקולטת 5 מספרים כלשהם ובודקת ומדפיסה את כל המספרים הגדולים מ-10 שנקלטו.
פתרון:
להורדת הדוגמא לחץ כאן
דוגמת ריצה:
התוכנית קולטת מספר ומציבה אותו במשתנה הממשי X, קופצת שורה וממשיכה לביצוע ההוראה הבאה בתור.
בהוראה הבאה נבדק האם תוכן X גדול מ-10.
אם כן תבוצע ההוראה writeln ועל הצג נקבל:
10 is bigger then (המספר שהקשנו) The number
|
אם לא , לא יבוצע דבר והתוכנית ממשיכה להוראה הבאה, ההוראה הבאה היא סיום הלולאה, כאן התוכנית מקדמת את N (מונה הלולאה) ב-1. התוכנית קופצת לראש הלולאה (ל- for) ושואלת אם הערך הנמצא ב-N גדול מ-5. אם לא מבוצע שוב גוף הלולאה, אם כן התוכנית קופצת להוראה שאחרי הלולאה ל-end. שמסיים את התוכנית.
נתמקד בהוראה הבאה: ;A:=A+3
כלומר, חבר לתוכן משתנה A את הערך 3 ואת התוצאה אחסן במשתנה A שוב.
מהוראה זו בלבד לא ניתן לנחש מה יהיה תוכן משתנה A לאחר סיום ההוראה. תוכן A תלוי בהוראות קודמות בתוכנית שהיו לפני הוראה זו.
במקרה זה, התא A הוא צובר. כלומר, צובר לתא A ערך נוסף.
נניח כי נתון קטע התוכנית הבא:
להורדת הדוגמא לחץ כאן
דוגמת ריצה:
בקטע תוכנית זו, הוצב ערך התחלתי 10. זאת כדי שנוכל לדעת בוודאות את הערך במשתנה A בהמשך. בכל פעם שמבוצע גוף הלולאה, נוסף לצובר A הערך המאוחסן ב-J.
עם סיום התוכנית ערכו של A יהיה 56. תוצאה זו נובעת מהפעולה המצטברת:
שימו: אין להניח שבתחילת ביצוע התוכנית ערך המשתנים אפס.
שתי סיבות לאיסור זה:
1. התוכנית שאנו כותבים, אולי תהיה תת-תוכנית ולא ידוע מה קורה בתת-תוכניות אחרות.
2. הפסקל אינו מאפס משתנים לפני הרצת התוכנית.
לכל צובר יש להציב ערך התחלתי!!!