פרק 9  הוראות אריתמטיות.

ו. הוראת החישוב - COMPUTE STATEMENT

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

בהוראת COMPUTE, ניתן להשתמש בסמלים הבאים, עבור הפעולות האריתמטיות:

חיבור

+

חיסור

-

כפל

*

חילוק

/

העלאה בחזקה

**

נתבונן בשימוש בהוראה זו בדוגמאות דלהלן:

(1)   COMPUTE TAX = .05 * AMT

(2)  COMPUTE  A = B * C / D

(3)  COMPUTE  NET = AMT - .05 * AMT

יש לשים לב, שלפני סימן השוויון, משמאל, מופיע תמיד שם משתבה, שהוא משתנה התוצאה, בעוד שמימין לסימן השוויון מופיע ביטוי אריתמטי אשר תוצאתו מועברת אל משתנה התוצאה. אם בדוגמא מספר 1 , התוכן   המספרי בשדה AMT היה 200, הרי תוצאת הביטוי האריתמטי 200 * .05 = 10, היתה מאוחסנת במשתנה TAX, בעוד שהתוכן הקודם שלו היה נעלם. כל השדות המופיעים בביטוי האריתמטי (מצד ימין של סימן השוויון) - נשארים בערכם המקורי.

דוגמא 4

COMPUTE  TOTAL  =  AMT1 + AMT2 - AMT3.

תוכן אחרי הביצוע

תוכן אחרי הביצוע

95

100

TOTAL

80

80

AMT1

20

20

AMT2

5

5

AMT3

שדות הנתונים AMT1,AMT2 ו-AMT3 המשתתפים בהוראה COMPUTE, נשארים ללא שינוי לאחר ביצוע ההוראה. השדה TOTAL מקבל את תוצאת הפעולה האריתמטית. ערכו המקורי של השדה TOTAL לפני ביצוע הפעולה אינו משפיע על תוצאת הפעולה. הערך 95 מועבר לשדה הנתונים TOTAL. שדות הנתונים, המופיעים מימין לסימן השוויון בהוראה COMPUTE, יכולים להיות קבועים או משתנים. אין להגדיר את הקבועים במקומות כלשהם בתכנית, אלא יש להשתמש בהם במקומות בהם הם נחוצים; אולם ברור כי שדות נתונים, המשמשים בהוראה לצורכי חישוב, חייבים להיות מוגדרים בחטיבת הנתונים. כל שדות הנתונים, המשתנים והקבועים, המשתתפים בהוראה COMPUTE חיבים להיות נומריים.בהוראה COMPUTE ניתן להשתמש ביותר מאשר פעולה אריתמטית אחת (פעולות חיבור, חיסור, כפל או חילוק). לדוגמא, נוכל לראות כי ההוראה אשר בוצעה בדוגמא 2, שבה מופיעים גם כפל וגם חילוק, ניתן לרשום אותה גם בצורה הבאה.

MULTIPLY  B  BY  C  GIVING  A.

DIVIDE  D  INTO  A.

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

ההוראות ADD, SUBTRACT, MULTIPLY ו-DIVIDE מקבילות בהתאמה לסימנים +,-,*,/. ניתן לבצע בעזרת הסימנים האריתמטיים גם העלאה בחזקה, תוך שימוש בסימן האריתמטי **. לא קיימת בשפת COBOL הוראה נפרדת, המקבילה לסימן זה, והמבצעת העלאה בחזקה. הרישום A ** 2. מסמל את הרישום המתמטי A^2 או את הרישום A * A. הסימן A ** 3 מסמל את הרישום המתמטן A^3 או את הרישום A * A * A. לשם מציאת הערך B^4 ולשם הצבת התוצאה בשדה C ההוראה אשר תירשם היא 

COMPUTE C = B ** 4.

כל הסימנים האריתמטיים, המופיעים בהוראת החישוב, חייבים להתנהג לפי חוקי המרווח; כלומר - לכל סימן יש מרווח אחד לפניו ואחד אחריו (כולל סימן השוויון). אם נרצה לכתוב A = B+C+D^2, הרי ב-COBOL יופיעו מרווחים כדלקמן:

COMPUTE  A  =  B  +  C  +  D  **  2

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

  1. הוראה אריתמטית, לדוגמא:

    COMPUTE  SALARY = HRS * RATE

     

  2. קבוע, לדוגמא

    COMPUTE  TAX  = .05                                       

     

  3. שמות נתונים, לדוגמא:

    COMPUTE  FLDA = FLDB.

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

{שם-נתון} = [ROUNDED] (שם-נתון)ׁCOMPUTE 

קבוע                                                            

ביטוי חשבוני                                             

 

דוגמא 5

(a)  COMPUTE  A  =  B  +  C  +  D

(b)  COMPUTE  A  ROUNDED  =  B  +  C  +  D

       A                  B                     C                     D          

התוכן

PIC

התוכן

PIC

התוכן

PIC

התוכן

PIC

6.84

9V99

2.10

9V99

1.05

9V99

a) 09.9)

99V9
            b) 10.0)  

ואילו תבנית הכתיבה עם אפשרות שגיאת גודל היא:

(הוראת הביציע) [ON SIZE ERROR] {שמ-נתון}  = (שמ-נתון) COMPUTE

{ קבוע}                                      

{ ביטוי חשבוני}                                   

 

דוגמא 6

COMPUTE  A  = 105 -3

