נגדיר
הוראת תנאי כהוראת COBOL, המצעת פעולה מסוימת, תוך תלות
בהופעתו של תנאי כלשהו. משפט
זה יתחיל, בדרך כלל, במלה השמורה IF. הצורת הבסיסית לכתיבת הוראות תנאי היא:
החלק
השני של ההוראה (ELSE) אינו חייב להופיע במסגרת ההוראה, אלא
ניתן להשתמש בו על פי הצורך.
בפרק הקודם למדנו הוראות, אשר ביצוען אינו
מותנה בתנאי כלשהוא, כגון: ADD
A TO B, MOVE
C TO D, OPEN
INPUT FILE.
מכאן שאנו מבחינים בשני סוגים עקריים של
הוראות בשפת COBOL:
הוראות
תנאי, כפי שאנו רואים, בודקות יחס מסויים
בין משתנים. יחס זה יכול להיות קיים או בלתי
קיים. בהוראת תנאי פשוט נבדק יחס יחיד בין
משתנים כפי שמופיע בדוגמאות הבאות:
שלוש
בדיקות אלה, הינן הוראות תנאי פשוט. להלן
דוגמא להוראת ביצוע, הקשורה להוראת תנאי
פשוט.
באופן
מעשי, שתי בדיקות מופיעות בהוראה זו: א.
האם A שווה ל-B. ב.
האם A אינו שווה ל-B. א.
כאשר מתקיים מצב השוויון, תתבצע הוראת DIVIDE, בעוד שמתעלמים משאר
ההוראה, הקשורה
למצב ELSE. ההוראה הבאה, אשר תתבצע לאחר ביצוע
החלוקה, תהיה ההוראה, אשר תופיע לאחר
בדיקת התנאי, ללא התייחסות להמשך הוראת
התנאי - משפט ELSE. ב.
כאשר מתקיים מצב של אי שוויון, לא תתבצע
הוראת DIVIDE;
אלא רק החלק השני של ההוראה, המופיע לאחר
המלה ELSE, הוא שיתבצע, כלומר - פעולת החיבור (ADD). גם במקרה זה, ההוראה
הבאה אשר תתבצע לאחר ביצוע פעולת החיבור
תהיה ההוראה אשר תופיע לאחר בדיקת התנאי. בצורת
כתיבה זו אנו גורמים, אפוא, לביצוע אחת משתי
הוראות ביצוע שונות. הוראה אחת - כאשר התנאי
הנבדק מתקיים, והוראה שנייה - כאשר התנאי
אינו מתקיים. כאמור ניתן להשמיט את חלק
ההוראה השני, ELSE, אם ולא נדרש לבצע כל פעולה שהיא בגין
חוסר קיום התנאי, כפי שמופיע בדוגמא הבאה:
במקרה
זה, ההודעה “NO TRANS”
תודפס אך ורק, אם המשתנה AMOUNT
יכיל את הערך אפס. אחרת, תמשיך התכנית
להתבצע ללא כל ביצוע הדפסה, ומכאן, שאין
צורך להשתמש בצורה המירבית של משפט התנאי,
הכולל את המלה ELSE. ניתן
להשתמש בסימנים מתמטיים, כך שיבטאו את
התנאי לביצוע, במקום מילות המפתח, שבהן
השתמשנו עד כה.
המשתנה
C יוכפל במשתנה B,
אם ורק אם התנאי
הנבדק
לא יתקיים, כלומר, אם המשתנה A שווה למשתנה B
או קטן ממנו. רוב המהדרים של שפת COBOL דורשים מרווח אחד,
לפחות, מכל צד של סימן התנאי
< , > , =, ויש להקפיד על צורת רישום זו. בזמן
ביצוע בדיקה בין קבועים ומשתנים, יש לדאוג
שהקבועים והמשתנים המשתתפים בבדיקה יהיו
בעלי סוג נתונים זהה. במשפט:
יוצאים
מתוך ההנחה, שהמשתנה A הוא משתנה אלפאנומרי, הואיל
והוא נבדק מול קבוע אלפאנומרי. מצב זה
דומה למצב, המתקיים בהוראת MOVE, בו מועברים נתונים בין
משתנים, או בין קבוע ומשתנה. אם B
הוא משתנה מספרי (נומרי), המוגדר PICTURE 999,
הרי שהוראת התנאי שתיכתב במקרה זה תהיה:
במקרה
של בדיקת תנאי בין משתנים, הרי שהמשתנים
הנבדקים חייבים להיות בעלי תבנית זהה של
נתונים, מספריים או אלפאנומריים. רק במקרה
זה נוכל להיות בטוחים, שהתשובה שקיבלנו
בגין בדיקת התנאי היא תשובה נכונה. בהוראה הבאה: IF A = B PERFORM RTN1. המשתנים A,B חייבים להיות משתנים מספריים, או אלפאנומריים. בהשוואת ערכים מספריים כל המספרים הבאים, בצורה בה הם רשומים, הינם זהים: 012 12.00 12 12+ ברור,
אם כן, שלמרות העובדה שהמספר 12.00 הוא בעל
תבנית שונה מהמספר 012, הרי בהשוואה מתמטית
התשובה שנקבל תהיה שהמספרים שווים. באוופן
דומה, אם נשווה בין שני המשתנים בעלי התכולה
הבאה: ABC
ABC~
(מרווח = ~) הרי
שנקבל תשובה חיובית : שהמשתנים שוים, למרות
העובדה שהמשתנה השני מכיל מרווח אחד יותר
מהראשון. כאן יש לציין, שההשוואה הנעשית
הינה השוואה של תווים משמעותיים בלבד. בהשוואת
ערכים אלפאנומריים במסגרת הוראת תנאי,
תתבצע ההשוואה בין המשתנים על פי בדיקת תו
אחרי תו משמאל לימין; כל תו נבדק על פי
תצוגתו הבינארית. כך קורה שמרווח, שהוא בעל
תצוגה ביבארית נמוכה, "קטן" יותר מכל
אות, ספרה או סימן מיוחד. האות "A"
הינה בעלת ערך נמוך יותר מהאות "B",
וכו'. הייצוג הבינארי של האותיות, הספרות והסימנים המיוחדים, משתנה בין מערכות המחשב השונות. עליך לבדוק, במערכת המחשב אשר בה מופעלות תכניות COBOL אשר כתבת, את סדר האותיות, הספרות והסימנים המיוחדים ואת ערכם הבינארי. שים לב שקיימות אותיות אנגליות גדולות ואותיות קטנות. כמו כן, שים לב, שיכולות להופיע גם אותיות עבריות בנוסף לאותיות האנגליות הקטנות או במקומן. בדוגמאות הבאות, אנו יוצאים מתוך הנחה, המתקיימת בדרך כלל, שסדר האותיות והספרות הוא כדלקמן: ערך
גדול
~ABC…Z0123…9 ערך
קטן מכאן,
שהקבועים האלפאנומריים הבאים מתנהגים
כדלקמן:
אם
נשווה ערך מספרי (נומרי) לערך אלפאנומרי,
תתבצע ההשוואה כך, שהערך הנומרי כאילו
הועבר לשדה ביניים אלפאנומרי באורך המתאים
וההשוואה תתבצע בין שדה הביניים הנ"ל
ובין המשתנה האלפאנומרי המשווה - זאת על פי
עקרונות ההשוואה האלפאנומרית. אנו רואים,
אם כך, שביצוע השוואה מסוג זה מסוכן מאוד,
ולא בכל מקרה ניתן לסמוך על תוצאת ההשוואה
המתקבלת. מכאן, שיש לבצע בדיקות השוואה אלו
בין משתנים בעלי תבניות נתונים זהות. יש
מקרים, בהם בעקבות בדיקת תנאי כלשהי, נרצה
לבצע סדרה של הוראות, לאו דווקא הוראת ביצוע
אחת. ננסה לבצע את הדוגמא הבאה: א.
אם A
< B אז חבר את המשתנה C
למשתנה D והעבר את הקבוע 2 למשתנה ITEM1. ב.
אם A אינו קטן מ-B,
אז חבר את המשתנה E למשתנה C. בכל מקרה, העבר את הקבוע אפס למשתנהITEM2
. סדרת
הוראות אלה באה לידי ביטוי בדוגמא הבאה:
לעתים,
קיים מצב שבו נרצה לבצע הוראה כלשהי רק
בתנאי, שנקבל תשובה שלילית לתנאי שהצבנו,
בעוד שבגין התשובה החיובית אין לבצע הוראה
כלשהי. במקרה זה נשתמש בהוראת סרק, הנקראת NEXT
SENTENCE (ההוראה הבאה), אשר משמעותה, שיש להמנע
מביצוע כל הוראה בגין תשובה חיובית
לתנאי שהעמדנו, ולעבור להוראה הבאה לאחר
הוראת התנאי. לדוגמא:
משמעות
ההוראה היא, שאם A = B,
לא תתבצע כל הוראה, אלא ההוראה הבאה לאחר
הוראת התנאי; אחרת המשתנה A מתחבר למשתנה D,
ולאחר מכן מתבצעת ההוראה הבאה. ניתן להשתמש
בהוראת הסרק NEXT
SENTENCE גם במסגרת חלקה השני של הוראת התנאי,
במסגרת ELSE, אולם לשימוש זה אין כל
משמעות. לדוגמא, שתי ההוראות הבאות זהות
מבחינת פעילותון:
המשפט ELSE NEXT SENTENCE הוא אינו הכרחי, כי כש-C אינו שווה ל-D, ממילא מתבצעת ההוראה הבאה. בקיצור, משפט ELSE שימושי רק כשיש לבצע פעולה מסויימת או פעולות מסויימות כשהתנאי אינו מתקיים. |
פרק 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
|
.איתן 2002. כל הזכויות שמורות למערכת המידע איתן © |