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

ג. הוראת כפל וחילוק

בגלל הדמיון שבין הוראות אלו, נסביר אותן יחדיו, באותו הפרק.

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

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

 תבנית 1 

(שם-נתון-2) BY  {שם-נתון-1} MULTIPLY

     {קבוע-1}                       

או:

 תבנית 2 

 (שם-נתון-3) GIVING (שם-נתון-2) BY {שם-נתון-1} MULTIPLY

(קבוע-2)             {קבוע-1}                    

 

דוגמאות

MULTIPLY  100  BY QTY-ON-HAND.

MULTIPLY  QTY  BY  PRICE.

MULTIPLY  TAX  BY  GROSS  GIVING DEDUCTIONS.

MULTIPLY 150  BY  DEPENDENTS   GIVING  STD-DED.

כמו כן, גם להוראת החילוק הפשוטה : שתי תבניות כתיבה כנ"ל:

 תבנית 3 

(שם-נתון-2) INTO  {שם-נתון-1} DIVIDE

     {קבוע-1}               

או:

 תבנית

 (שם-נתון-3) GIVING (שם-נתון-2) BY {שם-נתון-1} DIVIDE

(קבוע-2)   INTO    {קבוע-1}                  

 

דוגמאות

DIVIDE  12  INTO  ANN-SAL.

DIVIDE  N  INTO SUM.

DIVIDE  12  INTO  ANN-SAL GIVING MONTHLY-SAL.

DIVIDE  N  INTO SUM GIVING AVERAGE.

DIVIDE  ANN-SAL  BY  12  GIVING  MO-SAL.

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

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

  1. MULTIPLY  20  BY PRICE

  2. MULTIPLY  PRICE  BY  QTY

הפקודות צריכות להיכתב זו אחר זו, והתוצאה הסופית תהיה המכפלה של כל 3 המשתנים והקבוע, מאוחסנת במשתנה QTY. בהוראת הכפל נשתמש תמיד במלה השמורה BY, ואילו בהוראת החילוק אנו יכולים להשתמש במלה השמורה BY, וגם במלה השמורה INTO, כאשר השימוש בשתי הצורות זהה והתוצאה הפוכה.

אם כתבנו: .DIVIDE  3 INTO 6  GIVING  AMT, הרי התוצאה של 6/3, שהיא 2, תאוחסן ב-AMT, וזה בדיוק כפי שהיינו כותבים:         DIVIDE  6 BY 3  GIVING  AMT.

נסתכל על הדוגמאות הבאות, לצורך תרגול הנאמר:

דוגמא 1

הסבת מעלות צלסיוס למעלות פרנהיט מתבצעת על פי הנוסחה          (9/5)C + 32  = F. בשפת COBOL נכתוב זאת כך:

MULTIPLY  9  BY  C.

DIVIDE  5  INTO C.

.ADD 32, C GIVING  F

כיוון ש- 1.8 = 9/5, נוכל גם לכתוב כך: 

MULTIPLY 1.8 BY C.

ADD 32, C GIVING F.

דוגמא 2

חשב את ממוצע שלושת שדות הנתונים הבאים: HRS-WEEK1, HRS-WEEK2,HRS-WEEK3. הצב את  שובתך בשדה הנתונים AVERAGE ודאג לכך שערכיהם של שדות הנתונים המשמשים בסיס לחישוב לא ישתנו:

פתרון:

ADD HRS-WEEK1, HRS-WEEK2, HRS-WEEK3 GIVING AVERAGE.

DIVIDE  3  INTO  AVERAGE.

דוגמא 3

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

C = A^2  +  B^2

שוב, נצא מתוך ההנחה ששדות הנתונים A ,B, ו-C מוגדרים בחטיבת הנתונים.

פתרון:

MULTIPLY A BY A.

MULTIPLY B BY B.

.ADD A, B GIVING C

זכור: הכפלת שדה הנתונים A בעצמו (A * A) או רישום חזקה של A (ז"א A^2) אלה פעולות זהות מבחינת ביצוען.

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

.ADD A  TO  B

.MULTIPLY  B  BY  B  GIVING  C

הוראת הרישום ADD מעבירה לשדה הנתונים B את סיכום השדות A + B. הוראת הכפל יוצרת את התוצאה על פי הנוסחה (B + A) * (B + A), נוסחה שהיא שונה מהמבוקש A^2  +  B^2.

REMINDER (שארית)

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

DIVIDE 130 BY 40  GIVING  ITEM-A.

    .99 הוא ITEM-A של PICTURE

התוצאה:  03 מאוחסן ב- ITEM-A .

שארית: 10

ישנם מקרים, בהם נרצה לשמור על השארית, לשימושים נוספים בהמשך התכנית; ואז נוכל לכתוב את הוראת החילוק בצורה הבאה:  

 (שם-נתון-3) GIVING (שם-נתון-2) BY {שם-נתון-1} DIVIDE

(קבוע-2)   INTO    {קבוע-1}                  

[(שם-נתון-4) REMINDER]

דוגמא

WORKING-STORAGE  SECTION.

WORK-AREAS.

REMAIN-1  PIC  99.

...

PROCEDURE  DIVISION.

...

.DIVIDE  130  BY  40  GIVING  ITEM-A  REMAINDER  REMAIN-1

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

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

ערך אחרי ביצוע הפעולה  

פעולה אריתמטית

A

B

C

D

ADD A TO B

A

A+B

 

 

ADD A, B, C TO D

A

B

C

A+B+C+D

ADD A, B, C  GIVING D

A

B

C

A+B+C

SUBTRACT  A  FROM  B

A

B-A

 

 

SUBTRACT  A, B  FROM  C

A

B

C-(A+B)

 

SUBTRACT  A, B  FROM  C  GIVING  D

A

B

C

C-(A+B)

MULTIPLY  A  BY  B

A

A*B

 

 

MULTIPLY  A  BY  B  GIVING  C

A

B

A*B

 

DIVIDE  A  INTO  B

A

B/A

 

 

DIVIDE  A  INTO  B  GIVING  C

A

B

B/A

 

DIVIDE  A  BY  B  GIVING  C

A

B

A/B

 

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

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

 

נושאים

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

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