פרק 6 - חטיבת הביצוע (PROCEDURE DIVISION)

ג. הוראת PERFORM ... UNTIL

 

 עיצוב ההוראה

.(תנאי) UNTIL (שם-קטע) PERFORM

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

 דוגמא

.PERFORM CALC-RTN UNTIL EOF = 1

להזכירך: EOF הוא משתנה מיוחד בסעיף האחסון- לעבודה, המכיל אפס כערך התחלתי, ויכיל אחד רק כאשר יתקיים תנאי AT END. אם כן, הוראת PERFORM מורה למעשה, כי יש לבצע את כל ההוראות בקטע CALC-RTN, עד אשר אין יותר רשומות קלט לעיבוד. אז תחזור הבקרה להוראה שאחרי הוראת PERFORM.

סדר הצעדים מופיע כלהלן:

OPEN                                                       

READ                                                      

PERFORM                                              

CLOSE                                                    

STOP                                                        

CALC-RTN.                                                           

{תהליך הביצוע }

.READ FILE-1 AT END MOVE 1 TO EOF

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

תרשים התהליך הבא מסביר את אופי ביצוע הפעולה:

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

OPEN                     

PERFORM             

...

CALC-RTN.            

READ          

{processing}  

בדוגמה הקודמת, נקראה רשומת נתונים ביחידה הראשית, ואז הועברה הבקרה ליחידה CALC-RTN – שם עובדה הרשומה הראשונה, ולאחריה נקראה הרשומה הבאה, וכן הלאה. בדוגמה זו - היהידה הראשית אינה מכילה הוראת-READ. במקום זאת, קוראת השגרה CALC-RTN רשומה ומעבדת אותה בכל פעם. הצעדים, שיתבצעו בתכנית זו, זהים בדיוק למה שהתבצע בדוגמה הקודמת, פרט לרשומה האחרונה. ראינו אז, כי כאשר נעשה ניסיון לקרוא רשומת נתונים נוספת (ורשומות כאלה אינן בנמצא) יתבצע התנאי - AT END. בנקודה זו, הואיל והוראת READ היא ההוראה האחרונה, מתבצעת בדיקה אם 1 = EOF. כאשר שוויון זה נכון, חוזרת הבקרה ליחידה הראשית. מה קורה במקרה שלעיל, כאשר נעשה ניסיון לקרוא רשומה - ואין כזו? מתבצע התנאי AT END, ו-EOF מושווה ל-1  . אולם הבדיקה להחזרת הבקרה אינה מתבצעת, אלא אחרי שבוצע כל הקטע. משמעות הדבר היא המשך הביצוע, למרות שאין רשומה נוספת. לאחר הביצוע פעם נוספת, תחזור הבקרה ליחידה הראשית. תוצאת התכנית הזו הינה, בדרך כלל, ביצוע עיבוד הרשומה האחרונה פעמיים, בקיצור, כאשר משתמשים בתבנית ההוראה הבאה:

.1 = EOF UNTIL (שם סעיף) PERFORM

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

אם כן, לכל תכניותינו תהייה הצורה הבאה:

OPEN

READ

1  = EOF UNTIL (שם סעיף) PERFORM

...

(שם סעיף)

...

.READ ... AT END MOVE 1 TO EOF

קודם | תחילת הדף | הבא

שאלות להערכה עצמית >>

 

נושאים

פרק 3 - חטיבת הזיהוי                               (IDENTIFICATION DIVISION)
פרק 6 - חטיבת הביצוע                               (PROCEDURE DIVISION)
פרק 14 - הוראת DISPLAY ו-ACCEPT

.איתן 2002. כל הזכויות שמורות למערכת המידע איתן ©