עד כאן ראינו את השימוש בהוראת IF לצורך ביצוע הוראות מסויימות, בתנאי שתנאים מסוימים קיימים. קיים מצב, שבו נרצה לבצע עיבוד קטע מסויים של תכנית בעזרת הוראת PERFORM, וזאת רק בתנאי שתנאי מסויים מתקיים; או, לחילופין, לבצע את הקטע הנ"ל מספר מסויים של פעמים, וזאת עד שתנאי מסויים מתקיים. לביצוע כזה של קטע תכנית מספר פעמים קוראים לולאה (LOOP), וניתן להפעילה בעזרת ההוראה PERFORM ... UNTIL. דוגמא: אם נרצה לקרוא רשומת קלט אחת, ולכתוב חמש רשומות בגין כל רשומה אחת שקראנו, נשתמש בתכנית הבאה:
הוראת
PERFORM ...
UNTIL
קובעת: האם יש לבצע פעם נוספת את קטע התכנית
האמור, או - לחילופין- אם יש לסיים את התכנית. CTR1 מקבל את הערך ההתחלתי אפס.
האינפורמציה מועברת מהמשתנה ITEM-IN למשתנה
ITEM-OUT. הוראת PERFORM מפעילה את קטע התכנית WRITE-RTN. רשומה נכתבת לפי
ITEM-OUT, והמונה CTR1 גדל ב-1. ברגע זה CTR1
= 1. הואיל והמשתנה CTR1 אינו שווה ל-5, קטע
התכנית WRITE-RTN מבוצע שוב. הרשומה השנייה נכתבת על פי CARD-OUT, ומתווסף למשתנה CTR1
עוד 1. כרגע הוא מכיל 2. תהליך זה ממשיך ומתבצע,
עד שהמשתנה CTR1
מכיל את הערך 5. הואיל והמשתנה CTR1 כבר מכיל את הערך 5, חוזר הפיקוח
להוראה שלאחר הוראת PERFORM - דבר המביא לקריאת
רשומה נוספת מקובץ FILE1. שים לב, כי בקידוד מלא של התכנית יש
להגדיר את המשתנה CTR1
בקטע שטחי העבודה שים לב, כי בקטע הראשי של התכנית, הוראת PERFORM ... UNTIL עצמה נמצאת תחת פיקוח הוראת PERFORM . זהו קטע התכנית הראשי, המפעיל את קטע התכנית CALC-RTN, וזאת עד אשר EOF= 1. מכאן, שהקטע CALC-RTN , המפעיל קטע אחר , מופעל בעצמו על ידי הוראת PERFORM . תהליך זה של קטע, המפעיל קטע ובעצמו מופעל על ידי קטע אחר, הינו תהליך רגיל של כתיבת תכנית. נסכם, אם כך, את סדרת ההוראות, אשר בדרך כלל מתבצעות בזמן ביצוע לולאות:
התבונן
בקטע התכנות הבא, ובדוק, אם אתה מוצא שגיאה
לוגית בקטע זה. המטרה: להוסיף את המשתנה FIELDA למשתנה SUM-TOTAL עשרפעמים.
הבחנת,
כנראה, שבקטע הקידוד ADD-RTN. אין כל מהלך, המשנה
ומגדיל את המשתנה CTRA. משתנה זה,
שהיה בעל ערך התחלתי של אפס, יישאר כזה ולא
יגדל. קטע התכנות ADD-RTN.
יתבצע, לאחר שהתנאי הנבדק CTR
= 10 מקבל תשובה שלילית. מהלך זה יבוצע
הרבה יותר פעמים מאשר ביקשנו באופן מעשי
לבצע, וזאת הואיל וההוראה .ADD
1 TO CTRA אינה נכללת בקטע ADD-RTN. מצב זה נקרא לולאה
אינסופית. באופן מעשי יארע הדבר הבא במחשבים
מסויימים : השעון הפנימי הקיים במחשב יבחין
בפעולה זו, שאינה מסתיימת, ויפסיק את מהלך
התכנית. במחשבים, שמנגנון זה אינו קיים בהם,
תמשיך פעולת הלולאה האינסופית, עד שהתכניתן
יפסיק את מהלך התכנית. נניח שאנו רוצים לבצע
חיקוי של הכפלת המשתנה A במשתנה B, על ידי ביצוע פעולות חיבור. לדוגמא,
אם
המספר שלוש מתחבר לעצמו ארבע פעמים, התוצאה
היא 12 - תוצאה המקבילה לפעולת הכפל 4 * 3. אם
נשתמש בהוראה PERFORM ... UNTIL
נוכל לכתוב את קטע הקידוד הבא:
נניח ש A=3 ו-B=4, ונבדוק אם התוצאה המתקבלת היא TOTAL = 12.
כאן
ביצוע הוראת PERFORM מסתיימת
והוראה הבאה אחריה מתחילה להתבצע תהליך
זה הוא נכון עבור כל המספרים החיוביים
והשלמים, אשר המשתנה B
יכיל, שים לב, שאם במקרה B
= 0, קטע הקידוד RTN1 פשוט לא יתבצע. בזמן ביצוע הוראת: (תנאי) UNTIL (קטע
תכנית) PERFORM, אם התנאי מתקיים בפעם הראשונה
שמגיעים להוראה זו - קטע
התכנית המופעל אינו מתבצע. לעיתים
יש צורך להפעיל קטע קידוד מסויים אחד במקומות
שונים במהלך התכנית. לדוגמא, קטע תכנית, המטפל
בשגיאות שונות, שהתגלו במהלך התכנית - שגיאות
התלויות בתנאים שונים. הוראת PERFORM
פשוטה מאפשרת, במקרה זה, להפעיל את קטע התכנית,
המטפל בשגיאות, ממקומות שונים בתכנית. תבנית
הכתיבה במקרה זה תהיה:
הוראה
זו תגרום לביצוע התהליך הבא:
|
פרק 1 - מבוא לתכנות COBOL.
פרק 2 - ארגון נתונים
פרק 3 - חטיבת הזיהוי
(IDENTIFICATION DIVISION)
פרק 4 - חטיבת הסביב
(ENVIRONMENTAL DIVISION)
פרק 5 - חטיבת הנתונים
(DATA DIVISION)
פרק 6 - חטיבת הביצוע
(PROCEDURE DIVISION)
פרק 7 - הוראת MOVE
פרק 8 - קטעי האחסון לעבודה
פרק 9 - הוראות אריתמטיות
פרק 10- הוראות תנאי
פרק 11 - רישומים נוספים בחתיבת הנתונים
פרק 12 - עריכת פלט מודפס
פרק 13 - הוראות מיוחדות לעריכת הדפסה
פרק 14 - הוראת DISPLAY ו-ACCEPT
|
.איתן 2002. כל הזכויות שמורות למערכת המידע איתן © |