פרק
9 הוראות
אריתמטיות. |
ג.
הוראת
כפל וחילוק
|
בגלל
הדמיון שבין הוראות אלו, נסביר אותן יחדיו,
באותו הפרק.
כל
הכללים, שלמדנו עד כה לגבי הוראות
אריתמטיות, כמובן תקפים גם כאן, כלומר, כל
המשתנים והקבועים חייבים להיות נומריים,
ושדה התוצאה תמיד חייב להיות משתנה.
גם
להוראת הכפל הפשוטה, שתי תבביות כתיבה
בסיסיות:
(שם-נתון-2)
BY {שם-נתון-1} MULTIPLY
{קבוע-1}
|
או:
(שם-נתון-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.
|
כמו
כן, גם להוראת החילוק הפשוטה : שתי תבניות
כתיבה כנ"ל:
(שם-נתון-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, נצטרך לכתוב שתי הוראות כפל נפרדות:
-
MULTIPLY
20 BY PRICE
-
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.
נסתכל
על הדוגמאות הבאות, לצורך תרגול הנאמר:
הסבת
מעלות צלסיוס למעלות פרנהיט מתבצעת על פי
הנוסחה
(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.
|
חשב
את ממוצע שלושת שדות הנתונים הבאים: HRS-WEEK1,
HRS-WEEK2,HRS-WEEK3.
הצב את שובתך
בשדה הנתונים AVERAGE
ודאג לכך שערכיהם של שדות הנתונים
המשמשים בסיס לחישוב לא ישתנו:
פתרון:
ADD
HRS-WEEK1, HRS-WEEK2, HRS-WEEK3 GIVING AVERAGE.
DIVIDE
3 INTO
AVERAGE.
|
מצא
את ערכו של שדה הנתונים 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 |
|
|
קודם | תחילת הדף | הבא
שאלות להערכה עצמית >>
|
פרק 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
|