פרק
9 הוראות
אריתמטיות. |
ה.
הערה
לשגיאת גודל - ON SIZE ERROR OPTION
|
מקרה
שכיח נוסף, בכתיבת הוראות אריתמטיות כלשהן
בתכנית, הוא מקרה של קבלת תוצאה שגויה, עקב קיצוץ ספרה משמעותית משמאל.
כיצד
מתרחש מצב כזה? נראה בדוגמא הבאה:
אם
מתבצעת ההוראה דלהלן:
AMT1
AMT2
AMT3
התוכן |
PICTURE |
התוכן |
PICTURE |
התוכן |
PICTURE
|
050 |
999 |
150 |
999 |
800 |
999 |
|
התוצאה
המתקבלת היא (800 + 150 + 50 = 1000
) - מספר בן ארבע ספרות; תוצאה זו צריכה להיות
מאוחסנת במשתנה, המוגדר באורך שלושה תווים
בלבד. במקרה כזה הספרה השמאלית מושמטת (קיצוץ
משמעותי לגבי התוצאה), ובשדה AMT3. נקבל 000.
זהו מצב של שגיאת גודל, או, OVERFLOW,
וחשוב לציין שאין המחשב מתריע על כך, ואף
אינו מפסיק את התכנית אם נתהווה מצב שכזה.
הדרך
הטובה ביותר למנוע מצב של שגיאת גודל, היא
להגדיר משתנה תוצאה גדול מספיק. אך לפעמים
קורה, שהמתכנת אינו שם לב ששדה מסוים משמש
במהלך התכנית, גם כמשתנה תוצאה, ואז עלול
להתרחש מצב כנ"ל. בשפת COBOL קיים פתרון לקבלת התרעה, כלהלן:
{הוראת
הביציע} [[ON SIZE ERROR
{הוראה חשבונית}
|
להלן
דוגמא לשימוש בהערה לשגיאת גודל:
ADD
A ,B TO
C ON SIZE ERROR
MOVE 0 TO
C.
MULTIPLY
A BY
B ON
SIZE ERROR
PERFORM ERROR-RTN.
DIVIDE
A INTO
C ON
SIZE ERROR
MOVE 'INVALID
DIV' TO
CDE.
|
בכל
הוראה אריתמטית, גם בצורת הכתיבה הרגילה
וגם עם GIVING
ניתן להשתמש באפשרות זו. המונח
IMPERATIVE
STATEMENT
(משפט ציווי) מציין כל משפט COBOL
המורה על ביצוע של הוראה או הוראות מסוימות.
אין לכלול במונח זה משפטי תנאי או הוראות.
משפט הציווי יתבצע אך ורק אם, לאחר ביצוע
ההוראה האריתמטית, באמת נתהווה מצב של
שגיאת גודל. למשל, בדוגמא מספר 1 יועברו
אפסים למשתנה C רק אם הוא אינו מספיק גדול להכיל את
תוצאת הסיכום. אם C מכיל מספיק תווים, כדי
שהתוצאה תאוחסן בו, ללא קיצוץ משמעותי
בשמאל, הרי משפט הציווי לא יתבצע, אלא המחשב
ימשיך למשפט העוקב להוראה הבוכחית. בהוראת
החילוק יכול להתהוות מצב של שגיאת גודל, לא
רק כאשר אין מספיק מקום במשתנה התוצאה, אלא
גם כאשר רוצים בטעות לחלק ב-0, דבר שאסור
לבצע. בכל הוראה אריתמטית, ניתן להשתמש
בצרוף של אפשרות העיגול עם אפשרות שגיאת
גודל (כאשר המלה
ROUNDED תמיד ראשונה), בצורה הבאה:
]הוראת
הביציע]
ROUNDED
ON SIZE ERROR [הוראה
חשבונית[
|
בהוראת חילוק עם שארית, כתיבת ההוראה תיראה
כך:
[(שמ-נתון) REMINDER]
... [ROUNDED] DIVIDE
[(הוראת הביציע) [ON SIZE
ERROR
|
קודם | תחילת הדף | הבא
שאלות להערכה עצמית >>
|