בהוראת COMPUTE, אם המשתנה A יהיה מוגדר PICTURE 99, אזי התוצאה המתקבלת תהיה גדולה מדי. התוצאה 102 אינה יכולה להיות מאוחסנת בשדה A. במקרה זה מקוזזות הספרות השמאליות של המספר. התוצאה שתתקבל היא 02. לשם הגנה בפני מצב זה, משתמשים במשפט ON SIZE ERROR, לדוגמא:

COMPUTE  A  =  105  - 3 ON SIZE ERROR  PERFORM  ERROR-RTN.

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

(הוראת הביציע) [ON SIZE ERROR] {שמ-נתון}  = [ROUNDED] (שמ-נתון) COMPUTE

{ קבוע}                                                          

{ ביטוי חשבוני}                                                       

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

ADD  1  TO  A.

COMPUTE  A = A  +  1.

ניתן בעזרת ההוראה COMPUTE לרשום ביתר קלות נוסחאות מסויימות. לשם רישום הנוסחה C = A^2 + B^2 , ללא ההוראה COMPUTE יש לרשום כמות מסויימת של פעולות בודדות, בעוד שבמסגרת ההוראה נרשום:

COMPUTE  C  =  A ** 2  +  B  **  2.

אין הוראה או סימן בשפת COBOL, המבטאים הוצאת שורש ממספר; אולם מבחינה חשבונית ניתן להעלות בחזקה של 1/2 מספר מסויים ולקבל את התוצאה הרצוייה.

מכאן:

SQRT(25)  =  25^.5  = 5

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

COMPUTE  C  =  A  **  .5

סדר ביצוע ההוראות האריתמטיות

בהוראת החישוב, סדר ביצוע הפעולות האריתמטיות חשוב ביותר, וקובע לגבי התוצאה. נשים לב לדוגמא הבאה:

דוגמא 7

COMPUTE  D = A + B / C

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

a) D = (A+B) / C

b) D = A + (B / C)

ברור, שאלו שתי דרכים, המובילות לתוצאות שונות. אם A = 3,B = 6   ו-C = 3, הרי בדרך הביצוע הראשונה (a) נקבל D = 3, ואילו בדרך הביצוע השניה (b) נקבל D = 5.

 חוקי עדיפות הביצוע

  1. ** חזקה

  2. * (כפל) או / (חילוק) (לפי סדר ההופעה שלהם - מצד שמאל לצד ימין)

  3. + (חיבור) או - (חיסור) (לפי סדר ההופעה שלהם - מצד שמאל לצד ימין).

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

בהתאם לחוקים אלו, ההוראה A = C + D ** 2 תתבצע באופן הבא:

1. בתחילה העלאה בחזקה :D ** 2  = תוצאת החזקה

2. ואח"כ חיבור : תוצאת החזקה + C

כלומר, על פי הביטוי האריתמטי A = C + D^2, ולא A = (C + D)^2, שהוא בניגוד לחוקים הנ"ל. וההוראה COMPUTE  S = T * D + E / F תתבצע על פי הסדר הבא:

1. בתחילה כפל: T * D

2. אח"כ חילוק:E / F  

3. לבסוף חיבור: (T * D) + (E / F)

כלומר, על פי הביטוי האריתמטי S = T * D + E / F. יש לשים לב, שבהוראה זו יש גם הוראת כפל וגם הוראת חילוק, והן מתבצעות בזו אחר זו, משמאל לימין.

נסתכל כעת, כשאנו יודעים את הקדימויות של סדר הביצוע, על הדוגמא הראשונה, שהיתה כדלהלן: COMPUTE  D = A + B / C. ברור, שהביטוי האריתמטי המתאים הוא D = A + (B / C) (כלומר לפי צורה (b).

כאשר רוצים לשנות את סדר הביצוע בהוראת החישוב, אפשר להשתמש בסוגריים. השימוש בסוגריים מבטל את סדר ביצוע ההוראות, כפי שבא לידי ביטוי בסוג הפעולה המבוצעת. לשם חישוב העךך D = (A + B) / C ניתן להשתמש בהוראה COMPUTE C = A + B / 3 וזאת הואיל והוראה זו מבטאת את החישוב  D = A + (B/C) . לשם חלוקת סכום הערכים של המשתנה A והמשתנה B במספר 3, כפי שרצינו לבצע יש לכתוב את ההוראה הבאה.

COMPUTE  C  = (A + B) / 3

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

1. A + B

2. (A + B) / 3

דוגמא 8

נניח, כי המשתנים A ,B, ו-C הם צלעות במשולש ישר זווית. המשתנה C מהווה יתר במשולש זה. נתונים המשתנים A ו-B, ויש לחשב את המשתנה C על פי משפט פיתגורס, החישוב יבוצע כדלקמן:

C = SQRT( A^2 + B^2)

צורת הכתיבה במקרה זה תהיה: 

COMPUTE  C  ROUNDED = ( A ** 2 + B ** 2) ** .5

דוגמא 9

ברצוננו למצוא, מהו המחיר נטו (NET), אשר נצטרך לשלם, אם מהמחיר המלא (GROSS) ניתנת הנחה (DISCOUNT) מסויימת, שהיא חלק מתוך המחיר המלא. נתון כי גובה ההנחה

DISCOUNT = .03

נתון:

NET = GROSS - DISCOUNT

DISCOUNT = .03 * GROSS

ניתן לרשום את ההוראה COMPUTE כדלקמן:

COMPUTE  NET = GROSS - (.03 * GROSS)

אולם אין חובה להשתמש במקרה זה בסוגריים. ניתן לרשום גם:

COMPUTE  NET = GROSS - .03 * GROSS

שים לב, כי הצורה הפשוטה ביותר תהיה הצורה הבאה:

COMPUTE NET = .97 * GROSS

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

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

 

נושאים

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

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