- שנה: 1990
- מחבר: אבא אנגלברג
- מו"ל: הוד-עמי
- פורמט: ספר
- תגיות: תכנות
OCR (הסבר)
ל = לונ טא 2,/
:ויז ,
| ו מו | ו-7 1 . :
- 5 מ 8 , /
חפ" | מהשבים אישיים,
0 מחשבי אג /,
0 מחשבים מרכזים
00
פופ
אבא אנגלברג
ספרי לימוד והכשרה במדעי המחשב ";
ערך
הוצאת הוד עמי *צחק עמיהוד
מוקדש באהכה
לכני
אהרון-שלום
עריכה לשונית ועיצוב: זהר עמיהוד
קובול 85 מבני
מחשבים אישיים,
מחשבי א ,
מחשבים מרכזיים
פרופ' אבא אנגלברג
ערך יצחק עצמיהוד
ספרי לימוד והכשרה כמדעי המחשב
הוצאת הוד עמי
66 00
,וקו 0 [8ת6750
,65עס אבה
ותו 6תףּ
שפח .8 .1סצע עס
בוג .1 עס 001660
(6)
כל הזכויות שמורות
הוצאת הוד-עמי
לספרי מחשבים בע"מ
ת.ד. 560, רמת-גן 52105
טל המשרד: 052-541207
אין להעתיק ספר זה או קטעים
ממנו בשום צורה ובשום אמצע:
אלקטרוני או מכני, לרבות צילום
והקלטה, ללא אישור בכתב
מאת ההוצאה, אלא לשם ציטוט
קטעיס קצרים בציון שם המקור
הודפס בישראל
כסלו תשנ"א, נובמבר 1990
6 פסתפת [1ה
4 [1וח:ז1/-1106
ת8)-+8ו8ע 560 .0.2.ק
0 שססננת6טס1 ,157861
מסת"ב 965-361-012-0 158%
= 1
תוכן העניינים
הקדמה 2 שיש 6 23
פרק
פרק
א טא טא א טא ₪ טא א
= נא %92= תא 1 סס
פרק
1 תכניות חישוב והדפסה
פתרון בעיה בשפת תכנות .
התכנית בקובול.
שיפור התכנית הראשונה
תרגילים.
2: מבוא לשפת קובול
היסטוריה
מבנה השפה .
פיסוק בקובול . ₪ %
ייצוג פנימי של מספרים .
תנא* יחס א %
אופרטורים בוליאניים.
תנאים מקוצרים.
תרגילים.
3 לולאות
הפקודה את0עתמק
הפקודה שתבעעה8/. .מעס?עסק
המבנה 71אט00פ.
תת-שפה לתיאור פקודות בקובול .
תרגילים.
4 הסתעפיות
המבנה אך
פקודת ;1 ₪ -<
פקודות א1 משולבות
המבנה 025₪.
שמות ערכים.
תרגילים.
13
17
פרק 5: קבצים
1 בניית קבצים
2 קריאה מקבצים .
3 בנ'ית קוב בעזרת מסך
8% תרגילים.
פרק 6: פקודות העברה וחישוב
מבוא. .
העברות יסודיות
העברות קבוצתיות .
העברת קבועים סמליים.
הפקודה 00078
הפקודה 4202.
הפקודה 50878467 .
הפקודה ץ,1ק11/זטא .
הפקודה שפ1טזכ.
תכנית לדוגמה.
תרגילים
יס םס א 0 )>
= ₪ ע%=. תוס נ-00 פ ₪ +
גי גי
+ =
פרק 7: עריכה
1 תווי-עריכה.
2 תכנית לדוגמה . /
3 7 תכנון תכניות גדולות.
8% פסקודת +600.
5 תרגילים.
פרק 8: טבלאות
1 טבלאות במימד אחד.
2 חיפוש בטבלה / ,
3 טבלאות בשניים ושלושה מימדים :
8 הגדרה מחדש.
5 תרג:לים.
פרק 9: שגרות
1 הגדרת שגרה. /
2 סיבות לשימוש בשגרות.
3 פסקודת ,041.
9.8
15(
תכנית לדוגמה .
תרגילים.
פרק 10: מחרוזות
1 **שומים ...00000.0
2 הפקודה 67א8ק5א1 . .0 .0.00.00
3 דוגמאות לשימוש בפקודה 1שמפפא1
84 תכנית לדוגמה. .0 .00.00.00
5 הפקודה 80א911 .50.0 0..
6 דוגמאות לשימוש בפקודה 8א1ת57
7 תכנית לדוגמה. -.00. 000.00
8 פסקודת 6א1תדפאע . .0.00.00
9 דוגמאות לפקודה 6א1ת1פאט . .
0 תרגילים ...00.00.0000
פרק 11: מיון קבצים
1 מבואי. . יל
2 שיטות לסידוד. תווים. ₪ ₪ 6
3 הפקודה 9087 . 0.0 00000 0.
014 דוגמאות לתכניות מיון . .
5 28 4 4 א ₪ ₪ ₪ רע
6 תרג'לים 4 > ₪ ₪2 רש
פרק 12: מחולל דוחות
1 0080 ₪ ₪ ₪ ₪ ₪ ₪ ₪ 4
2 דוגמה להפקת דוה. .0 . .
3 הפקת דוח בעזרת עפסנסש +עמקבת
48 תרגלים 5 > ₪ > ₪0 0080
פרק 13: קובץ סידרתי
1 עדכון קובף סידרת'י . -.-..
2 רשומות באורך משתנה. .0 .-.
3 דוגמאות לעיבוד ועדכון רשומות
83 עדכון רשומות במקומן . .
5 תרג'*לים -, ,00.00.00
פרק 14: ארגון קובץ אינדקס סידרתי
1 מבוא .0 . יק
2 מבנה קובצ אי נדקס סידרתי 7
3 *צירת קוב אינדקס סידרת'י.
8 שיטות גישה לקבצים . . .
00500.0. גישה סידרתית. -
- גישה אקראית . .0 0.00-0.
000000. . גישה די*(מית -
. . . . .
בעלות אורך משתנה.
|10
11
17%
176
12
133
16
108
100
12
106
108
201
205
25
209
221
2211
21
28
206
276
27
208
209
23
23
25
209
209
201
23
5 עדכון קובאצ אינדקס טידרת'.
6 תרג'לים
פרק 15: קבצים יחסיים
1 מבוא -%--
2 ארגון נתונים *חס:
3 דוגמאות
14 תרג'לים
נספח א: קובול במחשבים אישיים (יבמ ותואמים)
הוגקה 4 ₪ ₪ ₪ ₪ 4-9 +
דוגמה 2 - קוב אינדקס סידרת:
דוגמה 3 . .
הידור והרצה .
נספח ב: קובול במחשבי אגצ
בניית קובצ בעזרת מסך .
ניית תפריטים ראשיים .
ביבליוגרפיה
מילון מונחים
206
208
206
207
41
3
5
3
5
329
1
31
46
37
הקדמה
לימוד שפת קובול חשוב היום משתי סיבות. שפת קובול היא השפה
הנפוצה ביותר בעולם ויותר תוכנה כתובה בה מאשר בכל שפה אחרת.
והסיבה השניה היא בכך ששפות רבות של הדור הרביע* כתובות בדקדוק
ומלים הדומות לקובול, ולכן לימוד זה יכול לשמש כמבוא לשפות אלו.
ספר זה מציג שפת קובול בגירסתה המחודשת משנת 1985, המוכרת בשם
5 600. גירסה זו הפכה את קובול לשפת מובנית וגם הוסיפה מספר
פקודות חזקות ביותר,כמו למשל פקודת 41047₪/ם.
הספר מכוון למשתמש במחשבים גדולים של *במ, למשתמשים במחשבי אה07
של חברת דיגיטל (ע*ין בנספח ב') וגם למשתמשים במחשבים אישיים
מסוג 188/20 ותואמיו (ראה נספת א').
הספר תואם את תוכנית הלימודים שפורסמה בשנת 1990 עבור כיתות י"א
ו-י"ב במגמה לטכנולוגיות המידע. הוא מתאים גם לחומר הלימודים
הנדרש ע"* מה" (המכון להכשרה טכנולוגית) עבור המבחן בקובול
לקראת תואר הנדסאי.
שפת קובול מאפשרת לכתוב את הפקודות באנגלית באותיות גדולות או
באותיות קטנות. בספר זה שילבנו אותיות גדולות וקטנות בצורה
שלדעתנו נוחה יותר להבנה של התכניות.
אני רוצה להודות במיוחד ליאיר טרספולסקי, שעזר לי בהכנת הפרקים
שקשורים למיון ולקבצים, לאשתי שעזרה בהכנת החומר לדפוס ובעידוד
כללי וליצחק עמיהוד שהשקיע הרבה בעריכת הספר.
- 9 -
פרק 1
תכניות חישוב והדפסה
1.1 פתרון בעיה בשפת תכנות
א. תכנו הפתרו
תהליך פתרון בעיה בעזרת מחשב כולל שנ: שלבים:
1. עיצוב (ם6918כ2). בשלב העיצוב, מתארים את הצעדים הלוגיים
לפתרון הבעיה. לשם כך משתמשים בתרשימים, כפי שנראה בהמשך.
2. תכנות (שת1ששהעפסץק) או קידוד (8ת0001). בשלב התכנות מתרגמים
צעדים אלה לפקודות מחשב, אשר נכתבות בשפת תכנות.
סידרת הפקודות אותן נכנה תכנית (מהעשסעק), גורמות למחשב לבצע
פעולות מסוימות שתכליתן להגיע לתוצאה מוגדרת, או לפתרון של בעיה
מוגדרת. לכאורה, צריך לכתוב את הפקודות בשפת מכונה (6מ1ת80
6שפפטפת8]) כדי שהמחשב - זאת אומרת, רכיביו האלקטרוניים - *וכלו
לבצען. דרך פעולה זו מאוד מסובכת ולא נדון בכך כאן. במקום זה
נתכנת בשפה עילית (6ש8טקת18 61ט16 ת81₪) - בשפת קובול (00890),
אשר דומה לשפת אנוש ונוחה לתכנות. כדי שהמחשב יוכל לפעול לפ:
תכנית זו צריך להסב אותה לשפת מכונה. משימה זו נעשית ללא
מעורבות המתכנת, באמצעות תכנית מהדר ("116ק00₪). לאחר ההידור
מקבלים תכנית בשפת מכונה ואפשר להריץ (מטת), או לבצע (60106א0)
אותה במחשב.
להלן דוגמה לבעיה שעלינו לפתור: חישוב שכרו השבועי של פועל על-
פי שעות העבודה שלו. את הפתרון (ציג, כאמור, בתכנית מחשב בשפת
קובול. בזמן הכנת התכנית לא ידועים שיעור שכרו לשעה ומספר השעות
שעבד. נסתכל איפוא, על נתונים אלה כנעלמים (או משתנים -
85, כ'י ערכם יכול להיות שונה בכל הרצה של התכנית) ונ'תן
להם את השמות 51108 ו-58401 בהתאמה.
בזמן הרצת התכנית יש לספק לה ערכים מספריים עבור המשתנים מסזַחפ5
ו-571001. התשובה שמחפשים, כלומר שכרו השבועי של הפועל, היא
התוצאה שימסור לנו המחשב בסוף הביצוע המוצלח של התכנית. על*נו
מוטל רק תפקיד אחד - לציין מקום בזיכרון המחשב שבו תאוחסן
(26ע5%0) התשובה הנכונה כאשר תהיה מוכנה. למקום זה נקרא 540148 -
המשתנה השלישי בתכנית.
- 11 -
מבחינת המחשב, הנעלמים שהגדרנו מהווים שמות תאים בזיכרון
( ע₪02מ6) שבהם ניתן להחזיק תווים, כאשר כל תו מייצג סיפרה, אות
או סימן מיוחד כמו הסימן + או -. שם אחד מתייחס לקבוצת תווים
שיכולים לייצג מספר, לדוגמה. כל שם מתי'חס לאותו מקום בזיכרון
במהלך ביצוע התכנית ולכן נכנה אותו כתובת (12802655), או מען.
המשתנים יכולים להופיע כך בתוך הזיכרון:
זפ
וו ////
8
|ווון
ו
|| | וט
ב. תרשים זרימה לפתרו| בעיה
תפ
צ |
0
כדי לתכנת את הפתרון נכין תחילה תרשים צרימה (6עת0 אס1ק).
התחל
ל
(9
(9
(6 הדפס
(65
- 12 -
הסבר: הצורות | הגרפיות הממוטספרות נקראות טמלים, או בלוקים
(2100%8). המספרים ליד כל סמל מיועדים להסבר בלבד ואינם מהווים
חלק אינטגרלי של התרשים.
(1) סמל זה מציין התחלה או סיום של תכנית.
(2) מקבילית מסמלת קלט (6טסם1) - קליטה של נתונים מחו למחשב,
או פלט (005006) - פלט של נתונים מזיכרון המחשב החוצה, למשל על-
ידי הדפסת התוצאות על (ייר או הצגה על הצג. בבעיה לפנינו אנחנו
מבקשים שבזמן ביצוע התכנית - המחשב יהיה מוכן לקבל מספרים שנספק
לו, למשל באמצעות המקלדת. המספר הראשון מייצג את שיעור שכרו של
פועל לשעה וירשם בכתובת בזיכרון שנקראת 58108. המספר השני מ*יצג
את מספר השעות שהפועל עבד וירשם בכתובת בזיכרון שנקראת 5107.
(3) מלבן מסמן תהליך, אשר יכול להיות פעולת חישוב (ם0810018%610)
או השמה (%ת0מת4591₪). המכפלה של שיעור השכר לשעה במספר השעות
שהפועל עבד נותנת את המשכורת המגיעה לו. המחשב יאחסן מספר זה
בכתובת שנקראת 54018, לאחר שיסיים את החישובים.
(8) לתוצאת החישוב יש משמעות רק אם אפשר להשתמש בה. לשם כך צריך
לקבל אותה בצג, או בדפוס על גבי נייר. פעולת פלט אחרת יכולה
להיות כתיבה בתקליט מגנטי, בתקליטון או בסרט מגנטי. המקבילית
מסמלת פעולת פלט, כפי שהוסבר קודם.
(5) כמו ב-(1). סמל זה מציין כאן את סיום התכנית.
סדר ביצוע הפעולות הוא כסדר החיצים ולכן מבנה כזה נקרא מבנה
סדרת' (6ע600גע56 0181ת56006). כלומר, מתקדמים מן ההתחלה עד
לסיום בלי לדלג על פעולה כלשהי ומבלי לחזור על פעולה כלשהי.
2 התכנית בקובול
כל תכנית בקובול מחולקת לארבע חטיבות (5ח1510ש1כ):
א. חטיבת הזהות (ת1510ט210 ת0ס%1+108%1ת166):
בחטיבה זו רושמים את שם התכנית. היא יכולה גם להכיל מידע מזהה
אחר, למשל שם המתכנת, תאריך כתיבת התכנית, ושם המתקן שם נמצא
המחשב בו משתמשים עובדים. מידע זה מיועד לתיעוד בלבד, ואינו
משפיע כלל על תהליך ביצוע התכנית.
ב. חטיבת הסביבה (ם0101510 6מסמתסע1טתם):
מתארת את החומרה שנשתמש בה כדי להדר ולבצע את התכנגית. חטיבה זו
אינה הכרחית בחלקה או במלואה.
ג. חטיבת הנתונים (ת0ס151ט10כ הּפכ2): ,
מתארת את מיקומם וסוגיהם (ממשי, שלם, או תו) של המשתנים
שמופיעים בתכנית. כמעט כל תכנית פועלת עס נתונים כלשהם, ולכן
- 13 -
צריך להגדיר חטיבה זו.
ד. חטיבת הנוהל (ת1510ט210 6עט0004עק):
שלוש החטיבות הראשונות הניחו את הבסיס להמשך העבודה. חטיבה זו
בלבד מכילה הוראות ביצועיות, ז"א הוראות שמעבדות את הנתונים
המתוארים בחטיבת הנתונים.
תכנות הדוגמה הראשונה
.ת1810ט210 ת%12168%610ת 166 (1)
.9-1 .16-מאעאספק (2)
.ת1510ט21 28068 (3)
.ת966010 5602886-שת1אעסט (4)
+ 18 6עש160ק עטנתפ | 77 (5)
185 6ע0₪ס16ק 6 77 (6)
.+ 185 6ע1601ק ע8ת580 | 77 (7)
.ת1510ט01 6עט06ססעק (8)
)9( 3.
."שיעור?" צ15018ע (10)
בעטנת5 4060006 (11)
. "שעות?" 215018 (12)
)13( 400005 0%.
.1 = סעט1ם5 = ע8ת580 00₪0166 (18)
. "השכר הוא: " ,ת8ת580 צ15018כ (15)
. תות 5600 (16)
כל חטיבה מחולקת בתוכה לפרקים (5ת560%10) ופסקאות (8תס8עשהעה8ת).
כל תת-חלוקה כזו נפתחת על-ידי כותרת (368662). כותרות אלו
נקראות, בהתאמה: תש8עש8ת28 ,ע0800] ת960610 ,168009 תסנפנטנת
68662]. בתכנית שלפנינו ה-1680625 תס1פנטנת הן בשורות (1), (3)
ו-(8). יש לשים לב לכך שבתכנית זור לא כללנוו את החטיבה
מ1510ט210 6תסמתסענטתת. הכותרות מורכבות משם החטיבה ואחריו המלה
ת0ס181טנת.
שורה (4): דוגמה לכותרת-פרק המורכבת משם הפרק והמלה ב560010.
שורות (2) ו-(9): דוגמאות לכותרות-פסקה המורכבות משם הפסקה בלבד
(בלי המלה בסהעשַהַעהַק). יודעים שלא מדובר בכותרת מסוג אחר, מכיון
שלא הופיעה מלת התיאור א21/1510, או א5₪0110.
כפי ששמות החטיבות (5מ21015910) קבועים לכל תכנית, כך גם שמות
הפרקים והפסקאות המופיעים בשלוש החטיבות הראשונות הם קבועים.
המתכנת אינו יכול לשנות שמות אלה, הוא רק יכול להשמיט את השמות
שאינם מתאימים לתכניתו. למטה מכותרות אלו, המהוות שלדה לכל
תכנית בקובול, נמתח קו בדוגמה הקודמת (אבל קווים אלה הוספו רק
לשם הסבר. בתכנית להרצה אסור לכלול אותם). רק בחטיבה הרביעית
(מ2101810 6עט220006) יש למתכנת את הזכות לבחור במספר הפרקים
והפסקאות ובשמותיהם. למשל, בדוגמה שלנו, המתכנת בחר רק בשמה של
פסקה אחת, 20068 (שורה (9).
- 11 -
לצורך מיקום הפקודות מחלק:ם את המסך לשנ: חלקים:
1. אזור 8 (4 3268 או 4 תנשעה8א/): ארבע העמודות השמאליות ביותר.
2. אזור 5 (8 4268 או 8 ם1שעהא): שישים ואחת העמודות הבאות.
המיקום המדויק של איזורים 4 ו-8 שונה במחשבי א18 (כולל 0ק-א188)
ובמחשבי אגט0. שוני זה מוצג בטבלה להלן:
8 4208 4 1208
12-12 1 אפד
אתטזעת-5 1-8 אהגץ
יש לזכור שכותרות חייבות להתחיל באיזור .
הסבר :
שורה (2): קביעת שם התכנית. אין פרקים בחטיבת הזהות, אבל ניתן
להוסיף פסקאות, כמו שנראה בהמשך.
שורה (4): אפשר להגדיר כמה פרקים שונים עבור חטיבת הנתונים.
בדוגמה השתמשנו בפרק אחד בלבד הנ(קרא ת560%10 סאַ8עסט5 שתנאעסא,
בו אנחנו מתארים את המשתנים שישתתפו בפקודות המרכיבות את חטיבת
הנוהל, כולל אלו שייקלטו מן החוצ בעזרת פקודת 40000%.
שורה (5): שורה זו מקצה מקום עבור משתנה ש'יקרא עטצתפ. 7
מופיע באיזור 4 ומטרתו להראות שהמשתנה המוגדר בשורה זו מת*יחס
למשתנה בודד ולא למשתנה המגדיר, או כפוף, לקבוצה של משתנים.
איזור 5 מחזיק את שם המשתנה (פט1ת5) ואחריו המילים 18 6עש16%ק
9, שמשמעותן היא שתיאור המשתנה עט1ת5 ניתן על-ידי הקוד 99. כל
9 מייצג מקום שיכול להכיל סיפרה בין 6 ל-9. מכך נובע ש-מטנתפ
יכול לייצג כל מספר בין 0 ל-99. טרם קבענו ערך כלשהו למשתנה
עטנם5, רק תיארנו את טווח ערכי*ותו.
שורה (6): תיאור המשתנגה 6ס8ם5.
1
שורה (7): תיאור המשתנה ע8ת580. הקצינו ארבע ספרות למשתנה, זה,
מכיון שהוא חייב להכיל את המכפלה של פט1ת5 ו-6סַת5.
שורה (9): הפסקה היחידה בחטיבה הרביעית, חטיבת הנוהל. שם הפסקה,
8, נבחחר על-ידי המתכנת.
שורות (10), (12), ו-(15): הפקודה 2158018 גורמת להצגת מידע,
בדרך כלל על צג. בשורה (10) ו-(12) המידע הוא מחרוזת תווים. אנו
רוצ*ים שהמחרוזת תופיע בדיוק כמו שהיא כתובה ולכן היא מוקפת
בגרשיים. בשורה (15) המידע הוא משתנה ואחריו מחרוזת תווים. הערך
הנוכחי של המשתנה י*ודפס ואחריו התוכן של מחרוזת התווים.
כאשר המתכנת רואה את ההודעה של שורות (10) ו-(12) הוא מזין
למחשב את ערכם של המשתנ'ים עטנצת5 ו-80%6ת5. ערכים אלה נקלטים על-
ידי פקודות (11) ו-(13), עט1ת5 400606 ו-80%ת5 260606,
- 15 -
המייחסות את הקלט של המפעיל למשתנים המתאימים. פקודות 215018
אינן נחוצות להמשך הביצוע התקין של התכנית. בלעדיהן, המחשב
ייעצר כאשר הוא נתקל בפקודה עט1ת5 4608606 ויחכה עד אשר המתכנת
יזין את ערכוּו של המשתנה פעט1ת5. הבעיה היא שהמתכנת לא ידע למה
המחשב מחכה, ולכן יש לתת לו רמז על-ידי הצגת המלה "שיעור?",
ואחר כך המלה "שעות?".
הערה: המושג "שיעור" (פעטנת5) הינו תעריף השכר לשעה. השתמשנו
במונח זה בדוגמאות בהמשך.
קיימות שתי שיטות לכתיבה ועיבוד של תכניות. בשיטה הראשונה, שיטת
האצווה (ת9860), המתכנת מגיש את התכנית ואת הנתונים בו זמנית,
ומאותו רגע אין לו קשר כלשהו עם התכנית. בזמן סיום התכנית, הפלט
מופיע על גבי הצג או במדפסת. השיטה השניה נקראת תכנות הידברות:
(שת1מתה8עפסע? 66280%0106ת1). בשיטה זו, נשמר הקשר בין המתכנת
והתכנית גם בזמן העיבוד. אין צורך להכין את הנתונים מראש, מכיון
שאפשר לספק אותם לפי הצורך בזמן הביצוע.
פקודות צ218018 בשורות (10) ו-(12) דרושות רק אם משתמשים בשיטת
התכנות ההידברותי. בשיטה זו אפשר לרמוז למתכנת להזין נתון
מסוים. בשיטת האצווה המתכנת חייב להכין את כל הנתונים מראש,
לפני הביצוע, מפני שרמיזה בתוך זמן הביצוע לא תעזור כלל.
שורה (14): פקודת הצבה או השמה (6ת59%8%60₪0 6ת00שת15918). הסימן *
(כוכבית) מסמן פעולת כפל. המכפלה של עט1ת5 ו-6סַת5 תועבר לכתובת
שנקראת ע8ת580, שתוכנו הקודם *ימחק. לאור עובדה זו, משמעות
הפקודה "1 + א = א 6>טקשסס" היא שהתוכן הקודם של המשתנה א *וגדל
ב-1. פעולות אחרות הנ*תנות לשימוש המתכנת הן:
(1) + (חיבור)
)2( - (חיסור)
)3( / (חילוק)
(8) ** (העלאה לחזקה)
שורה (15): הצגת התוצאות.
שורה (16): סיום התכנית.
מהלך ביצוע הידברותי של התכנית על פני הצג נראה כך:
שיעור?
22
השכר הוא: 0968
- 16 -
3 שיפור התכנית הראשונה
התכנית להלן מדגימה כמה אפשרו
יות
נוספות שעוזרות לתיעוד
ולביצוע. מטרת התכנית לא שונה מזו של התכנית בדוגמה הראשונה.
.ת1510ט10ת ת612108010ת166
. 8-2מקטע .16-םהעשסעס
.610028שתע 008 .עסמסטב
. צ0108תת160 09 0011686 0₪5810₪ע102 .ת5%8118610תד
.9 11 .ת10600תש-2866
.9-0
ססא .ע2210ו560
.ת1510ט10 6תסמתסת1טתת
.ת566%610 ת8610עגו 1']תס6
.1 . ש06ס1וק 5011206-00
1 . ע6סגוס 00-00166%
.ם1510טנ1ת 2808
.ת560%010 8₪6ע500-שת1אעסש₪
. (15)א 216 שמסתפ-
9 סדק סעטנתפ-א
.ע80%0ע82ת0 50082806 את16861 18 תש1ס
9 סבק ססַת0-5
.ע08280%06 590828066 ₪ת16861 15 ת51₪
-9)8( .-
."שכר: " 6טש81/ (5)א
.8 78116:6 (3)א%
49-
."שעות: " 6ט781 (6)א
1 781146 (3)א%
49-
."שיעור: " 6ט1אט (7)א
.8 81066 (3)א
(15)א
."שם: " 6ט1הץט (54)א
6
6
ס6בק
16
6ב
16
6ב
6
6ב
6ב
16
1 6%.
02
(02
02
.1% 1
ע8ת580-ק | 02
1165| | 02
1162נק 02(
0% - 02
ע6ןונ1נת 02
ע116נע | 02
עטנתפ-ק | 02
1162נע 02
1116%ע | 02
2-56 02
1162נתק 2
.11510 660026סעק
068 .
. "הקש שם עד 15 מקומות." צ15018ע
. שסתפ-< 460606
צֶנקפנכ
. "הקש שיעור: סימן, שתי ספרות וסיפרה עשרונית."
.עטנתפ-א 400606
צֶ1קגכ
."הקש שעות: סימן, שתי ספרות וסיפרה עשרונית."
- 17 -
)1(
)2(
)3(
)8(
)5(
)6(
)7(
)8(
)9(
)10(
)11(
)12(
)13(
)18(
)15(
)16(
)17(
)18(
)19(
)20(
)21(
)22(
)23(
)28(
)25(
)26(
)27(
)28(
)29(
)39(
)31(
)32(
)33(
)38(
)35(
)36(
.ת-א 2400006 (37)
.ת-א * עט1ת8-9 = ע8ב586-ק2 6טוקםס0 (38)
.2-56 סס מס6תפ-2 6טסא (39)
.עונתפ-2 60 עט1ת5-א 6טסא (80)
.2-80 סט 6ס8ת8-5 סטסא (81)
)82( 215018 4.
. תטת 5602 (583)
מהלך טיפוסי לביצוע 8-2ששטע נראה כך על פנ* הצג:
הקש שם עד 15 מקומות.
606 מהתאסטב
הקש שיעור: סימן, שתי ספרות וסיפרה עשרונית.
+5
הקש שעות: סימן, שתי ספרות וסיפרה עשרונית.
+5
שם: | 000 מהתהעטה שיעור: 17.5 שעות: 58.5 שכר: 0778.75
הסבר:
(3) - (7): פסקאות אופציונליות המיועדות לתיעוד בלבד. כל פסקה
מכילה כניסת הערה (עעסמת 6מ0מם00). אין הגבלות לגבי התוכן של
כניסת הערה, פרט לכך שכניסה כזו חייבת להטתיים בנקודה. אם
הכניסה תופסת י*ותר משורה אחת, ממשיכים את המשפט בשטח 2. שורה
(6) מתמלאת על-ידי המהדר באופן אוטומטי.
(8) - (11): ציון המחשב בו נהדר את התכנית | לשפת | מכונה
(ע6פטקם0ס00 66ע50₪) והמחשב שבו נריצ את התכנית (00160%
עססטקעס00). מידע זה חשוב אם בכוונתנו להשתמש בתכנית זו במחשבים
אחרים.
(18) ו-(18): 6166א ו-2616% נקראים פריטים קבוצתיים (קטסץ0
₪8 כל פריט קבוצתי מורכב מפריטים יסודיים (עע68מ16₪6ם
9). שים לב לדברים אלה:
א. הקוד בהתחלת שורות אלו הוא 01. קוד זה מאפשר כתיבת פריטים עס
קודים גבוהים יותר מיד אחריו. פריטים אלה *היו תת-חלוקה של
הפריט הקבוצתי, והם *כולים להיות פריטים יסודיים, או פריטים
קבוצתיים שבעצמם מורכבים מפריטים יסודיים.
ב. לפריט קבוצתי אין תמונה. תמונות אינן נחוצות מכיון שיש תמונה
לכל פריט יסודי הכפוף לפריט קבוצתי.
ג. כאשר מפעילים פעולה על פריט קבוצתי, הפעולה תפעל על כל פריט
יסודי הכפוף לו. למשל, בשורה (42) כתבנו 26166 15018כ. כתוצאה
מפקודה זו, ייוצגו המשתנים עגו1תפ2-5 ,6ס8ג2-5 ,ע8ת580-ק ו-מסםפ5-ק
בנוסף על אלה המכונים ע1116ע (בהמשך נסביר מלה זו).
(15): מסתפ-% הוא הפריט היסודי הראשון בתוך הפריט הקבוצת:
%. שימו לב לדברים הבאים:
א. במקום 158 6ע2ג16%ק, אפשר לקצר ולכתוב 16ק.
ב, א* מייצג כל תו; זאת אומרת, אות (8-2 ,2-2), ספרה (0-9) או תו
= 18 >
מיוחד (כל תו שאינו בקטגוריות הראשונות). דוגמאות מהסוג השליש:
הן: סימני מטבעות (%), סימני פיסוק (.,:: ורווח) ואופרטורים
מתמטיים (+, -, /, *).
ג. המשמעות של (15)א היא כאילו כתבנו את התו 15 א פעמים; כלומר,
המשתנה מספת9 יתפוס 15 מקומות. פריטים המתוארים עם תמונה של א
אינם יכולים להשתתף בחישובים.
(16): פירוש הקוד בשורה זו הוא כדלהלן: % מסמן נקודה עשרונית
שהמפעיל לא כותב בזמן הגשת הנתונים (6ת01ק 2601281 15502686).
הקלט תופס אם כן % מקומות: אחד עבור הסימן, שניים עבור הספרות
בצד שמאל של הנקודה העשרונית ואחד עבור הספרה בצד ימין של
הנקודה העשרונית. שימו לב לנקודות הבאות:
א. בזמן הגשת הנתונים, התו הראשון חייב להיות + או ד.
ב. לו היינו כותבים 9909 עבור התמונה, יכולנו לעבוד רק עם
מספרים חיוביים.
ג. במקום המלה שת168061, אפשר לכתוב 8ת728111. במצב כזה, הסימן
יכתב אחרי המספר ולא לפניו (אבל 5 עדיין חייב להופיע כתו ראשון
בתמונה). :
ד. אם מוחקים ע80066ע82ת0 560828066, חייבים להזין את הסימן יחד עם
הספרה הראשונה (אם כתבנו ש8ת106861 158 מ51₪), או עם הספרה האחרונה
(אם כתבנו שת7128111 15 ם51₪, או אם השמטנו לגמרי ביטו: זה,
מכיון שהוא ברירת המחדל). בזמן הזנת הנתונים, כאשר רוצים לשלב
ספרה עם סימן, במקום לכתוב ספרה רגילה, כותבים את הספרות כפ:
שהן מופיעות בטבלה הבאה:
ספרה חיובי שלילי
0 14 7 8 4 1 6 1
1 4 או 1 ב
2 8 או 2 א
3 0 או 3 ו
8 פ או 84 א
5 8 או 5 א
6 ק או 6 0
7 8 או 7 ס
8 8 או 8 0
9 1 או 9 8
למשל, אם הקלט הוא 12.3- והתמונה היא 599/9, יש להזין :12. אם
התמונה היא שת10801 18 תש518 59909, יש להזין 123 כדי ל'יצג
43.
(18): הפריט הקבוצתי 6186ק.
(19): יש מספר אלמנטים חדשים בתמונה זו. המינוס (-) בצד שמאל
מסמן שערך הפריט יודפס עם סימן מינוס בצד שמאל כאשר הערך שליל:
ועם רווח בצד שמאל כאשר הוא חיובי. הנקודה באמצע התמונה מסמנת
שאחר* % הספרות הראשונות תופיע נקודה עשרונית. לו כתבנו פה /,
הנקודה העשרונית לא היתה מופיעה.
הערה: בזמן הזנת קלט, הקוד / הוא חובה. בלי סימן זה, לא ניתן
להשתמש במספר עשרונ* בחישובים.
- 19 -
(20): | 211168 היא מלה שמורה (₪026 66טע36502) המתארת מקום שלא
ייקרא בשמו במשך כל התכנית. לכן, היא יכולה להופיע פעמים רבות,
אפילו בתוך אותה רשומה ולא תגרם על-ידי זה שום אי הבנה. המלה
6 מאפשרת להקציב ערך מסוים לאותו מקום בז'כרון (שהוא תת-
חלוקה של הפריט הקבוצת* 616%6ק).
(21): המלה 528668 מייחסת רווחים לשלושת המקומות המתוארים
בכניסה זו.
(39) - (42): העברת משתני קלט לשדות פלט והצגת הפלט כמו שהופיע
קודם.
4 תוגילים
שאלות
1. כאשר ערכי המשתנים הבאים הם כדלהלן: 1=%4, 2=8, 0=12, 1=כ2,
חשב את ערכו של 2 אחרי ביצוע הפקודות הבאות:
0 * 2/ 5 + 4 = כ 6ס6טקשסס
0 * 2/ (8 + ב) = 2 66טקשסס
0 * (2 / 5ם) + 4 = כ 6ס6נוסמסס
(0 * 2) / (ם + 2) = כ 6סטקםסס
(0 * 2) / 8 + ג > כ 66טקשסס
2. כתוב פקודת 0%66ק00₪ המחשבת את ערכן של הנוסחאות הבאות:
(א) 06 + 8 (ד) ספ + 8
----ש-א = א
2 20
(ב) 8 (ה)
₪6 + - = א *
2
(ג) מ + 8 : (ו) 8-8
6 = = א ----- שא
2 3 + 2
3. הכן חטיבת-זיהוי וחטיבת-סביבה עם פרטים מלאים עבור תכנית
שתכתוב. דייק בשמות המחבר, המתקן, תאריך כתיבת התכנית (גם
תאריך ההידור צריך להופיע בפלט), אבטחה ופרטי המחשב שבו תרי
את התכנית.
- 20 -
כתוב כניסות מתאימות לחטיבת הנתונים עבור הנתונים הבאים (פרט
.8
יותר, אם מתאים):
(א) כתובת
(ב) שם
(ג) שדה קלט עבור שכר חודש* (5 ספרות ועוד שת* ספרות
עשרוניות)
(ד) שדה פלט עבור שכר חודשי (5 ספרות, נקודה עשרונית, שת*
ספרות עשרונ*ות)
(ה) שדה קלט לרישום מעלות החום בירושלים בדיוק של שת* ספרות
עשרוניות (אל תשכח את החורף)
(ו) שדה פלט לרישום מעלות החום בירושלים.
5. האם שנ* המשפטים הבאים מבצעים אותה פעולה?
(א) (ת - 0) * (8 - 4) = ץצ 60₪0066
(ב) פע - 6 % ם - 4 = צ 6סטקמסס
תכניות
1. כתוב תכנית הקוראת שם של אדם, את גובהו בס"מ ואת משקלו בק"ג.
היא מדפיסה את הנתונים שקיבלה ובנוסף מחשבת ומדפיסה את ממוצע
מספר הק"ג לכל מטר גובה.
2. כתוב תכנית המקבלת כקלט את המספר א. התכנית מחשבת את השורש,
- הריבוע ואת המכפלה ב-5 וב-10, עבור 3 המספרים שלפנ* ₪ ועבור
2 המספרים שאחרי א.
3. נתון הרדיוס של עיגול. כתוב תכנית שמדפיסה את הקוטר, השטת
וההיקף של אותו ע'יגול.
84. סדרת פיבונצ'י מתחילה ב-0 וב-1. כל ערך נוסף בסידרה שווה
לסכום של שנ:* קודמ'*ו. למשל, הערכים השלישי, הרביע*, החמישי,
השישי, השביעי והשמיני בסידרה הם 0+1=1, 1+2=3, 2+3=5,
8 5+8-13. כתוב תכנית המקבלת שנ* ערכי פיבונצ'י כלשהם
עוקבים ומחשבת את שלושת הערכים הבאים בסידרה.
5. כתוב תכנית המקבלת כקלט ערך במעלות פרנהייט ומחשבת את מספר
המעלות ביחידות צלסיוט. נוסחת המעבר היא: 32 + 9/5*0 = ץ.
6. כתוב תכנית המחשבת את שורשי המשוואה הריבועית 0+אם+2**אאב
בעזרת
הנוסחה:
(080 - 82) | + ם-
24
בהנחה שיש למשוואה שורשים ממשיים, ז"א ש: 0 < 6אגמ-22.
ד. חברת "מן המוכן" רוצה למחשב את החנות שלה. המחירים בשקלים
לק"ג הם:
עוף - 3.50
קציצה - 1.70
כבד קצו - 6.80
פשטידה - 0.60
סלט ירקות - 0.8%
שניצל - 3.10
כתוב תכנית שתקבל כקלט את מספר הק"ג לכל מוצר שהלקוח קונה.
התכנית תדפיס את החשבון המפורט, כאשר לכל מוצר יהיה כתוב כמה
עולה ק"ג אחד, כמה ק"ג נקנו ובכמה עלתה הקנייה. בתחתית
הרשימה יש לרשום את ערך כל הקניות ואחר-כך את הסכום לתשלום
בתוספת המע"מ (16%).
- 22 -
פרק 2
מבוא לשפת קובול
1 היסטוריה
ב-1959 התקיימה ישיבה במשרד ההגנה של ארצות הברית בין יצרני
מחשבים ומשתמש' מחשבים (חברות גדולות ומשרדי ממשלה). מטרות
הישיבה היו:
א. לפתח שפה שתמלא את הדרישות של חברות מסחריות גדולות.
ב. לפתח שפה אוניברסלית שתתאים לכל מחשב, בלי קשר ליצרן המחשב.
מטרות אלו מסבירות את שסם השפה: 0210666 6585םת8081 ת0סמ00₪
תה שים לב שהאותיות המובלטות מאייתות את המלה 6080.
באותו מעמד הוקמה וועדה מפקחת שנקראה 5%8608₪ 2408 תס 66ת%626ת00
8 או בקיצור, 0צ00045. קובול היא השפה היחידה הנתמכת
בצורה פורמלית על-ידי וועדה המורכבת מן הי*צרנים והמשתמשים.
גירסת הקובול המקורית התפרסמה בשנת 1960. גירסאות משופרות
פורסמו בשנים 1968, 1974 ובשנות השמונים. הבדלים בין מחשבים
שונים מוגבלים לחטיבת הסביבה. כל החטיבות האחרות צר*כות לפעול,
כמו שהן, על כל מחשב המצויד במהדר קובול.
שפת קובול קיבלה דחיפה גדולה בהתחלת שנות ה-60, כאשר ממשלת
ארצות הברית הציבה את הדרישה שמשרדים ממשלתיים ירכשו רק מחשבים
שקיים עבורם מהדר לשפה זו.
2 מננה השפה
היחידה הבסיסית בשפת קובול הוא< התו (ע828056ת0). מחברים את
התווים יחד כדי ליצור את ששת הרכיבים הבסיסיים של שפת יקובול:
1. מלים שמורות (₪0265 6ַסַט6502)
2. מלים המסופקות על-ידי המתכנת (00269 1106סקטפ ע086)
3. מספרי רמה (5עססמטא 26061)
8. קבועים (ליטרלים - 11002818)
- 23 -
5. סמלים (018סמע5)
6. תמונות (68ע16001ק)
רכיב 1 ורכיב 2 מורכבים מ-1 עד 30 תווים, כאשר כל תו נבחר מבין
3 התווים הבא:ם:
א. 2 - 4 או 2 - 8
ב. 9 - 0
ג. מקף (מסתסְע₪8); המקף חייב להיות בתוך המלה, כלומר, אינו *כול
להיות התו הראשון או התו האחרון במלה.
במהדר קובול הפועל במחשב אג/ הרחיבו את גודל המלה המיירבי ל-31
תווים ואפשרו לכתוב בין התווים של המלה גם את הסימן 6 ואת הסימן
> (קו תחתון) בנוסף למקף.
א. מלים שמורות
מלים אלו מוגדרות כחלק מן השפה. מותר להשתמש בהן רק לתפקיד
המיועד להן על-ידי השפה. מלים אלו הן מארבעה סוגים:
1. מלות מפתח (68ע0₪02 צ86). מלים אלו נחוצות כדי להסביר את מבנה
התכנית, או להגדיר פעולה. הן מחולקות לשלוש קבוצות:
(א) פעלים (05ע6/). למשל: 6טסא ,400606 ,218018 ,6סטקםס0.
(ב) מלות יחס (5ת081%10ק26ק).
למשל: המלה 70 בביטוי 8 10 4 סטסא.
(ג) שמות עצם (פמטסא). למשל: ת5966010 ,ם1910ט210 ,6עג66נק.
2. מלים אופציונליות (65עס₪ 81ת%610ק0). מלים אלו אינן הכרחיות,
אך הן משפרות את הקריאות. כמו למשל, המלה 18 בביטוי 6קעטססנק
8. כאשר בכל זאת משתמשים במלים אלו, יש להקפיד על האיות
והשימוש הנכון.
3. מלות קשר (₪02065 60%108תת60).
(א) מלות קשר מגבילות (60%1065תת 00 ע00811+16). כאשר שם
משתנה מופיע יותר מפעם אחת, אפשר להוסיף את מילת ההגבלה
(או ציון) 0% או ם1, כדי להצביע על המשתנה הרצוי. למשל,
אם הפריט היסודי ,010 מופיע פעמיים בתכנית, פעם אחת
בכפוף לפריט הקבוצתי 55806 ופעם בכפוף לפריט הקבוצת:
שצטסעע מותר (וגם הכרחי) לכתוב בתכנית את הביטוי 010
6נטסעע ם1, כאשר מתייחסים לאותו משתנה.
(ב) מלות קשר לוגיות (06001068תמ 00 1081681). למשל: המלים
% ,0 ,6תה, שמשמעותן תוסבר בהמשך.
%. מלים למטרה מיוחדת (%00265 6פ8סקעט2 90660181).
(א) אוגרים מיוחדים (8ע4021500 00181ק5): שמות של אוגרים
המחזיקים מידע חשוב לתכנית, למשל מססתט00-ס6שָת13,
שתפקידו יוסבר בהמשך.
|
(ב) קבועים סמליים (08ת8%58ת00 280106גש1ת): מלים המחליפות
קבועים מסוימים. למשל:
(1) 508008 ,50806
(2) 262068 ,260059 ,0ע20
(3) 10-7818068 ,8106/-ש0ס1 (00 בהקסה)
(83) 818-0810085 ,סט1הט0-ג118₪ (78 בהקסה ב-45011,
שע בהקסה ב-ס6ַדַפסַמִם).
(5) 211.
דוגמאות:
(1) .8 50 100-7810065 סטסא: אם מתואר על-ידי (10)א 16ק, פקודה
זו מעבירה 10 תווים המורכבים מהקסה '00' למשתנה 2.
(2) .8 ס6 'ץ' 811 סטסא: פקודה זו מעבירה 10 אותיות צ למשתנה ג,
כאשר 8 מתואר כמו בדוגמה הקודמת. כאשר עובדים עם קבוע סימל:,
אותו קבוע סימלי ממלא את כל המקומות בשדה המקבל, גם בל:
שנציין את המלה 811, כפי שראינו בדוגמה הקודמת.
(3) .20205 19018כ2: מציג על המסך רק 0 אחד.
ב. מלים המסופקות על-ידי המתכנת
מלים אלו, הנבחרות על-ידי המתכנת, הן משני סוגים:
1. שמות נתונים עבור משתנים, שם התכנ*ת (12-שאעשסתק) ומושגים
נוספים שיוסברו להלן, כולל רשומות, קבצים, דוחות ותנאים.
שמות אלה חייבים לכלול לפחות אות אחת כד: להבדילם ממספרים
פשוטים.
2. שמות המיועדים לכותרות של פרקים ופיסקאות. שמות אלה יכולים
להיות מורכבים מספרות בלבד, מכיוון שמיקומם באיזור 8 מונע
מהם מלהחשב כמספרים פשוטים.
דוגמאות: שמות תקפים: 66טסשסת5
- 5
22-15
1 (רק כשם פרק או פיסקה)
שמות לא תקפים: -א-61ת5-שטת50 (- בסוף פוסל את השם)
%-8ת80ת18 (% הוא תו לא חוקי בהרכבת שם)
ת80ע0ק-ת2₪8- (- בהתחלה פוסל את השם)
5 18קָט-60-1.6020608גו8-0 85תת1180- 61ת5- 60
(יותר מ-30 או 31 תוו*ם)
5%8 סו (8 הוא תו לא חוקי בהרכבת שם)
מ56610 (מלה שמורה)
- 25 -
ג. מספרי רמה
המספרים 01, 082 ו-77 בהם השתמשנו לתיאור פריטים יסודיים
וקבוצתיים, הם דוגמאות למספרי רמה. מספרים אלה מורכבים מסיפרה
אחת או שתי ספרות, מ-01 עד 49, ועוד כמה מספרים מיוחדים כמו 77
וגם 88 (שנלמד עליהם בהמשך). פריט שרמתו היא 1 או 01 נקרא
רשומה. פריטים ברמה 2 עד 49 קובעים את חלקי הרשומה. פריטים כאלה
נקראים שדות והפריטים היסודיים הכפופים אליהם הם תת-שדות.
נקח לדוגמה תווית דואר: 61002₪ת₪ תסעהת
3 180081 תסם
1 86ע152 ,81871₪ת5גו2
' 19-06 /
ן נסתס ו
8 ד1- מ סתס 5-1
1 שןפ|סןסן1ןס||ןתןםן | תמןסןפוהןת|ן4
+ק/צפלאפצפלאה"]) )שגפו
%- 1
| עס0ת66ת ו
15082 שסתס6ת-6₪ת5
יוור
1-6
, 0-8
/ 6 | | ןְ
8 עס
1 | 1ןסןןת||1ן ן |ת|דוֶען1|8|ה8|ןתן|ןט|עןס|ןץ
לד 7 6 ה ןהוו | שא
בקובול נתאר כך תוויות אלו:
01 1,80080-%606% .
. מסתס 65
. (10)א 16ק 1 - ות 10
. (12)א 216 8ת86ק(15א-מסת5 | 10
= .טסת66ת 55
. (15)א 16ק טסת0ס6ַ3-6₪ם5 | 10
. (8)א 16ק עהספנא 10
.8ת02-0001ם | 05
. (18)א 16ק תת 10
.(10)א 16ק 8 10
.(5)א 16ק 6 "109
הערות:
1, השמות טסת366, שסתפ, ו-8ת661א-₪62 מציינים כאן שדות. -שסתפ
התנ0סא, ע6סם, ע81508, טסת66ת-שסתפ, הַּתס8כה15א-מ6ת 5 ,1ס8עק ו-
8 הם דוגמה לתת-שדות.
- 26 -
2. מספרי רמות המצביעים על תת-חלוקה של פריטים קבוצתיים יכולים
להיות גבוהים ממספר הרמה של הפריט הקבוצתי ב-1 או יותר (כמו
פה), אבל פריטים יסודיים השייכים לאותו פריט קבוצתי חייבים
להיות באותה רמה.
דוגמה: מספרי הרמה של 1ַס8ע2-0₪ת5 ו-8ת86קת15א-מ6ת5 חייבים להיות
זהים אבל מספר הרמה שלהם יכול להיות שונה ממספרי הרמה של -שסתפ
טסתסספת ו-ע8כ15א.
3. כדי לשפר את הקריאות של התכנית, מסיטים את התמליל % מקומות
פנימה לכל תת-חלוקה נוספת. 01 חייב להתחיל באיזור . מספרי רמות
נוספים יכולים להיות ממוקמים גם באיזור 2.
%. מומלצ ליישר את המלים 8עצג160עת או 16ק, המופיעות בשורות
השונות בתכנית.
ד. קבועים (ליטרלים)
ליטרלים הם קבועים, כלומר מחרוזות שערכן נקבע על-ידי התווים
המוכלים בהן. קבועים הם משני סוגים:
1. קבועים נומריים (1.1662818 16ע6שטא).
(א) שלמים (%60₪028ם1): שלמים מורכבים מ-1 עד 18 ספרות. סימן
+ או - בצד שמאל הוא אופציונלי. לסיכום, אפשר לייצג שלם
בדרך זו:
[1-18 ספרות] [+/- אופציונלי]
דוגמאות:
חוק: לא חוק:
3 1 (פסיק אסור)
9 + 1 (אות אסורה. 381 היה יכול
להיות שם של משתנה)
7+ -307 (סימן חייב להיות בצד שמאל,
ולא בצד ימין)
3 (תו לא חוק*)
(ב) ממשיים (26818): התיאור של מספר ממשי בתכנית קובול הוא
כדלהלן (יש לקרוא משמאל לימין):
[לפחות סיפרה אחת] [.] [מספר שלם אופציונלי] [+/- אופציונלי]
סך הספרות הכולל, גם לפני נקודה העשרונית וגם לאחריה, לא
יעלה על 18.
דוגמאות: חוקי: 00365.
5-
9. 12315+
- 2] -
לא חוקי: .821 (אין סיפרה מימין לנקודה העשרונית)
+5.31 (סימן חייב להיות בצד שמאל ולא בצד
ימין)
906.,.,. 1235+ (יותר מ-18 ספרות)
2. ליטרלים לא נומר''ם (1.1%662818 16עסמטת-תסא).
ליטרלים לא נומריים או מחרוזות מאופי*נים על-ידי התכונות
הבאות:
(א) המחרוזת מכילה מ-1 עד 256 תווים.
(ב) המחרוזת יכולה להכיל כל תו בלוח המקשים.
(ג) המחרוזת מוקפת על-ידי זוג של גרשיים ("), או גרש בודד
.)"'(
(ד) רווחים ואפילו מלים שמורות יכולים להיות חלק מליטרל לא-
נומרי. .
דוגמאות:
(1) שורות ,21 ,20 23, 24, 26, 27, 29, 32, 34 ו-36 בתכנית
2-ה8משטוס.
(2) '100' * 2 = 8 ₪66ק00₪ היא פקודה שאינה חוקית מכיון ש-100
נכתבה כמחרוזת ולא כליטרל נומר*. מחרוזת א*ינה :כולהלהשתתף
בפעולה מתמסית.
(3) אם המחרוזת מוקפת על-ידי גרשיים (") ורוצים שסימן זה יופיע
גם בתוך המחרוזת, חייבים לכתוב אותו פעמיים. המצב דומה אם הסימן
המקיף הוא גרש (').
למשל: "ת""מ""ת" יודפס כ-- ש"מ"ס
ּ
ווח
יודפס כ-
הווח יודפס כ- ''
יא""די יודפס כ- א""ד
ה. סמלים
ישנם שלושה סוגי סמלים:
1. פיסוק: (א) מסיים (ע8%60ת₪1ע16): נקודה ואחריה רוות.
(ב) מפריד (ע828%0ק56): (1) רווח
(2) פסיק, רוות
(3) נקודה-פסיק, רוות
(8) סוגריים, כאשר הם מתאימים
(5) גרשיים, כאשר הם מתאימים
2. סמלי חהחישוב: +, -, *, **, /, = (הצבה)
3. סמלי תנא': <, >, =
ו. חתמונות
תמונות (5מתטצסזק) מתארות את אורך וסוג הנתונים (למשל אורך
התמונה המירבי במחשב 0% הוא 255). ישנם שלושה סוגי נתונים:
1. אלפבתיים (806616ת410): השדה מכיל אותיות או רווחים בלבד.
סמל התמונה עבור שדות כאלה הוא האות 4. סמל זה אינו מתאים
לטדה המחזיק שמות מכיוון ששמות יכולים להכיל גם נקודות
וגרשיים.
לדוגמה: . 44238 16ק +ט11ת0-616%ת0
2. נומריים (16ע6מטא) : השדה מכיל מספר. התמונה מורכבת מן התווים
9 5, ץ. התו % מסמל נקודה עשרונית המובנת מאליה ואינה
מוזנת על-ידי המפעיל. 5 מסמן שהשדה *כול להכיל גם מספר
שלילי.
3. אלפנומר''ם (16עסמטתאתק41): השדה מכיל כל תו תוקי. סמל
התמונה הוא א.
דוגמה: . (10(9)5)א(4)10 216 צעַטם20-:1508א 02
מספר הזהוי המתואר בתמונה זו מורכב מאותיות ב-10 המקומות
הראשונים, תווים כלשהם ב-10 המקומות וובאים וספרות ב-5 המקומות
האחרונים.
הערה: בתוך הסוג האלפנומרי נכללים גם כן שדות נומריים עם עריכה
(סמלי תמונה +, -, ., 2, *) ושדות אלפנומריים עם עריכה (סמל
תמונה 8). בהמשך ינתן הסבר מקיף לשדות עם עריכה.
דוגמה שלמה:
משפט: ."4" 18 08106 |אאא 2160006 | 8שטות0046-365 02
הסבר: קבוע תמונה מלה מלה המסופקת מספר
שמורה ע"י המתכנת רמה
רכיב: ה' ד' א' א' ה' ו' א' ב' ג'
דוגמה זו מראה את כל ששת רכיבי שפת קובול, כולל סמלי פיסוק
(הפסיק והנקודה בסוף). הרכיבים מופרדים על-ידי מפרידים שנבחרו
מתוך רשימת המפרידים שהוצגה למעלה, כאשר רווח הוא המפריד הנפו%
ביותר. למשל, בביטוי 8 + , הסימן + הוא רכיב מסוג 5, אשר צריך
להיות מופרד מן המשתנים (שהם רכיבים מסוג 2) משנ* צדדיו. נגובע
מזה שמשנ צדדיו של כל אופרטור מתמטי צריך להיות רווח אחד
לפחות.
- 29 -
43 פיסוק בקובול
הטבלה להלן מתארת בפירוט את האיזורים השונים לכתיבת תכנית קובול
במחשב 18% ובמחשב א%ג7.
איזור 4 איזור הסמן איזור 8
אפ 8-11 7 12-12
אגט - 1-8 12 אתשתטה-5
שיטת אם1 נקראת גם "פורמט 51א2" והשיטה של אג8/ נקראת גם "פורמט
מסופים". בפורמט מסופים, כאשר יש סמן בעמודה הראשונה, איזור 4
ממשיך עד עמודה 5 ואיזור 8 רק מתחיל בעמודה השישית.
להלן פירוט של מושגים אחדים הקשורים לפורמטים השונים:
א. הערות (%5מ₪6ם00): הערות מסומנות על-ידי * או / באיזור הסמן.
אם הסימון הוא /, רשימת התכנית עוברת לדף חדש בזמן הדפסתה.
ב. טורות גולשות:
(1) אם לא מחלקים אף מלה או ליטרל אין צורך בסמל כלשהוא
באיזור הסמן. על המתכנת להמשיך באיזור 8 של השורה הבאה.
(2) אם מחלקים ליטרל נומרי או מלה, אזי חייבים לסמן - באיזור
הסמן של שורת ההמשך ולהמשיך את הפקודה בכל עמודה ששייכת
לאיזור 2 של אותה שורה.
דוגמה: 1, =--מספר עמודה
6 * 72 + 0 * 4
- 86פע
5
3 + ם * ך = 42 00| |
| |
ו [
בפקודה זו, כפלנו את 8 ב-7, את 6 ב-1,234 ואת 6ַשַעסט4 ב-72;
חיברנו את כל תוצאות הכפל והפחתנו 56. שים לב שההמשך יכול להיות
בכל עמודה באיזור 5, מכיוון שהמהדר יודע שרווחים אינם יכולים
להיות חלק מליטרל נומרי או ממלה. בכל זאת, במציאות אין מקרה
שהמשך מסוג זה הוא הכרחי, מכיוון שתמיד אפשר להתחיל את המלה
האמורה להיות מחולקת בשורה הבאה.
(3) אם מחלקים לשניים ליטרל לא נומר*, צריכים להתחשב בעובדה
שרווחים כן יכולים להיות חלק מן הליטרל. עובדה זו מהייבת
את הכללים הבאים:
(א) הליטרל הלא נומרי חייב להמשך עד סוף איזור 8 (עמודה
2 בפורמט 51א8, אתשסזטת בפורמט מסופים).
(ב) יש לציין - באיזור הסמן בשורה הבאה. :
(ג) יש לציין ' (או ") בנקודת ההמשך שבשורת ההמשך
ובסוף הליטרל הלא נומר'י.
- 30 -
דוגמה: מספר עמודה
אווזטת ו 5 1
והם יופיעו לפי סדר אלפביתי." כ ,0 ,8 ,4 צַ18ק15תע
ו ו
| . "אלה הם הערכים שביקשת"
(4) מותר להשאיר שורות ריקות בכל מקום, מכיון שכך אין מחלקים
מלה או ליטרל. במיוחד, מומל לעשות כך בין חטיבות.
ג. ניפוי התכנית: בתוך פ'יסקת ע500206-0000068 מוסיפים את המשפט:
6 שתדצשקטססכ תט1א. בתוך התכנית בפורמט 51א84 כותבים את
האות כ באיזור הסמן. בפורמט מסופים כותבים פ באיזור הסמן
עבור כל פקודה המיועדת לניפוי התכנית. פקודות אלו תתבצענה עד
שנוריד את הביטו' 066א שת1ששטססע ב016. כאשר ביטוי זה לא
מופיע בזמן הידור, פקודות הניפוי לא תתבצענה והן מטופלות כמו
הערות.
סיכום: איזור 8 מיועד לשנ*י דברים: (א) כותרות של חטיבות פרקים
ופיסקאות; (ב) מספרי רמה, למשל, 01 ו-77.
איזור 8 מיועד לכניסות (168ע%ת₪) המוגדרות כשילוב חוקי של לפחות
שניים מתוך ששת הרכיבים הבסיסיים, כאשר אחד מהם חייב להיות
נקודה. בחטיבות הסביבה והנתונים, הכניסות מחולקות לביטויים
הנקראים באנגלית 565ש018.
דוגמה 1: .14-שהעשסעע הינו דוגמה של כניטסה.
דוגמה 2: בכניסה | .0 18 6ש081 ,9)4(/9 216 עהּתס58 77
הביטו: 9)4(9 216 נקרא 56ש018 6עטט16ק
והביטן: 0 18 08106 נקרא 018056 6ט1פע/.
בחטיבת הנתונים א*ין פיסקאות, אלא רק כניסות. בחטיבת הנוהל,
הכניסות נקראות משפטים ולא משתמשים בהן ברכיבים ג' (מספר* רמה)
ו-ו' (תמונות). המשפטים בחטיבה זו מורכבים מפקודות שכל אחת מהן
מתחילה עם פועל ואחריו מלה המסופקת על-יד*י המתכנת (אופרנד)
ואולי מלים שמורות אחרות.
דוגמה: להלן נראה משפט המורכב משתי פקודות:
.54 ,5 ,4 צ215018 ;2 ** 0 - ם * 16 = 4 0020066
המלצות מספר:
א. יש לכתוב פקודה אחת בכל משפט, כל משפט בשורה נפרדת.
ב. בכניסה שיש בה *ותר מ-0186056 אחד יש לכתוב כל 018₪86 בשורה
נפרדת.
ג. יש לכתוב כותרת של פיסקה בשורה נפרדת.
ד. מותר (אבל אין חובה) להפריד בפסיק (,) בין אופרנדים.
ה. מותר (אבל אין חובה) להפריד בין פקודות באותו משפט - בנקודת
פסיק.
ו. מותר (אבל אין חובה) להפריד ב'| 5868טש018 בפסיק (,) או
בנקודה-פסיק (;).
- 31 -
1 ייצוג פנימי של מספרים
הייצוג הפנימי של מספר בתוך המחשב נקבע כתוצאה מן ה-018058
דלהלן :
ו
וס
0-3 [15 05808]
0-3
יו
משמעות "צ:ק 215 15 05208" היא שמספר המקומות (ז"א הבתים)
המוקדש לייצוג הפנימי של המספר שווה למספר התווים בתמונה (18
לכל היותר). למשל, אם התמונה עבור פריט מסוים הוא (59)5(9)3,
יוקצו לו 8 מקומות. אם ערך המספר עם תמונה זו הוא 953.67, הוא
ייראה כך בתוך זיכרון המחשב:
1
* (מקומה של הנקודה העשרונית)
הנקודה העשרונית אינה מוחזקת בצורה מפורשת, אבל המחשב י*ודע היכן
היא אמורה להיות על סמך התמונה הקשורה לאותו שדה. ביחס לס:מן,
כבר הוסבר שהמחשב מקדד את התו הימני ביותר (0א128101 15 א510)
או השמאלי ביותר (0א1₪421 15 א510), אלא אם התמונה כוללת את ה-
₪ הנוסף המ7סהת011 מ1התהקם5, המציין את העובדה שמוסיפים
בית מיוחד לייצג את הסימן.
ברירת המחדל היא צ8ַ1ק15כ 15 0540₪, ולכן ברוב המקרים 08058 זה
אינו נחוצ. ניתן לחסוך גם מקום וגם זמן חישוב אם מחזיקים מספרים
בייצוג בינארי, שהרי המספרים מועברים בכל מקרה לייצוג בינאר'י.
כדי להחזיק מספר בייצוג זה יש לכתוב "בא60074110 15 05808"
או - "קא00 15 808₪פ0". בטבלה שלהלן מתוארים מספר הבתים שהמספר
תופס :
תמונה
9 עד (59)5
(59)5 עד (59)9
מספר בתים
(59)10 עד (59)18
למשל, המספר 9950 *תפוס רק שני בתים בייצוג בינארי ולא 8 כמו
בייצוג הרגיל. בייצוג בינארי מחזיקים מספרים שליליים בי:צוג
המשלים של שת'יים. אפשרות שניה לחסוך מקום וגם זמן חישוב היא
7 32 -
להגדיר את המספר כך: 81-3מ0000058510 או 3-קשס0. כל סיפרה
שמשתתפת במספר המוגדר כך מאוחסנת בחצי בית (שהרי אפשר ל*יצג כל
סיפרה בתחום 0-9 במירב של 84 סיביות, ז"א ספרות בינאריות,
התופסות רק חצי בית). גם האותיות ע-8 המשמשות לציון סימנו של
המספר יכולות להיות מיוצגות באותו חצי בית אם נותנים לאות 4
להיות מיוצגת על-ידי 1010 (*יצוג הבינאר* עבור 10), 8 על-:די
1 (*::צוג הבינארי עבור 11) וכדומה. מספר כמו 12,505+ **וצג
איפוא, כך:
האות 6 בחצי הבית הימני מציינת שהמספר חיובי, כתיבת כ בחצי* הבית
הימנ מציינת שהמספר שלילי. בצורה כללית, אם התמונה היא:
(9)5(א)59, מספר הבתים שהמספר יתפוס בזיכרון שווה למספר השלם
הראשון ששווה לערך 2 (5+1+א) או גדול ממנו. שיטה זו *י*צוג
מספרים נקראת 48א01מכ פטאסמק.
בכל החלופות שהוזכרו, (ז"א צגק5דע, קא60, 0080-3) המחשב
מחזיק את המספר כמספר שלם ויודע על-פי התמונה היכן להציג את
הנקודה העשרונית. חישובים נעשים כאילו פועלים במספרים שלמים,
כאשר המהדר מבצע את ההזזות הנחוצות הנובעות מהעובדה שעובדים עם
מספר עשרוני. במחשב 7% קיימת אפשרות להחזיק את המספר בצורה
המיועדת למספרים ממשיים שנקראת נקודה צפה (1א01ק 0א0811ת).
במקרה זה אין צורך בתמונה, היות ומיקום הנקודה העשרונית *דוע
מאופן הייצוג הפנימ*.
כדי להשיג *יצוג כזה, משתמשים באופציה חדשה (1-ק8א00 | או
0-1 0). מספר המוגדר עם 05408 מסוג זה תמיד תופס 84
בתים. אם רוצים לשפר את הדיוק, אפשר לקבוע שהמספר הוא< מסוג
2 או 8-2א00%2070110 ואז הוא יתפוס 8 בתים. הרחבה זו אינה
מאפשרת ל*יצג מספר *ותר גדול.
בקובול סטנדרטי, קלט/פלט אפשרי רק על פר*טים המוגדרים כ-
צג,ןספנת. מותר להעביר שדה המוגדר כ-%ק2152 לשדה עם 05805 אחר
(או להיפך) רק בתוך תכנית. אם מנסים לבצע פקודת פלט על פריט
המוגדר כשדה בינארי, המחשב יתרגם כל בית לתו המתאים לסדר הספרות
הבינאריות המיוצג באחד מן הקודים הסטנדרטיים (45011 או 0210מ₪,
בהתאם למחשב בו עובדים) וידפיס אותו. כמובן שברוב המקרים לא זו
כוונתנו. נראה בהמשך שבמחשב א78% מצאו דרך להתגבר על קושי זה.
- 33 -
5 תנאי יחס
תנאי יחס מורכב מנושא, אופרטור-יחס ונשוא. להלן שלוש אפשרויות
שונות לנושא ולנשוא. במקרה מסוים, בוחרים באחת מן האפשרויות
עבור הנושא ואחת עבור הנשוא.
נשוא נושא
| מזהה-2 . אופרטור | מזהה-1 !
[ ליטרל-2 ָ של [ ליטרל-1 ָ
| ביטוי אריתמטי-2 | יחס | ביסטוי אריתמטי-1 |
7 > 8 הוא דוגמה לתנאי יחס. 8 הוא הנושא, שבמקרה הזה מורכב
ממזהה-1. מזהה הוא שס נרדף למשתנה או שדה. אופרטור היחס הוא
הסימן >. הנשוא הוא המספר ], שהוא ליטרל-2.
ביטוי אריתמטי (ם65510עקא2 6%610מ₪ת421%) מוגדר כליטרל או משתנה
או שילוב של ליטרלים ו/או משתנים המיוחסים זה לזה על-:ד:
אופרטורים מתמטיים. סדר הקדימות עבור האופרטורים המתמטיים הוא
כדלהלן :
א. ביטוי בסוגריים
ב. +/- כאופרטורים אונאר''ים (6286028ק0 עְפהתט0), זאת אומרת
כאופרטורים הפועלים על משתנה אחד בלבד.
ג. *%
ד. *,/
ה. +,-
כאשר שני אופרטורים הינם באותה רמה, מתקדמים משמאל לימין.
לדוגמה נסתכל על ביטוי זה: 3 / (0 + 8) - (2 / 1) ** ב -
סדר קדימות הפעולות הוא כדלהלן:
(1) מחשבים 2( / 1) וגם (6 + 8), היות וביטויים אלה מוקפים
בסוגריים.
(2) מחשבים 4 - ( - אונארי* הוא הקדימות השנייה)
(3) מחשבים שורש של 4 - (** היא הקדימות השלישית)
(8) מחשבים 3 / (6 + 5) (/ הוא הקדימות הרביעית)
(5) מחשבים (3) פחות (4).
אופרטור יחס (ע0628%0ק0 81ת3618%10) הוא אחד מתוך שש האפשרויות
הבאות:
מה8םך 02080628 [6סא] 18 (18)
< [%סא] 16 (ס1)
ת8ת1 1088 [06א] 18 (28)
> [טסא] 16 (20)
70 0081 [6סא] 18 (38)
= [>%סא] 18 (ס3)
- 38 -
בתיאור שמופיע לעיל, נמשך קו מתחת למלות החובה. שאר המלים הן
מלים שמורות אופציונליות. מלים בסוגריים מרובעים נחוצות רק.
להעביר את המשמעות המיוחדת הנובעת מאותן מלים.
הערך של תנאי-יחס הוא: אמת (6טע7) או כוזב (8186ק).
דוגמאות:
יחס 8 16 8 16 8. 4
8< ג (3)א (3)א לדג 3 (1)
8< ב (4)6 (4)3 2 ₪ (2)
8 > ג (4)8 (4)5 אהאסמדתץ פפנתת (3)
(00010ת) 8 < ב (4)3 (9)3 א 3 (5)
(49011) 8 > 4
הסבר: בהשוואת שדות המכילים מידע אלפביתי או אלפנומר*, משווים
את התווים זה אחר זה. ערך של שדה קטן מערך של שדה אחר, אם התו
השמאלי ביותר שלו קטן מן התו המקביל בשדה השני. בהתאמה, ערך של
שדה אחד גדול מערך של שדה אחר אם אותו תו גדול מן התו המקביל
בטדה השני. אם התווים שווים, משווים את הת הבא בשנ*י השדות.
הטדות שווים רק אם כל התווים בשניהם שווים.
בדוגמאות לעיל התו םס מסמן רווח. למשל בדוגמה (2) נקבל םס < 1,
ולכן אין צורך להמשיך בהשוואה. אם משווים שת* מלים באורכים
שונים, מוסיפים רווחים למלה הקצרה *ותר. למשל בדוגמה (3), בזמן
ההשוואה נוסף רווח לשדה 4 אחרי האותיות פשזתקע. מכיוון שרווח קטן
מן האות א בסידור התווים, הערך של שדה 4 נחשב לקטן משדה 8.
בדוגמה (4), מטפלים בשדה הנומרי 8 כאילו הוא שדה אלפביתי מכיון
ששדה 8 הוא אלפבית'י.
0 אופרטורים בוליאניים
כדי לשלב תנאי *חס, משתמשים באופרטורים הבוליאניים ססא ,6ם2, ו-
05, שהן מלים שמורות. תנאי יחס מורכב מוגדר כשילוב תנא* יחס
פשוטים, בעזרת | האופרטורים | הבוליאניים. סדר | הקדימות | של
האופרטורים משתנה כתוצאה מהוספת אופרטורים של יחס ואופרטורים
בוליאניים, כדלהלן:
(1)-(5) כפי שמפורט קודם
(6) <, 6 =
(7) 6סא
(8) 6ם2
(9) 05
במקרה של "תיקו", מתקדמים משמאל לימין.
דוגמה: 7 > ש 6סא 6םג כ < 8 08 0 = ם + 4
סדר החישוב הוא כדלהלן:
א. םת + 4 פעולה ברמה 5. נקרא לתוצאה א.
ב. 0 = א תנאי היחס השמאלי ביותר. נקרא לתוצאה הבוליאנית 71
.
- 35 -
ג. כ < 8 נקרא לתוצאה 12.
ד. 17 > ץק נקרא לתוצאה 73.
ה. 13 6>סא נקרא לתוצאה 14.
ו. 1% 6ם3 72 נקרא לתוצאה 15.
ז. 15 05 11 זוהי התוצאה הסופית.
17 תנאים מקוצרים
א. אם לשני תנאים פשוטים יש אותו נושא, אין צורך לחזור על שם
הנושא כאשר משלבים יחד את שנ* התנאים הפשוטים, כדי לקבל ת(א:
מורכב.
דוגמה: 06 < 4 תג 8 > 4 שקול לביטןו: 06 < 6תג 8 = ב
הערה: בדוגמה שראינו, אין צורך בסוגריים מכיוון שסדר הקדימות
של אופרטורי היחס גבוה מסדר הקדימות של האופרטורים
הבוליאניים.
ב. כאשר לשני תנאים פשוטים יש אותו נושא וגם אותו אופרטור של
יחס, ניתן להשמיט את שניהם עבור התנאי השנ'.
דוגמה: 06 ל 4 08 8 < ב שקול לביטו: 06 05 8 < 4ב
ג. אם לסידרה של תנאים המיוחסים זה לזה על-ידי האופרטור
הבוליא(ני 6ת8 או 05 יש אותו נושא וגם אותו אופרטור *חס, אפשר
להשמיט את הנושא ואת אופרטור היחס כמו קודם. ניתן גם להשמיט
גם את האופרטור הבוליאני מכל אחד מן התנאים פרט לאחרון.
דוגמה: 2 < 2 ע0 6 ל 2 02 2 < 4 שקול לביטן* 02 0 ם < 4
8 תרגילים
שאלות
1. נתח אחת מן התכניות שכתבת בפרק הקודם. כתוב מספר רכיב מתאים
לכל מלה המופיעה בתכנית שלך.
2. מבין השמות שמופיעים להלן, אלו תקפים בקובול? הסבר.
(א) מ1מ8סק-82ק₪19 (ו) ססטעס שט1ת688 (*א) ב1510ט08%8-610
(ב) ם61+108%10ת160 (ז) 66600ת.ע8ת880 (:ב) 18
(ג) %-פמטןתפה68 (ה) 3 ((יג) | ת6₪860ת-
(ד) -80%ת8 | (0) .סם-%ע8ק ('ד) חסתת-2
(ה) פס (') 0ע20 (סו) 6סם
3 עבור כל ליטרל שמופיע להלן, ציין אם הוא נומרי, לא נומר או
לא תקף. הסבר.
= 36 -
(א) 83284 | (ה) ".324-" (0) 66ע6תטם 68עת6 (יג) 200%
(ב) 328 (ו) 0.328 (*י) "686ע6תטת 66עתט" (יד) 20%
(ג) 324- | (ז) 324.- (יא) 1,324 (טו) -20
(ד) .324- (ח) 6 טת-66ע2םט (יב) .1,161 (טז) .20.60
4. אילו חטיבות מכילות:
(א) שמות פיסקאות
(ב) מספרי רמה
(ג) שמות נתונים
(ד) מלים שמורות
(ה) שמות פיסקאות המסופקות על-ידי המתכנת
5. בנה ב-5002826-שת1אעסא תיאור של הרשומה המופיעה להלן. ציין
אלו פריטים הינם פריט'ם יסודיים ואלו הינם פריטים קבוצתיים.
ד0זזס- ד'אסטת
7
אוו |פמפסאס | אצ | חס | בה40ק5דא| דהלאם | נדהתק
6. אם 1=4, 1=8 אילו מבין הביטויים ערכם מ0תד?
(א) 1 *2
(ב) 1-12 *2
(ג) 90 < עסא 1 פאג 50 > 1 8 25 < 1
(ד) 5 < 1 8 %> 1
(ה) 6 < עסא 1
][. כתוב בצורה מקוצרת: 8 = זסא 4 05 8 > דסא 4.
תכניות
1. כתוב תכנית הקוראת שני מספרים ובוחנת אותם כמידות של מלבן.
הפלט יהיה הה'קף, האיזור ואורך האלכסון של אותו מלבן. יש
לכלול הערות בתכ(ית כדי להסביר את המשתנים ואת שיטת החישוב.
הפלט צריך להיות משפט שיציג את משתני הקלט ואת משתני הפלט.
המספרים יוצגו עם סיפרה עשרונית אחת, כאשר הם מופרדים מן
המלה שלידם ברווח אחד לפחות. הכן תרשים זרימה לפני שאתה
מתחיל לתכנת.
2. כתוב תכנית, אשר קוראת שני מספרים ומת*יחסת אליהם כבסיס
ואורך הי*תר במשולש ישר-זווית. הפלט יהיה גובה המשולש,
הסינוס, הכוסינוס וטנגנס הזווית שבין היתר לבין הבסיס. רשום
הערות בכדי להסביר את המשתנים ואת שיטת הח*שוב. הפלט יהיה
במבנה משפט ש'*צ'יג את נתונ* הקלט והפלט. המספרים *וצגו עם
- 37 -
הדחה
סיפרה עשרונית אחת, כאשר הם מופרדים מן המלה שלידם ברווח אחד
לפחות. הכן תרשים זרימה לפני כתיבת התכנית.
3. אדם קונה דירה ומקבל משכנתה. התשלום החודשי 3 עבור המשכנתה
מוגדר על-ידי הנוסחה הבאה:
ת(1)1+1ס
1- ת(1+1)
כאשר:
שווה לקרן (עלות הבית).
1 שווה לשיעור הריבית החודשית מובע במספר עשרוני (למשל 0.06).
ת שווה למספר החודשים לתשלום המשכנתה.
נתונים הערכים של קע, 1, ת. כתוב תכנית בכדי לחשב את התשלום
החודשי. כלול בפלט תיאור מלא של נתוני הקלט.
פרק 3
לולאות
1 הפקודה 2087084
נניח שרוצים לחשב את המשכורת לכל הפועלים שבמפעל
אחד בלבד. נכין תרשים זרימה לפני שנתחיל לתכנת.
1 7
2
8
3
)3 9
|
|
=
ולא של פועל
0פאסא
7 *תט1ם -> 54014
"
12
1 + מאסא -> מאסא
- 39 -
הסבר: בתרטים זה יש סמלים, או בלוקים שונים, אשר נסביר את
תפקידם. המספרים בראש הפסקאות מתייחסים לסמלים שבתרשים.
(2) הגדרנו משתנה בשם 8א0א שערכו ההתחלתי הוא 1. בהמשך, בכל פעם
שנקרא את נתוני הפועל ונעבד אותם, נגדיל את מאסא ב-1. לאחר
שנעבד את הנתונים של פועל מספר 50, הערך של מאסא יגיע ל-51 וזה
יסמן לנו להפסיק את העיבוד ולסיים את התכנית.
(3) מחבר, או נקודת קשר. אסור שח אחד יפגש עם הצ שני אלא
בנקודת קשר. אסור ליותר משני חצים להפגש באותה נקודת קשר.
(5%) מעויין מסמל החלטה. בנקודה זו צריך להחליט אם להמשיך ישר,
לכיוון שמתאים למצב 50<מאסא, או להסתעף בכיוון ימין, שמתאים
למצב 50=>מאסא.
(5) תהליך מוגדר מראש, או קטע. אם 6>=50מא0א מסתעפים למלבן זה,
שכתוב בו "עיבוד". יש לו צלעות צד כפולות, אשר מסמלות שתהליך
העיבוד הרשום בו מורכב ממספר פעולות או שלבים, המפורטים בתרשים
זרימה נפרד.
(3) (5) ו-(5) יחד מהווים מבנה חדש. עד עכשיו רשמנו את הסמלים
זה לאחר זה במבנה סידרתי. המבנה החדש מאפשר ביצוע חוזר, אשר
מורכב תמיד מסמל החלטה, סמל של תהליך חישוב או השמה, או סמל של
תהליך מוגדר מראש (קטע) ומחבר.
המבנה החדש נראה כך:
המבנה המוצג בתרשים הוא אחד משנ* מבנים של איטרציה (ם16028610 -
מלשון חזרה) ונקרא 200011₪, כי הוא מאפשר לעשות עיבוד (ספ) רק
כאשר (116ת0) התנאי מתקיים. מן התרשים אפשר להבין מדוע מבנ:
איטרציה נקראים לולאות (10008).
(6) מגיעים לסוף התכנית רק כאשר 51-מא0א, ז"א לאחר שמבצעים את
הלולאה 50 פעמים. הלולאה מורכבת מן השלבים (7) עד (13).
(7) הסמל של התחלה או סיום של תכנית מתאים גם לסימול קטע, אשר
מהווה חלק תכנית נפרד שקרוי "עיבוד". בתוך סמל ההתחלה כותבים את
שם הקטע (שהרי לפעמים יש כמה קטעים כאלה) ובתוך סמל הסיום
כותבים "חזור" במקום לכתוב "סיום" (שהרי זה אינו סוף התכנית).
המשמעות היא חזרה לתכנית הראשית, לנקודה שממנה הסתעפנו ל"ע:בוד"
ומשסם להמשיך את הביצוע. בתכנית זו החזרה היא למחבר המסומן
במספר 3.
- 40 -
(12) מטרת פעולה זו לעדכן את המונה, ז"א להגדיל אותו ב- ,1 כ'
ביצענו את הקטע פעם נוספת. כמו שהוזכר קודם, כאשר נגדיל את
המונה מ-50 ל-51 ונחזור במהלך הביצוע ל-(3) ואח"כ ל-(4), תוצאת
ההחלטה ב-(5) תהיה שונה ממה שהיתה יעד עכשיו. במקום להמשיך
ל (5), נמשיך ל-(6), מכיון שעכשיו 50<מאסא.
תכנית קובול לפתרון הבעיה שת:ארנו:
,תס1פצט1כת ם61?168610מ 166 (1)
3 -8משנום מפפסץץ (2)
הערה: בהמשך נדלג על שורות ההגדרה אלו :עס.
,ת1510ט21 םסב (12)
.ת10ס566 5602886-שת1אעסע (13)
01 (18)
.(15)א 216 מסתפ-א 02( (15)
.+ סנק עטנ1תפ-3 02 (16)
.9 סדק 0% - 02 (17)
)18( 1 1%.
.+. (9)5- 216 ע8ת2-580 | 02 (19)
."שכר: " 6ט081 (5)א 16ק 1165נק | 02 (20)
.8 01:66 (3)א 16ק 165 02 (21)
4- ס16 0% - 02( (22)
.ב "שעות: " 08106 (6)א 16ק ע116זת | 02 (23)
. 1060₪5אע (3)א 216 %ע116נק | 02 (28)
4- 16 ע1ת5-ק 02( (25)
,"שיעור: " 6ט1אט (7)א 16ק 1165נק | 02 (26)
1 81066 (3)א 10ק 16%[ונק | 02 (27)
(15)א 16ק ₪סם5-ק2 | 02 (28)
."שם: " שט1אט (5)א 16ק 116%נ1ק | 02 (29)
.1 08106 99 216 סא | 77 (30)
.4 81068 99 16ק שנ6ט0-ת1508א | 77 (31)
.ת101810ת 6עט20066ע (32)
.8 (33)
15082-0061₪ < 6תסא 11סת0 6006 שע0ס?עסק (38)
.תות 5600 (35)
.טס (36)
."הדפס שם עד 15 מקומות." צ18ס18ס (37)
, | .6₪ם5-א 460606 (38)
."הדפס שיעור: שתי ספרות וסיפרה עשרונית." ץ18018ע (39)
, .מנו1ת5- 400000 (80)
"הדפס שעות: שתי ספרות וסיפרה עשרונית." 218218 (41)
.0% 40000 (82)
.1 א מט1הפ5-א = ע8ת2-580 00₪0006 (43)
.₪שסת2-5 60 מסת5-% שטסא (88)
.מטנםתפ-ק2 סס עט1ת5-א שטסמ - (45)
.1 סס 806 8-5 פטס (46)
.6 ש15018ע (47)
.סא 10 1 206 (88)
- 41 -
הפקודה המבצעת את תפקיד המבנה 008108₪כ ה*א פקודת 611ת0..שעס+עסק
(שטורה 34). ההבדל היחיד הוא שבפקודת ₪ע0+ע6קע מבצעים את הלולאה
כאשר התנאי כוזב ובמבנה 2008108 מבצעים את הלולאה כל עוד התנא*
קיים. הפסקה הנפרדת 6ט₪690 מקבילה לתרשים הזרימה הנפרד שהכנו
לתהליך "עיבוד". שע0ס+62ק מסוג זה נקרא ₪ע0ס+?ת6ק חיצונ* (2ס-6ט0-
מעס)עסק 6ת121). על-סמך ההנחיות עבור 85 00001, נוספה פקודת
₪מ02]ע6 פנימית (₪ע0ס+ע6ק 6ת11-ת1) במחשב אג/, ב-מהדר 75 60800
1 של א18 ובגירסאות החדשות של קובול עבור 0ק-א18 ותואמיו.
₪שעס)ע6? כזה אינו מחייב פסקה נפרדת, ה*כולה להיות משובצת בין
הפקודות האחרות בפסקה. למשל, בדוגמה הקודמת, *כולנו להחליף את
חטיבת הנוהל (שורות 32-48) בפקודות שלהלן:
.101510 6עט66סס2ק (32)
.סט (33)
מג0ט15082-0א < 6תסא 11סת0 מעס+עסק (38)
"הדפס שם עד 15 מקומות." צ13018ע (35)
מסתפ-% 266606 (36)
צֶ18 סנ (37)
"הדפס שיעור: שתי ספרות וסיפרה עשרונית."
עטנתפ-% 400606 (38)
צַ1ס5גס (39)
"הדפס שעות: שתי ספרות וסיפרה עשרו(נ*ת."
ססהתפ-א 20000% (840)
0% =* מט1םפ-א = ש8ת2-580 0020066 (81)
2-5(6₪ 60 מסת5-% פטסא (82)
עטנםפ-2 סס עטנת5-% 6טסא (83)
5% סס 806ת5-% פטס (88)
% עא15018ע (5ף)
6מסא 70 1 268 (86)
6+0ק-6תת (847)
. תות 5600 (58)
הערות:
א. בשפת תרשימי זרימה, ₪ע0+ע6ק? פנימי* היה מחייב אותנו לערוך את
התהליך "עיבוד" כחלק מתרשים הזרימה הראשי. תרשים כזה יהיה
מסורבל מאוד. מומלץ איפוא להשתמש ב-80-0066ט6פק, שהוא תיאור
במלים המקביל באופן חד-חד-ערכ: למבנים שבתרשים הזרימה. במקום
בלוקים, משתמשים במלים מהסוג המופיע בחטיבת הנוהל, אך בלי
להקפיד על כללי הדקדוק של השפה. כאשר כותבים ב-86040-0068ק,
הייצוג של שע0ס]ע6ק פנ*מי הרבה *ותר נוח.
ב. אם התנאי ק'ים מלכתחילה, פקודת ₪ע0ס+ע26 לא תבוצע אף לא פעם
אחת, כמו שהמבנה 2001]8 לא יבוצע אף לא פעם אחת, אם התנאי לא
קיים בהתחלה.
ג. אתסקתטק פנימי תחום על-ידי הביטוי: "תנאי 1עאש אתסקתמק"
בראשה והמילים "את0עתמק-פאע" בסופה. כל הפקודות הכלולות בתוך
ה-אתסשתטתק הפנימי מהוות רק משפט אחד ולכן אסור להפרידן בנקודה,
אבל מותר להפרידן בסימן הפיסוק האופציונלי נקודה-בטיק.
- 42 -
2 הפקודה שַת1ַץְ08, .267408
בתכנית הקודמת, השתמשנו בשלוש פקודות שונות בכד' ליצור את
הלולאה ולפקח על פעולתה. לכל פקודה היה תפקיד נפרד, כמפורט
להלן :
א. בפקודה (30) קבענו ערך התחלתי למונה.
ב. בפקודה (48) קידמנו את המונה כדי שבסופו של דבר ערכוה של
הביטוי הבוליאני י'הפך מ-28156 ל-6טעץע.
ג. בפקודה (34) הערכנו את הביטוי הבוליאנ'י.
קיים מבנה נוסף לפקודת ₪ע0+ע6ע המבצעת שלוש פקודות אלו לבד
וחוסכת מן המתכנת את הטירחה הכרוכה בכתיבת הפקודות הנפרדות.
מבנה זה שיבצנו בקטע הבא. קטע זה מהווה צורה חליפית לביצוע
תפקיד חטיבת הנוהל בדוגמה הקודמת.
.4 16 6מסא | 77 (30)
.+ 78106 99 216 | 19082-0061א | 77 (31)
.ת1910ט210 666026סע2ק (32)
)33( 3.
1 עֶם 1 מסעץ 6תסא שתבעע08 6006ע בעס+עסק (38)
.61₪ט15282-0 < 6תסא 11פתס
,.תטת קסטס (35)
)36( 0.
. "הדפס שם עד 15 מקומות." צַ15018כע (37)
. מסתפ-א 460606 (38)
. "הדפס שיעור: שתי ספרות וסיפרה עשרונית." צ18ק15כ (39)
.עטצת5-א 40000% (80)
."הדפס שעות: שתי ספרות וסיפרה עשרונית." צ18ק18ת (81)
)82( 400006 %-580%.
:0% א תט1תפ5-% = עה8ת2-580 66ג00₪00 (83)
.תסת2-5 סס מס6ת5-א סטסא (88)
,עטנתפ- סט עטג1ת5-% 6טסא - (85)
.2-580% 60 8-56 שטסא (86)
.2 ש19018ע (47)
הסבר:
א. הפקודה שת1צע8/. .שעס)ע6ק מבצעת את התפקיד של הבלוקים (2),
)8( ו-(12), זאת אומרת פקודות (30), (3%), ו-(48) בתכנית
המקורית.
ב. בקובול | 85, המבנה שת1עע8/. .שעס?עסק, כמו המבנה
1.. .ת90ע6ק, קיים בצורה פנימית (6ת121-ת1) ובצורה חיצונית
(6ת11-%ס-0₪%). בקטע הקודם, הצגנו רק את הצורה השנייה, הקיימת
בכל הגירסאות של קובול.
ג. בקטע הקודם, יכולנו להחליף שורה (34) בפקודה הבאה:
1- 2 מ01ט015082-0 שסעת פתסא שת1עע8/ 6טס6ם מפס]פסק
.0 = תסא 611תם
0 3 -
בקטע הבא, נמצא את סכום כל הכפולות של 7 עד 500. נניח שהמשתנים
1 ו-מטפ מוגדרים כראו' ב-ת560010 5602886-קת1אעסח.
.טס 710 0 סטסא
7 צֶם 7 מסעק 1 שת1צע78 מעס+?עסק
0 < 1 11סת0
מטס 70 1 3268
. ₪ע6220ק-6תת
בדוגמה זו, הערך של 1 ממלא תפקיד בתוך הלולאה עצמה. בקטע
שהוספנו לתכנית 3-המשטעת (עיין בשיחזור שורות (30) עד (47)
שהוצג קודם), המשתנה 6תסא שימש רק כמונה ולא השתתף בניהול
הלולאה עצמה. במקרה שמשתנה הלולאה משמש רק כמונה, יט מבנה נוסף
לפקודת ₪ע0ס+ע6ק. נוכל להשתמש במבנה זה כדי להחליף את השורה (34)
בקטע שהוצג קודם:
. 18 601₪ט00-ע15082א 9006 שעס+?עסק
הערה: בקובול 85', מבנה זה קיים הן בצורה פנימית והן בצורה
חיצונית.
3 המבנה :00011
מבנה האיטרציה השנ* אשר נתאר בתרשים ושנדון בו עתה הוא המבנה
1עאטסת:
המבנה השלם מורכב ממחבר, תהליך רגיל או תהליך מוגדר מראש,
החלטה,| וחזרה למחבר. ההבדל בין 20₪818₪ לבין מ1עאע0ע הוא בכך,
שבמבנה החדש עוברים בתהליך ומבצעים את הפעולה המוגדרת בו לפחות
פעם אחת. רק אז בודקים את התנאי שנמצא במבנה ההחלטה ועל סמך
תוצאות הבדיקה מחליטים אם לחזור למחבר.
בקובול 85' אפשר להפוך את הפקודה ₪ע0ס+ע6עת מפקודה המבצעת את
תפקיד המבנה ₪/0₪818כ2 לפקודה המבצעת את תפקיד המבנה ז1אט00ע על-
ידי הוספת ה-ע4+06 108% ת₪015" :018096" לפני המילה 611ם0, או
שַתנעַה). למשל, בתכנית 3-משטקת נוכל להחליף את השורה (34) בשורה
הבאה:
40/0 =
, מ01ש5082-0 1 < 6מסא 611ת0 ע4+60 17656 ת₪1% 6006 מעס?עסק
ההבדל היחיד בין התוצאה של פקודה זו ושל הפקודה הקודמת הוא בזה
שגם אם המצב ההתחלתי* היה "61₪ט00-:81508 < 6תסא", הפסקה 6ט600ע
בכל זאת תבוצע פעם אחת.
1 תת-שפה לתיאור פקודות בקובול
כדי לייצג את המבנה המדויק של פקודות בקובול, נדרשת תת-שפה
מיוחדת. אימצנו פה את תת-השפה המקובלת ברוב ספר* תיעוד הקובול.
הכללים הבסיסיים המאפיינים תת-שפה זו מופיעים להלן:
א. מילים שמורות מודפסות באותיות גדולות באנגלית. מתחת לכל מלה
דרושה נמתח קו. כל מלה אחרת מיועדת רק לשיפור הקריאות.
ב. אותיות קטנות מייצגות מלים המסופקות על-ידי המתכנת.
ג. צומדיים [ 1) מצ*:נים שהמתכנת חייב לבחור אחת ולא יותר
מתוך החלופות השונות המוכלות בסוגריים.
ד. סוגריים מרובעים [...] מצ*יינים שהתוכן של הסוגריים הוא
אופציונלי, ז"א שלא צריכים לכלול מלים אלו בכל המקרים.
ה. 1110518 (...) מציין שהפריט הקודם המוקף על-ידי מרובעים או
צומדיים יכול לחזור כמה פעמים שהמתכנת רוצה.
דוגמה למבנים שונים עבור פקודת את0קתטק:
מבנה א': ך טתחך ]
| | הספת8 -06ס0 300077 | 18908 סק | אפסקתטתק
[אתסעתמק-כאם ₪152086]
מבנה ב': שמח
5 מהספדם ו :ו 0 מסת15ע-6סעס [ אתסעתמתק
[את0תתמק-כאם 086מ₪15]
מבנה ג': טתחך
1 1 ם0עת06-80ע וההחה, [ ם0ג15ע-6סעס- אתסעתסק
תסחתם
[ 7
בהת6 הדעאס המעט תפמל התנש
[את0קתמק-פאת 08%5מ₪15]
- 5 -
מבנה ד':
[1 תסעם6-80סעק ל ₪ 0 אתסקתמק
ו | ך ופתספטם [
המדתב עפסך אד1שה
1 1עאש 288פסת צם 18801ת6ס8ם 308ע2 סתסם 60אדצתהט
[אתסעתםק-2אע 6הקת15ם]
המלה 86כ2ת₪15 שמופיעה בכל מבנה מתייחסת למשפט המורכב מפקודה
אחת, או יותר.
הערה: המבנה מתאים לקובול 85', בו קיים אתס0עתםע פנימי, המאפשר
הכללת 86כ2ת₪15 ואחריו את0עתמק-פאם. בגרסאות אחרות, אופציה זו
אינה קיימת וחייבים לכלול ם0ם18ע-200ק2 - זהו שם הפסקה שנבצע
בעזרת ה-את0עתמק התחיצונ'.
5 תוגילים
שאלות
1. כתוב פקודת ֶַתּ0ַקַתמע (כולל פקודות מתלוות) המתאימה למקרים
הבאים:
(א) גורמת לפרוצדורה בשם א8עטגת8-5עא להתבצע א פעמים.
(ב) גורמת לקריאת א מספרים וחיבורם *חד.
(ג) גורמת לביצוע הפרוצדורה 4 כאשר המשתנה מ8א0א% משתנה מ-1 ל-
6 (עד ולא עד בכלל) בקפיצות של 5.
(ד) גורמת לביצוע פסקה הקוראת מספרים עד שהיא נתקלת במספר 0
ומוצאת את סכומם.
2. מה י*ודפס כתוצאה מפקודות אלו?
.1 60 0 6טסא
צַס 3 שסע+ 1 שת1ץע078 15%8ק שעס/עסק
.4 < 1 11סם0 5
.1%
.1 סט 1 8488
.1 15018
תכניות
1. הדפס טבלה שתכיל את א, 2**א, שורש א והסכום של כל המספרים
השלמים מ-1 עד א עבור 25=>א>>1. הפלט צריך להראות כך:
א פא 1 | (א) 500058 2א | א
1 1 1 1
3 18 ח 2
= 56. =
. כתוב תכנית טמקבלת כקלט את המספר א ומדפיסה !א (א עצרת).
, כתוב תכנית שתחשב את מספר הספרות בצד שמאל של הנקודה
העשרונית במספר ממשי שהוא הקלט. רמז: חלק ב-10 עד שהמנה תה*ה
פחות מ-1.
| ב
2 ו
0 |
[ 5 1
| | ]1
6% 86 =- --)/
-| 4 =
8
כ
, 7
7 / "א
- 87 -
פרק 4
הסתעפויות
1 המבנה :1
עד עתה למדנו כיצד לכתוב תכניות שבהן הפעולות בוצעו לפי סדר
כתיבת הפקודות, מהפקודה הראשונה ועד האחרונה. לפעמים רוצים לבצע
פעולה אחת כאשר תנאי מסוים מתקיים ופעולה אחרת אם התנאי לא
מתקיים. למשל, כאשר מחשבים את המשכורת של עובד במפעל מחשבים
בדרך אחת אם עבד שעות רגילות בלבד ובדרך אחרת - אם עבד גם שעות
נוספות. יש להביא בחשבון את האפשרות של "הדרך האחרת" מלכתחילה,
בעת עיצוב התכנית.
07 *ת510-> 5408
500118 >- 511100%45 +
1 .5*51110* )51401-45(
תרשים הזרימה לעיל מציג טיפול במקרה כזה, באמצעות המבנה
6 .
המבנה 156עת6ת12+1 ("אם-אז-אחרת") מורכב מסמלים (3) עד (6). זהו
אחד מש(* מבנים של הסתעפות מותנית (שת1בם6תהע2 81ת61610ת00), או
בחירה (ם56180010). כבמקרים אחרים, אפשר להחל*ף את הסמלים (4)
ו-(5) בסמלים המייצגים קטע.
תרשים זה הינו הרחבת הבעיה לחישוב משכורת שעסקנו בה קודם. בסמל
(3) בודקים אם הפועל עבד במשך השבוע 45 שעות או פחות. כאשר
התשובה היא חיובית, הוא אינו זכא: לשכר מ*וחד עבור שעות נוספות
ולכן עוברים (מסתעפים) לסמל (4) ומחשבים את שכרו לפי השיטה
הרגילה. במקרה זה לא מבצעים כמובן את סמל (5). אם כתוצאה
מהבדיקה מוצאים שהפועל עבד יותר מ-85 שעות, מחשבים את משכורתו
לפי השיטה האחרת: את 55 השעות הבסיסיות כופלים בשיעור השכר
הרגיל לשעה ואת עודף השעות שמעל 45 (שעות נוספות=5801-45)
כופלים ב-1.5 של השכר הרגיל, כי הפועל מקבל תמורה של 150% מהשכר
הרגיל. במקרה זה לא נבצע את סמל (5) אלא את סמל (5). בכל מקרה,
מגיעים למחבר (6) וממשיכים.
מבנה שונה במקצת מן המבנה שדנו בו עתה, הוא המבנה תסת1+7 ("אם-
אז"). מבנה זה מתאים למקרה שבו תוצאה אחת של הבדיקה מח:*יבת
פעולה המתוארת בסמל מלבן (מלבן רגיל או מלבן המייצג קטע), אבל
תוצאה אחרת אינה מחייבת פעולה כלשהי. המבנה נראה כך:
2 פקודת 1
להלן מבנה הפקודה בקובול המקבילה למבנה מ5ע אמחדך ע1 ו-אמחך אע1:
מסאפזאתס פאמא מפסם
[ש1-פאת] ...[68-2ט06%0) מ5סם ... [06%008-1)
|
שך-פאם
סאמנצאם אמא 1 אמח (81ם6) עד
המשפטים 1-8%סת₪15 ו-2-8%קת₪168 יכולים להיות מורכבים מכל סוג של
פקודה, כולל פקודת א1 נוספת. האופציה עא1-קאע היא חדשה ב-
5 00800. בתוך תוכנית מומלאצ לכתוב את פקודת א1 בצורה זו:
- 9 =
אמח (81ב6) עך
1 גוס
תוצאות קיום התנא: 608-2
מפט
68-3ואסק
תוצאות אי קיום התנאי 84-רטאס
להלן דוגמה:
מס 45 < ססא 806ת9 192
% *<* תעט1ב5 = עה8ת586 0₪0166ס0
םסת5 ,"לא עבד שעות נוספות" צ18018כ
מס
(05 - 80%ת5) * עטבת5 * 1.5+ 25 * עט1ם5 = ע8ת586 6סגקשס0
.₪סת5 ,"עבד שעות נוספות" 15018
3 פקודות ?1 משולבות
נניח שיש שתי רמות של שעות נוספות. פועל אשר עובד למעלה מ-85
שעות מקבל 150% משיעור השכר הרגיל עבור 10 השעות הנוספות
הראשונות (הרמה הראשונה) ו-200% עבור כל שעה מעבר ל-55 שעות
(הרמה השניה). פקודת 1 המתאימה למקרה זה:
תסת 35 < 6>סא 6ס8ם5 19
0% *<* עט1ת5 = עַ8ת580 00₪0166
עםסת5 ,"לא עבד שעות נוספות" צַ18ק15ק
6
מ6ם1' 55 < ססא 6סַת5 19%
(05 - 806ת5) * עט1ת5 * 1.5 + 45 * עט1ת5 = ע8ת580 6סטקמס0
" עבד פחות מ-10 שעות נוספות " 218018
6
(05 - 80%ת5) * עטנת5 * 1.5 + 45 * פעטנתפ = ע8ת580 66טק00₪
(לל - 6סת5) * עטנת5 * 2.0 +
.מסת5, " עבד 10 שעות נוספות או יותר " צ18018ת
בדוגמה זו, הקטע השני לאחר ₪158 כולל פקודת ת1 נוספת, אשר נקראת
פקודת ע1 משורשרת ("1 6סת1ַ8ת0).
הסבר הפקודה הוא כדלהלן: אם סְסַת5 קטן או שווה ל-45 מבצעים את
הקטע הראשון ומדלגים להמשך התכנית, לפקודה הבאה. אם 806ת5 גדול
מ-85 אבל קטן או שווה ל-55 מבצעים את הקטע השני ומדלגים להמשך
התכנית. אם לעומת זו, 58401 גדול מ-55, מבצעים את הקטע השליש:
והאחרון ואז ממשיכים.
- 59 -
בקטע הבא מוצגת דרך נוספת לתכנות של תנאי זה:
מסת 45 < 52806 קך
תסת1 55 < 6ס8ַת5 קעך
* עט1ת5 * 1.5 + 85 * עט1ת5 = 8ת580 6סגקתס0
(5פ - 806ת5) * עט1ת59 * 2.0 + (45 - ססם9)
מסתפ, " עבד 10 שעות נוספות או *ותר " ,218018
6
(05 - 806ת5)* פט1ת5 * 1.5 + 85 * עט1ת5 = ע8ת586 6סטקשס0
" עבד פחות מ-10 שעות נוספות " צ15018ת
6
% *<* עט1ת5 = ע8ת580 166ק00₪
.םסםת5 ,"לא עבד שעות נוספות" 15018
בדוגמה זו, הקטע הראשון לאחר אמ כולל פקודת א1 נוספת. פקודה
זו נקראת פקודת 1 מקוגנת (+1 686886א), מלשון "קן". בפקודת שץך
זו, אם מתברר אחרי הבדיקה של השורה הראשונה שאמנם 6סמב5 קטן או
טוה ל-45, עוברים מיד לפקודות של הקטע האחרון, אחרת ממשיכים עם
הבדיקה ב-ע1 השני. אם סְסַת5 גדול מ-55, מבצעים את הקטע הראשון
ומדלגים לפקודה הבאה. לקטע האמצעי מגיעים אם פ6סַת5 קטן או שווה
ל-55, אך גדול מ-45. אחר* ביצוע קטע זה, עוברים לפקודה הבאה.
בשני קטע* התכנות הקודמים בהם השתמשנו בפקודות א1, המלים א ו-
₪ הופיעו פעמיים:
* בקטע הראשון מוצגת פקודת ;1 משורשרת: 58.₪..10..מפם..ען.
* בקטע השני מוצגת פקודת א1 מקוננת: 5₪..₪58/₪..ע1..ק1.
בפקודת ע1 מקו(נת, אם נחליף את פקודת 1758 הראשונה והקטע שבא
אחריה במלים א1-כאמ, פקודת "1 הראשונה תהיה מן הסוג מ60ם12/1 ולא
6, והמצב יתואר כך: 58מ..ע1-פאת..ס1..ק1.
כאשר אפשר לייחס הוראת 58.₪ ליותר מהוראת ;1 אחת, הכלל הוא ש-
₪ תמיד מיוחסת ל-18 אשר קרובה אליה ואשר עדיין פנויה (על-:ד:
כך שאין לה ₪058 או 18-עאע המיוחס אליה). תמיד מתחילים לייחס את
המלים הפנימיות ביותר. לכן, בקטע השני, ה-עא1 וה-₪1.58₪ הפנימיות
שייכות זו לזו וה-א1 וה-₪158₪ החיצוניות שייכות זו לזו. יש לשים
לב לכך ששני הזוגות של ₪158₪..ע1 (הפנימיות והחיצוניות) מיושרות
בהתאם. בכל מקרה, לא צורת ה:*ישור והכתיבה קובעות את משמעות
הפקודה, אלא הכלל שהוסבר קודם.
דוגמה: תסתך 10 < 16-4עהק 19 (1)
תסת1] 1%6-0ע28 > -1%ע8ק 19 (2)
ע16-2עהק 70 1 268 (3)
8 סי "א" 6טסא (8)
2-מ (5)
.7-2 סך 1 866 (6)
בדוגמה זו, מבצעים שורות (2) ו-(6) כל עוד התנאי הראשון קיים.
(כלומר, 4-7821% גדול מ-10), אבל מבצעים שורות (3) ו-(4) רק אם
התנא* הראשון וגם התנא* השנ* (16-0ע28 = ב-16ַעהק) קיימים.
- 51 -
14 המנבנה 0158
אפשר להציג הסתעפות מותנית באמצעות מבנה 0458. זהו המבנה ה*חיד
בשיטת התכנות המבני, אשר מתיר *ותר משתי* יציאות.
נניחה שהשכר שפועל מרוויח עבור שעות נוספות תלו* ביום בשבוע.
בימים א'-ה' הוא מקבל 150% מהשכר הרגיל עבור כל שעה מעבר ל-8
שעות, ביום ו' הוא מקבל 200% עבור כל שעה מעבר ל-5 שעות. במוצאי
שבת הוא מקבל 300% מהשכר הרגיל עבור כל שעת עבודה. בכדי לחשב את
שכרו של הפועל ליום מסוים, דרוש משתנה נוסף שיציין את יום
העבודה (מ-1 עד 7). תרשים זרימה מתאים מופיע להלן:
קרא 51108,
אסצ ,07
יום רג*ל
מכיון שצריך לטפל בשלושה מקרים נפרדים (יום א'-ה', יום ו'
ומוצאי שבת), דרושים שני מבני החלטה, (3) ו(4). אילו היו למשל,
90 מקרים, ה*ינו זקוקים ל-9 מבני החלטה. מכיון שתרשים כזה עלול
להיות מסורבל, נהוג להשתמש במבנה מיוחד, אשר מוצג בתרשים הבא:
- 52 -
סמלים (3) עד (7) מהווים את המבנה המורכב 0458 ("מקרה"). בסמל
(3) כותבים את הביטוי שעומד לבדיקה ואשר על-פ5* ערכו מחליטים
לאיזה כיוון להמשיך. בתרשים זה הביטו*י מורכב מן המשתנה אס
בלבד. סמלים (4)-(6) הם הקטעים אשר יתבצעו בהתאם לתוצאת ההערכה
של הביטוי בסמל (3) ואשר רק אחד מהם יתבצע בכל מקרה. אחר* ביצוע
הקטע המתאים, החצים מתכנסים בסמל (7), שהוא הסמל היחיד בתכנות
מבני שקולט יותר משני חצים.
הפקודה בקובול 85' המבצעת מבנה 0458 היא פקודת 41076₪/₪. למשל,
לפתרוןּ הבעיה שהוצגה קודם, נוכל לכתוב:
מסצ 856:גו1אטע
1 מם0?ע26 5 טעת 1 תסגתח
1ת19ם5 ₪ע0ס+ע6ק 6 תסתש
3% נמ;ם0+ע6ק 7 תסתש
סגופ' ₪ע0+ת62ק 06262 תסתח
. 008111866 -6ת
ניתו לדמות מבנה זה גם בגירסאות קובול שאין בהם פקודת 810878₪/₪
על-ידי שימוש בשני המבנים של פקודת 10 00 המופיעים להלן:
- 53 -
סספס-מסתה 70 60
ה אס 0א1פאמקטת ...[ססעק-מס6ת5+ 790 00
: סהמעסץ
:1 סהמעסץע
במבנה הראשון הפקודה 710 600 מאפשרת הסתעפות בלת* מותנית
(תסתאעם 81ת61%10תס6תט) לפרוצדורה (ז"א לפיסקה או לפרק) -6₪ת8
6 במבנה השני, %70' 00 מעבירה את המשך ביצוע התכנית לשגרה
סס-מסת5 ושמקומה הסידורי בפקודה זו שווה ל-ע15082.
דוגמה: נכתוב פרק מתוך תכנית בקובול, כדי לבצע את הפעולות
שבוצעו על-ידי פקודת 41041₪/₪ בדוגמה הקודמת.
.560610 1001126ו0886-9%2
.1תפפת-18%8ק
0 00
,51851 ,11קהת ,11שהת ,11קהת ,11קהת ,11שהת
.מפסצ ת0 שת61ת6ק6כ
. [בשפת
תסג1 0 > 6סת5 1%
6 0 00
6
םתד 8 = ע0 8 > ססת5 12
0% =<* עג1ת59 = 580285 0020166
6
6
.(8 - 80%6ת5) * 1.5 * עט1ת5 + 8 * עט1ת5 = ע8ת580
.-0856 70 00
. 5181
ת6ם' 0 > 6סַת5 19
6% 0 000
6
תסת1 5 = 05 5 > 5806 12
טססףת5 * עט1ג5 = ע8ת580 066ק00₪
6
6
8082
.א-0836 70 00
. 5080082-א
מסג1' 0 > סְסת5 ?1
8% 10 00
6
868 6סגוס 00
.(5 - 80%ת5) * 2 * עט1ת5 + 5 * עט1תפ
.0% = 3 * תטנ1חס
806.
,"הוא ערך לא חוקי עבור 58101" 15018ע
.-0850
.א
הסבר:
כאשר ערך המשתנה 0% הוא 1 עד 5 מסתעפים לפסקה 1ַדאַָת, כאשר ערכו
הוא 6 מסתעפים לפסקה 1ת158ת5 וכאשר הוא ] מסתעפים לפסקה
- 58% -
%, תתפסקה שנקראת 1% משמשת כפסקת מוצא אליה
מסתעפים מן הפסקאות הקודמות כאשר רוצים לצאת את הפרק.
כלל: צזאם הייבת להיות המלה היחידה בפסקה שהיא נכללת בה. שם
הפסקה נ*תן לבחירת המתכנת.
הפק ודה 04278 ₪081 יכולה להתייחס לערך של יותר ממשתנה אחד או תנאי
אחד. למשל, בדוגמה שלנו נוכל לכתוב:
סנותץ שסצ ופט
8 < %סא 80%ת5 5 טעתץך 1 תסתש
0% * עטנתפ5 = "8ת580 0₪0066ס6
8 < 580% 5 טעתך 1 מסתע
(8 - 80%6ת8) * 1.5*עט1ת5 + 8אעטנת5 = ע8ת586 600066
5 < %סא 50806 6 מסתע
6 = תטדת9 = ע8ת580 00₪0006
5 < 580% 6 מסתש
(5 - 80%ת5) 2 % עטנםת5 + 5 * עטזםת5 = ע8ת580 0000056
עתגא 7 . מסתע
0 * 3 = ע8ת580 6סגוקשםס00
. 8118%6ט6-2ח
בפסקה הקודמת, הפקודה 000178 המתאימה מבוצעת כאשר ערך המשתנה
אסצ שווה לערך שמופיע תחת המלה א0+ והתנאי שמתחת למלה מטתך
מתקיים. אפשר בקלות להוסיף משתנים נוספים לפקודה 41007₪/₪.
למשל, אם אחוז ההוספה עבור שעות נוספות גבוה *ותר לנשים שלהן
ילדים צעירים, אפשר להוסיף עוד משתנה שייקרא סם/טץ ואפשר לייחס
לו ערך של "ץצ" או "א". הערך של ₪/מצ ימלא תפקיד גם בקביעת
הפרטים לפקודת 07₪ק008 המתאימה.
להלן המבנה הכללי של הפקודה 30410478 :
עהפסת
בי [ טסתך 1 ₪ הט
סע אפתע
טתח
... | 6068-1ק,,,| | 2-נופהת 0 1 [ עסא ]
[681168-2 תמזס אמח ]
[078 .1ב טמ -פאם ]
הסבר:
צֶפּפסת: משתנה, ביטוי אריתמטי או ביטוי בוליאני, או ליטרל.
2-ופהת ,1-טפהת: ליטרל, משתנה, או ביטו* אריתמט'.
2-הבטאסק ,08-1טא6%ק: פקודות הכרחיות, זאת אומרת פקודות שביצוען
= 195
מוביל תמיד לאותן תוצאות (למעט פקודת ע1 או פקודת 810878₪/ע
שנייה). הפקודה ההכרחית תתבצע רק אם יש התאמה מלאה בין ערכו של
כל נושא שמופיע בשורת 410218₪/₪ לבין התנאי, או הערך המקביל,
שמופיע בשורה ז₪8א. אם קיימת התאמה עבור יותר מפקודה הכרחית
אחת, זו שמופיעה ראשונה תתבצע, והאחרות לא.
המשמעות של צא12 היא, שהדרישה תתקיים עבור כל ערך של המשתנה
המופיע לאחר הפקודה 410218/ם.
דוגמאות נוספות: אש
א. 10878 עם תנאי אחד:
4 8108066₪ט
408 סס 1 6עטסא "601" תסתא
8 10 2 שטסא "616" טעב "402" תסתט
"018" מועםמ1 "017" תסתש
58 0 3 ס6טסא "286" טעתך "020" תסתשט
םטתס5 710 1 4884 "320" תסתחא
6560 710 00
8 70 0 6טסא 0662 מתסתט
. 81118%6ש6-2ת
שים לב שאפשר לשייך שתי פרזות אמז]) לפקודה הכרחית אחת. תוצאות
של הפעלת הפקודה הזו למעלה מופיעות להלן:
קלט עבור 4-זזַחגק פלט
"20" 2 = ם-4817ץ
"016" 0 = פ5-דזתגק
"3" 3 = 8-דַזַַ4ק
"20" תמשיך בפסקה 084מזפאטון
ב. בדוגמה הבאה בונים טבלת הכרעות הקובעת איזו פעולה לבצע על פף:
הערך של שלושה משתנים: 041מא-014980 (שערכו "א" אם חסר מלאי,
"םת" אחרת), 058-584/01א581 (המתייחס לכמות הצריכה השבועית של
אותו פריט), ו-1א0אמא-א5008₪ (שערכו "א" אם הסוכן נמצא בקרבת
מקום).
1םסאסא-ת0ת506 נטטהת5-ת8ט1₪ת5 6181א-8562ת0 66הנגו[הטם
צֶתג 0 נותת' 16 "א" תסמ
8 -8ת18208] םע0+יסק
צֶתג 5 טעתך 8 יא" מסחש
8 2ן] מע0+עסק
יודיי 0 נועת1 16 "א" תסתש
8-8ת828] ₪ע0ס+ע6ק
אש 5 טעתך 8 ייא" מס
2-8 ות 0+?עסק
"א" 5 טעפתך 8 "א" מסחש
2-8 מע0+עסק
- 56 -
צתג 7 טעםד 0 יא" תסתט
8 מעס+עסק
צֶםג צֶתג ₪ תסת
8ת28501-828 מעס?עסק
. 81118%6ש -6תו
דוגמת הפעולה של הפקודה:
ערכי הקלט פלט
הזטא-50ה0 | [טטג058-51א5₪1 | זאסאמא-אטת500 | בצע את הפסקה:
"א" 55 ₪ ענת סמכ- אהת
יש 100 "א" אא -, זטידהם
"א" 5 "ם" תת האהאל
ג. בדוגמה זו שנ* נושאים, כאשר הראשון הוא תנא* והשני ביטוי
אריתמטי. בפרזה אחצא נציב ערכים של מ58גע, מטתך, או גורם אחר
(שערכו גם שסת1 או 4055ע) עבור התנאי. נציב ערכים מספריים בצורת
ליטרליים או ביטויים אריתמטיים אחרים עבור הביטוי האריתמט'.
1 - ם-16ע28 * 8 | ,30 > 6ם4 6 < ב-6נעפק 68
0 ** 5 סותי תסמ
תסג318 מעס+?עסק
0-0 6 תסמ
1תסת5 מעס+עסק
1 2 < 16-0עה8ק תסתט
1 מסס?עסק
0 טעתך 7 6>סא סותיך מסגא
צסבטגת מעס?עסק
066% מסתא
11מהת0 מעס+עסק
. 8111806ש -6ת
תוצאות הפעולה נראות כך:
4-דדתס פדתות 0-דדתהס פלט
בצע את הפסקה:
12 2 3 אסמ₪פזת
5 0 18 ו
130 0 18 דוס
6 3 23 צאםפ
18 0 5 צשצטדת
- 57 -
5 שמות ערכים
אפשר לתת שמות לערכים השונים שמשתנה יכול לקבל. לדוגמה:
-9)4( ..
."שכר: " 78106 (5)%
.8 1₪665אץ (3)א
3
. "שעות: " 6ש1א8/ (6)א
.8 166 (3)א
..-
."שיעור: " 6ט1א (7)א
.8 71665 (3)א%
(15)א
."שם: " 6ט1ט (4)א
.1 16
8 106אט (37)א%
. "מספר העובדים שטופלו שווה ל:"
.0 7818606 999
."0" 08106 א 16ק
."א" 6גט081
6
6
6
6בק
6
6
סג
6
6ב
6
6
6
6
.ת0ס151ט1כ 28608
.ת560010 6ש8עסס5-שת%1מסט
.% 01
.(15)א 216 מסת5-א 02
.9 ס1 עטנת5-א 02
ס1 ססַת5-% 02
.16% 01
עפת580-ק
1162נתק
1162נקת
%סף8ם5-ק
1162נץ
1162נת
עגו1ם5-ק
11160ץק
162נ1נת
מסתפ-ק
1162נץ
(2
02
022
2
022
022
02
022
(02
(2
02
.מנץ51 01
טא 02
1162נק
22
גםנ6ט82-0ק15א 77
אפ-ת₪0 77
שסם
08
.ת101810כ 6עט66ססעק
08 .
מפ0?ע6ק
1 611ת0 ₪606 מעס+עסק
.תות ססספ
.2%
."הדפס שם עד 15 מקומות. אח"כ הקש 1300-2א600" צ18018ת
.אשפ-₪00 10 "א" שטסא 6תם 4% מסבת5-% 4200606
ת6ם71 ₪08 6סא
"הדפס שיעור: שתי ספרות וסיפרה עשרונית." צֶ18018ת
עטו1תפ-% 20000%
"הדפס שעות: שתי ספרות וסיפרה עשרונית." 18018
%סתס- 400606
6
5 עסא-יססעטא 10 61₪ט82-0ק15א 6טסא
.ססהתפ-% * עעונם5-% =
- 58 -
מנצ1פ 19018
9
. 6-14חת
. גוס
2-88 6סגוק 00
)12(
)13(
)18(
)15(
)16(
)17(
)18(
)19(
)20(
)21(
)22(
)23(
)28(
)25(
)26(
)27(
)28(
)29(
)30(
)31(
)32(
)33(
)38(
)35(
)36(
)37(
)36(
)39(
)40(
)81(
)82(
)43(
)88(
)45(
)46(
)47(
)88(
)49(
)50(
)51(
)52(
)53(
)58(
.61₪ט815082-0 סד 1 288 (55)
מססלעסק (56)
מם0?עסק (57)
.4% (58)
.2-56 60 שסת5-א 6טסא (59)
.בתנונמפ-2 60 אנוצת5-% 6טס (60)
.טס8ת2-5 60 80%6ם5-א סטסא (61)
.% א18018כ (62)
הסבר הפרטים החדשים בתכנית זו:
שורה (31): אם מעבירים מספר לשדה המתואר על-יד* התמונה 222,
האפסים המובילים לא *ודפסו. תמונה כזו מתאימה רק לשדה העומד
להדפסה. אסור להשתמש בה כדי לתאר שדה שישתתף בחישובים.
שורה (35): מספר רמה 88 מיועד להקצאת שמות לערכים שונים של
משתנה. המבנה הכלל:י של ההגדה:
טתתד 5 10
- | 6908-8601 סו | [א ו מסתם 88
המלה 6₪ג5 מתייחסת לערך אחד של המשתנה המתואר, כאשר מציבים מספר
עבור ת2808-ת60ע62, ולא מציבים ערך עבור 88601-ת6260. אם מציבים
ערך גם עבור 88001-ת60ע62, ₪סג8 מתי*יחסת לטוותה הערכים החל מ-
ם 6260-88%8 עד 88601-ת60ע6. כאשר מזכירים את המלה ש6₪ת8 בתוך
התכנית, דומה הדבר כאילו שאלנו אם המשתנה שווה לאחד מן הערכים
המיוחסים לאותו 6₪ג8. לדוגמה, בשורה (44) המשמעות של המלים "ע1
שסם יסא" שקולה למשמעות של: "א" = 50-ע₪0 עסא א1, הדבר נןבע מן
ההגדרה שניתנה בשורה 35, ההשוואה: "א" = א₪02-5 לבין ע₪0.
שורה (43): המבנה המלא של הפקודה 400₪27:
[ [.0-400807א ] 66068 פאם 81] [6166אם-₪6802 08תע] מסת5 400007
המבנה המלא מאפשר לציין את סוף הקלט על-יד* הקשת 2-תַַ0ַת7א00,
הגורם למתג 5%-"₪0 לקבל את הערך "א%". בשיטה זו, לא חייבים לדעת
מראש את מספר העובדים המדויק. השימוש באופציה זו עשו* להשתנות
ממערכת למערכת.
מבנה חליפי לדוגמה הקודמת מופיע להלן:
.םס1פ1ט21 86עט6600סעק
. 08
. 0611 ₪6006 מעס+?עסק
.תטת ססס5
. ₪6
מועפס+יסק
תס א0ם ססא 12
שנטטת215ת0 שעס+עסק
- 59 -
06% מעס?יסק
6
8 -טטטטטא 60 מ18282-0061₪א 6טסא
. מגוצ51 צ18ק19כ
. 0151118
.0% = מעט1תפ-א * עה8ת2-580 6080166
.9-0 סד 1 264
הפסקאות ₪,זטא-215%41 ו-1שמק-15%41ק זהות לפיסקאות עם שמות אלה
שנכתבו קודם.
6 תוגילים
שאלות
1. בתכנית רשומה הפקודה הבאה: 5 = 00 3 = 00 6ם8 5 < אם 19
8 0% 6תג 19 = ססא 12 08
.14 10 00 ₪186 31 10 00 8 מהתך
לפניך טבלת ערכים עבור השדות שבפקודה.
להיכן תסתעף התכנית בכל מצב?
2. דמי עמלה של סוכן מכירות מבוססים על קוד-המוצר, לפי הטבלה
שמופיעה להלן :
קוד המוצר נוסחה
ע1ת₪60 * 0.15
(06ו12-81ת₪606) * 0.80
(12-8106ת₪60) * 0.50 + 6ש81 * 0.10
1% * 0.05 + 10
35
= א %0=- ת
כתוב פקודה (או פקודות) לחישטוב דמי העמלה. אם קוד-המוצר שונה
מהערכים 5,%,1,2,3 יש להעביר 0 למשתנה המייצג דמי עמלה.
= ₪0 =
3 מחשבים מס בעזרת הטבלה שמופיעה להלן:
ה5נסה חודשית מס
פחות מ-1000 ש"ח 0
בין 8 ש"ח ל-3000 ש"ח 2% מהכנסה מעל ל-1000 ש"ח
מעל ל-3000 ש"ח 0 + 50% מהכנסה מעל ל-3000 ש"ח
כתוב פקודה (או פקודות) לחישוב מס-ההכנסה.
8. תקן (אם נחוא) את הקטעים הבאים, הכוללים את הפקודה אתסעתמק.
(א) . 3-1גק
.: 12 248-2 מת0ס?ע6ק
. זזאם-43ק 70 00
.2-חגק
.סם סס 1 800
.1 סס ₪0
. יזזאם-תהק
(ב) 8 20 מ-218%88 מע0ס?עסק
1 צַ8 50 מסעץ 6תסא שַתצעעפש
0 ת8ם1 0208082 18 6מסא 1צטתש
(ג) 6 20 218%88-0 מעס?עסק
1 - צע0 20 מסעע 6תסא שת1עעאט
0 תה8ת1 02680602 18 6תסא 1צטחט
(ד) 6מסא שַתבעַע08 218%8-0 םעס?עסק
8 ש6תסא 611מט0 2 צעַם 1 שספק
1 10 681
(ה) .ת-18%8ק טעםת> כ-18%8ק שעס?עסק
.3 -13%ק 60 ₪0
.(-18%8ק
.8 0ס 4 806
.ת-18%8ק 0סס סש 8-0 1
.8-5
.1 סט 4 861
.-13%8ק
/ 0= את 6סטקמסס
.המְהַת-18%8ק
תכניות
1. רצוי שעובד חדש בחברה יענה על 3 הדרישות כדלקמן:
- יהיה למעלה מגיל 21.
- יהיה בעל תואר ראשון.
- יהיה בעל נ*סיון בעבודה של 5 שנים, או *ותר.
- 61 -
כתוב תכנית שתבדוק אילו דרישות המועמד ממלא. הקלט יהיה 3
מספרים שלמים:
- גיל המועמד.
- תואר: 0 יסמל שאין לו תואר.
1 יסמל שיש לו תואר.
- מספר שנות ניסיון.
שורת הפלט תציין את הדרישות שהמועמד ימלא.
כתוב תכנית שתקרא שנ* זוגות של מספרים שלמים וענה על השאלות
הבאות:
א. האם שני הזוגות הינם זהים?
ב. האם האיבר הראשון או האיבר השני שווים בשנ* הזוגות?
ג. האם האיבר הראשון בזוג הראשון שווה לאיבר השני בזוג
השני, או האם האיבר השנ* בזוג הראשון שווה לאיבר הראשון
בזוג השנ*?
אב חסך 0 שקלים עבור חינוך אוניברסיטאי לבתו. הבת *כולה
להרוויה 800 שקלים לחודש. שכר הלימוד הוא 200 ש' לחודש
והוצאות האש"ל הן 550 ש' לחודש. הכסף מופקד בבנק ומושכים
אותו עבור הוצאות בתחילת כל חודש. הבנק נותן ריבית של 2%
בסוף כל חודש.
כתוב תכנית שתדפיס דוח שיפרט כמה כסף יש בחשבון בסוף כל
חודש, עד לניצול כל הקרן שהופקדה. מבנה הדות:
יתרה בסוף חודש יתרה בסוף חודש
חודש הכנסה הוצאות לפני ריבית ריבית אחר* ריבית
.8
.6
1,233 .- 1.00 4,150.- 750.- 800 .-
3 ,6 76 3,883.- 750.- 400 .-
> ₪
לתכנית שכתבת בשאלה 3 הוסף את האפשרות לקבל קלט ידני של
ההכנסות וההוצאות החודשיות, במקום להשתמש בערכים קבועים מראש
(200, 00 ו-550).
עליך להרחיב כמה מן התכניות שכתבת בפרק 1 (מתכנית 8 עד תכנית
1) כדי שתפעלנה לא רק על קבוצת נתונים אחת, אלא על מספר רב
של קבוצות.
אב רוצה ללמד את בתו כיצד לנהל את כספה. הוא נותן לה %150
אבל דורש שתכין את רשימת הפריטים שהיא רוצה לקנות. ברשימה
צריך להופיע מספר קטלוגי של הפריט ומחירו. הבת מחליטה להשתמש
> ₪ =
.90
.1
במיקרו-מחשב שלה בכדי לבדוק אם הכסף שעומד לרשותה יספיק לה
לקניותיה. היא מזינה כקלט את מספרי הפריטים ואת מתיריהם.
יתכן שהסכום הכולל גבוה מ-%150.
התכנית תדפיס ברשימה את הפריטים לפי סדר הקלט, כל עוד מחירם
הכולל אינו עולה על %150. בסוף הרשימה *ודפס סכום הכסף שהבת
מבקשת להוציא, אם ערך זה קטן או שווה ל-%150. אם הסכום גבוה
יותר, התכנית תדפיס רק את הפריטים שמחירם הכולל נמוך מ-
0. בסוף הרטימה יודפס הסכום שאושר והסכום שהנערה רצתה
לקבל לשם קניות, אם הוא גבוה מהסכום שהקציב לה אביה.
כתוב תכנית שמוצאת את השלם הגדול ביותר שהריבוע שלו קטן
מהערך 1%42,555.
נתונים 4 ו-ם. כתוב תכנית המוצאת את הערך א הגדול ביותר אשר
יקיים את התנאי: 8>א**2. למשל, אם נתונים 2=3, 8=10 :נקבל
2-א, כי 3**2%10. אם נקבע 3-א אז 3**3>%10 ולכן התשובה היא
2-א.
נתונים שני* שדות 4 ו-8 המוגדרים "(9)3 16ק" כל אחד. בכל שדה
יש מספר (למשל, שדה 4 מכיל 53 ושדה 8 מכיל 102).
בשדה שלישי, פא1, המוגדר "99 0" יש מספר נוסף (למשל - 50).
כתוב תכנית אשר תבצע הכפלה של שדה 4 בשדה 8 מספר הפעמים לפי
הערך של השדה עאז. שדה 8 יקודם ב-1 לאחר כל הכפלה.
הגדר את כל שדות העזר שנחוצים ב-0-5108405אדאתסט.
הערה: שים לב להדפיס גם את השורה האחרונה.
53 * 102 = 5---1 | דוגמה:
53 * 103 = %--4
.
ר--! - 151 * 53
כתוב תכנית שקוראת קבוצות של 3 מספרים שמייצגים את אורכי
הצלעות של משולש שרוצים להרכיב מהם. הפלט לכל קבוצה הוא
אחת מן ההודעות הבאות:
- הצלעות מהוות משולש שווה צלעות.
- הצלעות מהוות משולש שווה שוקיים.
- הצלעות מהוות משולש שווה צלעות.
- | הצלעות לא יכולות להרכיב משולש (ז"א סכום האורכים של
זוג כלשהו קטן מאורך הצלע השלישית).
קיימים נתונים מקודדים של צבע השיער וצבע העיניים של
אוכלוסיה כלשה* שגודלה לא ידוע מראש. נתונ* הז'הו* הם:
צבע שיער: שחור - 1 צבע עיניים: כחול | - 1
חום - 2 חום - 2
ג'ינג'י - 3 ירוק - 3
בלונדיני - 84
- 63 -
.2
.3
.8%
.5
כתוב תכנית שתציג בטבלה את גודל האוכלוסיה ואת אחוז
האנשים שיש להם כל צירוף של צבע: שיער ועיניים, למשל
אחוז האנטים בעלי שיער חוס ועיניים ירוקות. בתחילה כתוב
תרשים זרימה.
עורכים סקר בכדי לבדוק את דעת הקהל בשנ:י נושאים:
יא. אם להחזיר את *הודה ושומרון.
ב. אם להעלות את המשכורות של חברי הכנסת.
כל משתתף חייב לבחור אחת מן התשובות האפשריות הבאות:
1 - מסכים באופן מלא
2 - מסכים
3 - לא בטוח
% - לא מסכים
5
- לא מסכים בכלל
כל משתתף צריך לציין את ההזדהות המפלגתית שלו:
- מזדהה עם הליכוד
א - מזדהה עם המערך
5 - מזדהה עם מפלגה אחרת.
כתוב תכנית אשר תבצע את הפעולות הבאות:
א. תספור ותדפיס את התשובות השונות עבור כל אחת משת:
השאלות.
ב. תספור ותדפיס את מספר התשובות לפי ההזדהות המפלגתית.
ג. תשווה את התשובות לכל שאלה בין התומכים בליכוד לבין
התומכים במערך ותדפיס את תוצאות ההשוואה.
כתוב תכנית שמדפיסה את גילו של אדם בשנים, אם נתון תאריך
הלידה והתאריך הנוכח'.
נתונים שלושה מספרים 84, 8, 0. כתוב תכנית בכדי להדפיס
אותם בסדר עולה.
העלות למשלוח חבילות דואר באר מבוססת על 3 קריטריונים:
א. מקום היעד -
8 - מקומ:
כ - עיר גדולה (ירושלים, ת"א, חיפה, באר-שבע).
8 - עיר קטנה, מושב, קיבוצ וכו'.
ב. משקל - א - קל (פחות מק"ג)
א - ממוצע (בין ק"ג ל-10 ק"ג).
0 - כבד (למעלה מ-10 ק"ג).
ג. שירות - 8 - רגיל
₪ - אקספרס
התעריף למשלוח חבילה נמדד לפי נקודות, להן נקבע מדי פעם
ערך שקלי כדי לחשב את התשלום בפועל. הטבלה שלהלן מאפשרת
לחשב את המחיר למשלוח חבילה: בשלש השורות העליונות של
הטבלה מופיעות כל התמורות השונות של היעד, משקל וטוג
השירות. בחלק התחתון נרשם התעריף בנקודות.
= ₪ =
שירות:
6 נקודות
0 נקודות
+ 2 לק"ג מעל
כתוב תכנית שמקבלת כקלט את מקום היעד (א, ₪, א), משקל בק"ג, סוג
השירות (3, 8) והערך השקל* של "נקודה". התכנית מפיקה כפלט את
המחיר למשלוח החבילה.
6. כתוב תכנית שמקבלת כקלט סידרה של זוגות מספרים. המספר
הראשון הוא הציון של תלמיד בהיסטוריה והמספר השנ* הוא
הצ*יון של אותו תלמיד במתמטיקה. הפלט יכלול שני* ערכים:
מספר התלמידים שקיבלו ציון גבוה יותר בהיסטוריה מאשר
במתמטיקה, ומספר התלמידים שקיבלו ציון גבוה יותר
במתמטיקה מאשר בהיסטור:ה.
7. כתוב תכנית שקוראת סידרה של ציונים ומדפיסה כפלט: ממוצע
הציונים,. מספר הכשלונות (ציון פחות מ- 60), מספר הציונים
טשנכנסו לממוצע ואת הציון הנמוך ביותר בכיתה.
8. הקלט עבור תכנית שירות לבורטה מכיל 3 נתונים:
(א) שם המניה (ב) מחיר היום (ג) מחיר אתמול
למשל: פיתוח לייזר 139 1317
תעשיית מחשבים 21 27
כתוב תכנית המדפיסה רשימת המניות שעלו או ירדו ביותר מ-
%.
- 6 -
- 66 -
פרק 5
קבצים
1 בניית קנצים
קובצ מוגדר כסידרת רשומות המוחזקות במצע חיצונ' (₪6618) כגון
סרט אוו דיסק. עבור כל קובף מגדירים בתכנ*ת שטח שמטרתו להחזיק
רטשומה אחת. שטח זה מוגדר בתכנית על-:די שימוש בכניסה המיוחדת
לכך, שהיא (כת) צתצאת א0סזזע1א0פמם מתזע. מעבירים רשומה מקובצ
קלט לשטח המחזיק את רשומות הקלט בעזרת הפקודה פגטת. מעבירים
רשומות מן השטח המיועד להחזקת רשומה של קוב פלט לתוך קובף הפלט
בעזרת פקודת ₪צ1תש. מעבירים רשומות משטח אחד בזיכרון (למשל, שטח
קלט של קובצ קלט) לשטח שני בזיכרון (למשל, שטח פלט של קובף פלט)
בעזרת פקודת ₪/0א8. המצב מתואר בתרשים להלן:
לפניך תכנית שמקבלת קלט מן המסך וכותבת אותו לקוב.
.ת1910ט210 ת611168610ת166 (1)
. 8-4משט .16-מהעפסעס (2)
.ת566010 16-060006קתד (12)
. 1 6ת0ס116-0ץק (13)
. "28%. 2061" 10 םת4851₪ םמ800662-20811 5616606 (18)
.ת0ס151טנכת 2868 | (15)
.ת560010 116ק | (16)
- 67 -
11₪4הסק-662טס% פץ
08 26 6002659 18061
. 0811₪ק-86מטת369 15 6עסססת בּסהכ
.ם11סק-6המטתפפ3 01
.(5)א 16ק ש08נא | 02
.(15)א 16ק 4ש6ת5 | 02
.9 סשסץצק 0% | 02
. (3)א 16ק 1 02
. 5999799 16ק עטנתם | 02
.4 סנק 1801₪+צ | 02
.ת560%10 50028₪6-שת1אעסטא
.1 01
. (15)א 16ק סת5פ-א 02(
-(9)5 16ק עה8ספנא-4 | 02
.9 סשסצק עטנתפ-% | 02
.9 סשסץצק %- 02
4 6צס 1863₪ע-% | 02
8 78106 (50)א% 16ק 30888-180608161% 01
. "תכנית הקולטת פועל:ם"
. מנוצ1פ-110688% 01
2160 | 8ע6אעסא-+01-ע6סמטא | 02
8 78106 (50)א 6נק ע116צק | 02
. "מספר הפועלים שנתוניהם נקלטו:"
. 5150068 01
."" 6מ081 א 16ק 8פ-₪00 | 02
. "א" 08106 שסם 88
.א 6נ1ק 8פ-06006-28%8 | 02
."א" 08106 46 88
.םנתהסת15א 01
.0 78106 999 16ק 01₪ט19082-0א | 02
.ם1910ט1כ 6ת2ו0666סעק
. 1תפפת
.ת1%181128%10ת1 שעס+עסק
11ס6ת0 ש1תטס6א-811%68%6 מעס)עסק
. מטצ1ס מעס+?עסק
.תות 5600
.ת1%181128%10תד
. 11 0ק-006%2א 06ק00% ת6ק0
.₪נ[הסק-6העטתפ6ת 16181126תד
.10088-10 צַ15018ת
. מנוצ51
. ם0811ת-3006%52 01086
.2008 02-00-ת6פמטא 10 61₪ט15282-0 סטסא
. מנוצ51-10088% 15018
= 68 -
הסבר התכנית
.שנתטססא-11%58%6א | (61)
. ם6ת9-%11%8% םע0ס+]עסק (62)
פס 6סא 19 (63)
ם18082-0%01א 10 1 200 (68)
15082א-11%68%6א מעס?עסק (65)
80%ת5-11%8%א מע0ס%?עסק (66)
עט1ת5-%11%8% שע0ס?עסק (67)
61801₪צ-1168%5א 02₪ס+?ע0ק (68)
מ0811ת-+8%מטת69ת 106עש (69)
.6₪ת5-11%58%א | (70)
. "שם:" 15018 (71)
םסתפ-א 400606 (12)
.אפ-₪00 10 "א" 6טסא 6תע 3% (73)
תסמ 0%ם 6סא 19 (73)
תסמ " " = ססא מסם5-א 1% (5ד)
6₪ת5 10 מסת5-א 6טסא (76)
86 (77)
.6₪ת1168%6-5א 70 600 (18)
.15082/-11%8%א (79)
. "מספר:" 218018 (80)
.ת1508א-> 400006 (81)
םסתד 0 = 6סא ע1508א-א 19 (82)
15082א 10 15082א-% סטסא (83)
6 (88)
.ת8ק15א-%11%8% 70 60 (85)
"|" (86)
. "שעות:" 18018 (87)
.5806-א 400606 (88)
.580% 10 2-5280%6 שטסא (89)
,תטנם81158%6-5 | (90)
. "שיעור:" 215018 (91)
.תטנת5-א 46080% (92)
מס 0 = ססא עט1םפ-א 19 (93)
עטנם5 10 עט1תפ-א 6טסא (98)
6 (95)
,תטנת5-11%68%א% 10 00 (96)
.₪נ1801צ-11080א | (97)
"מספר ילדים:" צ15018כע (98)
.61801₪+-א 460006 (99)
,ם61801+ 10 61801₪צ-א 6טסא (100)
שורה 12: כאשר עובדים עם קבצים, יש להוסיף בחטיבת הסביבה פרק
- 69 -
חדש, בו מתארים כל קוב שמשתתף בתכנית. פרק זה נקרא -לטקא1
אס צטפצטס.
שורה 13: פיסקה זו מיועדת לספק מידע לגבי השמות השונים בהם
מתייחסים לכל קובף. אחרי המלה 581002 בשורה 14 רושמים את השם
הפנימי עבור הקובף היחיד שנמצא בתכנית זו, ם11הסק-652ט0א. כאשר
נצטרך להתייחס לקובצ זה במהלך התכנית, נשתמש בשם זה, שהינו
פנימי לתכנית שלנו. אחרי המלה א849510 כותבים את השם החיצוני של
הקובצ, כלומר את השס שלפיו נתייחס אליו כאשר נשתמש בו מחו%
לתכניתנו, בעזרת פקודות המתאימות למערכת ההפעלה של אותו מחשב.
שם פ(ימי חייב להיות שם חוק: בשפת קובול. שם החיצוני, מאידך, לא
חייב לקיים את הדרישות של שם בשפת קובול, אלא בשפה של מערכת
ההפעלה של המחשב שבו עובדים. פיסקה זו צריכה להיות בחטיבת
הסביבה מכיון שהשם החיצוני משתנה ממערכת אחת לחברתה.
שורה 16: גם בחטיבת הנתונים יש להוסיף פרק חדש, א5₪0710 ממדק.
מטרתו להוסיף מידע לגבי הקובף ובמיוחד לגבי הרשומות המוכלות בו.
לפרק זה שני סוגי כניסות:
(א) 262108 ת%10ק1ע680כ2 116ק
(ב) 168ע%תע ם0:%ק1ע680כ2 366026
שורות 17-19: בשורות אלו נמצא ה-עְעסםמע מ10סק1ע2650 116ק.
האותיות כע חייבות להופיע בשטח 4, כאשר בשטח 8 חייבים לכתוב את
השם הפנימי של הקוב>, כדי שהתכנית תדע באיזה קוב מדובר. בנוסף,
יש מבחר 0840585 שאפשר לכתוב בשטח ם.
כאשר מאחסנים קובף, יש אפשרות לכתוב תווית זיהוי בתחילתו
ובסופו. לפעמים תוויות כאלו בנויות על-ידי המערכת באופן אוטומט:
ולפעמים ההחלטה אם לבנות אותם נתונה בידי המתכנת. חשוב מאוד
להודיע למחשב אם לקוב> יש תוויות. אם יש תוויות, אין לעבד את
הרשומה הראשונה בקובף>, שהרי היא מכילה נתונים לגבי הקובצ כולו
שאינם מיועדים לעיבוד. אם אין תוויות, יש להתחיל את העיבוד מן
הרשומה הראשונה. ה-058ג.61:
"פתהפאה51 מתה פעתהססמת חם.ז"
מורה למחשב שהתוויות הן תקניות עבור נתונים המוחזקים בדיסק. על
סמך ידיעה זו, המחשב ידע איך לטפל ברשומה הראשונה. בסרט מגנטי
(כמו בפלט המיועד למדפסת) יש אפשרות לעבוד בלי תוויות ואז
כותבים:
"סמעיד1א0 מתג פפתססמת סםה.ז"
כלומר התוויות (או, ליתר דיוק, רשומות המשמשות תווית) הושמטו.
יש מהדרים המחייבים מפס00 זה. ה-01058 השני שכללנו במקרה זה
הוא:
"811₪סק->העטתפסת 158 פתססמת הדהק"
- 70 -
₪ זה הוא אופציונלי לחלוטין. מטרתו לציין את השם (או שמות)
שנותנים לרשומות הקובף.
שורה 20: פירוט השדות המרכיבים את רשומות הקובף. תיאור השדות
אינו שונה מזה שראינו כבר עבור שדות המוגדרים בפרק
₪ --ודאתס₪, אולם א* אפשר לתת ערכים התחלתיים לשדות אלה
בעזרת הפרזה 15 0₪/ה/.
שורה 5%: פקודת א058₪ (שפירושה "פתח") נחוצה עבור כל קובאצ המשתתף
בתכנית. משמעותה שונה ביחס לקובף קלט מאשר ביחס לקובצ פלט, לכן
המלה עטפא1 או 001207 חייבת להיות חלק מן הפקודה.
עבור קובצ קלט משמעותה היא כדלהלן :
א. מצא את הקוב המבוקש בדיסק או בסרט על-ידי בדיקת תוויות
הקבצים השונים הנמצאים באותו דיסק או סרט.
ב. הכן די שטח בזיכרון כדי להחזיק רשומה פיסית אחת מן הקוב>,
דהיינו אוסף של אחת או יותר רשומות המוחזקות במצע ההחסנה
כיחידה אחת.
ג. צור קשר עם השגרות המיועדות לפעולות קלט. שגרות אלו מופעלות
כל פעם שקוראים רשומה בעזרת פקודת ספגמת.
עבור קובצ פלט משמעותה היא כדלהלן:
א. כתוב תווית חדשה עבור הקוב שעומדים לכתוב עכשיו.
ב. הכן די שטח בזיכרון כדי להחזיק רשומה פיסית אחת מן הקובא.
ג. צור קשר עם השגרות המיועדות לפעולות פלט. שגרות אלו מופעלות
כל פעם שכותבים רשומה בעזרת פקודת מך1תט.
להלן מבנה פקודה זו:
תשפאך
6 (סטסא-8ת) ה אפס
המשתמש חייב לבחור לפחות אחת מן המלים עטשקא1 או 001201 (אבל הוא
יכול לבחור את שתיהן אם יש לו קבצים משני הסוגים).
דוגמאות:
2 ,200-1 01160826 מ006 (1)
4 ,6160-1א ס6נוקת1
,|,200-1 0506 ת006 (2)
2 ,88166-1 6טסת1 מ006
שורה 55: פקודה זו מכניסה אפסים לכל השדות הנומריים ברשומה
ורווחים לכל השדות האלפא-ביתיים והאלפא-נומריים. זוהי פקודה
חדשה ב-85 .0080.
שורה 58: פקודת 010058 (שמשמעותה סגור) מבצעת פעולה הפוכה מזו
המבוצעת על-ידי פקודת אמק0. תפקידיה:
א. כותבת תוויות-סוף-קובף בקובצ פלט ובודקת תויות-סוף-קוב
הקלט.
- 71 -
ב. משחררת שטחים בזיכרון שנשמרו להעברת רשומות בין התכנית
והקובא.
ג. מנתקת את הקשר עם שגרות גישה שנוצר כתוצאה מפקודת אמטקס.
היות וסגירה מבוצעת לקובף שכבך נפתח, המשב כבר "יודע" אם הוא
מסוג קלט או פלט ואיןן צורך לציין זאת שוב. אם מדובר בקובף
המאוחסן בסרט, פעולת 012058 גורמת לגלגול הסרט.
מבנה פקודת 010058 מופיע להלן. שים לב שאפשר לסגור בפקודה אחת
מספר קבצים.
... 602ט0א-6₪ת5 01098
21 קריאה מקבצים
קוב מיועד להתסנת נתונים רבים לתקופה ארוכה. אבל מידע מאוחסן
אין בו ערך אם אין דרך להפוך אותו ממצבו הבלתי קריא לבני אדם
(כאשר הוא נמצא על סרט או דיסק), למצב קריא (כאשר הוא מופיע על-
גבי מסך או נייר).
בתכנית שלהלן סורקים את קוב הפועלים שנבנה בדוגמה הקודמת
ומדפיסים את מספרו ושמו של כל פועל בקובא.
.םס181ט1ק ב%19108%610ת146 (1)
.8-5מקטכ .16-מפעשסעק (2)
.ת560%10 00500%6->טקת1 (12)
.1 116-00עק (13)
. "08%. 2061" 10 ם4881₪ 00602-70811₪א 561606 (18)
."006.86" 710 םת4881₪ ת200 561606 (15)
.ם10פנט1ע 2808 | (16)
תססע סש (28)
)29( 18061 3600268 426 6
. 86-2001מנות305 15 66026 2808 (30)
. 2001-%אמטתפפת 01 (31)
. (20)א 16ק 11160ע 02 (32)
. (5)א 216 2061-15082 02 (33)
. (10)א 16ק 11169ע 02 (34)
. (15)א 216 6₪ה5-ת206 82 (35)
.ת860%10 0ש8ע560-שַת1עסח | (36)
ב"ע" 15 מסגאט א 216 שפ-₪09 77 (37)
."א" 15 מטהט שסם 88 (38)
.ת101810 6עט60ססעס (39)
.ה" (50)
.ת1%81128010צת1 ₪ע0ס]ע6ק (41)
0 11סתט 1800858 מע0ס+עסק (42)
.₪וצ51 ₪ע0ס+ע6ק (43)
.מטות 5600 (88)
- 72 -
.ם0181128%10ת1 | (85)
11₪הסק-2006%2 6טסת1 ב000 (846)
.0 סטסטט0 (47)
8[1₪סק-006%2א 686 (18)
.שפ-+0ע 10 "א" סטסא 8תם 2% (849)
. 86-2061נות69ת 170 58668 6סטסא (50)
)51( 118008598 .
.15082א-ת200 10 ש1508א פטסא (52)
.6₪ת5-ת206 0 מסםת5 6טס (53)
כ שת1סת8ט40 ע42066 ב6-200המטת5סת 166קש (58)
6%2-0811₪ט0א 36806 (55)
.שפ-?0ם 70 "א" שטסא 6מע 46 (56)
.צנ | (57)
.ב ,ם11הסק-006%2א 01036 (58)
הסבר:
שורה 5: פותחים שני קבצים. הראשון הוא קובף הפועלים, שבו
מאוחסנים נתוני הפועלים. השני הוא קובף המכיל את הפלט המיועד
להדפסה. בתום התכנית במחשב 08% נוכל לכתוב 06.28% 6ת1עע ולקבל
את התוצאות בדפוס. במחשב: 12% השיטה קצת שונה, כמוסבר בנספה.
שורה 48: הפקודה המיועדת לקריאת קבצים היא פקודת כגמת, שקוראת
רשומה אחת ושמה אותה במאגר המתואר בשורות 21-27. אם מבצעים
פקודה זו אחרי שמטפלים ברשומה האחרונה בקובף,עוברים לביצוע
הפקודה בשורה 9. שיטה זו מאפשרת לשנות את המשךך הביצוע כתוצאה
מסיום של קריאת הקובא.
שורה 50: לפני התחלת הביצוע, עלינו למלא את שדות ה-ע116נע
שברשומת הדוח ברווחים. אם לא נעשה זאת, תוכנם הקודם של אותם
תאים בזיכרון *ופיע ברשומת הפלט, דבר שבהחלט אינו מקובל. שים לב
שאי אפשר להוטיף 528065 18 7816 בשורות 32 ו-35, מכיון ש-
6 זה אינו תקף בכניסת תיאור קוב (כע), אלא רק בפרק
6 אַתנאעסש. עם זאת, מספיק להעביר את הרווחים פעם אחת לכל
הרשומה. בשורות 52, 53 (כתוב מעל לאותם רווחים בשדות שנקראים
מ8ספנא-ת200 ו-מ6ת5-ת200, אבל לא ניגע ברווחים המכסים את שדות
ה-11162ע. רווחים אלה נשארים במקומם עד לסיום התכנית.
שורות 52, 53: כאשר קוראים רשומה מקוב>, אפשר לנצל את הנתונים
הכלולים בה בצורה סלקטיבית. למשל, פה הדפסנו רק את מספרו ושמו
של כל פועל והתעלמנו משאר הנתונים שברשומה.
שורה 54: כתיבת תוכן המאגר ברשומה (שורה) אחת של הדוה, כתיבה
אינה משפיעה על תוכן המאגר המוקצה לקובא ג206, ולכן הרווחים
שכתבנו נשארים במקומם בזמן ביצוע פקודת 02166 הבאה.
שורה 55: קריאת הרשומה הבאה מקובף הפועלים. בסופו של דבר, נגיע
לסוף הקובף: שורה 56 תתבצע והדבר יגרום להפסקת הלולאה של שורות
6, לחזרה לשורה 43 ולסיומה של התכנית.
- 73 -
3 בניית קובץ בעזרת מסך
נניח שרוצים להכין מסך במבנה של טופס קלט להזנת נתונים על-:די
קלדנים שאינם עוסקים בתכנות. מסךך כזה יצטרך להיות קל להבנה.
למשל, עבור התכנית 8-משטע, נוכל להכין טופס מסך כמו זה שמופיע
להלן :
תמונת מסך לקליטת נתונים
שם: מספר: שעות: שיעור: מספר ילדים: | .
שם: מספר: שעות: שיעור: מספר ילדים! ...
שם: מספר: שעות: שיעור: מספר ילדים: | >
שם: מספר: שעות: שיעור: מספר ילדים:
בניית מסךך כזה ושילובו בתכנית שונה במהדר קובול במחשב אג?
ובמהדר קובול במחשב 18%. בנספחים נציג את השיטה המתאימה למחשב
אגץ (נספח א') ואת השיטה המתאימה ל- 6ע-18% (נספה ב'). במחשבי
אפ מסוג 370 המסכים מטופלים על-ידי תוכנת 0105 ובמחשבי 45/4800
- ע"*י תוכנת המערכת.
1 תרגילים
שאלות
1. אילו מבין הפקודות הבאות הינן חוקיות?
(א) 070
(ב) .%00602-0616% ,6160א-00602 01056
(ג) .%616%-602ט0א 2 טסנוסת1 ת006
(ד) 6% טנופת1 06
.6% סטססט0
(ה) 7% טנוקעט0 010586
1% סטסתך
(ו) ,0160א006%2-8( 010886
2. הא ניתן להשתמש בפרזה 08108 כדי לתת ערך התחלתי לשדות
המוגדרים ב-א5₪0110 ₪ 0-510א1את₪0 וב-א580110 מזדק?
= ₪ -
3. כמה שורות קלט יקראו כתוצאה מפקודות אלו?
אילו מהן תהיינה זמינות לתכנית בהמשך העיבוד?
.21 טשוקם1 ת6ק 0 .66ת%8%66/
.8 20 18ע%2 שעס+עספק
.פע
.0 10 00 6ם2 45 46166 686
.אסא
תכגניות
1. א. טען את הנתונים שמופיעים להלן לתוך קובצ:
שם מקום עבודה שנות ותק שכר חודשי בשקלים
א ת"א
ב. גרשו(נ: ירושלים 2000
ש. הלו: חיפה 2000
א. כהן ת"א 100
ד. אהרו(: ת"א 10
ב. כתוב תכנית שמדפיסה את שמם של כל המועסקים שהוותק שלהם
הינו למעלה מ-5 שנים ושמקום עבודתם בת"א.
2. א. בנה קוב סטודנטים שמכיל את הרשומות שבטבלה:
מספר זהן: שם מלא מיך מספר שעות ממוצע ציונים
11000 אאתמטד] הצגחס א 100 47
220000 1 1.00 2 90 92.9
220000 ץז 201% ידדצ 2 ה 8
0 לושעמוס אדצגחס 2 100 06
00 צטם. זע מדטת א 13 6
000 אלד הטזזס א 120 9. 61
00 א מדסת א 8 1.2
00 אטמסאדת זמטת 2 2 9 77
0000 מפטומום זהטס 2 8% 1.3
ב. כתוב תכנית שתסרוק את הקוב שבנית. הדפס את שמות
הסטודנטים שהממוצע שלהם למטה מ-75, ואת שמות הסטודנטיות
שהממוצע שלהן מעל ל-15.
3. הרשומות.בקובצ העובדים במפעל מכילות את הנתונים הבאים:
= 75 =
עליך לכתוב את התכניות והפרוצדורות הבאות:
א. תכנית לבניית קובא.
ב. פרוצדורה לשליפת שמות כל העובדים הזכרים.
ג. פרוצדורה לשליפת שמות כל העובדים שמשכורתם למעלה מ-1500
שקל.
ד. פרוצדורה לשליפת שמות כל הפועלים שמשכורתם גבוהה
מהמשכורת הממוצעת במפעל.
ה. פרוצדורה לשליפת שמות כל העובדים שהם:
- מתכנתים בעלי תואר ראשון, או
- עובדים שמספר הזיהוי שלהם גדול מ-2300 והם רווקים.
נתון קוב במבנה הבא:
2-: מספר מחלקה
0 סכום בשקלים
6: תארלך בצורה צצאאפכ
17: 1-הכנסה
2-הוצאה
אחר-להתעלם
יש להדפיס את היתרות של המחלקות 01 עד 05 בתאריך 31.12.89.
הנח שהקוב משקף את כל הפעילות במחלקות מאז התחלת פעילותן.
- 76 -
פרק 6
פקודות העברה וחישוב
1 מבוא
להעברת נתונים ממקום אחד למקום אחר משתמשים בפקודת ₪0/8, שצורתה
הכללית היא כדלהלן :
[שדה-היעד) 10 [שדה-מקור+ מטסא
[ליטרל+
שדה המקור (1616ע-66ע50₪2) נקרא גם השדה השולה (71614-את061םת50)
ושדה היעד (1616"-מ8610ת208%01) נקרא גם השדה המקבל (שת1ט6661
46).: תוכן השדה השולח נשאר ללא שינוי, אך תוכן השדה המקבל
מוחלף על-ידי תוכן השדה השולח.
ישנם שני סוגי העברות:
א. העברה יסודית (8006 צע68ת210₪0). גם השדה השולח וגם השדה
המקבל הם פריטים יסודיים.
ב. העברה קבוצתית (6טסא פט0ע0). לפחות אחד מן השדות הוא פריט
קבוצתי.
2 העברות יסודיות
ישנם שנ* סוגי העברות יסודיות - העברות נומריות והעברות אלפא-
נומריות.
1. העברה נומרית
העברת שדה נומר* (שדה שתמונתו מכילה /,9,5) או ליטרל נומר:
לתוך שדה נומרי רגיל, או לתוך שדה נומרי עם עריכה.
דוגמה: עבור השדות 2 ו-5 המוגדרים להלן, נבצע פקודת מט0א.
4 10 9 8 16 9
]4]318| 96
- 77 -
חמצב אחרי הפקודה: 8 10 4 מטסא
|8] 13| 38 ₪[
הערות:
(א) מניחים שהשדה השולח והשדהּ המקבל "מיושרים" (66ם8118) על פף:
הנקודה העשרונית שלהם. במספר שלם הנקודה העשרונית נמצאת,
כביכול, בצד הימני של המספר.:
(ב) אם השדה המקבל גדול מהשדה השולח, ממלאים באפסים את המקומות
שנשארו ריקים אחרי ההעברה.
(ג) אם השדה המקבל קטן מהשדה השולח, :ייעשה קיצוא (או השמטה של
ספרות) משני הצדדים של הנקודה העשרונית האמיתית (.) או המדומה
(ץ).
דוגמאות:
א. הוספת אפסים: 9 ס6דק 8 9 10 4
]313|8| 1585
המצב אחרי הפקודה: 8 0י' 8 טטסא
|38 8
ב. יישור מסביב לנקודה העשרונית (*+ מצביע על מיקום הנקודה
העשרונית):
9 סד 8 9 60ץדק 4
321 2|9|6|1|5
* *
המצב אחר* הפקודה: 5 10 8 טטסא
4|3| 1 | 3||1
* *
ג. הוספת אפסים משנ* צידי הנקודה העשרונית:
9 סד מ 9 16 4
2|6|8|3 ]4]6]4]9]2]8|3[
*
*
המצב אחרי הפקודה: 8 10 ב טטסא
2|6|8|3 2 8 30|
* *
ד. קיצוא: 9 סדק 8 9 ס6ץד ב
832 | ]9)67|
*
*
המצב אחרי הפקודה: 8 10 4 פטסא
|8]3]2] [4]8]3)2|1]
* *
ספרות שיישמטו
ה. העברות לשדות נומריים עם עריכה:
9 סנס 8 9 60דק 4
|2 6 8| 5|3)8| .|1
*
המצב אחר* הפקודה: 8 10 8 משסא
2 6 8| 0|2|5| .|8
*
הערה: אם תמונת השדה 8 היתה: 299.99, היה מופיע רווח במקום
השמאל: ביותר של השדה 8 אחרי העברת תוכן שדה ג אליו ולא 0 כמו
שמופיע למעלה.
ו. קיצוצ משני הקצוות: | 999 10ק ם 9 סדק ב
|9|617] |1 32 8 4[
* *
המצב אחרי הפקודה: 5 0 8 מטסא
|8]3|2] [3]2|1 8 ₪[
* *
ספרות ש*ישמטו
- 79 -
2. העברות אלפא-נומריות
העברת השדה השולח שהוא: (1) אלפא-נומרי (4,א%,9)
(2) ליטרל אלפא-נומר*
(3) אלפא-בית:
(8) נומרי המכיל מספר שלם
לתוך שדה מקבל שהוא: (1) אלפא-נומר: -
(2) אלפא-נומרי עם עריכה (למשל, שדה
המכיל את תו העריכה 8, המוחלף
על-ידי רווח אחר* ההעברה).
נתונים המועברים לשדה המקבל מיושרים מצד שמאל וזה מחייב ש:
(1) הקיצוצ הוא מצד *מין
(2) המילוי גם הוא מצד *מין. תו המילו* בהעברה אלפא-נומרית
הוא תמיד רווח.
דוגמה: . (10)א 10ק 1 02
. (3)א 10 2 02
לאחר ביצוע הפקודה: . 2 , 581 10 "א1גס" מטסא
יהיה תוכן השדות 58801 ו-2אמהפ, כדלקמן:
2מזזס 1מזוס
4 א[ | | | | [א :| ||
קיצוצ מצד *מין יישור מצד שמאל
אפשר לשנות את ברירת המחדל מיישור מצד שמאל ליישור מצד *מין על-
ידי הוספת הביטוי הבא לכניסת תיאור הנתונים של השדה המקבל
(שחייב להיות שדה אלפא-נומר*):
צחסזת פמזעז סט
צפט
אם כניסות תיאור הנתונים שהוזכרו קודם היו כדלהלן:
.1 (10)א 10 1מת 02
.1 (3)א 10 2 02
אזי אחר* ביצוע הפקודה ₪ השדות 5881 ו-51₪02 *יראו כך:
2מחס 1אמחפ
א 1[ | א ןס | | | |
קיצוצ מצד שמאל יישור מצד ימין
- 80 -
א. דוגמה: (4)א סנק 5 9 16 4
ב"
0
סס
ה |פ|0|פ
המצב אחרי הפקודה: 8 10 ב מטסא
38
=
5"
סס
ב. דוגמה: א 0
>
0"
₪3
ב6
%
0
כס
0"
|
צןטןצ|ץ ש|פן4ג
המצב אחר* הפקודה: 8 70 4 מטסא
:
ס|פ|4
שים לב שהאות 0 נעלמת אחרי ההעברה, ואינה מופיעה בשדה ם.
3. העברות אלפא-ביתיות:
העברת שדה שולח שהוא: (1) אלפא-ביתי (4)
(2) ליטרל אלפא-בית:
(3) אלפא-נומר* (אינו מומלצ אלא אם *דוע
שהשדה מכיל רק אותיות).
לתוך שדה מקבל שהוא: (1) אלפא-בית:
(2) אלפא-ביתי עם עריכה (למשל, שדה
המכיל את תו העריכה 8).
היישור והקיצוצ בהעברות אלו זהות ליישור וקיצו+ בהעברות אלפא-
נומריות. בצורה כללית, העברה זו מקבילה להעברה אלפא-נומרית, אלא
ששדות השולת והמקבל מוגבלים יותר. בדרך כלל עדיף להגדיר שדות
כאלפא-נומר*ים ואז ההעברות תהיינה אלפא-נומריות.
3 העברות קְבוצתיות
בהעברה קבוצתית השדה השולח או השדה המקבל, או שניהם, מוגדרים
כפריטים קבוצתיים. העברה קבוצתית דומה להעברה אלפא-נומרית, עם
השינויים דלהלן:
א. היישור בשדה המקבל הוא תמיד בצד שמאל.
ב. ההעברה מתעלמת מתווי עריכה הנמצאים בשדה המקבל.
ג. לא נעשית בדיקה בזמן ההידור וגם לא בזמן הביצוע כדי לוודא
שסוג הנתונים שהגיע לכל שדה הוא הסוג המתאים לאותו שדה (ז"א
- 81 -
הסוג המתאים להגדרת השדה, למשל נומרי, אם התמונה היא 9909).
דוגמה: נתייחס לרשומות המוגדרות להלן:
. 4-1אטפמת - 01
02 4 10 9)8( .
. (3)א 10ק 8 02
.9 סדק 0 03
. 2-באטהפטת 02
.אפ 10ק ע 02
02 5 10 9)5( .
.4. (9)2 16ק 03
03 0 10 4)2( .
תוכן הרשומות 1-האממפטמת ו-2-באשחפמת מופיע להלן.
1
|5ל 2 || 9( 8
0 8 4
2-אסטת
|פ|6]4[1]. [5|2]3|1] 15 3 | |
65 בו םּ פ
תוכן 84-2פטת אחרי ביצוע הפקודה:
. 2-האפמת 10 1-האשחפטת מטסא
לה*ה?
2
| | | | | |6|2)7|5 | 99 2|6 3
0 קַּ מ פ
הערות:
א. שלשת התווים של השדה כ מקבלים ערכים, אף-על-פ* שתמונת השדה
מכילה שני תוו* עריכה המורים על הצבת רווחים באותם מקומות. כפ:
שהוזכר כבר הסיבה לכך ה*א, שבהעברה קבוצתית לא מתייחסים לתון:
עריכה.
ב. השדה ₪ מקבל נתונים לא-נומריים למרות שתמונת השדה אינה מתירה
נתונים כאלה. הסיבה לכך היא שבהעברה קבוצתית מתעלמים גם מסוגו
של כל תת-שדה בתוך השדה המקבל.
ג. השדה % מתמלא על-ידי רווחים ולא על-ידי אפסים, מכיון שהעברה
קבוצתית דומה להעברה אלפא-נומרית ביחס ל*יישור ומילו'.
- 82 -
14 העברת קבועים סמליים
א. בהעברת קבוע סמל* לשדה מקבל, השדה המקבל מתמלא במלואו באותו
קבוע סמלי.
ב. אם מוסיפים את המלה ",411" אחר* המלה 80/8 כאשר השדה השולח
הוא ליטרל בן תו אחד או שדה המכיל רק תן אחד, השדה המקבל
יתמלא כולו באותו תו ואפילו אם אינו קבוע סמלי.
ג. כאשר מעבירים את הקבוע הסמלי 2880 לשדה נומרי, ההעברה היא
העברה נומרית. כאשר מעבירים את 2880 לשדה אלפא-נומר* ההעברה
היא אלפא-נומרית.
דוגמאות:
(1) אחר* ביצוע הפקודה: "582₪4-1 10 100-0810005 מעסא" כל בית
בטשדה 54288-1 יתמלא בערכו של הקבוע הסמלי 5מש]גט-10₪, שהוא
סידרה של סיביות המכילות 0. הקבוע הסמל* 108-0410585 מסמן סידרה
של סיביות דלוקות. סיבית דלוקה מסומנת על-ידי הערך 1.
(2) אחרי ביצוע הפקודה 54288-1 10 "-" מט0א, השדה 542₪1-1 *יראה
כך:
אבל אחר* ביצוע הפקודה 54288-1 10 "-" ,]ה מעסא, השדה 582₪8-1
יהיה:
5 הפקודה 60015
מבנה הפקודה 00078₪:
91 >= ...[[קמקא300] 60288) מדסקא0ס
[ [1₪עא00-פאע] 86ת₪15 הסתתם 5128 אס]
הסבר:
א. פפפאטסת: עיגול התוצאה למספר המקומות שבתמונת 60288. למשל,
אם התמונה של 60288 היא 99, היא תעוגל למספר השלם הקרוב ביותר,
אבל אם התמונה היא 9999, היא תעוגל ל-0.01 הקרוב ביותר.
ב. 8%קת₪18ש תסתתם 5120 אס: אם ערך המספר שחושב בפקודה גדול מאשר
הערך שהוקצה לשדה 8, אין מבצעים את החישוב המבוקש, אלא את
= 83 -
הפקודות (למעט פקודות 0410478 | ו-ק1) הכלולות ב-86כת₪15.
כמובן שמדובר באפשרות של קיצואצ סיפרה משמעותית ולא של סיפרה
עשרונית.
דוגמה: נתבונן בהגדרות ובפקודה ש להלן:
.1 מטנגט 99099 210 8 02
4 מעטטנגט 99099 10ק | 5 02
.4 מפט1;ט 99/99 210 0 02
. "17" צגק5דת תסתתם 5128 אס ם + 4 = 60 מעסק00
סכומם של 8 ו-8 הוא 114.69. אבל 6 אינו יכול להחזיק מספר *ותר
גדול מ-99.99. לולא כתבנו ת0תתם 5128 א0, 0 היה מקבל ערך של
9. היות וכללנו תסתתת 5128 א0, ערכו של 6 נשאר 5.1, וההודעה
"צטגע" מוצגת.
דוגמה:
התמונה של כ היא 99799 והפקודה היא:
. "טג" עה קפדתע הסתתם 5128 אס 37/96 * 85 = כ מעטשקאסס
ערך הביניים שחישבנו 45*37=1665 הוא מספר שתופס % מקומות, אך
הוא לא גורם גלישה משום שבמספר 45*37/96=17.31, (מצאים רק ש(:
מקומות משמאל לנקודה העשרונית. הכלל הוא ש: 08ת₪₪ 5128 א0 תופס
רק לגבי התוצאה הסופית ולא לגבי תוצאות בינ'יים.
הערה: האופציה פמפאטש0ת מופעלת לפני האופציה תס0תהם 5125 אס.
למשל, אם נתון "9099 10קע 6 77" והגענו לתוצאה 9.999, אזי קודם
מעגלים ערך זה ל-10.0 ואז בודקים אם יש גלישה ואכן יש, כ:
התוצאה היא בעלת 2 ספרות משמעותיות ו-6 הוגדר כך שהוא לא :כול
להחזיק יותר מ-1. לו היינו מפעילים קודם את הבדיקה לגלישה ורק
אחר כך מעגלים, היינו מוצאים רק סיפרה משמעותית אחת (9). ה**נו
ממשיכים בל שום רמז שיש בעיות ואז היינו מעגלים את המספר ל-
0, מעבירים אותו לשדה 6, ומאבדים את הספרה המובילה משמאל.
הערה: השדות המשתתפים ב-0718₪ק2א00, או כל פקודה חישובית אחרת,
חייבים להיות נומריים והקבועים החייבים להיות קבועים נומריים.
אבל התוצאה (00288) המופיעה בצד שמאל של פקודת 8₪ע0ק00% (או אחר:
המלה 06א61/1 בפקודות אחרות) יכולה להיות נומרית, או נומרית עם
עריכה.
|
6 הפקודה 1
יש שני מבנים עבור הפקודה 822. המבנה הראשון מופיע להלן:
... ([880א800] 50288 10 ... (18082ם) פסה
[[פכ4-פא₪] 86קת15ש תסחתם מ512 אס]
הסבר: חבר את המספרים שמופיעים לפני המלה 10 לערך הנוכחי של
8. הסכום יהווה את הערך החדש של 60288. ש1508ע יכול להיות
קבוע או שדה נומר* אבל 50288 חייבת להיות שדה נומרי, כד שנוכל
לאחסן בה את התוצאה.
דוגמה: ."1401" צ12ק15ת תסתתת 5128 אס ם ,כ ,0 70 20- ,ם ,ג ספג
לפנ
אחר<
הסבר: מניחים שהקבועים מוגדרים 599. השדה 0 לא השתנה מכיון
שהחיבור היה אמור להביא לתוצאה של 103-, תוצאה שהיא גדולה מד*
עבור השדה 6. במקום לבצע את החישוב, הביטוי 08תתם 5128 א0 הופעל
והפקודה צ215218 מתבצעת.
להלן המבנה השני של פקודת 4222:
... [[עפא300] 00288) 0א0101 ...(ע8ק15ם) ("הספנם) ספב
[[ספ4-פאם] ₪150086 הסתתת 5128 אס]
הסבר: חבר יחד את המספרים שמופיעים לפני המלה 60א01/1. הערך
הנוכחי של 60288 אינו נוטל חלק בחישובים וערכו המקורי *ימחק.
סכום החיבור *הווה את הערך החדש של 60288>. לפחות שני מספרים
חייבים להופיע לפני המלה 06א0101, מפנ*י שאחרת לא *היו די מספרים
לחבר. גם פה ש8ק₪159 יכול להיות קבוע או שדה נומר' ו-60288 חייב
להיות שדה, אך הוא יכול להיות גם שדה נומר* עם עריכה, מכיון
שהוא כָבר לא משתתף בחיבור כמו במבנה הראשון.
דוגמה: .0 פמפאטסת 5 6א61/1 12.856 ,ג פכג
הסבר: מניחים שהגדרת המשתנים היא 99799. השדה 8 מכיל את הסכום
המעוגל של 12.456 והשדה 4, כאשר השדה 6 מכיל אותו סכום, אבל בלי
עיגול.
דוגמה: שתי פקודות בלתי חוקיות>%
א. . ,צ ,א פפג - סיבה: יש צורך באחת ממלות העזר 10 או
06 .
ב. .צ שאנזע061 א 822 - סיבה: צריך לחבר לפחות שני מספרים
לפני המלה 6א01/1.
7 הפקודה 9081801
יש שני מבנים עבור הפקודה 50018201. המבנה הראשון מופיע להלן:
.. . [[ת0סא300] 60288] א0תת ... [ע8ק15ם] 500707
[[2-50070401א ] 86כקת₪15 הסתחם 5128 אס]
הסבר: חסר את המספרים שמופיעים לפני המלה א0תע מן הערך הנוכח:
של 60288. נקבל את הערך החדש של 0288ס6. ע1508ש יכול להיות
ליטרל או שדה נומר'*, אבל 50288 חייבת להיות שדה נומרי כדי שנוכל
לאחסן בה את התוצאה. :
דוגמה: 6 פמפאטסת 5 אסתת 10.62 ,80- ,4 עסהתדמטפ
. "דטג'" צגק15ס תסתתם 5125 אס
הסבר: מניחים שלמשתנים יש הגדרה של 599799.
8 4-80+10.1602)-8
את הערך הזה מעגלים ומאחסנים ב-8 כ-79.8%.
0-)4-80+10 .162(=155 .8
השדה 06 לא השתנה מכיון שהחיבור היה אמור להביא לתוצאה של
838, תוצאה שהיא גדולה מדי* עבור תוכן השדה 6. במקום לבצע את
החישוב, הביטוי מסתתם מ512 א0 הופעל ולאחריו הפקודה צ215214.
המבנה השני של פקודת 5001401 מופיע להלן:
[15082ם) 0%8ת2 ...[ע1508ם) 407תדספ
. . . [[ע85א300] 160288 0א01/1
[[2-50078407א2] 86קת15ם תסחתם מ512 אס]
- 86 -
הסבר: חסר את המספרים שמופיעים לפני המלה א0ע מן המספר שמופיע
אחריו. ערך %0288 הנוכחי אינו משתתף בחישובים וערכו המקור:
יימחק. הפרש החיסור יהווה את הערך החדש של 50288. גם פה 82ק19ם
יכול להיות ליטרל או שדה נומר' ו-%60288 חייבת להיות שדה רגיל או
שדה נומרי עם עריכה, כי הוא אינו משתתף בחיסור כמו במבנה
הראשון.
דוגמה: .םת ,0 ,5 0א6101 10 אסתע 4 1סגתדט0פ
לפני
אחר*
הסבר: מניחים שההגדרה של המשתנים 5 ו-0 היא 599, ושל המשתנה 2
9. התוצאה 65- נכנסה בצורה מושלמת לשדות 5 ו-0, אבל היא היתה
גדולה מדי עבור השדה 2 ולכן קוצצה ל-5-.
דוגמה לשתי פקודות בלתי חוקיות:
א. .35 אסחע צ ,א עסגתדמטפ
סיבה: במבנה הראשון, אחרי המלה 20% החייב להיות שדה נומר* (ולא
ליטרל נומרי כמו בדוגמה).
ב. .₪ 0א60101 כ ,0 אסתע 8 ,4 לסתדמטס
סיבה: אחרי המלה א0ַאע מותר לכתוב רק שדה או ליטרל אחד, ולא
יותר.
8 הפקודה ץשקדץעטון
יש שני מבנים עבור הפקודה צוןתזיא. המבנה הראשון מופיע להלן:
. . . [[059א300] 60288] צ2 (82ק15ם) צנקדץ,זטון
[ךץ,ץפדינזטא-פאע ] 86קת15ם הסתתם 5125 אס]
הסבר: הכפל את המספר שמופיע לפני המלה צעם בערך הנוכחי של 50288.
המכפלה תהווה את הערך החדש של 60288. | ע1508ם יכול להיות ליטרל
או שדה נומר*, אבל 50288 חייבת להיות שדה נומר* לשם אחסון
התוצאה. לדוגמה:
פפפאטסת צ א צם 10.89 צעקנץטא
. "נשגי" צג/1ק5דת תסתתם 5125 אס
= ₪ =
הסבר: נניח שהמשתנה א מוגדר 599 והמשתנה 8 מוגדר 5999. | צ יכיל
את תוצאת הכפל אחרי עיגול, אבל א לא ישתנה, משום שהתוצאה גדולה
מדי עבורו. הביטוי תס0ַתתע 5128 א0 יופעל ופקודת צ19018כ תבוצע.
המבנה השני של פקודת צזק1י/שא מופיע להלן:
(15080ם) צם (15082ם) צןקדי וטא
. . . [[₪0קא300] 60288) 6א61/1
[[50078401-פאם] 8%6קת15ם תסתתם 5128 אס]
הסבר: הכפל את המספר שמופיע לפני המלה צ2 במספר שמופיע אחריה.
הערך הנוכח: של 8 אינו משתתף בחישובים וערכו המקור: יימחק.
מכפלת שני המספרים שהוזכרו לפני המלה 06א61/1 תהווה את הערך החדש
של 60288. גם פה ש8ק15ם יכול להיות ליטרל או שדה נומר* ו-0288ס
חייבת להיות שדה. 60288 יכולה להיות גם שדה נומרי עם ערי*כה, כ:
השדה אינו משתתף בכפל כמו במבנה הראשון.
דוגמה: .5 ,8 6א 0101 10.2 צם ב צתקדי זט
הסבר: מניחים שהמשתנים 2 ו-8 מוגדרים 599 והמשתנה 0 מוגדר 5999.
התוצאה 102 נכנסה בצורה מושלמת לשדה 6, אבל היא היתה גדולה מד:
מכדי שתכנס בשלמותה ל-8 ולכן קוצצה ל-02.
דוגמה לשלוש פקודות בלתי חוקיות:
א. .18 צם 2 קד טא
סיבה: במבנה הראשון, אחרי המלה צת חייב להיות שדה נומר (ולא
ליטרל נומרי כמו בדוגמה).
ב. .0 צם 2 , 2 צתקדץטא
סיבה: לפני המלה 8 מותר לכתוב אך ורק שדה או ליטרל אחד.
ג. .0 0א0701 8 ,10.5 צם 2 צתקדדוטא
סיבה: אחרי המלה +8 מותר לכתוב אך ורק שדה או ליטרל אחד.
9 הפקודה 210198
יש חמישה מבנים עבור הפקודה מפטזכ. המבנה הראשון מופיע להלן:
.. . [[900א300] 00288) 10א1 ₪15082 מפדטדק
[[10108ס-פאם] 86קת₪15 הסתתם 5128 אס]
- 88 -
הסבר: חלק את 00288 במספר שמופיע לפני המלה 10א1. המנה תהווה את
הערך החדש של 00288. | ע₪1908 יכול להיות ליטרל או שדה נומרי,
אבל 60288 חייבת להיות שדה נומרי כדי שנוכל לאחסן בה את התוצאה.
מותר לכתוב רק מחלק אחד, אבל מספר המחולקים אינו מוגבל.
דוגמה: .6 ,ם 0עא1 8 מפבטד
הסבר: נניהח שהמשתנים , 8 ו-0 מוגדרים ע"י 5999. אזי ב-8 נקבל
את תוצאת החילוק של 550 ב-108 וב-0 נקבל את תוצאת החילוק של 870
ב-100.
המבנה השני של פקודת מפתטזכ:
1082ם 1810 ש₪1508% מסצטדע
. . . [[89פא00] 00288) 6א610/1
[[₪פ101-פא₪] 86כת₪15 הסתתם 5128 א0ס]
הסבר: חלק את המספר שמופיע אחרי המלה 10א1 במספר שמופיע לפניה.
הער הנוכחי של 00288 אינו משתתף בחישובים וערכו המקור* י:מחק.
המנה מאוחסנת ב-60288. מותר לאחסן את המנה בכמה משת(* 60288
שרוצים, כאשר כל אחד יכיל את התוצאה של אותה פעולת חילוק. גם
פה, מ₪15085 יכול להיות ליטרל או שדה (ומרי ו-%50288 חייבת להיות
שדה. אבל היא יכולה להיות גם שדה נומרי עם עריכה, כי השדה א:נו
משתתף בחילוק כמו במבנה הראשון.
דוגמה: .8 610180 100 10א1 8 מפצטצכ
הסבר: מניחים שהמשתנים 8 ו-3 מוגדרים ע"*י 5999. המחולק הוא
ליטרל, אבל הדבר לא מהווה בעיה, כי התוצאה תאוחסן בשדה 8 המופיע
אחרי המלה 6א6101.
המבנה השלישי של פקודת מפדטדכ:
.. . [[0מקא300] 60288) 0א010/1 ע8ק15ם עם ע8כ₪15 מפצטדת
[[8ס1ט210-פא₪] 6הקת15ם הסתתם 5128 אס]
5 |09 5
הסבר: מבנה זה מקביל למבנה השגי, אלא שבמקום לחלק את המספר
שהוזכר שני במספר שהוזכר ראשון, פועלים להיפך: מחלקים את המספר
שהוזכר ראשון במספר שהוזכר שני. אפשרות זו קיימת רק עם מלת העזר
6
המבנה הרביעי של פקודת טפזעטדנכ:
עה8פנם 1810 ע8%ק₪15 מפדטדת
6% תהמספאדהתת [₪0פא300] 288סט באזע01
[[מפנט1ס-פא ] 86פת15ם תסתתם 5128 א0]
הסבר: חלק את המספר שמופיע אחרי המלה 10א1 במספר שמופיע לפניה.
הערך הנוכח' של 60288 אינו משתתף בחישובים וערכו המקור* *ימחק.
השארית תאוחסן בשדה 6801%6ת8.
מבנה זה שונה מן המבנה השנ* בשת* נקודות:
א. אפשר להחזיק את המנה רק בשדה 600288 אחד.
ב. ביצוע הפקודה מספק את השארית בנוסף על המנה.
דוגמה: .א תתפא1 את 0 0א0101 8 צם 8 מסדטצת
9
1% |1.66 |6.00 |10.00 אחר:
הסבר: מניחים שהמשתנים 4, 8 ו-6 מוגדרים 599799. כאשר מחלקים
0 ב-6.00 התוצאה היא 1.666. היא מקוצצת ל- ,1.66 כ*י התמונה
של 6 היא 599099. השארית שווה ל: 10.00-6.00*1.66=0.0%. אילו
הוספנו את המלה כעמעאט0ת, השארית תשאר 0.04, אבל המנה תעוגל ל-
7.
המבנה החמישי של פקודת 8פ1עט1כ:
נש צ0 ע1508ם מסדטדע
%עהסת5 המפא1האמת [כספאט0ת] 50288 6א1ע01
[[8פ1ש1כ-2א2] 86קת15ם תסתתם 5128 אס]
מבנה זה מקביל למבנה הרביעי, אלא שבמקום לחלק את המספר שהוזכר
שני במספר שהוזכר ראשון, עושים להיפך, מחלקים את המספר שהוזכר
ראשון במספר שהוזכר שנית.
דוגמה לשלוש פקודות בלתי חוקיות:
א. .870 ,5 0עא1 8 מפצטדכ
סיבה: במבנה הראשון, אחרי המלה 10א1 יכול להיות רק שדה נומר:
אחד.
- 99 -
ב. .ם 0א6101 100 0עא1 84 מפצטדת
סיבה: במבנה השנ* אחרי המלה 10א1 יכול להיות רק שדה או ל:טרל
נומרי אחד. ,
ג. .ם צם ב מפדטז1כ
סיבה: במבנה השלישי, המאפשר שימוש במילת העזר צם, יש להשתמש גם
במלת העזר 0א01/1.
90 תכנית לדוגמה
להלן תרשים הירארכי (08207 צעהסתגתת1אה) המתאר תכנית להכנת
משכורות. תרשים זה מתאר את התהליכים העיקריים בתכנית. כל מלבן
בתרשים מקביל לפסקה בתכנית 00800, אשר תכתב. אין כאן כוונה לתאר
את ההיגיון של התכנית, כמו שעושים בתרשים זרימה. מטרת התרשים
היא להבליט את התהליכים והפרוצדורות שמרכיבים את התכנית, כד:
שנוכל לעמוד על מרכיביה וכדי שנוכל לאמוד את כמות הזמן הנדרשת
לאדם אחד או למספר אנשים לקדד אותה.
המלבנים שמסתעפים מכל מלבן-אב מ*יצגים את הפסקאות שנסתעף עליהן
מן הפסקה המ*וצגת על-ידי מלבן-האב. אפשר לפרט את תוכנוה של כל
מלבן על-ידי תרשים זרימה נפרד:
ת1%181128%10תך
-00ום18ת0
-82ת5806
ססטפם
-עגות15ת0
-82ת580
0ס66א
1180065-
1%
- 91 -
להלן תכנית המבוססת על התרשים שהוצג לעיל:
.ת1510ט1ת ת011+168%610ת160
. 808-6גוכ . 16-מהפשסעק
..........%
46 226₪ 60602685 1.8061
.ת06כ6-2המטתפסת 18 6עסס26 2868
. 86-200שטת369
1
. (5)א 16ק 8ספנא-06כ 902
. (2)א 16ק 1160נע 02
.(15)א 16ק מסתפ-2062 02
.(2)א 16ק 1162נע 02
4 16 % 02
.(2)א 16ק 1162נק 02
1+ סנק עגו1ם5-ת206 02
. (2)א 16ק 11162ע 02
ס6צס 61801₪צ-06סכ2 02
. (2)א 16ק %ע1116ע 02
1 סצק ספנועם-82ת580-ת206 02
. (2)א 16ק 1162גק 02
1 סצק 948 02
. (2)א 16ק 1162נעק 02
2 סשסץצ 6%%0א%-206-580082 02
.ת560510 56002880-שת1אעס₪
."" 08106 | א 16ק אפ-₪0% 77
."א" 6גו081 שסם 88
.9 סנק עט9ססא-ות56 77
.9 סנק
.9 סד
.9 סצ
56-85 77
ס6נועם-82ת580 77
שנפגא 77
1 7816 7999 16ק
.+ 816 99099 216
8 ונת 77
צַטססא 77
.ת1510ט1ת 6ע060602סעק
. 1ת5פת
.ת1%181128%10ת1 שעס+עסק
1ב1סת0 6006 מעס+עסק
שטע1ס מעס+עסק
.תטת 0סט5
.ת1%181128%10תך
(%85%0200-8006%2 6טקת1 ת6ק0
.תססק 6טקסט0
.ת86-200מט0ת698ת 1%6181126ת1
9% 3681
.פ-₪07 70 "א" 6טסא 6גם 26
- 92 -
)68( |.
. 580182-221150-ט2נו0215 ₪ש0?עסק (69)
. %6600-580282-טות15ת0 ₪ע0ס+עסק (70)
.180008-10280% מעס)עסק (71)
)12( 36580 1%
.00-58 10 "א" סשטסא 6ג₪ 46 (13)
. ססטַתם-עְהַהַס5-טטת198מ0 - (73)
תס 40 < ססג5 19 (פך)
+ עטנת5 * 40 = ססטעם-82ת580 66גקםס0 (76)
עטגתפ * 1.5 * (20 - סְסַם9) (דד)
6 (18)
בעטנתפ * 580% = ססטע82-2ת5980 6סוקםסס (79)
0-- טי" (80)
ץֶטס6א עֶם מ61861צ צ1סנטנטא (81)
. צַ9ו%60%-ות50 אַת1ט01 (82)
מסת1 עט66%א-נטת50 < ס6ת82-22ת580 1% (83)
0סגו2ם-58082 מסעץ עט66%א-מטם90 562866 (88)
895בטט9 8ת1ש01 (85)
8-טטנת5 2 1.6085-שטת56 6101 נטא (86)
6פמטסת 8151 אַת1ש01 (87)
.שנפנא 10 2620 6טסא ₪156 (88)
ספועת-580082 שסעת 151₪א 866ע%סטפ (89)
.200-5800820 שַת1ט01 (90)
. 1800068-10280% (91)
.15082א-200 10 ש1508א 6טסא (92)
. מסתפ-2062 10 שסם5 שטסא (93)
.206-580 10 580% 6טסא (98)
.עטנתפ-ת206 10 עטנת5 6טסא (95)
.2006-0801 10 61861₪צ סטסא (96)
.89 10 ₪151₪ סטסא (97)
.0ג82-2ת2001-580 10 ס6גועם-ִ8ת580 סטסא (98)
. 6586-2001 66 בע (99)
.שטץ1פ (100)
.תסס2ע ,06ע%885%02-₪006%2 01086 (101)
הסבר :
שורות 31-46: שים לב ששמות השדות ברשומה זו דומים לשמות השדות
ברשומה 0%ע02א%8858%-6השטתפפת. אילו קראנו לשדות ב-ת06כ86-2מטתפסת
באותם שמות שקראנו לשדות ב-85%0206%/-8%6םטת65ת, היה נגרם בלבול
למהדר (אם לא למתכנת). למשל, אם במקום פהספנא-ת200 ה**נו
מסתפקים ב-ע15082א, והיינו כותבים אז:
.1538א 70 ה4ק15א מטסא
המהדר לא היה יודע אם הכוונה היא להעביר את תוכן השדה ט8קפנא
- 93 -
שנמצא ברשומה ת8%6-2006שטת369 לשדה ש8כ15א שנמצא ברשומה -6ַמטת365
%, או להיפך.
פתרון מקובל לבעיה זו הוא לשנות את שמות השדות בצורה כלשה'י,
למשל על-ידי הוספת שמו המלא או החלקי של הקוב לפני שם השדה, כך
ששני שדות בעלי אותו שם מקבצים שונים בכל זאת יהיו נבדלים
בקידומת שלהם. כך נהגנו פה, וגם בעבר כאשר הוספנו 8 לשמות של
שדות קלט, ו-ת לשמות של שדות פלט.
פתרון שטנ הוא להוסיף לשם המשתנה בזמן כתיבת פקודת מע0א ציון
נוסף (א0041,10108110). למשל, במקרה שלנו, יכולנו לרשום:
0 001א5א- וכמת ע0 ההקפדא מטסא
. 41-2008אתפטת ע0 ההפפדא
הערה: שיטת הציון מאפשרת לתת שמות זהים לא רק למשתנים ברשומות
שונות, אלא גם לפסקאות בפרקים שונים בתכנית. למשל, המשפט:
.6510007 0 50008 אתסעתטץק
מציין שרוצים לבצע את הפסקה 588008 הנמצאת בפרק 01א0ס8הפטתס.
פתרון שליש* לבעיה שהוזכרה הוא דווקא לתת שמות זהים למשתנים
הכפולים (618061₪+, ע1508, שס6םת5, 5806 ,עטנתפ), ולהשתמש בפקודה
ש₪ם61ת6900ע022ס0 6טסא, שהמבנה שלה מופיע להלן:
8 10 ע0א8ש-1%ע8ק 1)א1פאספפטתת 60[ מטסא
ו 00
-
במקרה שלנו י*כולנו לכתוב: 0801א45א-1אשתפסת 0א1פאספפטתה 00 מעטסא
. 1-2008האטהפטת 70
הסבר:
א. השדות - ע8%0ע-2801%6 ו-הַַ88ץ-1%6ע8ק | חייבים להיות פריטים
קבוצתיים (למשל רשומות, כמו במקרה שלנו).
ב. השדות בעלי השמות הזהים לא חייבים להימצא באותו מקום *חהס:
בפריטים הקבוצתיים המכילים אותם וא'*נם חייבים להיות מתוארים
על-ידי תמונות זהות.
ג. שני שדות הינם בעלי אותו שם (כך ש-0א1פא0קפטתת00 ע8₪0 פועל
עליהם) אם יש זהות בשמותיהם ובשם כל פריט קבוצתי המכיל אותם, עד
שמגיעים לרמה של 8%02ש-1%ע8ק ו-886צ-16ע8ק.
דוגמה: נתייחס לשני המשתנים המתוארים להלן:
(1) 1 01 (2) 2 01
8 02 2 02
א 10ע 6 03 א 210 6 03
- 98 -
שני המשתנים 0 אינם זהים לצורכ: 0א1תא0ספמתת 00 מטסא מכיון שאחד
מהם שייך לשדה 8, והשני שייך לשדה 82.
ד. כדי ששני שדות ייחשבו כזהים לפחות אחד מהם חייב להיות פריט
יסודי.
בנוסף לפקודה מטסא המיועדת לטיפול בשדות בעלי שמות זהים, גם
הפקודות 822 ו-50818401 מיועדות למקרים כאלה:
2 10 01028-1 ךָ 00 - פפה
00
68-2נט 0 800628-1 [0א1פא0ספמתת 00 - תיטטס
ן 0038
דוגמה: |" 1 זופת 1
. (9)5 10ק 4 02
1 160 8 02
.6 02
. (2)א 10ק 2 03
.99 10ק 8 | 03
.(7)א 10 הזע 02
. (9)3 10 ץ 02
. 2- אפתת 41
02 4 10 9)5( .
. (4)א 10 פע 02
02 6 60 9.
02 6.
.(2)א 10 - 48 03
10 - ₪ 03
.(7)א 10ת | תםןוזץ 02
. (9)3 10 ץ 02
הפקודה "2-באסאפטת 10 1-באסטפטת 0088 פפג" תגרום לחיבור השדות
הבאים בלבד: 7,ם ,ג. שדה כ2, מאידך, כפוף לשדה 6 ב-1-באטטפמת,
אבל לא ב-2-באטתפמת. בנוסף על זה, שדה 2 אינו שדה נומר*, ואילו
החיבור היה מתבצע היינו מקבלים הודעת טעות.
שורה 65: במקום לכתוב פקודת 110181126 יכולנו לכתוב את הפקודה
הבאה:
.1-00 אטהפטת 170 554085 מטסא
שתי הפקודות תמלאנה את שדות ה-71108 ברווחים. פעולה זו דרושה
לפני הכנת שורה לפלט הדפסה או תצוגה במסך.
שורה 66: הפקודה 5542 קוראת רשומה מקוב למאגר (ממקעטם) המוגדר
בכניסת תיאור הרשומה הכתובה מיד אחרי כניטת תיאור הקובצ (ה-פת).
- 95 -
ממקומה במאגר, תהיה גישה בתכנית לכל שדות הקובץ. המבנה המלא של
הפקודה כגמת:
[8868צ-ת58860 10א1] כת00מת 2ס6טס0א-שסת5 פגמת
[[פגמם-2א2] 8%קת15ם פאע 1א]
הסבר: משתמשים בשם הקובף אחרי המלה כגמת, על אף שבפועל קוראים
רשומה, ולא קוב שלם. הסיבה לזה היא העובדה שלפעמים יש רשומות
שונות באותו קוב>. בזמן הקריאה א*' אפשר לדעת את שם הרשומה
שקוראים, ולכן משתמשים בשם הקובף. כדי להדגיש שבכל זאת קוראים
רשומה, ולא את הקוב כולו, אפשר להוסיף את המלה האופציונלית
2 אחר: שם הקובא.
אם מוסיפים את הביטוי "886צ-ת5860 10א1", הרשומה נקראת גם לתוך
48 הק''ם בשני מאגרים, המאגר הקשור עם ה-פק עבור אותו
קוב ולשטח 886ע-םת8860. הוספת ביטוי זה שקולה לכתיבת שת:
הפקודות הבאות:
א. 2-ו פגמת
ב. ((10 8מות265 מעסא
הביטוי פאם 81 מאפשר כתיבת משפט (ז"א פקודה אחת או *ותר) שיתבצע
כאשר מנסים להפעיל פקודת פגמת אחרי שסיימנו לקרוא את כל הרשומות
בקובא.
1 תרגילים
שאלות
1. נתונות ההגדרות הבאות ב-51084068₪ 6א1אתסא:
מטגט- 99099 10ק הפוקת 02
6 מטתגט 9990999 210 מפק 02
. '480' מטנעהט (5)א 210 16ק 02
.9 מטגאש (9)3 210 מע 02
ענה על הסעיפים הבאים:
א. מה תוכן 20/]ע לאחר ביצוע ההוראה .4 10 סס.ש מטסא
ב. מה תוכן ב1/2ע לאחר ביצוע ההוראה .פע 170 מפתע מטסא
ג. מה תוכן 26 (מעצם הגדרתו)?
ד. מה תוכן 128 לאחר ביצוע ההוראה .0 70 סס1ש מעסא
ה. מה תוכן 7:28 לאחר ביצוע ההוראה .8 70 מסע מטסא
2 .8 ו- 8 מוגדרים ב- 6-5108408ַא1ַאַה₪0. מה יהיה ערכו של 8 אחר:
ביצוע הפקודה 8 10 8 822. סמן בעיגול את התשובה הנכונה.
1 02
.4 מטגט 99 10ע 41 03
.5 מס1גט 9 0דק 42 03
.5 משטשעגעט 999 0ז1ק 8 02
.ג 10 8 55ב
- 96 -
(1) (2) (3) (4) הפקודה לא חוקית
|2|5|0) (5) אף לא אחת מהתשובות
נכונה
3 84, 8, 0 הם שדות (ומריים המוגדרים ב-0-5108408א1אַת₪0. לפניך
קטע תכנית המתייחס לשדות אלה:
₪ ם 10 2 פכג 8<4 פאה 240 עד
.0 סע 1 50017407 420 05 864 עד
.א 10 1 55ב
ציין את ערכם של השדות 4, 5, 0 לאחר ביצוע הפקודות לעיל אם
לפני הביצוע מכילים השדות את הערכים הבאים:
א. 4=2-0=8
ב. 4=5 08 0=7
ג. 4=5 | 2-6 | 0=7
ד. 84=7 3 065
ה. 4=7 9 06
8. איזה מבין השדות ישתנו כתוצאה מן הפקודה:
. 2-האשפמת סד 33910084-1 8תנ6םסק9סעמס0 6טסא
. 1-האטפמת 01
. (9)8 10ק ג-5428 05
. (4)א 210 5428-8 05
.0 05
. (84)א 10 0-1 10
. (4)א 10 0-2 18
. פ-5428 05
. (6)א 10 5-1 190
. (6)א 210 2-2 10
. (6)א 210 2-3 10
. (6)א 10ק מ-582₪ 05
. 4-2אטחפטת 01
. (8)א 10ק 5428-8 190
.| (6)א 10ק 6-1 19
. (8)א 10 5428-4 10
. (84)א 10ק ם58428-8 19
. (8)א 210 פ-5828 10
.6 16
. (8)א 210 0-2 25
. (8)א 210 2-2 10
. (9)6 210 מ-5428 19
- 97 -
5. מלא את התוכן של 8 אחרי ביצוע הפקודה 8 10 8 מטסמ.
כתוב "לא חוקי" אם ההעברה אינה חוקית.
8
תמונה
(9)3
תוכן
ב ורי
| | 0 |
123
| 90 |
| תפ |
:
6. הכן את הפקודות המבצעות את התפקיד הדרוש:
א. קבע את התשלום נטו של מועסק (%6660-ע58008).
נתונים השדות 0ס6ע0-ע8ת580,
ב. חסר את השדה םטם96 מ-1000 ואחסן את התוצאה בשדה ב867268.
ג. מצא את הממוצע של 10 מספרים שחוברו
מטת50.
התוצאה תאוחסן בשדה גוס והשארית בשדה 68216ת5.
ד. מצא את ההפרש בין השדה 70681 ו-500 ואחסן אותו בשדה
.1
ה. חשב את הריבוע של תוכן השדה 4, חלק אותו ב-2,
נוס1א,
יחד
2 ו-11516.
התוצאה בשדה 4-8481804.
הבר 08₪06-1, 2-08₪0%, 08205-3 ו-4-08₪0% והצג את המלה
ידזגי'' אם התוצאה לא תכנס לשדה 08₪016-8.
הכפל 5425-8 ו-5428-8, והחסן את התוצאה ב-5428-4.
- 98 -
][. מלא את ערכם של המשתנים בטבלה הבאה אחר* ביצוע הפקודות
השונות:
פע 14זאך
.8 10' 8 פפג
.2 60 ,5 ,8 פסג
.0 0א1ע1 8 ,8 פפג
.ע 10 0 .90 .35 פפג
.2 אסתע 4 01תדמטפ
.םע אסתע 0 ,ם ,4 דסגתד0ס .
.כ 01180 0 אסתת 5 ,4 דסגתדטטפ
.6 0א6101 8 אסתע 10 צסגתדפטפ .
.ע 0א6101 100 אסתע 4 דשהתדטטפ
.0 צם 8 צוקזצעט
.0 710 8 צם ₪ צ1קצד זט
.פע 0א6101 6 צם ב צנקדי/נטו
.6 0עא1 8 מסצטדת
.פע סא1ע0 4 צם 0 מפנטזפ
.0 010186 8 0צאד 4 טפדטצת
.0 6א6101 5 צם 8 מפצטדכ
.ב + **2 = כ שעטשק00
.ב + 4 = כ 07₪ק00
.1 / 0 = כ מעשקא00
₪ יס
7-65 0000 0
ב 0 9 ם ₪ ₪
תכגניות
1. כתוב תכנית שמקבלת כקלט את הגודל של זוית במעלות. בדוק אם
גודלה הוא בין 0 ל-360 מעלות והדפס את גודל הזוית ואת הרביע
שבו נמצאת הצלע העליונה שלה. למשל, זוית בת 55 מעלות (מצאת
ברביע הראשון, זוית בת 330 מעלות נמצאת ברביע הרביעי. אם
הזוית גדולה מ-360 מעלות יש להדפיס הודעת שגיאה.
2. יש להרחיב את התכנית שבתרגיל הקודם כדי שתוכל לקבוע את הרביע
של הצלע העליונה של הזוית עבור כל זוית, גם אם היא גדולה מ-
0 מעלות.
3. כתוב. תכנית שמקבלת כקלט שני מספרים שלמים 4 ו-8 ומוציאה
כפלט:
א) הודעה מתאימה אם 8 מתחלק ב-4 ללא שאר*ית.
ב) הודעה מתאימה אם הסיפרה 8 היא אחת מן הספרות שמרכיבות את
המספר השלם 82.
- 99 -
.4
.5
כתוב תכנית אשר בודקת אם א הוא מספר ראשוני (השיטה הפשוטה
ביותר היא לחלק את א בכל המספרים אשר קטנים מ-א או שווים ל-
א. אם נחלק את א בכל אחד מהם ותמיד נקבל שארית, נוכל לומר ש-
א הוא מספר ראשוני).
הכן את הדוח שמופיע להלן על סמך הקלט המתואר. השתמש בפקודה
תס ככ לחישוב הסכומים בשורת הסכומים.
ב 5 5
1 וא 8
6 םסה | 8 זסטססח? | ג זסטססה?
אגו65 )5 הי
ואט /
4%
הּ
מו |646 6 5.5 6:66 550 כ 5
/ :1 שי 5 5 4 וךו 4 156 קרו
ו א
1
6 | .וע
1 5
| ד
פרים קטנים מ-500 בעלי תכונה מיו
חדת. אם לוקהים
% מס
כל סיפרה במספר, מעלים אותה בחזקת שלוש ומחברים את התוצאות,
הסכום יהיה שווה למספר המקורי. למשל:
13 = 3**3 + 5**3 + 1%*3
מצא לפחות אחד מהמספרים האחרים בעל* תכונה זו.
כתוב תכנית שתחשב סיפרת ביקורת למספר קטלוגי בן 9 ספרות.
שיטת החישוב היא: כופלים את הספרה הראשונה של מספר קטלוגי ב-
1 את השניה ב-3, השלישית ב-7, ואז הרביעית, חמישית ושישית
ב- 1 ,3, ו-7 בהתאמה והשביעית, השמינית והתשיעית ב- ,1 3 ו-7
בהתאמה. בכל הכפלה, אם הסכום עולה על 10, מחברים את הספרות
הבודדות עד שיש סכום של ספרה אחת בלבד. בתום התהליך, מחברים
את כל המכפלות. סיפרת הביקורת שווה לשארית של סכום זה כאשר
הוא מחולק ב- 10.
לדוגמה:
= 100 =
פרק 7
עריכבה
1 תווי-עריכה
תווי-עריכה הם תווים המשובצים בתוך מחרוזת התמונה (07088דק
0) המתארת נתון כלשהו. תפקידם של תווים אלה לשפר את קריאות
הנתון בזמן שיופיע כפלט. ישנם שני סוגי פריטים עם עריכה -
פריטים אלפנומריים ופריטים נומריים.
א. פריטים אלפנומריים עם עריכה: התמונה של פריטים כאלה מכילה
לפחות << או 8 אחד, יכולה להכיל אחד או יותר פעמים 9 ומכילה
לפחות אחד מתווי העריכה: 8 (האות הראשונה של אאגתם, ז"א
רווח), 0, או /. תו העריכה 8 יוחלף בפלט על-ידי רווח והתווים
האחרים יופיעו בפלט כמו שהם בתמונה, בלי שינוי. אם התמונה
אינה מכילה א או 9, רק 82 ותווי עריכה, אפשר להתייהחס לפר:יט
כפריט אלפביתי עם תווי-עריכה.
דוגמה: : ./אפסאם סזפ 8 77
.'סת' מטסןגט (2)א סע - 8 77
אחרי הפקודה: .8 70 8 מטסא 8 יראה כך: /006קט (ס מסמן רווח)
ב. פריטים נומריים עם עריכה: התמונה של פריטים כאלה מכילה לפחות
ספרה 9 אחת, עם או בלי ליווי של ץ או 5, או שניהם. היא מכילה
גם אחד או יותר תווי-עריכה, לפי סוגי העריכה השונים שיפורטו
להלן .
עריכה על-ידי מילוי:
(אץ) מילוי פשוט: תווי עריכה מופיעים בפלט באותה צורה
ומיקום כמו בתמונה. עריכה זו דומה לעריכה הקיימת עבור
פריטים אלפנומריים, אלא שניתן להשתמש בתו-עריכה נוסף -
פסיק.
דוגמה: תמונה ערך בשדה שולח ערך בשדה מקבל
(בשדה מקבל) (תוצאה)
9-9 02 2, 08
09| 2008 2006
- 101 -
(ב)
(ג)
מילוי מיוחד: תו-עריכה | מ*וחד (.) גורם לערך בשדה
השולח להיות מיושר ביחס לנקודה העשרונית שלו.
דוגמה: | תמונה ערך בשדה שולח ערך בשדה מקבל
(בשדה מקבל) (תוצאה)
9.09 08|( 0.8
9.9 8.6 00
9.9 2.184 0.8
במקרה הראשון היישור גרס להוספת 0 בצד שמאל, במקרה השגנ:
גרם להוספת 0 בצד ימין ובמקרה השלישי להוספת 0 בצד שמאל
ולקיצוץ ספרה בצד ימין.
מילוי קבוע: עריכה כזו מאפשרת הכנסת תווי-עריכה במקומות
מסוימים בלבד:
* סימן %: בקצה השמאלי, או במקום אחד לפני הקצה השמאל:י
(אם יש + או - בקצה השמאל').
* הסימן + או -: בקצה השמאל* או ה*מנ'.
* האותיות 08 (ע1כ8ת0, ז"א זכות) או מע (1'זממס,
כלומר חובה). משתמשים באותיות 08 עבור חשבון שצריך
להיות במצב של חובה, כדי לציין שיש לו יתרה שלילית
(ז"א, יתרת זכות), ומשתמשים ב-28 עבור חשבון שצריך
להיות במצב של זכות, כדי לציין שיש לו *תרה שלילית
(ז"א, יתרת חובה).
הטבלה שלהלן מתארת את התוצאה של כתיבת +, -, 68, ו-מס:
(ד)
תו-עריכה פריט גדול מ-0 פריט קטן מ-0
+ + -
- רווח -
08 שני רווחים 08
28 שני רווחים 528
דוגמה: | תמונה ערך בשדה שולת ערך בשדה מקבל
(בשדה מקבל) (תוצאה)
5698 .2600 06 22, .008
-0646 -.|5016 - 9 9
0.16 06 -9
%86.23+ 8.6 599.99+
1.38 -.2 2.08
מילוי צף: קיימות שתי צורות של מילו: צף, שהן הוספת סימן
או סמל, ודיכו* אפסים.
(1) הוספת סימן או סמל: תמונת פריט המכיל מחרוזת של 2
או יותר מתווי העריכה: %, *, -. תו העריכה צף עד
שהוא נח צמוד מצד שמאל לסיפרה השמאלית ביותר ששונהת
- 102 -
מ-0, או לנקודה העשרונית. שאר המופעים של אותו תו-
עריכה מוחלפים על-ידי רווחים.
דוגמה: | תמונה ערך בשדה שולת ערך בשדה מקבל
(בשדה מקבל) (תוצאה)
9מנ 2.07 022.17
הסבר: הסימן % צף ממקום 1 למקום 2, ומוחלף במקום 1 על-
ידי רווח. במקומות 3 ו-8, הסימן % מוחלף על-:ד: ספרות
שונות מ-0.
קביעת גודל התמונה נעשית תוך התחשבות בגורמים הבאים:
* מספר ספרות מירבי במספר שעורכים.
* מספר תווי-עריכה למילן: פשוס, מיוחד וקבוע.
* מקום אחד נוסף, בגלל שאם אורכו בפועל של המספר שווה
לאורך המירבי שהוקצה לאותו מספר, יש צורך במקום נוסף
עבור התו למילוי צף.
דוגמאות נוספות:
דוגמה: | תמונה ערך בשדה שולח ערך בשדה מקבל
(בשדה מקבל) (תוצאה)
5 5 9 )1(
(2) 9 0.00 0. פססס
(3) 5:55 0. סססססטס
(8) 5% 0.3 3. פססס
הערה: אם מוסיפים תו-עריכה צף בצד ימין של הנקודה
העשרונית (כמו בדוגמה 3 למעלה), התוצאה דומה למקרה שלא
כללנו תווים פרט למקרה שהערך בשדה השולה הוא אפסים.
במקרה זה, במקום לקבל תוצאה של 8.00, כמו בדוגמה 2,
תתקבל שורת רווחים שאורכה שווה למספר המקומות שהוקצו
בתמונת השדה המקבל, כמו בדוגמה 3. שים לב שאפילו הנקודה
העשרונית הוחלפה ברווח. אבל, כאשר רק מקום אחד אחר:
הנקודה הֶעשרונית שונה מאפס, שתי הספרות העשרוניות וגם
הנקודה העשרונית תודפסנה, כמו בדוגמה %.
דוגמאות נוספות:
דוגמה: תמונה ערך בשדה שולח ערך בשדה מקבל
(בשדה מקבל) (תוצאה)
+0 005 .6 +9 )1(
(2) 9-- 2-00 5. כסט
(3) 9+++ 2-- 2 0-6ס
(8) ++.+++ 0.00 סססססס
(5) ++,.+++ 0.33 3. +סס
(2) דיכוי אפסים: תמונת פריט המכילה אחד מתווי העריכה 2
(הגורם להחלפת כל סיפרת אפס ברווח) או * (הגורם
להחלפת כל סיפרת אפס בכוכבית). תווים אלה חייבים
להיות במקום השמאל* ביותר בתמונה מלבד פסיקים,
- 103 -
נקודות עשרוניות, או תווים המשמשים למילוי קבוע (+,-
.)
דוגמה: תמונה ערך בשדה שולח ערך בשדה מקבל
(בשדה מקבל) (תוצאה)
(1) 22.99 0.8 8. 9
(2) - 99.*** 066>- 6.*%
(3) 222.2 0.3 3. 0
(8) 22.2 0.00 ססססטס
(5) *%, 44% 0.00 **, %*%
(6) 9 0.5 5. 9005
(7) 9 0-5 5. 0%
(8) 2,099 26|(" 6. 38ססספססס
(9) 9. 22/2 , 22.2, 2 0.6 6. 6%8ססססטס
(10) 2,222,272.99 9.6" 6, נסססס
(11) 2,299,999.99 6. חח 6, 00ססט
(12)- ***,%*א, + 209 9, 11**+
(13) %2,222.9908 868-- 6808. 900492
(18) 99003.***,%*% 8- 52
(15) 55,55%.5%- 3 3 -
)16( -%5,585.5% 3- -63. 208398
הסבר:
(8) שים לב שבדוגמה זו הנקודה העשרונית מוחלפת על-:ך:
רווח, כמו שראינו לגבי תו-העריכה הצף %. אבל אם תו
העריכה הוא *, הנקודה העשרונית אינה מוחלפת במצב דומה
(דוגמה 5).
(9) הפסיק אינו מופיע בפלט, כי אין ספרה משמאלו. לעומת
זה, בדוגמה 10 יש ספרה משמאל, ולכן הפסיק מופיע בתוצאה.
(15) מותר להשתמש בתו-עריכה צף אחד לכל היותר, ז"א אפשר
לבחור רק אחד מתוך תווי העריכה 2, *, 5, +, - (כאשר
שלושת האחרונים משמשים כתווי עריכה צפים). כאשר תוו:
העריכה ,% +, - משמשים כתווי עריכה קבועים, הם *כולים
להופיע יחד עם תווי העריכה הצפים 2 ו-* (כמו בדוגמה 15
ו-16). עדיף שהתו הקבוע לא *ופיע לשמאלו של התו הצף, כמו
בדוגמה 16.
טעויות:
(1) 9 או 9,9585: לפני תו-עריכה למילוי צף יהיה רק
תו-עריכה למילוי קבוע א או 8.
(2) 08999.99: 08 חייב להיות בקצה הימני.
(3) אאאא-אא-אאא: תו-עריכה בלתי חוק:ת.
- 104 -
סוג נוסף של עריכה נעשה על-ידי הוספת הביטוי "אמ אאגתם
20" בזמן כתיבת כניטת תיאור הנתון.
דוגמה: .0 אמט אא814 2229.99 10ק זאטסאה 02
בדוגמה זו רצינו שהמספר יופיע עם 0 מוביל, מלבד במקרה שערכו 0.
במקרה זה :יופיעו 7 רווחים בלבד. תמונה של 2222,22 היתה מובילה
לשורת רווחים כאשר הנתון 0, אבל לא היתה מספקת 0 מוביל כאשר
הנתון הוא שבר.
2 תנכנית לדוגמה
להלן מופיע תרשים הירארכיה עבור הרחבה של התכנית לחישוב
משכורות.
00
-3א1צטת
צזוופת
1.00
00-= 200
5 = שא | א0זי2 זזה זזזאד
200 וע 0 200 200
/ ו וו
1 צטגד :א ו ג 17
2 |ו
||10טתם- 5401 דוס
2 50
וב--- /
|||-עט:ז01115
-540808| | |עטגך
סשת
0 וו
|
צטגד
- 5 -
התכנית להלן מבוססת על התרשים שהוצג לעיל:
.ת1510ט1ת ת%611+108%610ת160
. |-8משט2 .16-שהסשסמק
.ת566610 6-005006גוסת1
. 01ע%ת116-00ע
.% 10 499186 06ע3000%52-085%0 9616066
."006.280" 10 ת4551₪ 200 561606
.תס1פנט1כ 868
.ת560010 116ק
0% כפכת
96 ₪0ת22 60602068 18061
, 08וש%8-020%א85-0₪8%ת365 426 36060265 868
, 1מ208 -8%6-85%020%6מנות 65
.סהא-116ע 158 12 02 081₪6
. 38068-85%020%/-8%מטת365 01
.א 16ק
.(5)א 16
.(15)א 16ק
1 1:6
. (3)א 16ק
.9 סץצ
16ק
02 6
עה8ספנא-1א | 02
שסתפ-%1 | 02
1-0 02
ע16ננע | 02
עטנםפ-1א | 02
61801₪ע-1א 02
. 1ת2.008-%6-11854020%המטת69ת 01
.א 16ק
. (5)א 16ק
.(27)א 16ק
.(3)א 16ק
. (5)א 16ק
9-1 02
עהספנ)-ת1ה | 02
2-תַ8טְאַת-000 | 02
%ע116נע | 02
8 -,- 02
ג6ספ פע
18061 600265 ₪ 4
8 53 15 סִקַהת11
0 46 שתנ1סססע ת₪16
6 100 4% 68ת11
6 0%6%60₪ 4% 68ת131
. ת86-200מטתפסת 18 606026 2868
. (133)א 16ק
.86-00061מטת365 01
.9600100 886ע560-שת1אעסש
.9 סנ
.9 סצ
.9 סצק
.9 סצק
.9 סצ
600א-580282-₪ 77
גו609א-מטת50- 77
89יאכטתספ-₪ 77
סטגועם-82ת580-₪ 77
151₪א-₪ 77
. (9)6 216 ססטעם-%85%0206-₪שטת56-₪ 77
. (9)6 16ק
1 1/-מטת50- 77
160 6000א-0%ע%85%402-נטת50-₪ 77
. (10)א 16
ס6מהא-116ע 77
- 106 -
....
.12
.9
.6 153 6ט781 א
8 08106 (35)א
. "מז 407
18 סט1אט (38)א
.אע0ס7821062-9 01
.+ 6ד1ק התהתס 2
6ב כ 2
6נק שסצ 02
.00 01
6 תסהט1ק- 8 02
6ב 1162נע 02
אמ ההקסדא"
160 פ6ןננע | 02
"שגת 0תעטא 5 סנטתם אדס). מע"
.20
6 106 (10)א
. "/" 08106 א
. "/" 6ג081 א
.20
.8 1858 78106 (29)א
.6 15858 08106 %
(5)א
. (15)א28
2.
29...
2.
"|.
5 (.
1-1
.2 15 08106 (66)א
.4 1595 78106 %
.8 78166 (5)א
. (15)א88
20...
2.(.
(9.
.8 18 סט1הא (10)א
8 78106 (20)א
. "זא זמ7גתא פמטסגם"
. (2.8)א
- (5)א
.2 1858 08106 (29)א
.6 15 78106 א
."*" 411 078106 (132)א
.1 15 78106 %
.8 1065 (10)א
6ב
16
6ב
6ב
6ב
6
6ב
6בק
6ב
6
16
16
16
6ב
6בק
ס6בק
6גק
6ב
6ב
16
6בם
16
6ב
6בק
6ב
6ב
16
ס6בק
6ב
16
6בק
6
6בק
- סנו 022
162ננת 2
מסצ-0%א 2
1162נת 022
406-0066581 2
1162נע 02(
8תףת-06 02
1162נק 02
. 18ו%80-2616%-8%עטת5 01
תסהט1%ק-ט78 02
ע8ספנא-1ק | 02
שסת21-5 02
0% 0222
עטנת1-5ק 02
1801₪ע-1ק 02
0סגועם-82ת 21-580 02
98 022
6%600א-82ת1-580ק 02
%ע116נע | 02
. 1ת208-2616%-8%עטת5 01
ת080א1ק-ט78 02
16%[נע 02
םסת2-5ק 02
5% 022
02 ק2-5תנטע
0סגוע82-0ת2-580ק 02
%ת1116ק 02
165[נע 02
1162גע 02
8 02
11162 02
. 1-מ1ו286-5009טתס
תסהטא1ק-ט78 02
1162נע 02
. 11-2ו5606%-8%ממ5 01
תסאנונק-ט 78 02
1162גע 02
=
0
- 107 -
)55(
)56(
)57(
)58(
)59(
)60(
)61(
)62(
)63(
)64(
)65(
)66(
)67(
)68(
)69(
)70(
)71(
)72(
)73(
)73(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
)83(
)84(
)85(
)86(
)87(
)88(
)89(
)90(
)91(
)92(
)93(
)93(
)95(
)96(
)97(
)98(
)99(
)100(
)101(
)102(
8 6ט081 (25)א 16ק2 11162עק 02
. "סצשתם ד0סה0א5באוו אפ"
58 8106 (20)א 16ק 165ונת 02
, "א151אגזן אפ"
8 78106 (25)א 16ק 5 02
, "סדנטא 0507א45אג אפ"
.4 158 78106 (52)א 16ע 1162נת 02
. 3 -₪גו500%-)8ענותל
.6 15 78106 א 16ק תסהטא1ק-ע78 02
.8 78116(6 (15)א 16ק 11162ע 02
.9, 555% 6 1100ע22-88%020%א-מטת50 02
.8 781665 (10)א 16ק 1160נעק 02
.9 סנ 1₪4פ1א-מטת50 02
.8 166 (10)א 16ק 1160נע 02
.9 ס1:6 66500א-85%020%-מנ0ת50 02
.8 15 78106 (6%)א 16ק 11162ע 02
. 18110 -8%מות69ת3
.6 18 78106 א 16ק בסגוא1ק-780 02
. (32)% 216 1162נץק 02
. (38)א 16ק מדאת-ם1תט6%א 02
.8 160אט (5)א 16ק 2ע116נת 02
. (58)א 16ק 1% -0688%6 02
. 5068206 5689071-1,601-₪ 1נושטס
1+ 185 78106 599099 16ק צְטאססא 02
.1. 10606אט 0999 16ק 8-טנת5 02
. םנתסא
.4 78106 | 599 16ק 9-7 02
. 11₪הקס
."0" 18 08106 (3)א סנק מנמטט6א-+268861-50 02
. "אמא" 18 0816 ₪שנמט0ס6א-+50 88
. (3)% 16ק 91 02
. "אמא" 15 6ש081 1-ו 88
.0
8 816 (30)א 16ק 1 022
. "20 באופתדם אזאטצטאטם דטג"
58 78106 (30)א% 16ק 8-2 02
, "01508 המתדא סצשתם 5028"
1
1
1
1
1
1
.מ1510ט21 6תנגו6606סעק
.1 -נסנות
. "הפהאהטתם ,2דמטסאג אמש 15אהסג" צַ15018כ
. ס6מהא%-7116 400606
(%88%020%-3006%52 ס6גוקת1 ת6ק0
.םסכ סטקסט0
. ת1%181128%10ת1 שעס?פסק
.שנתטס6א-+50 11סת0 6006ע מעס1?עסק
. 56090 ₪מ0+ע6ק
ב00 ,0%ע85%402/-%00662 01056
.ות קסספ5
- 108 -
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
)120(
)121(
)122(
)123(
)124(
)125(
)126(
)127(
)128(
)129(
)130(
)131(
)132(
)133(
)138(
)135(
)136(
)137(
)138(
)139(
)180(
)141(
)182(
)183(
)188(
)185(
)186(
)187(
)188(
)189(
)150(
.ת16181128%10תך
.6 מסעת אעסט-182102 400002
.פסצל-40% 10 מסצ 6טסא
.805-0206051 10 ת0865ם0 שטסא
. התהתפ-05א 10 הת8ת5 שסטסא
0% מפס+עסק
מ" 68
. 1₪תגוס6א -26861-505 10 "אמא" שטסא 6םע 46
.00%
. 1582-8087 10 1 68
. 81ת-8ק5נא 0 1508-1808%א סטסא
% מספץ ב86-206שטת265 6ס1עט
.6 שתנסתה8ט44 ע24+00
. 6
תסת7 "א" = 066א תד
0006-8088 מעס)עסק
6
מ6ת1 "2" = 066א 9ך
6000-2001 שעס+עסק
6
86 -100886 10 10688-1 סטסא
.8% ₪ע0ס+עסק
תססכ-85נטת65ת 166עחא
יי שעס)ע6ק 0 26
88%0020%/-%006%2 3686
.1₪תו6%א-26861-501 10 "אמא" סטסא 6ם₪ 46
.ו
.שנהת-1₪תט60/ 10 85%0206א-86מטת365 סטסא
.0-0 305 10 6ג180-+8נטתפסת סטסא
. 0110-8018
6בשסטמטא 0%א% 18 ע8ק15א-1א ?1
16עסמטא 6סא/ 18 6סַת1-5א% ע0
6מסטמטא 06 18 עטנת%81-5 05
6בעסמטא 80% 18 61861₪צ-1א 02
10088%6-18% 10 10688-1 סטסא
0% מעס+]עסק
6
סטות82-0ת580-טטשת615 שעס?עסק
1 ססא 19
%6%00-580(82-טטת15ת0 מעס+עסק
. 818 -11800898%- ת6ת1186 מעס+?עסק
. 2081 -16ו00
סבעסטטא ססא 185 806ת21-5 19
- 109 -
)151(
)152(
)153(
)158(
)155(
)156(
)157(
)158(
)159(
)160(
)161(
)162(
)163(
)168(
)165(
)166(
)167(
)168(
)169(
)179(
)171(
)172(
)173(
)178(
)175(
)176(
)177(
)178(
)179(
)180(
)181(
)182(
)183(
)188(
)185(
)186(
)187(
)188(
)169(
)199(
)191(
)192(
)193(
סבעסטטא 6סא 18 פעונתפ-1א 02
%-110088% 0 110488-1 6טסא
8% ₪ע0ס+עסק
6
ס6גועם-ע82ת₪0-580ת6215 שעס+?עסק
11-ו %סא 19
. 1ת20₪08 -118002858%--ת6ת1180 שעס+תסק
. 100וע8-02ת580-ץ11ם019
. [0%6-268006ו18- 26861 0י' "10" 6טסא
מסת1 40 < 6סא 6סהת1-5א 19
שת1ט1) 6ס88ת1-5א צַם פט1תפ-1א צ16101טא
טס ססנו82-02ת580-₪
עססמעם 5126 ם0
1--ג2ת9 3 סךץ' "אמא" 6טסא
6
* 20 = 666תטסת ססגועם-82ת586-₪ 66גוס₪ס0
פעטנםפ-%1 * 1.5 * (80 - 6ס8ת1-5א) + מטנת%1-5
עסעפם 5126 ם0
. [1806-8620060- 26861 סד "אחא" שטסא
1 159
6 ₪ע0+ת26 .180%-10088% 10 10688-2 סטסא
6
. 22000-85%020%/-₪טת50-₪ 10 ססטעם-ַ88ת580-₪ 2486
. %6%%0-580082-שטת6215
צַטססא עַם 61861₪צ-%1 צ1כ161טא
. צַגנ608א-מטת506-₪ 8₪םת1ש01
םת ע00ו%608-מטת50-₪ < ססגועם-מַהַתסה5-₪ 12
ס60ו580(82-02-₪ משסעת עטא66%א-מטב50-₪ 866ע6סטפ
8 0-50 אַת0101
8 צַ2 10₪85-₪ום56-₪ צ1סדס נטא
מטסת 151₪א-₪ שתנט01
151₪א-מטת56-₪ 10 ם151א-₪ 266
6
.שנפנא-₪ 10 0ע26 6טסא
ססנוע82-0ת580-₪ מסעת 81₪נא-₪ 66ה8ע6טופ
.01 |, %86600-580282-₪ שת1ט01
. 86%%0-885%020%-מטת50-₪ 10 6500א-ע82ת580-₪ 466
. 80118 -8%6 180085 - ת0ת110
.ע1508א-21 710 ע1508א-81 6טסא
.שסת21-5 10 מסתפ%81-5 פטס
.21-58 10 %1-52806 6טסא
בעטנתפ-21 710 עטנתפ-%1 6טסא
.1₪נ6180צ-1ק2 10 61801₪צ-%1 6טל0ס
.פהא-1ת 10 151₪א/-₪ 6שטסא
.0 -88ה21-580 10 60ג0ע22-ע8ת580-/ סטסא
. ת₪8%6-2006טת65 10 8גוט38-86-2616%עטת5 6טסא
- 110 -
)198(
)195(
)196(
)197(
)198(
)199(
)200(
)201(
)202(
)203(
)208(
)205(
)206(
)207(
)268(
)209(
)210(
)211(
)212(
)213(
)218(
)215(
)216(
)217(
)218(
)219(
)220(
)221(
)222(
)223(
)228(
)225(
)226(
)221(
)228(
)229(
)230(
)231(
)232(
)233(
)238(
)235(
)236(
)237(
)238(
)239(
)240( 1180ה6ת-18008586-2008ת1 .
.6תפ-22 10 שסת1-5א שטסא (281)
.80%תפ-22 10 80%ת1-5א סטסא (282)
.עגו1תפ-22 10 עט1םפ-%1 סטסא (283)
72-5800820 10 ססגועם-82ת586-₪ סטסא (218)
.3 ס10 80068-אט%2-5 סטסא (255)
.86-200מטת365 10 1ם6166-20₪8ק-6בעטת9 סטסא (26)
)237( 500.
.ות -85%020%א-מות50 סי' 85%0206-82000/-שטמ56-₪ 6טסא | (238)
. 1518-טות56 0 181₪א0-מטת50-₪ שטסא | (249)
85%0206-6%00-מטות50 10 6650א-85%0206א-םטת56-ש₪ 86| (250)
1-מ א85-50עטת5 מסתעק 6-00העטתפסת 166עט | (251)
.1 3 שת1סת8ט460 ע60+? (252)
500%1-2-8%עטת5 מסעץ ם86-200שטת68ת 66+עח | (253)
.1 2 שת1סת8ט46 4+662 (258)
50₪286-500%0-3 ש₪סעץ ב86-200שטת65ת 6סצעח | (255)
.6 1 שת1סת4008 ע1+60 (256)
הסבר:
שורות 21 - 20: קובצ יכול להכיל יותר מסוג אחד של רשומה, אפילו
אם אורכם של הסוגים השונים שונה. למשל, בדוגמה זו, קיימות שתי
רשומות, אחת שמתאימה לעובד קבוע בעל מספר זיהוי והשניה לעובד
זמני שאי לו מספר. עבור עובד זמני אין אנו מחשבים מיסים, כך
שמספר הילדים אינו חשוב. אבל, אנחנו מעוניינים שיופיע בדוה סוג
העבודה של העובד הזמני. לרשומות אלו מתייחסים בביטוי "מ6פק
6 660268". בכל מקרה, הביטוי הזה הוא אופציונלי, ונכלל
לצורכי תעוד בלבד.
שורה 23: תיאור הסוג הראשון של רשומה.
שורה 31: תיאור הסוג השני של רשומה.
כאשר יש יותר מסוג אחד של רשומה בקובף גודל שטח המאגר המוקצה
בזיכרון להחזקת רשומות הקובצ הוא כגודל סוג הרשומה הגדולה
ביותר. כניסות תיאור הרשומות (ברמה 01) מתייחסות לשטחים חופפים,
כי כולן מיוחסות לאותה כניסת תיאור הקוב (פץ). לכן, אפשר
להת: יחס בכל שלב לכניסת תיאור נתון שמופיע בכל אחת מכניסות
תיאור הרשומות. בכל זאת, מקובל להתייחס לשמות שתוארו עבור השדות
ברשומה הנמצאת עתה בשטח המאגר.
אבל איךך יודעים איזו רשומה נמצאת עתה בשטח המאגר? יש לבדוק את
תוכן הרשומה כדי לברר את התשובה לשאלה זו. השדה 086א, המוגדר
בשורה 2%, מכיל את הערך "א" אם מדובר בעובד קבוע, ואת הערך "2"
אם מדובר בעובד זמני; על-סמך ערכו של אותו שדה, אנוה מגלים את
סוג הרשומה שנקראה וכתוצאה מזה יודעים איך להתקדם בעיבוד (ע:ין
בשורות 176 - 16%).
שורה 39: דף פלט מחולק לשלושה חלקים, חלק עליון (105), חלק
= 111 =
תחתון (א207108) וגוף הדף (צ00ם 0₪גכ2). גוף הדף מחולק לשניים,
השטח הרגיל ושטח השוליים (4884 06א0011ע). המתכנת קובע את גודלם
של שטחים אלה על-ידי הכנסת הערכים המתאימים לביטו* 18 6שהתצם.
סכום השורות בגוף הדף (5%) ועוד השורות למעלה (6) ועוד השורות
להלן (6) מגדיר את הדף הלוג'י הוא 66, שהוא גם גודלו של הדף
הפיסי. ברוב המקרים נרצה שהדף הלוגי יהיה שווה לדף הפיסי. המקרה
היחידי שבו לא נרצה שהדף הלוג* יהיה טשווה לדף הפיסי הוא כאשר
מדפיסים תוויות או תלושי משכורות, שגודלם הוא רק חמישית או פחות
מדף. במקרה כזה נגדיר דף לוגי קטן יותר ואז במקום לעבור לדף
פיסי חדש בכל פעם שעוברים דף לוגי, נעבור לדף לוג* חדש, אבל
נשאר באותו דף פ'ס'.
הביטוי המופיע בשורות 42 - 39 מחלק את הדף כדלהלן:
1 1ך
2 2
73 שטח עלי*ון 3
8ך 106 41 פמאד1 4
5 5
6 6
1 1
2 2
3 3
: שטח רגיל :
09 50
1 1
2 שטח שוליים | גמתה 0א0071ק 2
3 9 21 0א0071ע אדזא 3
8 8
1 1
2 שטח תחתון 2
33| 06 47 פמאד1 3(
18 38|
5 55
6 16
כאשר מוסיפים את הביטוי 18 שְשַהת1], המהדר מגדיר באופן אוטומט:
מונה 2ע06ו6-00שַ8ת11 כד* להכיל בו את מספר השורה בדף שבה אנו
נמצאים ברגע זה. המהדר מקדם את המונה אחר* כתיבת שורה אחת או
יותר. כאשר ערך המונה גדול או שווה לערך השוליים (50 במקרה
שלנו), אחרי כתיבת אותה שורה (במקרה שלנו שורה 50) הוא יבצע את
= 112 =
הפקודות שמופיעות אחר* הביטוי :0ע 81 (שמשמעותן היא: עס פאם 47ב
₪ כלומר, בסוף הדף).
בטורה 17% ביקשנו להסתעף לפסקה 0%ע0%8א כאשר ע60מטס0-ס6שַת1.1
מגיע ל-50. בפסקה ההיא (שורה 163) משתמשים בגירסה חדשה של
הפקודה 166ע%2, בה הוספנו את המלים 886ק שםת01ת2008 ע4?00. מלים
אלו גורמות למדפסת לעבור לדף חדש ומחזירה את ערכו של 6ש8ת1/-
עססתט0ס0 ל-1. כאשר עוברים לדף חדש, לא עוברים לשורה הראשונה
בדף, מפני שכתבנו 6 = 100 46 פ6ת11. במקום זה, עוברים לשורה
השביעית בדף הפיסי, שהיא השורה הראשונה בגוף הדף שתואר קודם.
בכל מקרה לא יודפס דבר בשש השורות שמהוות את השטח העליון ובשש
השורות שמהוות את השטח התחתון.
כאשר מסתעפים לפסקה 0%ע80082, צריכים להזהר שלא נדפיס *ותר מארבע
שורות סיכום (שהוא סך השורות בשטח השוליים - שורות 51 עד 58),
לפני שנעבור לדף חדש. אם נכתוב יותר מארבע שורות נעבור באופן
אוטומטי לדף הבא, מפני שא* אפשר לכתוב בשטח התחתון. אם אחר כך
תופיע הפקודה: 8₪6ק2 שתנסת8ט8 ע106..4200עח, נעבור שוב לדף חדש
לאחר שכתבנו מספר שורות מועט, וזה בוודאי אינו מה שרצינו.
קיום הביטויים 8₪6ק שםת1סת8ט46 ע4900; 15 6שהת1 ו-₪02 46 מסיר
מו המתכנת את התפקיד של הכנת וקידום מונה שורות, טיפול בנושא
המעבר מדף לדף וסידור שוליים עליונים ותחתונים. בעבר, תפקידים
אלה צרכו זמן תכנות והיו מקור לטעויות.
המבנה המלא עבור הביטו* 15 88₪6ת1/:
5 פאַ6ַַת-+נוקסס-06פטם5 15 שסגאדן
[1₪צ18טת8-8%עטת5 47 0א20011 8ד₪1]
[10₪818-0%עטת5 102 81 סמאד]
[ 16₪8%8-0%מטת5 8017108 41 פטא1]
הסבר: המלים שהמתכנת ממלא (+868ת-+68ס-%סעטת5 וכדומה) מתייחסים
לקבועים נומריים שלמים, או לשדות נומריים שלמים. המילוי הוא
בדרך כלל בקבועים נומריים, אבל אם המילוי הוא בשדות נומריים,
הדף הלוגי יוגדר מחדש לפני כל ביצוע של פקודת פגטת.
אם המתכנת אינו כולל את הביטויים האופציונליים, ברירת המחדל
עבור 106₪818-%סתעטת8 ו-6-10₪8%68סעטת8 שוה ל-0, כאשר ברירת המחדל
עבור ש1נץ18טת8->8עטת8 הוא פהַ0ַַת-+טש6ס-%סתטםת8 וזה כאילו אין
שוליים בדף. התוכנית תבצע את הפקודות ב-₪02 בסוף כל דף, והדבר
יאפשר כתיבת כותרת לדף הבא (בשוליים התחתונים לא נוכל לכתוב, כ'
לא השארנו שורות שוליים. ניסיון לכתוב מן השורה התחתונה יביא
לדילוג לדף הבא).
- 113 -
המבנה של הפקודה 17₪/:
[ע8%0ם-1%ע8ק 230%] השטתפס2-6₪ת5 מדדתח
ן 1 מאד,1ן [ ע8קפ+ת מתסתמם
פטא .1 א ז ו |
8685ת6-+68-6₪ת5 וצצ
מסגק
[₪ד1וח-פאת] סהקת15ם "השפ דג |
ו ו -
הסבר: השדה בג8685ת0-+68-0₪ת8 מתייחס לשם מנימונ* (16תסשסתם)
שאפשר לתת בפיסקת 065ש%8-60181ק5 בחטיבת הסביבה. בפסקה ההיא
מרוכזים שדות שונים שיכולים להיות שונים ממחשב למחשב. בתכניות
ישנות בקובול היו כותבים באותה פסקה את הביטוי: א100-08 15 601-
שסגס. 1 היה קוד ספיציפי למחשבי 18% גדולים שסימן מעבר לדף
חדש ו-408₪ת2-ע102-0 הוא השם שהמשתמש בחר בו במקום 0601. היום, רוב
המתכנתים משתמשים באופציה של 0₪גק שגם חוסך פקודות וגם זמינה
ברוב המחשבים.
שורה 181: המבנה הכללי של פקודת ש1 הוא: אחםך (81ם6) קד
(וכדומה). התנאי שהשתמשנו בו עד עכשיו נקרא תנא: יחס
(ת61%10ת00 81מת3618%10), כי הוא נותן ערך בוליאני המשקף את היהחס
בין שני ביטויים אריתמטיים. בשורה זו, התנאי של הפקודה 18 הוא
מסוג אחר - תנאי מחלקתי, מפנגי שערך התנא יהיה טשת1? אם השדה
שהוא נושא התנאי משתייך למחלקה מסוימת. ישנן שלוש מחלקות שאל:הן
משייכים את הנתונים בקובול:
א. נתונים נומריים: נתונים אלה מתאימים לכל הפעולות החשבוניות.
התמונה של נתונים מסוג זה מורכבת מן התווים 9 וצ או 5. שדה
כזה מכיל רק ספרות (או סימן אם כך צויין בתיאורו).
ב. נתונים אלפביתיים: נתונים המורכבים מאותיות או רווחים.
התמונה שלהם מורכבת מתו העריכה 4 בלבד.
ג. נתונים אלפנומריים: נתונים המורכבים מתו כלשהו. מכיון שתווים
אלה לא חייבים להיות ספרות או אותיות, כוללת מחלקה זו גם | שדות
נומריים, או אלפנומריים עם תווי-עריכה.
כידוע, שפת קובול אומנם מגדירה היטב את הרכבו של כל שדה, אבל
היא לא בודקת אם התוכן האמיתי אכן תואם את הגדרת השדה. הסיבה
שהמהדר אינו מתריע במקרה א*-התאמה היא כדי שלא לגרום לטעות
ביצועית באמצע הרצת תכנית וכך לגרום ליציאה כפויה. הצבת תנא:
מחלקתי בפקודת 18 מספקת צורה אלגנטית לבדיקת תוכן שדה כלשהו
ומאפשרת להמשיך הלאה בצורה נאותה בהתאם לתוצאת הבדיקה של הפקודה
שן. צורתו הכללית של תנאי מחלקת* מופיע להלן:
6דתזא +
סיטה זב [1סא] 15 8866
- 114 -
הסבר האופציות:
א. 16שא: בודק אם שדה נומרי אכן מכיל רק ספרות (או סימן אם
הוא הוגדר לכך). השתמשנו בפקודה כזו בשורה 181 כדי להמנע מטעות
הביצוע שהיתה קורית אילו ניסינו לבצע פעולה חישובית על (תונים
לא-נומריים. במידה שנגלה נתונים לא-נומריים, במקום לבצע את
פיסקאות החישוב, נדפיס הודעת טעות (שורה 173 אחר ביצוע שורות
9 - 177) ונעבור לרשומה הבאה (שורה 175).
ב. 0זזסמהחתזה: בודק אם שדה אלפביתי אכן מכיל רק אותיות או
רווחים. תוצאת הבדיקה היא חיובית אם השדה מכיל תווים שנבחרו
מתוך:
(1) 2 - 4
(2) 7-2 8
(3) רווחים
אופציות ג' ו-ד' קיימות רק במהדר קובול במחשב אג/:
ג. ₪1400710-10088-0458ע81: | כמו ב', אלא שתוצאות הבדיקה חיוביות
רק אם השדה מכיל תווים שנבחרו מתוך (2) או (3) לעיל.
ד, 6458-תתקקט-1 0110ע1: כמו ב', אלא שתוצאות הבדיקה חיוביות
רק אם השדה מכיל תווים שנבחרו מתוך (1) או (3) לעיל.
אופציה ה' קיימת רק ב-11 0/5-0080:
ה. 1נאגא: בודק אם השדה מכיל רק תווים חוקיים ביפנית.
חשוב לציין שאסור להפעיל בדיקה א' על שדות המוגדרים כשדות
אלפביתיים, ואסור להפעיל בדיקות ב' - ד' על שדות המוגדרים
כנומריים. משמעות הדבר היא שאם יש חשש לגבי תוכנו של שדה נומרי,
אסור לנסת את תנא'י הבדיקה 410806016 5886 1%, אלא חייבים
לכתוב: 6נעסשטא ססא 5866 1%. יש גם היגיון בחוק זה. העובדה ששדה
אינו אלפביתי, אינו מוכיח שהוא בהכרח נומרי. יכול מאוד להיות
שהוא מכיל תווים שאינם אלפביתיים וגם אינם אלפנומריים ולכן
בדיקה כזאת היתה יכולה להטעות. כמו כן, אסור לכתוב 9866 9ך
סבעסמטא לגבי שדה המוגדר כאלפבית'י, היות והסיבה היא שהעובדה
ששדה כזה אינו נומרי אינו מוכיח שהוא בהכרח אלפביתי. רק לגבי
שדה אלפנומרי מותר לשאול אם הוא 10תמאטא או 60דסםזזס זה.
דוגמה: 216 סטשה08 01
.(4)5 | 216 6₪ם 8 01
.(8)א 216 5866 01
6 15 086 19 (1)
6בעסטטא 06 18 6שש08 1% (2)
6 1585 מסםפ 19 (3)
טא ססא 158 מסתפ 1% (5)
68 16עפשטא ססא 18 5866 19 (5)
מסת1 4102806016 ססא 18 5806
6-68 1נסמטתהתק41 שעס+ססק
- 115 -
פקודות (1) ו-(5) אינן חוקיות. פקודה (5) בודקת תחילה אם השדה
אינו מכ;ל רק ספרות; אחר-כך בודקת אם השדה אינו מכיל רק אותיות.
אם שני התנאים מתקיימים, ידוע שהוא אינו מורכב מספרות בלבד או
מאות*יות בלבד. רק אז אפשר לומר שהוא אלפנומרי, כי הוא מכיל
שטילוב של ספרות ואותיות, או שהוא מורכב מתווים שאינם אותיות או
ספרות.
דוגמה: - . 0% 082-061 111 02
.8 16 ת0ת315-0₪ס8% | 05
?6002-4-6%0₪06 216 9)8( . 05
תס 50806 = תסת18ת-מסאהא 12
0% מע0ס?עסק
6
תסםת1 4102806516 תסתפנת3-מס%הא 19
6062צע-2661%8%6 םע0ס+?ע6ק
6
.816' מעס?עסק
.ע8661%8%6-606
תס1 10עסמטא 18 6062-4-86%0₪0%6צ 19
1וס110₪8260-1'1 שעס?עסק
. 6
.1% מע0ס?עסק
הסבר: לכל פריט במלאי יש מספר פריט המורכב מאות אחת וארבע
ספרות. בודקים אם במקום הראשון יש אות. אם התשובה ח*ובית,
בודקים אם ארבעה התווים הבאים הם ספרות. רק אם המספר תקין
ממשיכים את הטיפול.
סוג תנאי שלישי נקרא "תנאי סימן" (ם616:0ם00 ב518₪) ומטרתו לבדוק
אם ביטוי אריתמט הוא< חיובי, שלילי, או אפס. ברור שתנא* *חס
מאפשר גם-כן בדיקה כזו, אלא שבתנאי סימן הבדיקה מודגשת יותר.
להלן הצורה הכללית של תנאי זה ואחריו דוגמה לשימוש בו:
ץז
מטזיסטא 1 [01א] 15 1%₪661ע1-82ט16ס
2-10
תסת1' 08806106 6ס8א 18 16עהאק ?1
.(651-30080? ₪ע20עסק
סוג תנאי נוסף נקרא "תנא* שם-תנאי" (ם010ס61ת00 6מהא-ת61010ת00).
סוג זה ראינו בעבר ונכלול אותו פה לשם שלמות. כדי להפעיל סוג
תנאי זה, דרושה כניסה ברמה 88 במבנה שנראה כך:
ו תד ו 15 ו 1פתס-0₪ת8 88
1 שת 15
- 116 -
דוגמאות להגדרת תנאי כזה נמצאים בשורות 132 ו-1384 בתכנית
הקודמת. הטימוש בתנאים אלה נמצא בשורות 147 ,189, 199 ו-203. לו
לא הגדרנו תנאי שם-תנאי היינו צריכים לכתוב באריכות במקום שורה
7:
"אמא" = שנתטססא-+26861-501 0611 6006ע שעס+עסק
ודוגמה נוספת:
.+ 16 תסטת1ת0 02
.5 טעםס 0 426 081₪068 1--- ְ ְ ְ 888
.6 18 081068 89:11 88
.74 6 081008 | שנעהת6ם-8%ט801ת%0286-0 88
18 08106 מזַעַ8ת8%01086-20ת82-0ם08 88
.1 ,0 6עג 081068 ם0ם6286-110א 88
1 18 081068 ת0ג08082-116 88
.5 טעת6 13 426 0810068 8 א 88
.4 18 081008 8ט-8₪82 88
פקודה אפשרית בזמן חישוב משכורת תראה כך:
ת6ג 65001+-120-08082 19
596 סאפא
6
מ6ג1 85061/-08282 12
ס6טתם-82ת580-₪ * 1.1 = 466מטסת ססע22-ע8ת0-586 6סטקםס00
86
ממ מִ1עְתס20-8%108%ת0285-0א2 19
ס6עם-0-586282 * 1.2 = 666תטסת ס6עם-82ת0-580 6סוקשס0
6
תס מנעַ8ת20-85108%ת08₪82-0 ?1
ס6תם-8ת586-₪ * 1.3 = 666תטסת 0ס82-8206ת580-₪ 00166
6
מסם ת0מם35286-110 19
ס6תם-58682-/ * 1.2 = 666תטסת 0ס6טע82-2ב586-₪ 66נ1ק₪ס0
6
תסת1' מ0םת08082-1106 19
ססטעם-82ת580-/ * 1.5 = 666ת0₪ת 82-2260ת586-₪ 000066
6
תס 5108ע100ת0-%028% 19
ס6טע580(82-0-₪ * 1.6 = 606ממ0ת ססטעם-82ת580-₪ 6טסטקפס00
6
תג 106281%8ת08₪82-0 19
ססטע82-0ת580-₪ *.1.7 = 666תטסת 60טת82-22ת580-₪ 066ק00₪
86
.1% שעס+?עסק
הערה: אסור לכתוב: 1-8 = סטת1ת0 15
אם נתנו שם לערך מסוים של המשתנה גסטתנת0, אסור להשתמש בשם זה
יחד עם שם המשתנה. במקום זה, או שלא נשתמש בשם ערכו של המשתנה,
ונכתוב:
2 < 46 16 > בסטם1ת0 1%
או שלא נזכיר כלל את שם המשתנה ונכתוב: 2-8 12
- 117 -
לסיכום, ראינו ארבעה סוגי תנאים:
א. תנאי יחס (8ת61%10ת00 81ת618610ַ)
ב. תנאים מחלקתיים (5ת01%610ת60 01858)
ג. תנאי סימן (5ם61%610ת60 ת₪ש51)
ד. תנא* שם-תנא* (5ת61010ם00 6מהא-ת61%610ת00)
אפשר לשלב תנאים אלה יחד בעזרת האופרטורים הבוליאניים 08 ,פאג,
ו-01א, כמו שנראה להלן. דוגמאות:
תסתך 10 < עטש1ק-0₪81+? 6ם4 802860106 18 העסבץ 7%
. 8-1,01.508%ת18218] עעס+עסק
מסם1 520-0289862 03 16עסמטא פ>סא 15 תססםפ6ת0-עה8ספנא 19
.180% מעס+?עסק
בדוגמה הראשונה שילבנו יחד תנאי סימן אם תנאי יחס, בדוגמה השניה
שילבנו יחד תנאי מחלקה עם תנאי שם-תנא'.
43 תכנון תכניות גדולות
בהכנת תרשים הירארכיה יש שני מושגי יסוד עליהם כדאי להתבסס:
א. דביקות (ת6810ת060): מידת הקשר בין האלמנטים השונים במודול.
מודול נחשב לדביק אם הוא מבצע משימה אחת, או כמה משימות
המיוחסות זו לזו ופועלות על אותם נתונים.
ב. זיווג (6ת11קט0ס00): מידת האי-תלות בין מודולים. ככל שהזיווג
גדול יותר, גדלים הסיכויים ששינויים במודול אחד ישפיעו על
תפקודו התקין של מודול אחר. נובע מזה, שרצוי להקטין את מידת
הזיווג כמה שיותר. זיווג במידה קטנה גם משפר את קריאות המודול,
מכיון שאפשר לקרוא אותו בלי להתייחס למודולים אחרים.
לאור שני העקרונות שהוזכרו, יש לשנות את תרשים ההירארכיה שהוצג
בראש הפרק כדלקמן :
א. שם כל מודול צריך להיות בנוי בצורה הבאה:
(1) פועל. יותר מפועל אחד מצביע על יותר מתפקיד אחד, דבר
שנוגד את עיקרון הדביקות.
(2) נשוא.
(3) שם תואר (אם נחו ליתר דיוק).
דוגמאות:
שם טוב: 6600א-פַתס58-טטת18ת0.
שמות רעים:
(1) | 008206א: חסר פועל. תיקון: 0%5ע008א-65ק4ת.
(2) 8%: חסר פועל. תיקון: 00880-1806ת80065-8.
(3) 8טמ840664-1: יותר מדי כללי. תיקון: מט1ת185-8%טמ4006-1.
- 118 -
בתכנית קובול, מספר המודול ושמו יופיעו מחוברים יחד כשם הפסקה
המקבילה למודול. לכן, צריכים להקפיד שמספר התווים הדרושים
להרכיב את המספר והשם יחד לא יעלה על שלושים, שהוא האורך המירב:
של שם בקובול.
ב. פקודות כגע3 ו-03118 צריכות להופיע כמודולים נפרדים, כי יש
בהן שימוש רחב, ואין סיבה לקדד אותן בנפרד בכל מודול שמשתמש
בהן. מכאן:
(1) לכל קוב יהיה מודול אחד שמבצע פקודת פגמת.
(2) לכל קוב יהיה מודול אחד עבור כל סוג של כתיבה מאותו
קובצ, למשל כתיבת שורה אחת, שתי שורות, דילוג לדף חדש
וכדומה.
ג. על כל מודול לבצע רק תפקיד אחד שישתקף מתוך שמו.
דוגמאות:
(1) השם ת19181128610ת1 אינו קביל, כי הוא אינו מתאר תפקיד
מסוים. הוא מתייחס לתְפקידים אחדים שצריכים להתבצע בהתחלת התכנית
(דביקות בזמן - ת06510ת00 20281ם16).
(2) השם 6טקת616-1ת18 אינו קביל כי הוא מתאר פונקציות דומות אך
שונות (דביקות לוגית - ם6510ת00 2081081).
(3) השם 6-116טקת026866-1 אינו קביל, כי הוא מתאר פעולות שונות
על-אף שהן מתבצעות על אותם נתונים (דביקות תקשורתית | -
םמ0006810 81ת168610תטעםס0ס).
בדוגמה שהופיעה בתחילת הפרק, בדיקת הנתונים אינה צריכה להיות
כלולה במודולים 8ַטט8א-₪6006 ו-1ת8ש8-2טס₪9, מפני שהיא< מייצגת
פונקציה בפני עצמה, במיוחד כאשר פונקציה זו משותפת ליותר ממודול
אחד. עדיף לבנות מודול מי*וחד, למשל מנתט%סא-86618%, שיבדוק את
הנתונים ויחזיר דגל מיידע שערכו יהיה 0 אם הנתונים נומריים ו-1
אם אחד מן הנתונים אינו נומר* (אפשר גם לעדן את הניתוח לפ:
דרישות המתכנת). אנו גם בודקים טעויות במודול 88 ת580-טטםת15ת0-
ססטעפ. אם נגלה שם טעות נעביר 2 לדגל ההוא. בשני המקרים הדגל
יועבר למודול 88008586-180%-ת0ת180 שיעביר את ההודעה הנכונה
(שנקבעה על סמך ערכו של הדגל) לשטח הכתיבה. ההודעה תיכתב אז
לאחר קריאה למודול המיועד לכתיבה,
ד. מספר המודולים שמסתעפים מכל מודול צריך לנוע בין 2 ל-9. מספר
קטן יותר מציין שאין חלוקה מספקת ומספר גדול יותר מציין שהחלוקה
גדולה מדי. בתרשים לעיל מספר המודולים המסתעפים קטן בתחילה והוא
גדל כאשר יורדים בתרשים.
ה. מתארים תוכן של כל מודול על-ידי שילוב משפטים באנגלית ומשפט:
קובול, זוהי "אנגלית מבנית". אורכו המירבי של תיאור כל מודול
הוא 60, כמספר השורות בדף פלט, כדי שאדם יוכל לראות את כל
המודול במבט אחד.
- 119 -
ו. אפשר לעבור מתרשימי הירארכיה לתרשימי מבנה על-ידי הוספת
הפרטים הבאים:
(1) הצגת לולאות עיקריות על-ידי שימוש בסימן: %
(2) הצגת החלטות עיקריות על-ידי שימוש בסימן: %
למשל:
משמעות תרשים זה היא שנבצע פיסקה 8 אם התנאי יתקיים, ונבצע פסקה
06 בלולאה.
(3) הצגת זרימת נתונים בין מודולים בעזרת חא עם עיגול ריק בקצהו
השני, והצגת זרימת פיקוח בין מודולים בעזרת חצ עם עיגול מלא
בקצהו השני. למשל,
ז. כאשר מציירים תרשים הירארכיה או תרשים מבנה, אם אין מספיק
מקום בדף, אפשר להפסיק את הפיתוח בענף מסויים ולהמשיך אותו בדף
נפרד.
ח. הסידור של תת-מודולים משמאל לימין הוא לפי סדר הביצוע (:ז"א
סדר כרונולוגי) כמה שאפשר.
דוגמה: בדף הבא נציג שיפור לתרשים ההירארכיה שהוצג ב-7.2.
השיפור מבוסס על ההנחיות שנמנו פה. הנח שהכותרת מורכבת מכמה
שורות. כדי לשפר את הקריאות, אם תהליך מתבצע כמה פעמים, לא תמיד
כוללים את התהליכים הכפופים אליו.
ט. כאשר כוללים חיצים להצגת זרימת נתונים ופיקוח, קשה לפעמים
להבין את התרשים מרוב פרטים. יש הצגה חילופית המורכבת מן
האלמנטים הבאים: :
(1) תרשים ה*רארכיה פשוט.
(2) דף 120 (ראשי תיבות עבור 00055ק צשקצט0 ,צטקא1) נפרד
עבור כל מודול. להלן דוגמה לדף כזה:
- 120 -
מערכת מחבר
מודול תאריך
קורא את המודולים הבאים: נקרא על-ידי המודולים הבאים:
משתני קלט: משתני פלט:
תיאור תהליך העיבוד:
משתנים מקומיים:
= 121 =
1 פקודת 0091
הצעדים העיקריים בהפיכת תכנית מרעיון למציאות הם:
א. בניית תרשים הירארכיה.
ב. הכנת תרשימי זרימה.
ג. בדיקת ספריות מקור (165ע11028 06עט50), זאת אומרת ספריות
המכילות קוד בקובול עבור קטעי תכניות. אם חלק מן הקוד הדרוש
לנו נמצא בספריה כזאת, כדאי להעתיק אותו לתוך התכנית ולא
לכותבו מחדש, כד* לחסוך זמן ולמנוע שגיאות. *תרון נוסף הוא
להשתמש בתיאורו של קובצ מתוך הספריה, כך שאם בעתיד *חולו
שינויים במבנה אותו קובצ, נצטרך לעדכן את התיאור רק פעם
אחת, בספריית המקור. במחשב אג, "יש סיומת "18" לשמות קטעים
השייכים לספריית מקור. במחשב: 18%, המתכנת מצהיר על ספריית
המקור באמצעות פקודות 10.
כדי להעתיק קטעים מספריית מקור, משתמשים בהוראת 000%. הוראה זו
דואגת לכךך שלפני*י הידור, הקטע המתאים ישובף בתכנית והמהדר יפעל
על התכנית המורחבת. להלן המבנה של פקודת צק60:
+ 8
==6-2א66 -2501100== ==1-%א06 -501160==
58066-2 צם 5-1 זסמת
- 112 11
8-2 1
הסבר: %א86060-66ק מתייחט למלות טקסט אחת או *ותר. מלת טקסט
מוגדרת כקבוע, מפריד (חוצ מרווח) או מחרוזת תווים מוקף על-:ד:
מפרידים. 2-%א56060-06%ק יכול גם לא לכלול לא אף מלת טקסט אחת.
8 - כל מלה חוקית בשפת קובול.
דוגמה: ,==8>= עָ2 | ==ע== 8ת2601801 ג800602-1.84080 צ000
ששםם צפּ ==90/==
8 55
לפני: .5 78106 099(ץ)9 216 מ0ס0מ68ת0-ם80ש18% 05
אחר* : .5 08106 (9)8 216 ב0סס0ג685ם0-ת18%080 07
הסבר:
את האות ע החלפנו ב-8. לא יכולנו לכתוב: 8 עַ2 ==ץ== שתזס18קסת
כי אז ה-ץ היה מוחלף על-ידי 8 עם רווח בכל צד ונקבל ( 8 )9,
תמונה שכמובן תגרום לטעות בזמןו ההידור. שים לב שהערך 5 ב-"6ט781
5" לא שונה, כי בקשנו החלפה של 05 ולא של 5.
דוגמה: ==, [8801180,]-08%בת365== שת001861 ב006%2-1.8086א עססס
==%ת0116-₪8%טת65== צם
. "820680" צ2 "ע6א"
= 122 -
לפני: . ת1,811180- 658% 01
. "קֶ6א" 6ט081 (3)א 16ק 1880-8108 | 05
אחר* : . 1,8411801-188%ום365 1
. "825680" 78106 (3)א 16ק 0080 81/-ת18%080 | 05
בדוגמה זו, פקודת ההחלפה הצליחה לפעול על הקבוע "עָפַא", אבל לא
על התמליל "ג1,480486->ה8מטתפסת". הסיבה לכך היא שב-6א50060-06ק
כתבנו ".ב18%080-+8מטתפסת" עם נקודה, אבל בלי רווח אחרי הנקודה.
כמו שהוזכר כבר, נקודה בלי רווח אחריה לא נחשבת כמפריד ולכן
". ת180ו1.88- 0₪8%ת369" נחשב כמלת טקסט אחת בלבד ב-050160-6066-1,
אבל בתכנית הוא נחשב כשתי מלים, כ יש רווה אחר? הנקודה.
המלה הראשונה ה*א: ת18%086->המטתפסת והשניה ".". כתוצאה מזה,
אין התאמה בין ה-56060-6068-1ק המורכב ממלה את עם פסיק בסוף
לבין הקטע בתכנית שבו יש אומנם אותה מלה, אבל בל נקודה בסוף.
לו היינו כותבים כך עבור 1-%א60-06ש56ק: == .ג%006%2-1,8%080==
אז ההחלפה היתה מצליחה.
דוגמה נוספת: .ת1510ט1ת ת%611108010ת166 (1)
. [-₪8שט .16-םהעשספק (2)
.88%000%/-206-00661 עַם ג2006 שתנסה18קסת טנהבטתם צְפסס (8)
.ת560%10 מ228010ו18+תסס (90)
)101.( 50206-00 00100 .
1 . מ6סטסם 00-00160% (111)
.ת560%10 6גוק6ט6-0טסת1 (,121)
.1 116-00ע (13)
.1% 1 מ4881₪ 0%ע%885%02-%006%2 581666 (.ם18)
.0% 10 מ8591₪ 0%ע%85%0-2062-008661 561606 (152)
.מסנפנטנכת 2808 (16)
.ת560010 16צע (17)
.8 ץ 0 00 (18)
0% פע (19)
)201( 1.8061 6002068 226 586
08ו80-1186-85%020%ות368 426 6002065 868 (21₪)
, 1ת8ה20-185%020%-> 8הנות 369 (.221)
.6מהא-116ע 158 כ1 0% 081606 (23)
)25/( 01 ת65תטמ86-85%0205-380ו08 .
.א 216 0686א 02 (252)
.(5)א 216 מהספנא-%1 02 (261)
. (15)א 16ק מסתפ-21 02 (271)
סשסצדק 0% 02 (281)
. (3)א 16ק 62 02 (29₪)
.9 סד עטזםפ-%1 02 (302)
+ 210 61801₪צ-%1 02 (311)
)32( 01 ת65תטע8>-85%020%-208ת1 .
.א 16ק 1 02 (331)
- 123 -
. (5)א 16 ע1508א-ם41 02 (0מ3)
. (21)% 16 2-ע8ט8ת-050 02 (352)
. (3)א 216 11169 02 (36)
. (5)א 216 8 02 (372)
.0 8/- 2002-00601 צַ8 תסס2 שתנס18ססת 16600 עקס6 (38)
9% פע (392)
)801.( 18061 3660268 26 46
8 54 18 6שַהת11 (.811)
0 46 שַתנסססע תל₪1 (ז42)
)83( 131065 46 100 6
6 שססססם 46 68ת11 (.ז48)
.ת206-8%מטת368 18 360026 8ס8ע (45₪)
. (133)א 16ק .ססת-86מטת68ת 3 01 (562)
.ת500%10 56028₪0-שת1אעסט (87)
."0" 18 08106 (3)א 16ק שנמט6סא-+26861-50 77 (88)
."אחא" 15 0816 מנתטססא-+50% 88 (89)
. (10)א 16ק סמא-116ע 77 (50)
.ם1510ט1כע 6עט66סספק (51)
.%נטת (52)
"זאטס , 2דמטסאג אמה5 15אעסגד" צַ1518כ (53)
. 6מהא-116ע/ 400006 (58)
,006%2-0858%020%א סטקת1 מ006 (55)
)56( 0606 206-00661 0%.
)57( 366 0%
. ₪ם1ת600א-?26861-50 10 "אמא" שטסא 6םם 26 (58)
מנתטססא-501 611ת0 ₪6006 מ02ס?עסק (59)
.0% 206-0600661 , 06ע85%0א-2006%62 010586 (60)
. תות 5605 (61)
)62( 4.
==0 < מטנתפ81-5 6ת2 "א" = %066== 8ת3601801 1גוק1? עַכס6 (65)
.>="א" = 8066== צ2 (66)
02 "א" = 6 15 (672)
ת6מך (15 < עטנת%1-5 6ם3 "2" = 8066) (682)
. 1886008 םע0?מסק (692)
)702( 36860 0%
. םנמו60א-26861-502 70 "אמא" שטסא 6םם 46 (/71)
)12(( | .
8מטהא-85%020%-008%ות369 שסעע ב6סכ6-2ה8שטת65ת 6ס1עש (13)
58 1 שתנדסתה8ט46 42002 (73)
שסם 6ב (פך)
8וש%8-8%6-889%020%מט0ת65 מסעע תסס8%6-2מטת65ת 166עש (76)
. 6 שתנסתה8ט20 22602 (77)
הסבר: התכני*ת שלע*ל אינה תכנית מקור אלא תדפיס של תכנית אחר:
שלב ההידור. תכנית המקור יותר קצרה מכיון שהופיעו בה כמה
- 124 -
איזכורים של הפקודה צק60 (שורות 8, 18, 38 ו-65). בתכנית
המהודרת מופיעות גם ההרחבות של אותן פקודות צַָ000 (שורות 15 - 9,
,39 - 46 ,19 - 7 71 - 67). המהדר מוסיף את האות 1 או 0
להראות שאותו טקסט לא הופיע במקור, אלא נשלף מספרית מקור.
שורה 15 - 9: שורות אלו נשלפו מן הקובף 118.ט1פטאםע. המלה ת0סע
שהופיעה בספריית המקור הוחלפה על-יד* 0%6ע%858%02-006061-תססכ2.
שורות 37 - 19: שורות אלו הועתקו כמו שהן מהקובף 45.178אמד.
שורות 46 - 39: שורות אלו נשלפו מהקובף 7₪2004.018. המלה 206
שהופיעה בספריית המקור הוחלפה על-ידי 0%ע40א85%א-206-00661.
שורות 71 - 67: שורות אלו נשלפו מהקובף 118 טק1ע'. החלפנו פה
פסודו-טקסט המורכב מכמה מלים על-ידי פסודו טקסט קצר י*ותר.
5 תורגילים
שאלות
1. השלם את הטבלה הבאה:
שדה שולח שדה מקבל
סדק ערך 6 תוצאות העריכה
(9)6 3 2,009
99 8 חיובי %2,222.9908
(59)6 6 חיובי 999.999-
5%%%*% 99 2.8 99
(6)א 106 אאאפבאאא
2. מלא את החסר בטבלה להלן:
1% 241666 36 16
2.02 22.99
5. 9005 0.5
5. 095 5
2.06 9, 2
15 9
8.6 29
6, 00ססס 106.|.""
448 %%%,אא%א, א
29 %%*,א%א%*, 4
680. 500892 2.0
6808. 900492 8, 9
608. 500192 ,2
2, 58 62.2
33| %, 9
- 125 -
תכגיות
.1
קובצ עובדים מכיל את הנתונים הבאים, עם הדרישות הבאות.
שם עמודות תיאור
מספר מועסק נומרי
מחלקה 2 אותיות 2 מספרים
שם אלפבית:
שעות עבודה נומר:
שיעור 9
סוג עבודה 1 אם מותר לו לעבוד יותר מ-35
שעות, אחרת 2.
כתוב תכנית שתוציא כפלט את התוכן של כל הקובצ עם הודעה בצד כל
רשומה כד* להודיע על טעויות כלשהן בשדה כלשהו. הכן כותרות לכל
הף,
.2
והתייחס לאפשרות שהדוח ישתרע על פני כמה דפים.
חברת תעופה מראיינת בנות המתעניינות לעבוד כדיילות. הדרישות
המזעריות הן:
א. גובה: 1.5-1.7 מטר
ב. משקל: 55-55 ק"ג
ג. גיל: | 18-25
ד. מבחן: למעלה מ-80.
בקובצ הקלט נמצאים נתונים אלה ועוד פרטים אישיים על המועמדת.
הכן תכנית שתדפיס מכתב לכל בת העומדת בדרישות. התכנ*ת צריכה
גם לקבוע את זמן הראיון החל מ-9 בבוקר ביום הראשון בחודש. כל
ראיון נמשך מחצית השעה.
קובצ נתוני משכורות עובדים בנוי כך:
תיאור עמודות
מספר זהן: (9)8
שם (2)א
מחלקה(קוד) (9)2
שכר חודש: 99
הנח שרשומות הקובצ מסודרות לפי שם העובד בתוך מספר מחלקה.
הכן תכנית שתוציא כפלט את רשימת כל העובדים במחלקה עם שכרם.
רשימת עובדי כל מחלקה צריכה להתחיל בדף חדש עם כותרת מתאימה.
בסוף כל דף צריך להופיע סכום כל המשכורות עבור אותה מחלקה.
כל המשכורות והסכומים צריכים להופיע בצורה ערוכה בלי אפסים
מובילים ועם סימן שקלים במקום המתאים.
- 126 -
פרק 8
טבלאות
1 טבלאות במימד אחד
מעסיק חושש שפועליו חוגגים סוף שבוע ארוך ואינם מגיעים לעבודה
בזמן ביום ראשון. כדי לבדוק את נכונות חששו, הוא אוסף מספיק
נתונים כדי לברר את סכום השעות שכל הפועלים יחד עבדו בכל אחד
מימי השבוע (א' עד ה'). אם הסכום עבור יום א' קטן באופן *חסי,
הדבר מסמן שבאמת ההעדרות גבוהה מן הרגיל באותו יום.
דוגמה:
.ת1510ט1כ ת01+108%610ת140 (1)
. 8-8מקגות .16-מהעשסמס (2)
.0 116-0ע | (13)
.1 10 4551 80%ת800662-5 561660 (18)
. "00%.280" 10 םש45851₪ ג206 561606 (15)
.ם1310ט1ת 2868 | (16)
.ת560010 116ע (17)
6% פע (18)
468 22060 3600265 1.8061 (19)
.6ס-86שטת65ת 18 360026 868 (20)
.86-580%מטתפסת 01| (21)
.(9)2 16ק 1 02 (22)
.(9)2 16ק 2 02 (23)
.(9)2 16ק 3 02 (28)
.(9)2 16ק 84 02 (25)
.(9)2 216 5 02 (26)
תססכ פק (27)
46 26 660268 1.8061 (28)
.ת200-008%ת369 15 360026 2868 (29)
. (133)א 16ק . 0₪8%6-2001מת68ת 3 01 (30)
.ת560%10 5602886-שת%1עסט (31)
.0 08106 (9)5 016 מסתפנת 77 (32)
. 6גו081 (9)5 16ע 61 77 (33)
- 127 - =
. 66גו81 (9)5 216 1תפננת 77 | (34)
)35( 77 תנטנסק 16 9)5( 81:66 0.
. 8106 (9)5 16ק 1תפנשהת 77 (36)
.1שטמפפ" 01 (37)
.א 16 11165ע 02 (38)
.(2)5 16ק ת0ת15ת-מטת50 02 (39)
(80)א 16ק 169 02 (80)
. "מספר השעות שהפועלים עבדו ביום ראשון: "6גו081 (81)
. (87)א 16 1169 02 (42)
.טפ 01 (83)
.א 6נק 1165נע | 02 (88)
. (2)5 16ק 1תסת5-מטת56 02 (85)
(40)א 16ק 11165ק 02 (86)
. "מספר. השעות שהפועלים עבדו ביום שנ'י: " 08106 (47)
. (87)א 16ק 116%נע | 02 (848)
)49( 01 9.
.א 6נ1ק 11162ע 02 (50)
. (2)5 16 1151תפ-מטתס5 02 (51)
(30)א% 16ק 1116%ע 02 (52)
. "מספר השעות שהפועלים עבדו ביום שליש': "08106 (53)
. (87)א 016 1162 02 (58)
.טפ 01 (55)
.א 16ק ת1116ע | 02 (56)
)57( 02 5ס0תט-ת1נט1סַצ 016 2)5( .
(80)א 16 16%ננע | 02 (58)
. "מספר השעות שהפועלים עבדו ביום רביע'י: "6גו81 (59)
. (87)א 16ק 11165ע 02 (60)
)61( 01 75םטט8-5.
.א 16 ע116נת 02 (62)
.(2)5 16 1ת15תהת0-מטת50 02 (63)
(80)א 16ק ע116נעק 02 (68)
. "מספר השעות שהפועלים עבדו ביום חמיש': "0816 (65)
. (87)א 16ק ע6ןננעק 02 (66)
)67( 0 ₪.
."0" 18 78166 (3)א 216 1מט66א-8861-501כ 02 (68)
. "אחא" 18 78166 מפנתטססא-+50 88 (69)
.ת101510 6עט0ססספק (70)
.)תפהת-הת1סטת (71)
.ת10181128010ת1 מעס+?עסק (12)
.מענתטססא-+50 611מ0 6טס6ם שעס+עסק (13)
. 500808₪-1800858% מעס]עסק (%ד)
.00 ,006%2-59080%6א 01086 (פך)
. תטת 5600 (76)
- 128 -
.מ10181128010מ1 (77)
,(006%2-5080%א ט6נסם1 ת006 (18)
)79( 0160065 2006.
.ת086-200נות368 10 5080658 סטסא (80)
י 80%ת%00662-5 3686 (81)
םנתט)סא-26861-502 70 "אמא" שטסא 6םם 26 (82)
.0 (83)
.תסתפ1ת 10 58061 288 (88)
. 1תסת5 0' 58062 268 (85)
.1ת1185ת5 10 58063 288 (86)
.ענטנת 70 %סְסהת5 266 (81)
.הת 10 58065 466 (88)
80%תפ-%0662 6אסת (89)
. מנתטססא-+26261-50 70 "אמא" שטסא 6םם 46 (90)
. עט500%-8% 1180085 (91)
. תסת315-מטת56 10 תסתפ1ת סטסא (92)
1 מס 00כ086-2ת65 66בעש₪ (93)
.6 1 שתנדסתה8ט26 19005 (98)
. נתחסת5-מטת56 710 1ת56 סטסא (95)
8-2טטת19 מסעת ג86-206תטת65ת 1%6עש (96)
.6 1 שתנסת8ט46 ע00ס+?2 (97)
. 5011801-מטת56 70 1ת115ת5 שטסא (98)
3-הטטת15 מסעת ב00כ86-2שטת65 ססנעש (99)
.6 1 שתנסת8ט46 42000 (100)
. ע16ט1ת-מטת50 10 ע16ט1ת סטסא (101)
4-הטנות5' מסעץ ב6-206המטתפסת 1%6עש (102)
.6 1 שתנסת8ט46 4+008 (103)
. 8₪1881ת0-מטם56 70 1ת15תהת0 סטסא (108)
ל8-5טט₪ת15 מסעע ת86-200מטת365 6ט1עשא (105)
.6 1 שתזדסתהט20 2?06602 (106)
הסבר: שים לב שיש הקבלה בין ההגדרות 21-26 ,32-36 ו- 37-66 ובין
הפקודות 84-88 ו-92-106. היה רצוי מאוד לו *כולנו להחליף כל
קבוצת הגדרות, או פקודות מקבילות, בהגדרה או פקודה אחת. הפתרון
הוא לתת שם אחד לקבוצה שלמה של הגדרות. למשל, קבוצת המשתנים
1 עד פססאת5 תוחלף על-ידי משתנה קבוצתי ש'יקרא טססתפ.
משתנה קבוצתי כזה נקרא מערך (צגתת), או טבלה. נבדיל בין
האיברים השונים ששייכים למערך על-ידי הוספת מציין (50050811),
מוקף בסוגריים אחרי שם המערך. להלן מופיע המערך 581401 כולל צורת
ההתייחסות אל כל איבר במערך.
8 5 9 1 7
(5) 51017 | (5) ד0 גפ | (3) 51017 | (2) ספ | (1) דס1 ו5
בצורה דומה אפשר לייחס את המשתנים תסתפנת עד 1ַםת8215ת0 למערך
- 129 -
שייקרא א5080% ויכלול את חמשת האיברים (1)א5080 עד (5)א50.
נראה עתה גרסה משופרת של התכנית הקודמת הכוללת שימוש במערכים,
כדי להקטין את כמות שורות הקוד שעל המתכנת להכין.
דוגמא משופרת:
.ת101510ת ת%12+108610ת1646
. 8-9מקט2 .16-םהעשסעס
..........%
. 80% 51-8%מנות65
.(9)2 210 | 11₪685 5 8עש060 6% 02
תססש
18061 3600268 260 46
.ת00כע-86שטת65ת 18 3660026 28608
.(133)א% 16ק . 2061 -188%ום365
1
.ת560%610 886ע5602-שת1איסא
. ם1נטת 86-50 [טפיך
. (9)5 210 11₪68 5 060028 שטםת50 02
. פטגות9
.א 16ק 11165 02
- (2)5 16 מסתפ1ת-מטת50 02
(6)א 16ק 1116%ע | 02
" הוא: "08186
. 216 שסץ 02
(30)א 16ק ע1110ע 02
. "מספר השעות שהוא עבד ביום " 08186
.8 ש₪ש0810166 (80)א 16ק 116%נע | 02
. 811₪שסת
."10" 18 78106 (3)א% 216 ₪מנ1תט6%א-+26861-50 02
. "אמא" 15 6ט1א/ ₪שנתטטסא-+50 88
16 1
1
1
1
1
.ת2101810 66006סעק
.דפ -תנסות
.ת10181128%10ת1 מעס+?עסק
.מ1תט0ס6א-502 611ת0 26006 מעס+עסק
. זו560%-118602858% ₪ע0ס+ע6ק
01086 8006%2-5280%, 200.
. תות קספס
.ת1%181128%10תד
0% סטסם1 ת006
.תססת 06016
.תססק-86שטתפפת 10 5280665 סטסא
. ₪נמעותספ-18018%6 10 262068 סטסא
0% 3080
. פנתטססא-?26861-50 16 "אמא" 6טסא 6םע 6ב
- 130 -
)57( |.
5 < 1 611ם0 1 עַם 1 שספת 1 שתבעע8 שעס+עסק (58)
(1)מטתס5 10 (6)1סת5 266 (59)
. 6208ק-6חם (60)
0% 6פסת (61)
. םנמתוסל6א-+26861-50 0 "אמא" 6טסא 6בם 46 (62)
.₪ט500%-888%ק880 | (63)
5 < 1 11>תט 1 צֶ2 1 משסעק 1 שתבעע08 שעס+עסק (68)
מסצ 10 1 שטסא (65)
מסצ-מטת56 170 (1)שטת56 סטסא (66)
5008 מסעץ ג6-200המטת65ת 166נעש (67)
6 1 שת1סת8ט260 :00ס+4 (68)
. 62202₪ק-6חם (69)
הסבר:
שורה 22: מסמנים את העובדה שהמשתנה 580% הוא משתנה קבוצתי,
דהיינו מערך, על-ידי הוספת הביטוי "פחא1? ת 066085" לכניסת
תיאור הנתונים. הגדרנו מערך גם עבור הסכומים בשורה 29.
חשוב לציין שתי נקודות ביחס להגדרת מערכים:
א. אין להגדיר מערך ברמה 01 מכיון שרמה 01 מתייחסת לשם רשומה,
כלומר שם בו אפשר להשתמש כדי להתייחס לכל הרשומה כולה. אבל
משמעות המלה 000085 היא שהכניסה המופיעה באותה שורה תוכפל ת
פעמים. אילו יכולנו להשתמש ב-000085 ברמה של 01, משמעות הדבר
היתה הגדרה של ם רשומות ולא של רשומה אחת.
השיטה הנכונה להגדרת טבלה (מערך) היא להגדיר שם כללי לאותה
טבלה, כפי שנרשם בשורות 21 ו-28 ולהגדיר את הטבלה עצמה ברמה
נמוכה יותר, כמו בשורות 22 ו-29 (במקרה זה - רמות 01 ו-02).
אם רוצים להתייחס לטבלה כולה, משתמשים בשם הכללי (שורה 55).
אם רוצים להתייחס לאלמנט מסוים במערך, משתמשים בשם שמופיע
בטורה שהוגדרה ברמה הנמוכה יותר, בצירוף המציין שמצביע על
אותו אלמנט (שורות 59 ו-66).
ב. אסור להשתמש בביטוי "18 7816" בזמן הגדרת טבלה. כלומר, אסור
ש-000085 ו-04108 י*ופיעו יחד באותה כניסת תיאור נתונים.
האיסור נובע מהעובדה ששימוש ב-000085 מחייב הגדרה של *ותר
ממשתנה אחד. איך נוכל לדעת איפוא לאיזה ממשתנים אלה מתי'*חס
הערך של 841008/?
דוגמה (1): במקום להשתמש ב-410₪/ בשורה 29 כדי לאפס את המערך,
השתמשנו בפקודת 80/8 כדי להעביר אפסים לכל הבתים ששייכים לאותה
טבלה (שורה 54. שים לב שהשתמשנו בשם הכללי של הטבלה 18%5ע78-
1מטות50).
דוגמה (2): רוצים להכין דוח שמטרתו לסכם את המכירות החודשיות
בחברה במשך השנה החולפת. התכנית תדפיס טבלה המציגה את כמות
- 131 -
הפריטים מכל סוג שנמכרה בכל אחד מחודשי השנה. תרשים הירארכ:
עבור מקרה זה מופיע להלן:
00
טס
100 200
100 1%0
הערה: שים לב שבתרשים זה לא צייתנו לרוב הכללים שפורטו ב-7.3
לעיל. כללים אלה מוכלים עבור תכניות גדולות, ואין צורך לעשות
זאת עבור תכניות קטנות.
200
להלן מופיעה התכנית להכנת הדוח:
.ת1910ט1כת ב%111680610ת166 (1)
. 0-ל .16-מהעשסעק (2)
.ם2101810 2868 | (16)
.500010 116ע | (17)
פע (18)
)19( 1/8061 3660268 426 46
.0% 601א-08%6ת365 15 66026 2808 (20)
.8601120%-8%מטת369 | 01 (21)
. (9)5 16ק 6נתפק-ע1508א 02 (22)
.(10)א 16ק %6נעפת-תט10 02 (23)
.660128א- 780162 02 (28)
. (9)2 216 םסצ 04 (25)
. (9)2 16ק 00605 0% (26)
. (9)2 016 הת 0% (271)
ס:1ק 0806-1868 02 (28)
סע פע (29)
)30( 1.8061 600268 4266 46
% 15 6שַהת11 (31)
0 46 שת61>ססק ם₪1% (32)
6 100 4% 65ם11 (33)
6 20%50₪ 4% 65ת111 (38)
. 2001-+8טת65ת 18 360026 268 (35)
. (133)א 16ק .06סת-5מטת65ת 3 01 | (36)
- 132 -
.ת560%610 5602886-שת1אעסש₪
. 811₪ק6כ
."0" 18 78106 (3)א 16ק מנתטטסא-+50- 26801 02
. "אאא" 18 ס6ט1א0 פנמטססא-?50 88
. (9)5 216 תספף8ת46-1%ע8ק-5082 נא
.(9)5 216 סטפ
[דך
98 12 8עג000 106ת02065-120%ת ₪60 02
.9 סזנק
.%-רטטטטטו
.א 16ק 11162 02
8 12 000008 616%6ק2-10%ת065ת0-120%ת66א 02
9.1 סצ ,
. (8)א 216 1162נק 02
. (10)א 16ק 2% 022
.(5)א 16ק 1162נת 02
.(9)5 216 16-26166ע 815282-28 02
.06 %0-86עטתל
6 1162נע 02
.8 175 78106 (92)א 16ק ת16נונת 02
. "מכירות חודשיות" 6ט81 (20)א 16ק ע116נק 02
. "תיאור הפריט" 18 6ט781 (10)א 16ק ע116נע | 02
1 1858 78106 (4)א 16ק ע6[ננעת 02
." מספר" 15 08106 (6)א 16ק 1160נת 02
1
7
7
1
1
1
.ת2101510 666026סעק
.ש1תפסת-הת1פסטת
.ת1%181128%10ת1 שע0ס+עסק
פנתטססא-+50 0611 0%5ע12ת62-060ט910 מעס+עסק
.מנוע1ס םעס?עסק
.ת1%181128%610ת1
0% פמפסנטסת1 ת006
.0 6טקסט0
. ת200-₪8%ט20ת369 10 528669 סטסא
.02008210%-18%6-602120%ש18 10 2620068 6טסא
.00820%א שעס+?עסק
0% 060/-%00602 3680
. שנמול6א-+26861-50 70 "אמא" 6טסא םת 26
,תסע8ת40-1%ע8ק-82ק815 10 16ע8ק-82כ115 6טסא
.6% נבסתפק-עהס5 1
ב ספפ-ע1002 710 1%5ע82ק-ע1002 סטס
. מגוץ1פ
.סע 0%6ע12ת60/-8006%52 01086
. תטת כסס5
- 133 -
)37(
)38(
)39(
)40(
)41(
)42(
)43(
)48(
)45(
)46(
)37(
)48(
)49(
)50(
)51(
)52(
)53(
)54(
)55(
)56(
)57(
)58(
)59(
)60(
)61(
)62(
)63(
)63(
)65(
)66(
)67(
)68(
)69(
)70(
)71(
)72(
)73(
)73(
)75(
)76(
)77(
. 1% ס6א-10052ם5 | (78)
תסת71 תסע8ת16-40ע8ק15282-7א = ססא 16תה8ק-ע82ק15א 19 (79)
2 < סט5 1דסתט 1 צַ2 1 מסעע סטפ שַת1עע08 שעס+עסק (80)
סז (סט5) 10%6ת02068-120%ת866 סטסא (81)
(סטפ - 13) 6166ע-10%6ת120%6-02068ם66א י (82)
גת 0+ 6ק-6תת (83)
3% מססץ ב86-206עטת68ת 6ס1ע₪ (8%)
16 1 שת1סת20608 2+600 (85)
0% מעס+עסק פסם 26 (86)
6 דעא-6חת (87)
99% 0ְ1 262008 סטסא (88)
,(ת0ע8ת19082-28216-40 10 16עה8ק-82ק15 סטסא (89)
פפפק-1582א (90)
4% 10 16ע8ק2-ע10 סטסא (91)
10 128ת682015-118₪66 4806 (92)
. (0206681) 020652106-60120%
0% 0601/-0002א פס (93)
. מנתטס6א-+26861-50 70 "אמא" סשטסא 6םם 6ב (984)
0 (95)
0% 9 מסעת ב86-200םטת365 166עש (96)
.6 שתנסתה8ט20 000+?2 (97)
.0 -טטטתפסת 10 508068 סטסא (98)
.6 1 שתנסת8ט40 ע2+06 ב00סכ86-2שטתפסת 6סבעש (99)
הסבר:
שורה 14: במחשב א%/, אם רושמים 1206ם60א כשם חיצוני של קוב>,
המחשב מתרגם זאת לשם ההיצןונ': 120%.286ת60א.
שורה 69: כדי לאפס מערך, אפשר להעביר אפסים לכותרת שלו, שמוגדרת
ברמה 01 (1%ת065ת0-120%ת%60-718018%6 בשורה 53). כך מאפסים את כל
המקומות במערך שמוגדרים ברמה 02 (שורה 2%).
שורה 9]: מניחים בדוגמה זו שכל הפריטים מסוג מסוים מקובצים יחד,
אבל לאו דווקא לפי סדר החודשים. כאשר מספרו של פריט משתנה,
מדפיסים את הסכומים שנמכרו בכל חודש מאותו פריט (שורות [80-8)
ומתכוננים לפריט הבא (שורות 88-91). שים לב שכללנו פקודת
₪ת0?ת6ק וגם 06ס1ע% בתוך הפקודה א1. ניתן לעשות זאת רק כאשר
מוסיפים ₪ע0ס+ע62ק-6ג ו-166עא-6ם₪ בהתאמה, כדי שהמהדר ידע כיצד
להבדיל בין הפקודות השייכות ל-₪ע0]ת6ק ו-₪5166 לבין הפקודות
ששייכות ל-19. מעבירים את הסכום החודשי למערך הפלט (שורות 80-
2) לפני ההדפסה. שים לב שהמציין בשורה 82 הוא: סטפ-13. הסיבה
לכך היא שרוצים שהפלט *וצג מימין לשמאל בעברית, ולא משמאל לימין
באנגלית כמו שזה מאוחסן במערך. לכן מעבירים את המקום הראשון
למקום ה-12 במערך, השני למקום ה-11 וכן הלאה לפנ* ההדפסה. יש
מהדרים שלא מאפשרים מציין של 13-508. במהדר כזה נצטרך להגדיר את
ערכו למשתנה אחר.
שורה 92: מוסיפים את הכמות שמופיעה בכל רשומה למקומה הנכון
- 138 -
במערך 1206-02068210%6ת60א. מערך זה הוגדר בשורה 43 רק לצורך
חישוב סכום כל המכירות של פריט מסוים לפי חודש המכירה.
עבור הרצה טיפוסית לתכנית זו נתוני הקלט היו:
רבדי 2
2 רבדי 112
2די 12
2 יצ יי 112
7 ללכ 12
6 לי 12
98 עלים 12
9 רטט ה 1172
9 הפפ 122
1 פה 112
53 ולחן 132
7 ווולחן 122
6 וווולחן 122
הפלט על פי נתונים אלה מופיע להלן (הצד השמאלי של הפלט קוצצ):
תיאור הפריט | מכירות (לפי חודשים) מספר
בגדים 0 890.00 0.000 0.00 08 11132
נעלים 6 50.06 0.00 20.00 0 111525
ספה 0 50.00 0.000 9 0 90.00 11232
2 חיפוש בטבלה
שתי פקודות מאפשרות לבצע חיפוש בטבלה, עד שיימצא בה הפריט
המבוקש. הפקודה 5018081 מבצעת חיפוש ליניארי בעוד הפקודה 543084
12 מבצעת חיפוש בינארי. ניתן להשתמש בפקודת 4100 584801 רק באם
הטבלה ממוינת לפי מפתח כלשהו.
דוגמה: לכל תלמיד בית-ספר יש מספר זיהוי בן % ספרות. הנח שיש
לכל היותר 1000 תלמידים בבית-ספר ושהסדר של מספר* הזיהו* אינו
תואם את הסדר האלפביתי של שמות התלמידים.
א. נתון שם תלמיד, רוצים למצוא את מספר הזיהוי. דרישה כזאת
מחייבת חיפוש בטבלה ממו*נת. הגדרת הטבלה מופיעה להלן:
.1 0
10060 000028 ע0ום20-שפת 5 02
מסם5 15 צ6א שת61ת4500
.1 2 06א66ת1
. (20)א 216 שסת5 03
ס1 עָטם 2 03
- 135 -
הסבר:
1. צסשא 6אזסא8500: מציין את שם שדה המפתח, זאת אומרת השדה
שלפיו הטבלה מסודרת. המשמעות של 60א21א450₪ היא שהטבלה מסודרת
בסדר עולה. מותר גם לכתוב צשא 6אזכאמ0פמת אם הטבלה מסודרת בסדר
יורד. ניתן להשתמש בפקודה ,411 5₪48084, המחייבת חיפוש בינרי, רק
אם כללנו אחד מן הביטויים האלה בכניסת תיאור הנתונים.
2. עם סמאמסא1: מספק את שם המשתנה שישמש כאינדקס. אינדקס דומה
למציין (500508171) בזה שהוא מצביע על הופעתוו של אחד מא'יבר'
המערך. אבל תוכנו של אינדקס שונה מתוכנו של מצ*ין בצורות הבאות:
(א) מציין מייצג מספר הופעה. אינדקס מייצג את המרחק (או ההיסט -
שאאם 0 ןקפזת) של אותו איבר מהתחלת הטבלה. בדוגמה הקודמת, בה כל
איבר הוא באורך של 20 (ש6ת5) ועוד 854 (עטם20):
מציין של 1 מתואם לערך האינדקס של 0,
מציין של 2 מתואם לערך האינדקס של 24,
מציין של 3 מתואם לערך האינדקס של 48 וכדומה.
מכיון שערך האינדקס מייצג היסט, הוא לא צריך להיות מתורגם על-
ידי המהדר כדי לאתר איבר מסוים, דבר המוביל לתכנית יעד :עילה
יותר. למשל, מערכת 18%8/370 זקוקה ל-16 הוראות כדי להמיר ערכו של
מציין לערך האינדקס המתאים לו. הוראות אלו מיותרות אם משתמשים
באינדקסים במקום מציינים.
(ב) ערכו של אינדקס מאוחסן כערך בינרי, אורכו נקבע על-:ד:
המערכת והצהרתו המקורית היא בכניסת תיאור הנתונים יחד עם הביטו*
05
(ג) שם אינדקס ניתן לשימוש בקשר למערך עבורו הוגדר ולא בקשר
למערך כלשהו אחר.
(ד) במהדרים רבים, מציין חייב להיות משתנה או קבוע שלם. מותר
לחבר או להחסיר קבוע אל או מאינדקס. למשל, אם 508508121 הוא
מציין ו-עא1 הוא אינדקס, מותר לכתוב: (1 + פא1) אמחפ
אבל אסור לכתוב: (1 + 500500127) %מ5, כאשר 1 הוא כל קבוע שלם.
אופציה זאת מכונה שתנאס6ת1 6ט61801ת.
(ה) כדי להשתמש בהוראות ג0ע568 ו-411 56820 חייבים להגדיר
אינדקס עבור הטבלה. ראינו כבר ששימוש באינדקסים משפר את יעילות
התכנית. חיפושים דורשים הרבה התייחסויות רבות לאיברי הטבלה.
אילו היה מותר להפעיל פקודת ת0ע5068 גם כאשר מוגדרים מציינים
בלבד, פקודה זו היתה צורכת יותר מדי זמן מחשב.
כדי למצוא מספר זיהוי של תלמיד כלשהו, ניתן לכתוב:
ע0ום2.6-500₪ 411 ג0ע568
8 גא-120 ₪ע0ס+?ע6ק 6תם 26
4 = (כא1) שסתפ תסגש
64 טס (כא1) צטג26 6סטסא
- 136 -
הסבר: השדה 181₪18-₪סת5 מכיל את שם התלמיד שאת מספרו אנו
מחפשים. סורקים את השמות בטבלה מקטן לגדול. כאשר מוצאים את השם
המבוקש, האינדקס פא1 מכיל את ההיסט של הכניסה (2א1) צַטת26-מסתפ
מהתחלת הטבלה. השדה (עא1) עטגת26 מכיל את מספר הזיהוי של אותו
תלמיד. כאשר מוצאים את השם המבוקש, מעבירים את מספר הזיהו* של
אותו תלמיד לשדה 15080-181₪16/. אם מתברר שאין בטבלה שם תלמיד
המתאים לערך של 181₪16-ש6ת5, נבצע את הפסקה 28שנא-10.
מותר גם להגדיר טבלה בעלת יותר ממפתח אחד, למשל:
.₪נטת5%006- 78018% 01
(11₪08 1000 8עט060 208א81-עטת20-שסת5 02
8 ששםבפ 18 ע6א שת61ת4500
.1 2 606א66%ת1
. (20)% 16ק מסת5 03
. (20)א 216 8 -03
.+ סנק צַטם28 03
הסבר: ש6₪ג5 נקרא המפתחה הראשי, ו-1%208/ נקרא המפתה המשנ'.
מניחים שהטבלה מסודרת לפי הסדר של המפתח הראשי; כאשר יש שיוויון
בערך המפתח הראשי, | הסדר הוא לפי ערכו של המפתח המשנ*. כדי
למצוא את מספרו של תלמיד מסוים, ניתן אז לכתוב:
8+ עץת20-6₪ת5 411 ב56820
8 02+?ע6ק ₪6 325
6-ו = (כא1) מפת5 תסתש
868 = 1208 6ת4
4 סץ (פא1) עטג26 6טסא
הסבר: השדה 181₪16-0₪ם5 מכיל את שם התלמיד שאת מספרו אנחנו
מחפשים, והשדה 81%208-181₪16 מכיל את מקצועו (של בעל השם שסםפ-
4) . אם יש יותר מתלמיד אחד בעל אותו שם, שם המקצוע *עזור
בזיהוי התלמיד הנכון.
הצורה הכללית של ההוראה 411 ג0ע5682:
[086ת₪15 פאס 47] 08018 4110 61תתס
7 טס 165
1 5 = 60
איזחטל
61-מסת9
טס 15
בכ = 15* %ת610₪06
7 פאה
1 6-מסת9
דע
[54808-פאם] ז מסאודא דאטא ו
- 137 -
הסבר:
8: אסור לכלול בנוסף לשם הטבלה מציין או אינדקס, אבל התיאור
שלה חייב לכלול את הביטויים צם כמאמפא1, 000085 ו-15 צמא.
%ת06[: שם המפתח עם האינדקס שלו, למשל (פא1) מסג5 בדוגמה
הקודמת.
1תס-מסת5: אם נתנו שם לאחד מן הערכים שהמפתח יוכל לקבל (על-:ד:
שימוש ברמה 88), מותר לרשום פה את שם אותו התנאי והחיפוש יעצור
כאשר המפתח יקבל אותו ערך.
את הביטוי פא אפשר לכלול כאשר יש *ותר ממפתח אחד, כמו בדוגמה
הקודמת.
ב. נציג גישה מקבילה למציאת מספר התלמיד כאשר נתון שמו. נגדיר
כעת את הטבלה כך:
.01₪ת 780186-50000 01
1000 8ע000%1 מסםפ 02
מסתפ-6ם1 צעַ 66א6התד
. (20)א 16ק
10060 5עט060 צעַטם 26 02
צֶטת6-26ת1 צ2 66א66תד
.9 16
בתכנית נכתוב : .1 10 מסםפ-6ת1 56%
צַגות6-206ת1 שת1עעה/ שסת5 ג56820
0-8 מע0+עסק 6ת₪ 20
וס > (0₪ם6-5ת1) ש6₪ם5 מסתט
1 סְ1 (עַטם6-26ת1) עַם28 סטס
הסבר: ההוראה 56% שמה את ההיסט שמקביל למספר ההופעה של 1
באינדקס שסתפ-6ת1 (ההיסט שמקביל למספר ההופעה של 1 הוא תמיד 0).
הביטוי שתצעעאפש גורם לאינדקס השני להשתנות במקביל לאינדקס
הראשון. בדוגמה שלנו, כאשר שס6תפ6-5מ1 יעלה ל-20 (ההופעה השניה של
השם מתחילה בבית ה-20), אזי צַטם4-26ם1 יועלה ל-4 (ההופעה השניה
של אותו אינדקס מתחילה בבית הרביעי).
שים לב שבזמן שהגדרנו את הטבלה לא כללנו את הביטוי 15 צשע% ולכן
לא הוכרחנו להכניס את הנתונים בסדר אלפביתי. במצב כזה אסור
להשתמש בהוראה ,41 ₪808 שמורה על חיפוש בינרי, אלא רק בהוראה
₪ שמורה על חיפוש ליניארי, וכך עשינו. החיפוש אַכן יהיה
יותר איטי, אבל גם דרישות הקדם היו יותר נמוכות.
להלן המבנה של ההוראה 581: ת60ת0 10 ... [60288) 507
הסבר: השדה 50288 הוא השדה המקבל את ערכו מ-ת60ע6. ברוב המקרים,
ת6260 הוא משתנה או קבוע שלם (כמו בדוגמה הקודמת), אבל הוא<ה גס
יכול להיות פריט מסוג אינדקס. פריט מסוג אינדקס הוא פריט
שבכניסת תיאור הנתון שלו מופיע הביטוי: אמעא1 15 09208₪. ביטוי
= 108 -
זה גורם להקצאת כמות סטנדרטית של בתים. אסור לכלול את הב*טן:
0 כאשר מגדירים פריט מסוג אינדקס. השימוש היחיד עבור פריט כזה
הוא שמירה של ההיסט שמקביל למספר ההופעה של איזשהו איבר בטבלה.
נוכל לסכם את השימוש בפקודת 581 בעזרת הטבלה הבאה:
השדה השולת
פריט סוג
אינדקס
השדה
אינדקס שדה או קבוע שלם
להעביר
בלי
להכניס ערך היסט
המקביל למספר הופעה
בטבלה של השדה השולת
המקבל
להכניס ערך היסט
המקביל למספר
הופעה ששווה לערכו
אינדקס
שינוי
של השדה השולח
נומר: להכניס ערך הופעה לא חוק: לא חוק:
המקביל לערך ההיסט
של האינדקס
לא חוק: להעביר
ג. נניחה שרוצים למצא שם של תלמיד מסוים כאשר מספר הזיהוי שלו
ידוע. גם פה נשתמש בהוראה 5048081 ולא 41 08תגמ5, היות ואין
להניח שהטבלה מסודרת לפי מספרי זיהוי. אם כניסת תיאור הנתונים
נרשמה כמו במקרה (1) הוראת החיפוש תראה כך:
פריט
מסוג
אינדקס
להעביר בל* ש*נן:
.1 10 פא1 56%
צגום26-96₪ 56820
8 מ;ם6220ק 6םע 46
4 "=" (2א1) עטם20 תסםש
"9 סך (כא1) מסג5 6טסא
המבנה של ההוראה 504301:
[86קת15ם פאע 37] [₪802018 באדעתהט] 18טבס אסתגם5
6
[5₪4808-פאם ] 7 1 1 אמח
מסאמדאטם אחא
הסבר: השדה ₪8%2018 יכול להיות אחד מן הסוגים הבאים:
(1) אינדקס נוסף של טבלה זו: בביטוי צם כמאמפא1 אפשר לרשום *ותר
מא*נדקס אחד. כאשר מבצעים פקודת 08ת( ,58 רק ערכ של האינדקס
- 139 -
הראשון מתקדם, אלא אם מוסיפים את הביטוי אא1צת1/. באותו מקרה
האינדקס המוזכר באותו ביטוי יתקדם.
(2) אינדקס של טבלה אחרת: אם זהו המקרה הטיפוסי, אינדקס הטבלה
השניה מקודם כך שההיסט הכלול בו מקביל להיטט הכלול באינדקס של
8 (ז"א הוא מתאים לאותו מספר הופעה).
(3) פריט מסוג אינדקס: ערכו של הפריט מסוג אינדקס יהיה שווה
תמיד לערך האינדקס של הּ1ט08.
(8) משתנה שלם: במקרה כזה ערך המשתנה גדל באחד כל פעם שמגדילים
את היסט האינדקס של 18ש58, כך שאם הוא היה אחד בהתחלה הוא ישקף
את מספר ההופעות שחיפשנו עד שהגענו למטרה.
ההבדלים בין 542308 ו-.411 508 הם כדלהלן :
(1) ב-5₪80₪4 אפשר להשתמש בכל תנאי ולא רק בתנאי של שוויון, כמו
ב-,411 64001.
(2) ב-5₪400₪8 אפשר לחזור על המלה אמאש כמה פעמים שרוצים ולא רק
פעם אחת, כמו ב-,411 5₪308. החיפוש יסתיים כאשר אחד מתנאים אלה
יתקיים. בודקים את התנאים לפי סדר כתיבתם. התנאי הראשון שיתקיים
יקבע את המשפט שיתבצע. גם בפקודת 411 584801 מותר לכתוב *ותר
מתנאי שוויון אחד, אבל אז החיפוש ייפסק רק כאשר מתקיימים כל
התנאים יחד.
דוגמה: נתון מידע לגבי ההישגים של כמה סוכני מכירות. רוצים
להכין טבלה שבה רשומות המכירות של כל סוכן בסדר אלפבית* לפף:
שמות הסוכנים. ייתכנו כמה שורות נתונים לכל סוכן.
קיימות שתי דרכים לסדר את הטבלה בסדר אלפביתי. אפשר לבצע את
הסידור בזמן בניית המערך שיכיל את שמות הסוכנים ואפשר לבצע אחר:
שכבר נאספו הנתונים במערך. ננקוט תחילה בגישה הראשונה, שנקראת
מיון על-ידי שיבוצץ. התכנית המתאימה מופיעה להלן:
.ת101810ע ת0ס%1+16861ת166 (1)
. 8-11משגטק .16-מהעשסעק (2)
.ם10פנטנת 2868 | (16)
.ת560%10 116קע (17)
שנתתסספ%006%2-5 פק | (18)
6 6₪6ת 600268 18061 (19)
. 20% %86001-86מטת69 18 6ע0סס6ת הסה (20)
.םנתהסספ-6העטת69ת 01 | (21)
.מסת5 02 (22)
. (10)א 216 8ת86ק(15א-מ6ת5 03 (23)
. (10)א 216 1 03 (28)
- 140 -
.מנסמעק 02
. (9)5 210 | תסג15082-500א 0%
. (9)2 216 406-4202 04
סנק 8 08₪116-1186001 02
תסספ פץ
68 2260 3600268 18061
4 15 ס6שַהת11
0 46 שתנ1סססע בס1ש₪
6 100 46 פסת11
6 פסס6סם 825 65ת11
.ת6סת-6מטת65ת3 138 6עסססת סה
. (133)א 16ק .86-2001מטת 368 01 .
.500010 880ע5602-קת1אעסא
011
."0" 18 08106 (3)א 216 מנתטססא-06801-501 02
."אמא" 16 08106 םנתטססא-+50 88
.5 15 78106 (9)5 16ק םנתתססס-עה8קפ1 77
. (9)5 16ק עסאט 77
.ם1תת900-120%ת60א%-18%ט 780 01
8 25 10 0 000028 ת6ם 500 02
₪םנתת15082-500א ת0 שַמג60תסק6כ
. 2-א2-50018א1 , אמ2-5008א1 עַ8 66א66ם1
. 56-71 03
. (10)< 216 08628-1ת15א-6₪ת5 04
. (10)א 16ק 2861-1ק-60ת5 08%
.1 03
.(9)5 216 1-ם0ת₪15082-506 04
.(9)2 216 %08-4200-1 04
- 1:0 | 8-7ע12ת718206-080% 03
01 5תטת>- 16%.
.א 16ק 1162נ1ע | 02
.2 15 78186 (65)א 16ק 165ונע 02
9 ס:21 6166ק-128ת08₪0%6-18260 02
158 6ט1ט (5)א 16ק 160ונע 02
/ .(7)א 6נ1ק % 02
1 15 78106 (5)א 6נ1ק 1162נעק 02
. (2)5 16 % 022
.2 175 78106 (5)א 16ק 11165 | 02
. (10)א 16ק 6% ְ ְְ 02
.8 158 78116 (5)א 16ק 9ע1[16נעק 02
.(10)% 210 | 8-06166ת86קת15א-6₪ת5 02
.8 158 6ט1ט (8)א 16ק 11162ע 02
- 101 -
)25(
)26(
)27(
)28(
)29(
)53(
)58(
)66(
.א 16ק
.8 18 08106 (83)א 16ק
8 78106 (26)א% 16ק
.'דוח שנתי של מכירות
.3 1858 08106 (23)א 16ק
. (9)א 216 "*רושלים01"
. (9)א 216 "תל-אביב02"
. (9)א 16 "חיפה | 03"
. (9)א 216 "באר-שבע04"
. (9)א 216 "אשקלון 05"
.רורט 01
165ונעק 02
11160עק 02
11165ק 02
סוכנים' 15 6טש781
1162גע 02
.1₪ע420-1₪8%ת365 01
4 78106
58 6גו781
8 08106
5 78106
8 078106
1162נע 022
ע116צע | 02
1162נת 2
162ו1ע 022
1160נע | 02
. 1₪ת420-365821₪8% 685ת1+3666% מ186-42021ט78 01
8 ל 000028 4200 02
%00-4202-4 18 ע%6 שת61םת45800
.5-4208א1 ע2 66א66ת1
%06-4202-4 03
4200-4-6₪ת 5 03
.(9)2 216
. (7)א 16ק
.ת1510ט210 6ע66602ספק
.1 -ת+סטת
.םת16181128610ת1 שע0ס+?עסק
.מנתטס6א-+50 611ם0 18018-ת0ת180 שעס?עסק
.תססק-
68 נטסס?עסק
. מנוץצ51 ₪ע0+ע6ק
.ת1%0181128%10ת1
שנתת2006%2-500 סטקם1 ת006
.206 0060006
.0ס-6המטת365 10 508065 סטסא
םנתתסספ-4006%2 3686
. מנתט%סא-+26861-50% 70 "אמא" ס6טסא 6םם 265
. וץ1ס
.0 מנתת806%2-500 601086
.תות קסס5
. 8 1801 -מ6ת186
.1 10 א2-5008₪א1 566
ת06ת500 568201
₪םשנםת15082-500 70 1 2084 6תם 46
(1₪תהסס15282-5א) מ6ת506 10 מנתתסספ86-5מות65ת 6טס
₪סת5 > (א5-50088₪א1)
סי[ 128ת0800%5-118₪66 2686
(א2-5008₪א1 )8-1 681016-118₪601
6₪ת5 < (א50038-פא1)
. 18018-תטטץ1א שעס?עסק
- 2
'7-מסת5 תסתח
71-מסת5 תסתטח
)67(
)68(
)69(
)79(
)71(
)72(
)73(
)78(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
)83(
)84(
)86(
)87(
)88(
)89(
)90(
)91(
)92(
)93(
)9%(
)95(
)96(
)97(
)98(
)99(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
םנתת4006%2-506 3686 (111)
. 1₪תנוס6א-+26861-50 10 "אמא" סטסא 6םם 26 (112)
.8 -מטצָנא (113)
.₪נתת15082-500א 70 1 268 (118)
.1 - ₪ש1גםתת15282-500א = המ2ם 6סטקמס0 (115)
200 מסעע 2-א2-50088א1 אֶתצַעַע08 שעס+טסק (116)
א -כא > 2-א₪א500-פא1 11סתט 1- צעֶבּ (117)
(2-א50088-קא1) מ6ת00ס5 6טסא (118)
(1 + 2-א2-5008₪א1) ם6ב5060 סך (119)
. ₪ע0+ת6ק-6ת (120):
. (אמ2-5008א1) מ6ת500 10 ₪ש1נתתסס5-8%שטת65ת3 6טסא (121)
.1-0 (122)
נם0?עסק (123)
1 עֶם 1 שסעץ א50088-כא1 שתבעעה8/ םמעס+עסק (128)
מנתת82-500ק15א < א50088-פא1 1נצ>תטס (125)
% 0 (א2-5008₪א1) 8084-4202-1 סטסא (126)
(א2-5008₪א1) 8-1ת86כת15א-6₪ת5 6טסא (127)
5-9 סי (128)
%%,, 10 (א2-5008₪א28%1-1)1ק-מס6ת5 6טסא (129)
1 10 2-4208א1 566 (130)
4202 411 ג0ע568 (131)
(א2-50088א1) 06-4202-1א = (2-4208א1) ב-08-4202א מסגש (132)
4% 10 (2-4208א1) 4202-4-6₪ת5 6טסא (133)
6-56826חת (138)
(א2-50015א1) 128-1ת08₪106-118₪60 סטסא (135)
0-ו סי (136)
%% שסעת ב₪86-206טת365 606 דקתשא (137)
86 1 שת1סתה8ט246 426020 (138)
מסםס+ע6ק 02 46 (139)
6-ו (180)
. עס + 0ק-6תת (181)
.0% (182)
9% נסע ב86-200מטת65 1%6עח₪ (183)
. 7886 קת1סת8ט400 22062 (188)
.3699000885-200 10 508668 סטסא (185)
.6 1 שתנסתה8ט40 ע4+60 ב200-8%םטת65ת 1%6עש (186)
הסבר:
שורה 85: כאשר מבצעים חיפוש במערך, מה יקרה כאשר חלק מן המקומות
במערך הם ריקים? פקודת ג0ע568 כמובן לא תדע שאותם מקומות הינם
ריקים והיא תתיחס אליהם כאילו הם מלאים. אם עושים חיפוש בינאר:
ונמצאים באותם מקומות אפסים המהדר יתבלבל, מכיון שהנתונים
יופיעו כאילו הם לא מסודרים (אפסים אחרי ערכים היוביים בשדה
המפתח). כדי להמנע ממצב זה, מוגדרת הרחבת הביטוי 006085 כדלקמן:
15 מ1שהסק-אהם 10 מ1עהסק-ת₪1 0000385
טנעפס א0 טאזפאמקטס
- 183 -
מטרת ביטוי זה לאפשר מילוי מערכים חלקי. במקום שמנמהסק-ת₪1ש ו-
מנשהסק-₪8%ם רושמים מספרים שלמים שמציגים את המספר הקטן ביותר
והגדול ביותר של מקומות שיהיו תפוסים במערך. מספר המקומות
המדויק שיהיו תפוסים בכל שלב מותזק במשתנה השלם 16עאק. על
המתכנת לעדכן את 16ע8ק בכל פעם שמספר המקומות התפוסים משתנה
(כמו שעשינו בשורה 10%).
שורה 46: מותר להגדיר עבור כל טבלה כמה אינדקסים שרוצים. בדוגמה
זו רצינו להשתמש באינדקס משתנה בתוך פקודת, שעס?עסק, בלי לפגוע
בערכו הקודם של האינדקס המציין כמה כניסות יש בטבלה, לכן הגדרנו
שני אינדקסים.
שורות 8% - 73: ממלאים טבלה בקובול על-ידי תהליך בן שנ* צעדים:
(א) הגדרת תוכן הטבלה בעזרת ע1116ע (כמו שעשינו בשורות 73 -
8). הנתונים צריכים להיות מסודרים באותו סדר שבו *ופיעו בטבלה
עצמה.
(ב) הגדרה מחדש של אותם מקומות שמילאנו בעזרת הביטוי 68ם0671ס(.
כאשר משתמשים ב-68מ1+3666% ברמה מסוימת (במקרה זה, רמה 01) יש
הגדרה מחדש של כל הבתים שהוגדרו מאז הפעם הקודמת שהופיעה אותה
רמה. בשורות 8% - 79 אנחנו מגדרירים מחדש את 35 הבתים (חמשת
הפריטים שכל אחד מהם מכיל 9 בתים) המכילים למשל את השמות
והקודים של חמש הערים הגדולות. מכאן ואילך, נוכל להתיחס לנתונים
לגבי חיפה כ-"(3) ₪202" וגם נוכל להתייחס לקוד של היפה לבד כ-
"(3) ה-ע0ס2ם-6סא".
שורה 101: שיטת המיון שנשתמש בה היא מיון על-ידי שיבוא. בשיטה
זו קוראים נתון לתוך מערך ומיד מסדרים אותו במקומו המתאים (כאשר
המערך מסודר בסדר עולה). במקרה שלנו, קוראים רשומה חדשה ורואים
אם כבר התקבלו נתונים לגבי סוכן זה (שורה 106). אם אכן התקבלו,
נשאר רק להוסיף את כמות הסחורה שמופיעה ברשומה זו לכמות הסחורה
טנמכרה על-ידי אותו סוכן (אנו מניחים שתיתכנה רשומות אחדות
המתייחסות למכירות של סוכן מסוים, ושרשומות אלו אינן מקובצות
יחד בקלט), כמו שעשינו בשורה 107 ו-108. אם מגיעים לשם סוכן
שמקומו צריך להיות אחרי מקום הסוכן שמנסים לשב, הדבר מצביע על
כך שהסוכן ששמו נמצא ברשומה החדשה לא הופיע עד*ין ועלינו לשבא
אותו עכשיו (שורה 109). נשאר רק להזיז את האיברים האחרים במערך
מקום אחד לכיוון סוף הטבלה (שורות 120 - 113) ולהכניס את הסוכן
החדש למקומו (שורה 121). מוסיפים אחד למספר הסוכנים (שורה 11%4)
כדי שגודל המערך יהיה מעודכן ומעבירים את האיבר שעד עכשיו היה
אחרו ן למקום האחרון החדש. שים לב שהזזת האיברים היא מן הסוף ולא
מן הראש, זאת אומרת מן המקום השנ* לפני האחרון אל האחרון. אחר
כדך מן המקום השלישי לפני האחרון אל השנ* לפני האחרון, וכדומה.
לו עטינו להיפך, כלומר לו היינו מעבירים מן המקום הראשון לשני,
היינו מוחקים את האיבר שהיה בעבר במקום השנ* ואי אפשר היה
להעביר אותו הלאה.
שורה 1: אם אחר* החיפוש בטבלה לא מצאנו אף לא סוכן אחד ששמו
- 108 -
קטן מן השם שעכשיו רוצים לשבא>, הדבר מורה שמקומו של הסוכן החדש
הוא בסוף המערך ונשבצ אותו מיד למקומו.
שורה 119: מותר להוסיף או להוריד מספר שלם מאינדקס בזמן שהוא
מצביע על מקום מסוים בטבלה. במהדרים אחדים אסור לבצע פעולה
מקבילה על מציין הקשור לטבלה - לכך דרושה פעולה נפרדת.
נניח שרוצים להוציא פלט ממויין בסדר עולה לפי איזורים ולפ:
סוכנים בכל איזור. עלינו לכלול אז בטבלה שממ'*י(ים 780186
₪םנםת500-120%ת66א, את השדה המשולב 6-מסת04-5א שנגדיר אותו כך:
. 71-מסת%06-5 03
'806-4202-1 04
..1-6₪ת5 04
08-71ת150080א/-מפת5 | 05
1-71 05
אם נחז'יק ב-5%09886-שת1אעסט שדה דומה עבור כל רשומת קלט ואשר
יקרא שסתפ-406, אז בפקודת ם0ע568 נכלול את ההשוואות:
6₪ת%06-5 = (א2-50088א1) 1-מסת06-5א תסתח
(אמ2-5001א1) 128-1ת08₪06-18₪60 10 8ע12ת118₪00-68₪0% 266
₪סתפ-08א < (אמ2-5008א1) 1-שסת06-5א מסתש
8 -טץ1)) 1+02₪סק
פקודה זו תגרום לכך שהטבלה תמויין לפי המפתח הרצו'.
נניח שרוצים למיין על-ידי בחירה ליניארית. בשיטה זו משווים את
האיבר הראשון לאיברים העוקבים עד שמוצאים את האיבר המזער:
ומשאירים אותו במקום הראשון במערך. אחר כך משווים את האיבר השג:
לאיברים העוקבים ומשאירים את האיבר הקטן ביותר מבין איברים אלה
במקום השני וכך הלאה, עד שמסדרים את כל האיברים. התכנית למיון
תראה אז כך:
.המת (87)
.ת16181128%10ת1 מעס+עסק (88)
.מנתטטסא-+50 611ת0 18ט18-ת0ת180 שעס+עסק (89)
1 8 1 שסעץ 1 שת1עעה8/ 18ט180-תטץ1א מעס+עסק (90)
.1-נתהססס-82ק15א < 1 11>תסש
.ת1860215-200 םעס]עסק (91)
. מוץצ51 ₪ע0ס?עסק (92)
. 18018-ת0ת3880 (101)
.1 70 אמ2-5001א1 96% (102)
)103( 56820 5000
םנתה₪15082-500 10 1 886 בםם 46 (108)
(ש1תת15082-500) ת6ת500 10 1₪םםת5-500אמטת265 סטסא (105)
= 15 -
מסת5 = (א5008₪-כעא1) 1-6₪ג5 תסתשט (106)
10 16-11860128ום68 3206 ([16)
. (א2-500₪א1 )28-71 16-1860601 (108)
םנתת6%2-500ט%80 3686 (109)
. א1תטססא-26₪61-501 10 "א" 6טסא 6תםת 4% (110)
. 18018-תנוצָנא (111)
,10ת1-1 70 1 6טסא (112)
+ 1 = 1₪6-1ק1-2 6סטקנ00 (113)
1 עָם 108-1ק-1 שסע? 71 שת1עה/ שעס+עסק (118)
מנתתססס-15082א < 71 %11>תס (115)
מס (1) 1-שסת5 > (1) 1-מסת5 19 (116)
.1 10 1 6שטסא (117)
)118( 6-7
.₪ע0+ת6ק שחת (119)
מס 16םת1-1 = ש>סא 10 19 (120)
1ת2₪8-ת6ת506 10 (11) םת6ת506 שטסא (121)
(,11) ם6ת500 10 (16ת1-1) תסתסס5 סטסא (122)
. (1%ת1-1) ת6ת506 70 1ת2₪8-תסת500 6טסא (123)
הסבר: בגירסה זו של התכנית מבצעים מיון (שורה 90) אחרי קליטת כל
הנתונים (שורה 89). כתוצאה מכך, שלב קליטת הנתונים (שורות 101 -
8) פשוט יותר מאשר בגירסה הקודמת, מכיון שחייבים לבדוק רק אם
קיים כבר סוכן כזה במערך, אבל איןן צורך לשב אותו לפי סדר
אלפביתי.
בשלב המיון, נותנים למצביע 1 להשתנות מ-1 עד 1-תס6ת00פ5-ע8ק15א
(שצורה 90). לכל ערך של 1 נותנים למצביע להשתנות מ- 1+1 עד
₪נתת82-500ק15א (שורה 114). אם אף לא אחד מהשמות קטן מהשם ש(מצא
במקום 1, אין צורך לבצע החלפה. כל פעם ששם שנמצא במקום 1[ קטן
מהשם שנמצא במקום 1, מכגיסים את ערכו של [ לתוך 1 (שורה 117).
מכאן ואילך משווים את איברי* המערך לאיבר הקטן ביותר שנמצא במקום
1. בסוף ההשוואות לאיבר מסוים רואים אם האיבר המושווה 5, שמספרו
נמצא ב-1, שווה לערכו המקורי הנמצא ב- ע1א1-1 (שורה 120). אין
צורך לבצע החלפה, אבל אם הוא לא שווה, החייבים לבצע את ההחלפה
שנמצאת בשורות 121-123.
דוגמת הקלט עבור תכנית זו:
5 רהס ברגר
5 ייר אברוכ:
6 נה הלו:
2 רש ררה ברגר
ּ 3 רמים שלום
ודוגמת הפלט של התכנית:
דוח שנתי של מכירות סוכנים
אברוכ: ניר 1 ירושלים 27.5
ברגר אברהם 2 תל-אביב 2.22
הלו: חנה 4 באר-שבע 25.6
שלום רחמים 5 אשקלון 3. 557
- 146 -
3 טבלאות בשניים ושלושה מימדים
מערך (או טבלה) המורכב מסידרת משתנים נקרא וקטור. מתייחסים
לאיבר 1 במערך על-ידי אזכור שם המערך ומספר האיבר הי'חסי,
(1) 01ה4א. אפשר להרחיב את מושג המערך לקבוצות | משתנים
המסודרים בשורות ועמודות: מתייחסים לאיבר שנמצא בשורה 1 ועמודה
1 על-ידי אזכור שם המערך והוספת זוג המציינים ד, ו-1
(1,1) מסהתהגא.
נניחה שרוצים להחזיק בטבלה את מספר התלמידים הרשומים בכל אחת
מחמש האוניברסיטאות בארף, בחלוקה לפי שנת הלימוד שלהם. כניסת
תיאור הנתונים עבור טבלה כזאת:
. 8₪8ת8825]-78018%6 01
5 066129 8טפ 02
.(9)5 216 1168 3 060028 המאת 03
משמעות הכניסה היא שכל איבר במערך 5168ע62ט1ת0 מורכב בעצמו ממערך
בן שלושה איברים. להלן שת* הכניסות הראשונות בטבלה:
8
אם נרשום (114)2פתמע1א₪0, הכוונה היא שיש להתיייחס לכל שלושת
השדות הקשורים לאותה כניסה. לעומת זה, אם נרשום (4)1,3אג51 אנו
מתייחסים לתא שמכיל את מספר תלמידי שנה ג' באוניברסיטה הראשונה.
השדה %א584 יכול להופיע רק עם שני מציינים, כאשר הראשון מתייחס
לרמה העליונה בהיררכיה (גדַדַפַתּמע1אט0) והשני מתייחס לרמה השניה.
ניתן להרחיב את הטבלה לשלושה מימדים על-ידי הוספת רמת פ'ירוט:
. 8ז8ה5ת118-78018% 01
5 0601285 8שטטטַ 02
.3 3 0001085 המאת 03
.(9)5 216 11₪68 2 8עג060 מצא 05
אם נרשום (2,3,1)תנא, אנו מתייחסים למספר הסטודנטים הזכרים
(בההנחה שהקוד עבור זכר הוא 1) הלומדים בשנה השלישית שלהם
באוניברסיטה השניה.
= 127 -
נניח שרוצים למצוא את מספר הנרשמים בכל האוניברסיטאות *חד.
נרשום את הקוד שלהלן:
. 88 180828-מטת56 10 2620 סטסא
צעס+עסק
5 < 1 611ם0 1 צַ2 1 מסעת 1 שתבעע08
3 < 1 1בסתט 1 עפ 1 מספת 7 226062
2 < א 1נסתט 1 2 1 משסתת א 062+?2
ההתפעהתהה-מטתטס5 70 (א ,71 ,1) תדצא 2886
. ₪ע0?ע6ק-6ת
הסבר: המשתנה % שמופיע אחרי ה-תא7ע8 השני נע תחילה עד לערכו
העליון, אחר כך המשתנה 1 שמופיע אחרי ה-מ18₪ק4 הראשון ורק אז
המשתנה 1 שמופיע אחרי 6א1צת)ט0. סדר החישובים הוא איפוא, כדלקמן:
(6
ד
(8
(9
30(
כאשר מסתיים החיפוש בעזרת הפקודה 5₪1808, ערך האינדקס מציין את
המקום של הגורם שחיפשנו. אפשר להמשיך לחפש אם נגדיל את ערך
האינדקס באחד בעזרת ההוראה בעלת המבנה דלהלן:
צם פם
ו 1 ... [8א66םת1+ 587
צםפ אאסכ
הסבר: 8+8פ5סת יכול להיות מספר או משתנה שלם. זו הצורה היהידה
לשנות את ערכו של משתנה אינדקס. הוספה של 1 משנה בגודל של איבר
אחד. כלומר, מוסיפים להיסט כמספר הבתים שנתפסו על-:די האיבר
בטבלה. משום שהוספה זו אינה הוספה שגרתית, חייבים לבצע אותה
בעזרת פקודה מיוחדת למטרה זו ולא על-ידי הפקודות ככ או
07| המקובלות. הפקודה המיוחדת מדגימה את .העובדה שלא
מוסיפים את הערך של 818פסת, אלא מוסיפים את ההיסט המתאים למטפר
האיברים ששווה ל-828פ5סת.
דוגמה: פרופיל של חייל נקבע כממוצע של שמונה מבדקים. בכל אחד
מהם החייל יכול לקבל ציון בין 0 ל-100. מעוניינים לזהות את
החיילים שקיבלו 100 באחד או יותר מן המבחנים. להלן הגדרת טבלה
וקבוצת פקודות המיועדות לבצע את המשימה.
- 108 -
. 108%1/-78018% 01
8 500 0600028 81צ8ת0 02
. 41צאס-2א1 ע2 66א66תד
.(20)% 216 81ע8ת0-מס6ת5 03
(9)3 216 נָהּצַ8ת0-תטץ121 03
8 8 000028
. אטצ2-121א1 צָ5 66א66תד
.1 0 ,41צ4אס-2א1 56%
898 500 ₪ע0?עסק
1 סד אעטצ121-פא1 966
1 -טטץ121 ת50820
0 = (אשצ21ד-פא1 ,הצהחס-2א1) 81צ8ת0-תטשץ121 מסגש
4% סי (,41צ2-011א1) 81צ8ת0-6₪ת5 סטסא
16 1 שת1סת8ט460 ע4+00 6166ק-6העטת5 166עט
6 80 6-50ת
1 צֶם סט 4צ2-01א1 566
. ע0+ע6ק-6ת
נניח שרוצים למצוא את הציון הגבוה שחייל כלשהו קיבל באחד מן
המבדקים ולא משנה באיזה מהם. הקוד המתאים לחיפוש זה:
.א8-ת0צ121 70 0 שטסא
.1 70 אעע21ד-פא1 ,הצהאס-2א1 565
0 < 4צהה2-0א1 11סם0 שעס+עסק
1 -נץ121 50820
1 עֶם סט 40צ2-034א1 566 8םם 46
אהא-מטץ21ד < (אטצ121-פא1 ,הצגת60-פא1) וַַַק8ת0-תטע121 מסמח
אה8א-תמץ121 סד (אטצז12-פא1 ,הצהה0-פא1) נ1ַַַצַ8ת0-תטע121 סטסא
1 צֶם סט אטצ21-פא1 566
20 6-6חם
. םע0+?עסק-6ת
4 הגדרה מחדע
הגדרה מחדש מאפשרת להתייחס לאותם שטחים בזיכרון בדרכים שונות.
המבנה הכללי של הביטוי פמתא1עמקמת המבצע הגדרה מחדש:
2 פמא1עמסמת 8886-1 בשהע-82ק15ם
הסבר: 58066-2 הוא השם של כניסת תיאור הנתונים, אשר מגדירים
מחדש. הוא נקרא הנושא של פמא1ץמקמת. 5866-1, החופף לו בזיכרון,
הוא השם של הכניסה החדשה ונקרא הנשוא של פמתאנקספמת.
הערה: במחשב א12/ אפשר להשמיט 5866-1, או להחליפו במלה ₪8 ]זדק.
אין צורך לכנות שדה זה בשם, אם יש לו תתי-שדות בעלי שמות משלהם.
- 189 -
דוגמה א': בדוגמה זו השדות הם מאותו סוג ומאותו גודל ואפשר
להתייחס אליהם לפי שמות שונים כתוצאה משימוש ב-פמא[קסכסת.
.א-1זתק | 02
ו סד 1 "03
. (2)א סד 2 "03
. (4)א 0 3 "03
. 4-עזת4ק פתמאנקמפעת 5-עעתגק | 02
. (3)א סד 1 "03
. (2)א סד 2 03
. (4)א סד 313 "03
3-ו 2 1-ו
2-1 2 5-3
דוגמה ב': נתונים סוגי שדות שונים, אשר גודלם זהה בנושא ובנשוא;
הנושא הוא 24811-4 והנשוא הוא 0-צַזַתגק:
.24718-8 פמא1עטעמת 0-עזתגק 02
.(9)3 10ע2 5828-0-1 03
.(4)2 210 5828-0-2 03
5428-0-3 210 9)8(. 03
דוגמה ג': גם סוגי השדות וגם גודלם שונה בנושא ובנשוא. הנושא
הוא 411-4ק והנשוא הוא פ-עַזַתגק.
4-עעת4ק כתא1עמספטת כ-דדתגק 02
.00% (9)3 10ע 1-כ-5228 03
.(7)א 10ע 2-כ5828-2 03
במקרה זה, השדה הראשון אומנם מחזיק עד 3 ספרות, אבל מכיון שהוא
מוגדר כשדה בינארי ומכיון שאפשר להחזיק עד % ספרות בשני בתים,
לכן 1-פ-580₪ תופס רק ש(י בתים. המצב מתואר, איפוא, להלן:
3 2-2 5-1
יתת מקקיותתת שממשישנמום ו
2 ה
דוגמה ד': 10 9 106ק . 8 5
.0% 5995 10ע - 28 פמתאנתמעעת - 0 55
שטגע 0082 | 599 0דַק . 65
- 150 -
התוכן הפנימי בשיטת הקידוד 0210 של שדה ם הינו 8ע0ע, שייצוגו
בשיטה הבינארית: 11117"00007111171000, שהוא המשלים של שנים של
8, דה*:נו הייצוג של 3888-. השדה 6 מכיל אותו תוכן כמו 5,
אבל הוא מתורגם למספר בינארי ששווה 3848-. מכאן, אם נבצע "8 פפג
4 10'", השדה 4 יכיל 18, אבל אם נבצע "ג 10 0 פפג", תוכנו של שדה
06 יהיה 3838- ושדה 2 יכיל 3838- אחרי ביצוּע הפעולה.
הכללים לגבי הביטוי פמתאזעמעמת הם:
(א) מספרי הרמה של 5428-1 ו 2-5828₪ החייבים להיות זהים (בין
1 ל-49).
(ב) אם בתוך א5₪0110 1108₪ק רוצים לתאר רשומות חופפות, א*ן
צורך להשתמש ב-5מא1עמקעמ8. כל רשומה בעלת רמה של 01 הינה
חופפת על הרשומה הקודמת. אבל ניתן להשתמש ב-משא1קטסטת
ברמות גבוהות יותר מ-01.
(ג) פעולת פמא1עעעמת נ(גמרת כאשר (תקלים בשדה שרמתו שווה או
פחותה מרמתו של 5846-1 (שרמתו שווה ל-8ם19082-28ם). בין
הנושא והנשוא אסור שיהיה שדה כלשהו שרמתו פחותה או שווה
ל-ַמַ₪15082-2. למשל, בדוגמה 1 הנושא (ג-דַדַת2ק2) מופיע
ברמה 02 כמו הנשוא ואין ביניהם אף לא שדה אחד ברמה 02,
או פחותה ממנו. אחרי השדה 5428-8-3, יתכן שיש עוד שדה
ברמה 02 או פחות שאינו חלק מן ההגדרה מחדש.
(ד) 2, הנושא, א*נו יכול להיות מערך, כלומר| שדה
שבהגדרתו השתמשנו ב-000085; אבל יתכן שיש לו תתי-שדות
שהם מערכים. על 1-540₪, הנשוא, אין הגבלות. בכל מקרה
אסור שהנושא, הנשוא או כל שדה הכפוף להם יכיל את הביטן:
"אס 6אזפאמקמת 000085", מפני שאז גודלם אינו יכול להיות
ידוע מראש.
(ה) עקרונית, גודל שדה הנשוא של פעא1עטעמת צריך להיות שווה
לגודל שדה הנושא, שהר* הנשוא חופף לנושא. אבל רוב
המהדרים החדשים מאפשרים לשדה הנשוא להיות קטן משדה
הנושא.
(ו) שדה הנושא יכול להיות מוגדר מחדש פעמים רבות ובלבד שכל
הגדרה מחדש מת'ייחסת . לאותו שדה נושא שהוגדר פעם ראשונה
בלי הביטוי פשאזקמקעעת (ב-2 00800 05 הקלו גם בדרישה זו).
למשל, בדוגמאות 1, 2 ו-3 הגדירו מחדש את השדה 8-"ַזַתהק
שלוש פעמים.
(ז) אסור לתת ערכים התחלתיים לשדה הנשוא, או לשדות הכפופים
לו, שהרי הם חופפים שדות שכבר קיימים ו*יתכן שכבר יש
לשדות אלה ערכים.
(ח) אפשר להגדיר מחדש (מא1עמעמ) תת-שדה של הנושא או הנשוא
של הגדרה מחדש.
- 151 -
דוגמה:
. 8-דדחק 1
(20)א 10 תא ]ונק | 03
. '2עאות פס קסאא זאד דזתמכסמה * מט נה
. '70123856789 מטתגע (10)א 0דק תתעענע | 03
.4-צזתגת סמא1קטקטת ם דזתגק 1
.א 210 1185 36 000085 0-עעתגק | 03
. 84817-4ק פשא1עמעמת פ-צזתגק 1
.ם-צזתאת 03
.א 210 5מא1? 26 000085 ש-צ1ת4ת | 05
.ש-24317 פשא1עמעטת 60-צעתגק 03
אד 13 000085 א-1זחגק 05
.אא 210 1-צ1דתגק 07
. 43171-1ק סמאך1קמפטת 1-דזתגק 07
.א 10ק א-דַזתגת 08
.א 210 1-ד1זתגק 08
א-1זתגת 03
.אא 210 פטא1ע 5 000085 א-צַזַת4ע 05
תוכנם של 24811-4 עד א-24817 מופיעים להלן. אם השדה זקוק
למציין, המציין מופיע למעלה מכל משבצת.
4-דדחתק
9 צאט פתסקסאא זא 01 00 | ם-דדתהס
ס-זזַתגק
3 ַעעץך 11
76 ס-ץדאק
2
ו
2 אש תפסא זאד זהסעטפסםה | מ-דזתגק
ד
6 20 8 7 6 5 4 3 2 1
|2|צ|א||ץ|ט|ד|5|ת|6|ש|ס|א|א||א|נ|ד|א|6|פ|פ|פ|0|פ|א| א-צזתגק
1 2 3 5 5 6 7 8 9 10 11 12 3
א-דזתגע
ו
1-צדתץ
3 12 11 10 9 8 7 6 5 52 3 2 1
א-דצזתוק
| | | + | | סן א| א| +| 6[ | ש] א
- 152 -
3 12 11 10 9 8 7 6 5 52 3 2 1
יי יי"
]ה
1 2 3 5 5
א-1זתץק
מסספם
5 תרגילים
שאלות
1. חשב כמה בתים תופסת הרשומה הבאה: (הראה את דרך החישוב).
, .ספת 1
(6)א 10ק תם ןונק 02
.+ 2160 אא 02
.8 02
. פאז 20 000085 181 03
.3 999 210 אעפגי 04
.אא 084
. פאז 15 000009 811 05
13 (9)5 210 21 06
.00 (9)3 16ק 12 06
2. רשום את הגדרת הרשומה הבאה:
1 - קוד - 6 ספרות.
2 - שם - 15 בתים.
שדה 3 - סמן - סיפרה אחת.
8 - 20 נגררות במבנה הבא כל אחת:
1 עבור רשומות בהן הסמן בשדה 3 הוא 1:
8% בתים - נתון אלפאנומר*.
3 בתים - נתון נומר'י.
1 עבור רשומות בהן הסמן בשדה 3 הוא 2:
5 בתים - נתון אלפאנומר'.
2 בתים - נתון נומר'.
הערה: כל הנתונים הנומריים במבנה דצימלי (לא מקובצ) כלומר -
סיפרה לבית.
- 153 -
3 2 ו-8 הם שדות המוגדרים ב-5108408 6א1אתסא בצורה הבאה:
.4 1
.1 מטגץט 999 210 41 02
1 160 1 2 פמאצענעטת 42 02
.2 1
. (6)א 210 81 02
.1 פמאעמכטת 82 02
. באז 3 000005 909 10ק א82 03
מה יכיל השדה 8 לאחר ביצוע סדרת הפקודות הבאה:
. (3) 82% 70 42 מטסא
. ץצ 41 צעק1טא
.2 20א1 (3) א82 מפצטדכ
.(2) א82 (1) א82 170 41 מטסא
.(1) א82 10 42 ספה
%. רשומה העוברת בדיקות לוגיות מכילה את השדה הבא.
. (9)3 216 110481ם-עגאה-אד | 03
הגדר ב-0-510840₪א₪08%1 טבלת ענפי ביטוח אשר מכילה 70 .כניסות.
כל כניסה תכיל: "מספר ענף" באורך 3 ספרות ו"שם ענף" באורך 20
אותיות.
כתוב פקודה שתבדוק האם תוכן השדה 11184ם2-תגא4-א שברשומה נמצא
גם בטבלה. לא נמצא בטבלה - הדפס הודעת שגיאה. אם הוא נמצא, יש
להסתעף לקטע תכנית 1א00. אם נחוצים שדות עזר נוספים יש להגדירם
ב-510840₪ 60א1אחס₪.
תכניות
1. כתוב תכנית שקוראת רשימת שמות ומדפיסה אותס בסדר הפוך. האורך
המירבי של שם הוא 25 תווים.
2. בארגון מסוים המשכורת המירבית נקבעת לפי שנות וותק, כפ:
שרשום בטבלה. אם יש יותר מ-25 שנות וותק, או פחות מ-3, אין
חובה לנהוג לפי כללים אלה.
שנות וותק משכורת מירבית
2-5 -. 475
0 -.578
13 -. 682
1-0 -.810
25 -.950
כתוב תכנית שמקבלת כקלט שמות עובדים ושנות הוותק שלהם. הפלט
הוא דוח אשר יכיל את השמות של העובדים ומשכורתם המירבית על-
פיי שנות הוותק. בסיום יש להדפיס את מספר העובדים בכל קבוצת
וותק.
- 18 -
3. נתון ווקטור של ת ערכים לא מסודרים. כתוב תכנית בכדי למצוא
את החציון, אשר מוגדר כערך האמצעי של הווקטור. שלבי הפתרון:
מסדרים את האיבר בסדר עולה.
אם םת הוא א'י-זוגי, החציון הוא הערך שמספרו הסידורי הוא
2 (1+ת)
אם ת הוא זוגי, החציון הוא הממוצע של שני האיברים
שמספריהם הסידוריים הם: 2/ם, 1+(2/ם)
8. שמות התלמידים בבי"ס מסוים מסודרים ברשימה ממויינת בסדר
אלפביתי ושמות התלמידים החדשים נמצאים ברשימה בלתי ממויינת.
כתוב תכנית הקוראת את שמות התלמידים החדשים, מציבה אותם
במערך וממיינת אותם ואח"כ קוראת את רשימת התלמידים שכבר
לומדים בבית הספר. התכנית מדפיסה רשימה מעודכנת של כל
התלמידים בזמן הקריאה של הרשימה הממויינת.
5. לתכנית המטפלת בהשבת אבידות יש שנ* סוגי קלט:
תיאור המציאה, שם המוצא ומספר הטלפון שלו.
שם המאבד ותיאור האבידה.
אם יש התאמה בי| תיאור האבידה לבין תיאור המציאה, התכנית
מדפיסה שורה עם הפרטים הבאים: תיאור האבידה, שם המאבד, שם
המוצא ומספר הטלפון שלו.
כתוב תכנית, אשר מסדרת את הקלט מן הסוג הראשון בסדר אלפבית:
ומכניסה אותו למערך. כאשר היא מקבלת את הקלט מן הסוג השג:
היא עורכת חיפוש לינארי או בינארי במערך הממויין, בכדי לבדוק
אם קיימת התאמה.
6. כתוב תכנית המעבדת קוב של רשומות עבור קבוצות בליגה הארצית
לכדורגל. כל רשומה מורכבת מהשדות הבאים:
שם הקבוצה,
מספר המשחקים ששיחקה עד עכשיו,
מספר המשחקים בהם ניצחה (3 נקודות עבור ניצחון),
מספר המשחקים בהם הפסידה (0 נקודות),
מספר המשחקים שהסתיימו בתיקו (נקודה אחת לכל קבוצה),
סכום הנקודות המצטבר.
התכנית קוראת את קובצ הקלט אל מערך ומקבלת כקלט נוסף את
התוצאות של משחקי השבוע. היא מעדכנת את הנתונים שבמערך
וממיינת אותו בסדר יורד כאשר שדה המ*ון הוא סכום הנקודות
המצטבר. בסיום, התכנית כותבת את המערך המעודכן לקובצ ומדפיסה
אותו.
זָ. נתונות רשימות ציונים של סטודנטים ב-5 קורסים. בכל רשימה
נתונים השס של כל סטודנט שהשתתף בקורס והציון שלו באותו
קורס. כל רשימה מסודרת בסדר אלפביתי. סטודנט אינו חייב ללמוד
בכל הקורסים ולכן שמו אינו חייב להופיע בכל רשימה.
יש להדפיס רשימה של שמות כל הסטודנטים לפי סדר אלפבית'י. יש
- 155 -
לרשום את הקורסים שכל סטודנט השתתף בהם ואת הציון הממוצע שלו
בקורסים אלה.
8 1א מוגדרת בצורה הבאה:
.7 01
. סמא11 10 000085 1 עגא 02
. אד 10 000085 1 עגא 03
1:6 א 0%
כתוב תכנית שתחליף את שורות המטריצה בעמודותיה כלומר, המספר
הנמצא בשורה 1 במקום [ יועבר למקום 1 בכניסה [.
9. חברה מוכרת 4% סוגים של מיף. נתוני* המחירים מוחזקים בקוב בן
% רשומות, שבו רשומה אחת עבור כל סוג של מי. הנתונים רשומים
בטבלה:
.מי+
ן > ךא
תפוזים
תפוחים
לימון
ענבים
דוגמה לחישוב המחיר: אדם שקנה 9 ארגזים של מי> תפוזים ישלם
8 שהם 3*5+29.
הזמנה של לקוח כוללת את הנתונים הבאים:
* מספר ההזמנה
שם לקוח.
כתובת.
עיר ומיקוד.
סוג המי ומספר הארגזים (אפשר להזמין מספר סוג* מיף).
פאע או 0 (לציון סוף ההזמנה של הלקוח).
+ % % +
כתוב תכנית כדי להכין חשבונות עבור הלקוחות.
10. בתרגיל זה נתוני הקלט הם הציונים של % סטודנטים ב-5
בחינות. כתוב תכנית שתציג בטבלה את המידע הבא:
ציון של כל סטודנט בכל מבחן,
ציון ממוצע של כל סטודנט בכל המבחנים,
ציון ממוצע של הסטודנטים עבור כל אחת מ-5 הבחינות,
ציון ממוצע של כל הסטודנטים בכל הבחינות.
%* צ% % +
בתכנון הטבלה יש לקבוע את השורות ואת העמודות להפקת
הדוח.
- 15/6 "
פרק 9
שגרות
1 הגדרת שגרה
שגרה (סברוט' נה-6ם61טסעסט5) או תת-תכנית (מהעשסתקסט5) היא תכנית
שאינה יכולה להתבצע באופן עצמאי. שגרה *כולה להתבצע תחת פיקוה
של תכנית אחרת, התכנית הקוראת (מהעשסע? ₪ת08111 6מ7), ולכן נכנה
את השגרה עצמה התכנית הנקראת (מהתקסע? 081106 6ם1). השגרה היא
תכנית קטנה שמטרתה לבצע פעולה אחת או קבוצת פעולות הנחוצות על-
ידי התכנית הקוראת כדי להשלים את משימתה. כדי שאפשר *היה לעזור
לתכנית הראשית, חייב להיות מעבר של מידע (קרי משתנים) בין
התכנית הראשית לבין השגרות שלה. מבנה השגרה כולל מנגנון המסוגל
לטפל בהעברת משתנים.
שגרה יכולה לקרוא בעצמה לשגרות אחרות, כלומר התכנית הנקראת
יכולה להיות גם היא תכנית קוראת. תכנית שאיננה נקראת על-:ד:
תכנית אחרת מכונה תכנית ראשית.
2 סיבות לשימוש בשגרות
קיימות שלוש סיבות עיקריות לשימוש בשגרות:
א. ניידות: ישנם הרבה קטעי תכניות שנחו> לשלבם בתכניות שונות.
למשל, הצור להפוך תאריך לועזי לתאריך עברי והיפוכן, היא
משימה תכנותית מאוד נפוצה. כדי שכל מתכנת לא יצטרך לרדת
לעומק הבנת הלוח העברי והלועזי, נהוג להחזיק ספריית שגרות,
שם נמצא עותק משגרה שמטפלת בהעברת תאריכים.
בנוסף על זמן כתיבת התכנית, שנחסך על-ידי החזקת שגרה כזו,
אנו גם חוסכים זמן הידור, מכיון שהתכנית מוחזקת בצורה מהודרת
כמודול להטענה. על המתכנת לקשר אותה לתכנית ראשית.
ב. מבניות: אפשר לכתוב, להדר ולבדוק שגרות באופן עצמאי, בלי קשר
לתכנית הראשית, או לשגרות אחרות הכפופות לתכנית הראשית. לאור
זה, מנתח מערכות, | או מנהל צוות מתכנת'ים, *כול לחלק תכנית
לקטעים (פרדים ולהפיצם בין המתכנתים שלו, כאשר כל מתכנת מקבל
רשימה של משתני הקלט ומשתני הפלט עבור השגרה שהוא כותב. הוא
לא צריך להיות מעורב, או אפילו מודע להיקפו המלא של הפרויקט.
= 157 =
הפקודה אתסקתטק מאפשרת גם-כן חלוקת התכנית לקטעים, אבל
השימוש שגרות עולות על טוב יותר מכמה בחינות. קודם כל, אי
אפשר להדר קטע כזה בנפרד כמו שאפשר לעשות בשגרה ולכן אי אפשר
לבדוק אותו בלי מעורבות התכנית הראשית. בנוסף, למתכנת הכותב
קטע שנקרא על-ידי פקודת את0עתת2 יש גישה מלאה לכל משתנ:
התכנית. ריבוי משתנים אלה עלול לבלבל אותו. יותר מזה, טעויות
של אותו מתכנת עלולות לפגוע בתכנית הראשית, או בקטעים אחרים
שאולי ייכתבו על-ידי מתכנתים אחרים. לעומת זה, בכל שגרה יש
רשימת משתנים שאליהם בלבד יש למתכנת גישה. בקובול 85 ניתן גם
להגביל את הגישה למשתנים מסוימים בתוך רשימה זו לקריאה לבד.
אין ביכולתו של כותב השגרה להשפיע או לשנות את הערך של משתנ:
קריאה אלה. שיטה זו מספקת הגנה מירבית לשאר חלקי התכנית.
ג. תקשורת: אפשר לכתוב שגרה בשפה כלשה: כמודול עצמאי ולקשור
אותה, אַחרי*י הידור, לתכנית בקובול. ניתן גם לכתוב שגרה בקובול.
ולקשר אותה לתכנית ראשית בשפה אחרת.
43 פסקודת 0100
הקשר בין תכנית ראשית ושגרה הנקראת על-ידה נעשית בעזרת הפקודה
21. למשל, נניח שהשגרה "011500" מקבלת את המשתנים 4 ו-3 מן
התכנית הראשית ומחזירה לה את המשתנה 6, המחושב על סמך המשתנים 4
ו-8. אזי, בתכנית הראשית אנו חייבים להגדיר את שלושת המשתנים.
כאשר המשתנים 8 ו-8 מוכנים לעיבוד ואנו זקוקים לערכו של 6, נקרא
לשגרה בעזרת הפקודה:
.1 ,5 ,2 באדפט "טשחפדעס" 01
השגרה זהה לתכנית קובול רגילה במבנה הכללי שלה. השינויים בינה
לבין שגרה ותכנית רגילה מתבטאים בנקודות הבאות:
א. קיים פרק נוסף בתוך חטיבת הנתונים המכונה א408-5₪0110אא11
(פרק הקישור). בפרק זה מתארים כל משתנה שקשור בצורה כלשה:
לתכנית הראשית, מכיון שהוא מקבל את ערכו מהתכנית הראשית, מכיון
שערכו נקבע בשגרה וזמין על-ידי התכנית הראשית, או מכיון שהוא
מקבל ערך התחלתי מן התכנית הראשית ומחזיר אליה ערך מחודש.
בדוגמה הקודמת, איפוא, נצטרך להגדיר את המשתנים , 8 ו-6 בפרק
הקישור. שמות המשתנים בפרק הקישור לא חייבים להיות זהים
לשמותיהם בתכנית הראשית, אבל תאורם חייב להיות זהה. למשל,
בדוגמה הקודמת נוכל להחליף את , ם ו-0 על-ידי 2, ₪ ו-ק,
בהתאמה, בתנאי שההגדרה של כ זהה לזו של 4, ההגדרה של ₪ זהה לזו
של 5 וההגדרה של א זהה לזו של 6.
ב. על-אף ששמות ותיאורי משתנ*י המעבר מפורטים בפרק הקישור,
העובדה ששמות המשתנים בתכנית הראשית יכולים להיות שונים משמות
המשתנים המקבילים בשגרה גורמת לבעיה. איך נדע איזה משתנה בשגרה
5 [8 -
מיוחס למשתנה כלשהו בתכנית הראשית? התשובה היא שיחס זה נקבע
בכותרת חטיבת הנוהל. בהוספה זו לכותרת אנו כוללים את שמות
המשתנים בפרק הקישור המקבילים למשתני המעבר המוזכרים בפקודת
14 בתכנית הראשית. למשל, בדוגמה הקודמת, חטיבת הנוהל חייבת
להפתח כך:
.₪ ,5 בא1פט א101510 מתטפמססחהק
העובדה ש-2 נמצא במקום הראשון גורמת לכך שהוא ייחשב כמחליפו של
4, שנמצא במקום הראשון בפקודת .0411 בתכנית הראשית וכן הלאה לגב:
הזוגות 2 ו-₪, 0 ו-ע. המתכנת צריך לדאוג לכך שתיאור כל משתנה
בתכנית הראשית יהיה זהה לתיאור בן-זוגו בשגרה.
המבנה המלא של פקודת ,0411:
0 ] 16תת600-6₪ת5 .081
... 6-1ת%68ת₪15 [םסאתתעעמת צם]
6-2ם15%68
[ 81-1ע11062 עאמעא60 צם]
[[,0411-פא₪] 86קת₪15 שסתעתמטס אס]
אסד'קאסא
הסבר:
א. 1%תת%00-6₪ת5: שם השגרה, ז"א השם שמופיע בפיסקה כ1-את00הק
של השגרה. בעבר היה חובה לכתוב את שם השגרה כקבוע לא-נומרי.
בקובול החדש, 16םתת000-שסת8 יכול להיות גם שם שדה שהמתכנת ממלא
לפני ביצוע פקודת 041. אופציה זו מאפשרת למתכנת לקבוע איזו
שגרה לקרוא כתוצאה מן הלוגיקה של התכנית.
ב. 06א051: ביטוי זה מאפשר העברת פרמטרים בין התכנית הקוראת לבין
התכנית הנקראת. המקרה היחיד שלא נצטרך העברה כלשה הוא כאשר
השגרה מבצעת תפקיד עצמאי, פולטת את התוצאות לבד ואינה זקוקה
לתכנית הראשית לעיבודים נוספים. כאשר מעבירים פרמטרים, סידורם
אחר* המלה 68א051 חהייב לתאום את סידורם בכותרת החטיבת הנוהל
בשגרה. על-ידי ההתאמה בין רשימת הפרמטרים בפקודת 041 בתכנית
הראשית לבין רשימת הפרמטרים בכותרת חטיבת הנוהל, נוצר הקשר בין
המשתנים המקבילים על אף ששמותיהם יכולים להיות שונים.
ג. םסאמתתעעת צם: התכנית הראשית מעבירה את כתובות המשתניס
ברשימה העוקבת. כתוצאה מכך, התכנית הראשית והשגרה מגיעות לאותו
מקום בזיכרון כאשר הן מתייחסות למשתנים שמופיעים במקום מקביל
ברשימה אחרי 6א051 בפקודת 06400 ובכותרת חטיבת הנוהל. כאשר
מעבדים את המשתנים בשגרה, הערך ההתחלתי של המשתנה המועבר הוא
ערכו של אותו משתנה בתכנית הראשית. ערך אותו משתנה אחר* עיבודו
זמין על-ידי התכנית הראשית כאשר חוזרים מן השגרה.
בעבר, השתמשו בביטוי מס6אשתעעעת צם כצורת הקשר היחידה בין התכנית
- 159 -
הקוראת לבין התכנית הנקראת. זוהי ברירת המחדל, אם לא רושמים שם
של שיטה אחרת.
ד. 1אפזא60 צפ: מעבירים עותק של הפרמטר בתכנית הראשית למקום
זמני בזיכרון ומעבירים את כתובתו לשגרה. כל פעולה שהשגרה מבצעת,
היא מבצעת על אותו עותק של הפרמטר המקורי. שני י*תרונות לשיטה זו
של העברת נתונים: הראשון הוא< שאין לשגרה גישה כלשה* למשתנה
המקור* ולכן אין חשש שמכיון טעות בשגרה, התכנית הראשית תיפגע.
היתרון השני הוא ששיטה זו של העברת נתונים מאפשרת העברת גם
קבועים וגם משתנים. היות ואין צורך להעביר מידע חזרה לתכנית
הראשית, גם אין צורך לשריין מקום להחזיק תוצאות המוחזרות אליה
ולכן אפשר להסתפק בהעברת ערך קבוע לאותו מקום זמני בזיכרון.
לשיטה יש גם חיסרון אחד והוא< שהיא לא מתאימה למשתנים שערכם
ישתנה כתוצאה מעיבודם בשגרה ושרוצים שערכם החדש של אותם משתנים
יהיה זמין לתכנית הראשית.
ה. אסזץקתסאם אס / שסתעתתטס א0: אם לא קשרנו יחד את השגרה
הרצויה לתכנית הראשית, ביטוי זה גורם לכך שהמשפט הרצו:* יתבצע.
בלי ביטוי זה, התכנית תסתיים במצב של טעות (סאממה, ז"א ,זהאתסאםה
פאם). .
4 תכנית לדוגמה
לפנינו דוגמת תכנית הקוראת לשגרה. תכנית זו פגשנו כבר בפרק 7
ומטרתה לחשב משכורת של פועל (תרשים מבנה (0ק1א₪) עבור תכנית זו
נמצא בסעיף 7.2). במקום לכלול את המודולים עבור חישוב שכר ברוטו
וחישוב שכר נטו כפיסקאות בתוך התכנית, כתבנו אותם כשגרות. להלן
קטעים מן התכנית ששינינו כדי לאפשר הוספת שגרות.
.ת1510ט21 ת%612168%10ת166 (1)
8-13משטכ .10-מעשסעק (2)
.560010 5%02886-שת1אעסח (5ם)
1+ שסנצנק 82-60ת580-₪ 77 (86)
.9 סנצ ס6טפם-88ה580-₪ 77| (57)
1 סצק שנפנא-₪ 77 (88)
.4 18 08106 9)6(099 216 | סס6טעם-6סעס*פ8א8-שטם50-₪ 77 (89)
.04 18 6ט081 9)6(%99 16ק םנפנא-שטת50-ח 77| (50)
.0 18 08106 9)6(/99 216 | 6600א-0206א85א-םטת50-₪ 77 (51)
. (10)א 216 סשפא-116ע 77| (52)
.(10)א 16ק %ססספטטפ 77 (53)
.אעסא-ת 18216 01 (5)
.9 16 המ 02 (55)
)56( 02 0ם0605ב 16
.+ 16 מסץ 02 (57)
- 160 -
)58( 01 006.
.6 158 78106 % 16ק ב1080ק-ע8 02 (59)
8 78106 (35)א 16ק 11165עק 02 (60)
"1 דופ חפ תגקפדאי (61)
8 78106 (38)א 16ק 11162ע 02 (62)
."שעג (תוטא 5 סשת אדקג,זמע" (63)
1:6 582-8%נא 02 (68)
. 8 7810665 (10)א 216 ע1116ע 02 (65)
. (8)א 216 ב10ע%06-18 02 (66)
4 15 78106 (29)א 16ק 1110%ע 02 (671)
.811קס 01 (122)
."0" 18 6ט1אט (3)א 16ק מנתטטסא-26861-501 02 (123)
. "אמא" 18 6ט081 םנתטססא-+50 88 (128)
.(3)א 16ק 9921 02 (125)
."אמא" 18 08106 1 88 (126)
.ת1810ט1ת 6עט000סעק (134)
.+בתפפת-התנסטת (135)
. "אה שסם ,12 טא 5 15אהסמ" ע18ספנת (136)
. 86א-116ע 200606 (137)
(0%ע006%2-885%02א 6קת1 מ006 (138)
.2006 006 (139)
.מ1%181128%610ת1 פעס+עסק (180)
.1₪תט60א-+50 611ת0 6006ע שעס)עסק (141)
.5009 ₪ע0ס)ע6ק (182)
.200 ,6סעסא5ה8א-%0086%2 01056 (183)
.תטת כס5%6 (188)
.מ1%181128010ת1 (185)
.4 טמספץ א%עסא-18216 400006 (1846)
שת51 "6ם61טסַ2866-3" 0811 (187)
אעסש-1061ע18 60666 עפ (188)
.ת10ע%06-18 6262006 עם (189)
:0% מם0?ע6ק (150)
)151( 680
. ונטס 6א-26861-501 0ד "אמא" סטסא 6םם₪ 4% (152)
.0% (153)
)158( 466 1 0 7.
ס1 +15082-11868 6טסא (155)
0% מספתת ב86-200מטת68ת3 6ס1תש (156)
.6 שת1סתהט26 ע4+60 (157)
- 161 -
. 6
מסתך7 "א" = 066א ?1
8טט8א-06סע מעס+?עסק
6
מסת71 "2" = %066 19
6016-2081 מעס+עסק
6
6 -110088% 0 10688-1 6טסא
.1% מעס?עסק
6386-2006 1%6עש
.0% אמתפס?עסק ₪0 26
0% 50- 4006%2 3686
. ם1תנו6%א-26₪61-502 סע "אמא" 6שטסא 6םם 26
.8
. ענהת-שנתגס6א 10 1ת26₪8-0%ע85%02א-8%מטת365 6טסא
.86-00ת369 170 8%6-180%6תטתפסת ס6טסא
. 600-8018
ס6בעסמטא 6סא 18 ע8ס15א-1א 12
ס6בעסמטא 6סא 18 טְסַתפ-81 05
6בעסמטא ס>סא 18 עט1ת1-5א 02
6בעפשטא 6סא 18 ש61861₪צ-8%1 05
6 -10088% 0 10888-1 6טסא
6% מסםס?עסק
56
%ססעסטם 0 "שחת" 6טסא
8ת051 סססעסט5 0811
%, ,עט1תפ-01א 00606 צע8
60גוע58082-02-₪ 6262606 עַם
1 , 206-2221100 185%0-מנות50-₪
"סת61טסעסגופ 28010 סא" 215018 תסב6>קססאםע ת0
1-ו
1 ססמא 12
%ססעפט5 10 "סעעשא" שטסא
שַת051 00%ע5₪00 0811
0סגוע580282-2-₪ , "1.00", 81-2618061 סםת66תסס עפ
(191₪א-מטב560-₪ ,1512א-₪ 06ת62620ת עם
6660א-85%020%א-ומנות56-₪ , 6500א-כִ88ַת586-₪
1 --- 68601
"סתנסוסתסט5 סעעטא סא" 2158018 תס61קססאת תס
1
1 ססמא 12
8ט8א-1802858%-ת6ת186] מעס+עסק
8% -0088% 10 10688-3 6טסא ₪186
8% מסס+עסק
8%-10688% 10 10088-2 שטסא ₪186
.1806 מעס+עסק
- 162 -
)158(
)159(
)160(
)161(
)162(
)163(
)168(
)165(
)166(
)167(
)168(
)169(
)170(
)171(
)172(
)173(
)178(
)175(
)176(
)177(
)178(
)179(
)180(
)181(
)182(
)183(
)188(
)185(
)186(
)187(
)188(
)189(
)190(
)191(
)192(
)193(
)198(
)195(
)196(
)197(
)198(
)199(
)200(
)201(
)202(
)203(
. 1ת60₪6-20₪8ם | (201)
סבעסטטא ססא 18 6סב1-5א% ד (205)
6שסטטא >סא 18 עט1תפ-1א ע0 (206)
106886-1806 10 10088-1 סטסא (207)
8% מע0ס+עסק (208)
)209( 6
0%סםמט5 סע "סעשתם" סטסא (210)
שת91ש 6ססעסט5 0811 (211)
0% ,ספטנ1תפ-1א 6תססתס0 עפ (212)
,0 ום-₪0-58080 06מ6+620ת ע (213)
1 , 85%020%6-22160-נטת56-₪ (218)
"סת61טסעסט5 סש סא" צ15018כ תסנסקססאם םס (215)
1-ו (216)
1 ססא 19% (217)
1ת208-71800858%-ת6ת186 םעס)+עסק (218)
0880-6 710 10088-2 סטסא ₪156 (219)
21 מפע0ס?עסק (220)
הסבר:
שורה 1%7: השגרה 6ם1טטס2866-3 מקבלת מחרוזת של 6 ספרות המ*יצגת
את השנה החודש והיום ומחזירה את התאריך כמחרוזת של 8 תווים
המכילה את היום החודש והשנה, כאשר הם מופרדים על-ידי קווים
נטויים. אחרי העברת השדה אעסא-ת18216 לשגרה, התכנית הראשית כבר
איננה צריכה אותו, לכן מעבירים אותו 6ם66ם00 צ2. התאריך המעובד
יאוחסן בשדה ת10ע182-%0% אשר חייב להיות זמין לתכנית הראשית, לכן
מעבירים אותו 06ם61020ת ע2.
השגרה 6מ1סטסת-2806:
.ת2101810 ת%6121068%10ת166 (1)
.סנסטסת-2806 .16-מהעשסמק (2)
.ת1510ט1כ 2808 (9)
.ת566%10 8₪6>ה1.1 (10)
. 011 (11)
10 1-50 02 (12)
+ 16 ת665סת0-ת1 02 (13)
.4 16 ₪סצ-ת1 02 (18)
.6 03 (15)
.+ 16 שסצ-00% 02 (16)
.א 216 1 02 (17)
.+ 1:6 006-0206065 02 (18)
.א 16ק 185-2 02 (19)
.+ 16 ת0₪6-5 02 (20)
- 163 -
..000-80 ,2806-ת1 8₪ת031 ת1910ט21 6עש60סס2ק (21)
. 82101 1-ט1ום15ת0 (22)
2 |,5185-1 70 "/" סטסא (23)
.פסצ-0₪5 10 משסצע-ת1 6טסא (28)
.005-009 10 ב06658ג0-ת1 6טסא (25)
.התהתפ-00% 10 הַתהת5-ת1 סטסא (26)
ממעשסעת 16אע (27)
הסבר השגרה:
שורה 2: שם התכנית (ה-19-מהעשסתק) חייב להיות השם שהופיע בפקודת
12 בתכנית הקוראת (שורה 147 בתכנית הראשית).
שורה 21: המשתנים המופיעים אחר* 0א051 בכותרת חטיבת הנוהל
מקבילים למשתנים שמופיעים אחר* המלה 6א051 בפקודת 68411 בתכנית
הראשית, ז"א 8606כ2-ם1 מקביל ל-%4ע00-ת18216 ו-%6-28%66ש0 מקביל ל-
ם10ע18-0%א. לא חייבת להיות זהות בין שמות המשתנים בתכנית
הראשית ובשגרה. מה שמקשר בין הפרמטרים הוא הסדר אחרי המלה
ט. המשתנה 2808-ת1 מקביל ל- אעסא-ת16ע182 מכיון ששניהם
מופיעים ראשונים אחרי* המלה 06א051 והמשתנה 28068-00% מקביל -0%א
ם8210ך כי שניהם מופיעים במקום השנ* אחר* המלה 6א051. המשתנים
6 ו|וו-2806-08% חייבים להיות מוגדרים במלואם בפרק הקישור
(םמס56051 6ש%8ת11), כי הם מועברים לפחות בכיון אחד בין התכנית
הקוראת לבין התכנית הנקראת. גודל משתנ* הקישור המוגדרים בפרק
הקישור חייב להיות זהה לגודל המשתנים המקבילים בתכנית הראשית.
למשל, 2866-ח1 והמשתנה המקביל א%עסא-ת16ע182 מכילים 6 תווים;
המשתנה 2866-0₪% והמשתנה המקביל ג18216-0%א מכילים 8 תווים. לו
היו משתנים נוספים ששימושם מוגבל לצרכים הפנימיים של השגרה
(ובמקרה הזה אין משתנים כאלה), היינו מגדירים אותם בפרק שתנאעסש
6
שורה 2[7: כדי להפסיק שגרה ולחזור לתכנית הראשית, במקום "5600
תטת" משתמשים ב-"שהעשסמק 1%אם".
ההנחה היא שהשגרה 6ת1סטסת-2806 היא שגרה רב שימושית שנמצאת
בספריית השגרות ומקבלת כל תאריך, גם של היום וגם של כל יום אחר
ומעבדת אותו. לו רצינו רק את תאריך היום, היינו מכינים שגרה קצת
שונה. במקרה זה אין צורך בשום קלט מהתכנית הראשית ולכן לא היה
נחוצ להגדיר או להעביר את המשתנה %ע%0-ג718216. את המשתנה מ1-
86 היינו מגדירים אז בפרק ה-886ע5602 שתנאעסש בשגרה ומכניסים
לתוכו את התאריך הנוכחי בעזרת הפקודה 8260606; מעבדים את התאריך
ומחזירים אותו לתכנית הראשית בעזרת המשתנה 866כ0₪6-2.
במצב זה, הי*נו יכולים להסתפק בפרמטר מעבר אחד, 6-2806ש0. אין
צורך במשתנה קלט, מפני שהשגרה יודעת תמיד לשלוף את התאריך
הנוכתח*.
נחזור להסבר התכנית הראשית:
שורה 182: אנו מתכוננים לקרוא את השגרה ששמה 0עשת. *כולנו
לכתוב בשורה 183: "סדשתם" 0811, אבל החלטנו למלא את המשתנה
% במלה סעטת2 ולבצע "סססעסט5 11ה"בשורה 183. שיטה זו
- 164 -
מאפשרת למלא את 6ססעפופ בשמות שונים של שגרות כתוצאה מתהליך
העיבוד. בדוגמה זו לא ניצלנו אופציה זו.
שורה 184: כדי לחשב את המשכורת ברוטו, השגרה צריכה לקבל כקלט את
שיעור השכר (פט1ם%1-5) ומספר השעות שהפועל עבד (סְסת1-5א).
משתנים אלה אנו לא צריכים לקבל חזרה; לכן אין צורך לאפשר לשגרה
לטנות את ערכם בתכנ(ית הראשית ומעבירים אותם "סמססמס0 עם".
שורה 186 - 185: את תוצאות השגרה נקבל חזרה במשתנים שמופיעים
בשורות אלו. המשתנה ססגוּזַ2-ע82ת586-/ מחזיק את השכר ברוטו של אותו
פועל, המשתנה 0ס6גוע8-8858%020%-מטת50-/ מחזיק את סכום המשכורות
ברוטו עבור כל הפועלים שטיפלנו בהם עד הקריאה הנוכחית של השגרה.
1 מחזיק את המלה אמ אם יש טעות בנתונים
הגורמת לכך ששכר הברוטו שחישבנו גדול באופן לא סביר.
שורה 187: אם בזמן עריכת קישור לא כוללים מודול מהודר עבור
השגרה 10ַ880, תוצג במסך הודעת הטעות: 6תנסטסעסטפ סכעשת8 סא.
שורה 188: מלות הסיום 6-0811ת₪ נחוצות כאשר הפקודה 0811 מופעלת
כחלק מפקודה אחרת (כמו פקודת 1%), משתמשים בביטו* "ת0
מ610ס66א₪" באותה פקודת 0811 ורוצים להוסיף אחר: סיום הפקודה
פקודות נוספות שאינן ט'*יכות לפקודות הקשורות ל-ת2%660%10 ם0. כל
התנאים האלה קיימים במקרה הזה, ולכן כללנו פה 6-0811תם.
השגרה 0דַשַת8:
.מס181ט1ע ת612+168%10ת160 (1)
.02 .160-שעשספק (2)
.ם1510טנת 2808 (9)
.560010 6ש%8ת14 | (10)
.9 סשסצס 80% 77 (11)
.9 סנ פטנתפ 77 | (12)
.9 סנק ססטע82-0ת580 77 (13)
.9 סז סופ ם-85%020%-מטת50 77 | (14)
. (3)א 16ק 1 77 (15)
. "אמא" 08106 1-ו 88 (16)
, 0ס1וע82-8ת580 ,880% ,עט1ם5 ₪ַמת081 ם1810ט21 6עט0006פק | (17)
. 26861 , 000וע2-88%020%-מטת50 (18)
. 580082-02110-שט0ת15ת6 (19)
. 26861 70' "1/0" שטסא (20)
מסם' 40 < >סא 5806 19 (21)
שתנט1) 52806 עם עטנם5 צ1ק161טא (22)
מס 82-2260ת580 (23)
1 סץ "אמא" שטסא עסעעם 5126 ם0 (28)
6 (25)
עטנם5 * 40 = 666תטסת 50ג220-ת8ת580 66גק₪ס00 (26)
שטנת5 * 1.5 * (80 - 6סַת5) + (27)
.1 ס "אמא" שטסא עסעעםע 5126 0 (28)
1 ססא 19 (29)
. ססטפם-85%020א-עטת50 10 ס6טעם2-מַהַת586 406 (30)
.מהתפסע? 16אם (31)
- 165 -
הסבר: שגרה זו מקבלת את שיעור השכר והשעות ומחשבת את השכר ברוטו
של אותו פועל (טורות 23, 26). בנוסף, השגרה מקבלת את ערכו הקודם
של המשתנה ססגועם-6סעסאפ8א-שטת50 שמכיל את סכום המשכורות ברוטו
של כל הפועלים בהם טיפלנו עד נקודה זו ומחברת לו את שכרו ברוטו
של הפועל הנוכחי. בתחילת ביצוע התכנית הראשית ערכו של -פטתספ-₪
ס%טעם-₪88%020% הוא 0 (שורה 49 בתכנית הראשית); בכל פעם שנכנסים
לטגרה היא מקבלת את ערכו הקודם של הסכום ומוסיפה את השכר ברוטו
של הפועל בטיפול.
נחזור להסבר התכנית הראשית:
שורה 189: אחד מן המשתנים שערכו מחושב בשגרה 10ַש88 ומוחזר
לתכנית הראשית נקרא 680661מ2-6861-180%כ2. אם ערכו שווה ל-0,
הדבר מסמן שלא חלה טעות ונוכל להמשיך בטיפול נורמלי, שהוא קריאה
לשגרה 10עשא. שגרה זו מקבלת כקלט שלושה משתנים שהם מספר הי*לדים,
משתנה שמציין את דרוג הפועל ביחס למס הכנסה ושכרו ברוטו. משתנים
אלה מועברים %ת66ת600 צַם, כי הם נחוצים להחישובים בשגרה, אבל אין
צורך להחזיר אותם לתכנית הראשית. כאשר מעבירים מידע 6תססתסס עם,
מעבירים את ערך המשתנה למקום זמני בזיכרון, ניתן להעביר לאותו
מקום גם ערך קבוע ולא רק שם שדה. כך עשינו בדוגמה זו כאשר
העברנו לשגרה את הערך הקבוע 1208 עבור המשתנה שגעסכ.
השגרה 10זשא:
.2101510 ב%12168%10ת166 (1)
10שא .16-םהעשסעס (2)
.ת1510ט1ת 868 (9)
.ת500%10 8₪6ע5602-שת1אעס0 | (10)
. 99 סדק ץג0אס6א-שטת56-₪ 77 (11)
+ 8106 599099 16ק צָטססא 77 | (12)
.9 160 עטנת5 77 | (13)
. 99 סצק 5 -טטתספ-₪ 77 (18)
.ת560510 886>%ת1/1 (15)
16 61801₪צ 77 (16)
. (8)א 16ק שטעסע 77 (17)
.9 שסצק סט82-22ת580 77 | (18)
.9 סצ 6000א-ת88ת580 77 (19)
.9 סנק 6060א-6סַסא885-מטתס5 77 | (20)
.9 סשסנצ מנפנא 77 | (21)
9 סק 1₪פנא-םטת50 77 | (22)
. (3)א 216 שפ-7806 77 (23)
. "אמא" 08106 8% 88 (28)
(000וע580082-2 ,שטע26 ,61861₪? שַת051 ת101810כ2 6עט60ססעק (25)
(%6600א-82ת580 ,181₪א-שטת56 ,ם1פנא (26)
. %פ-78116 (27)
.תס | (28)
.שפ-1806 10' "10" סטסא (29)
- 166 -
תסתד "1107" = שטע6תע 19 (30)
עטצתפ 10 210. סטסא (31)
)32( 6
מסת' "1208" = שטעסע 1% (33)
עטנם5 10 15. סטסא (38)
.שפ-1800י סע' "אמא" סשטסא 156 (35)
תסת1 1806 טסא 1% (36)
. 11980608 מעס+עסק (37)
.מהעשסעק ס1אם (38)
. [110₪560 (39)
- צַ60%-מת7-50 שת1ט01 עטאססא קם 61801₪צ צ1כ161טא (40)
מסת1 עגו9ס6א-נטב56-₪ < ס6גע0-ע82ת580 ?ד (41)
0סגו82-02ת980 מסעץ עו66%6א-מטת50-₪ 866ע6סטפ (82)
8 -ום50-₪ ₪ת1ש010 (83)
עטנת5 2% 100₪85-מטת56-₪ צ1%101טא (88)
6מטסת 81518 שתנט01 (45)
151₪/-מטת50 10 ש51גא 2606 (846)
)47( 6
.151 10 2620 סטסא (88)
04 שת:צט01 ססטעם-82ת980 מסעץ 151₪א 6ס8ע6סטפ (89)
.0 -רשכרשרררררטס 10 6%660א-82ת586 466 (50)
הסבר:
שורות 34 - 30: כאן העברנו ערך קבוע (1200) למשתנה שטעסע ולכן
נשתמש בחישובי שכר נטו בשיעור מס של 0.15.
שורה 35: אם העברנו ערך למשתנה 68 שאינו ₪108 או 108, הדבר
ייחשב כטעות ונדליק שפ6-5שַ78.
שורות 50 - 420: בחישובים אלה משתתפים משתנים שלא קיבלנו כקלט מן
התכנית הראשית וגם לא נחזיר כפלט, למשל עְטאסא (שערכו תמיד 18),
עג0א60א-מנות0פ-₪ שמשתמשים בו לראות אם יש בכלל חבות במס לשכר
הפועל, פטנתפ - שערכו תלוי בדרוג שמעבירים מן התכנית הראשית
(108ע או א10₪) והמשתנה הפנימ* 16₪88-מטת50-₪ המחזיק את החלק
משכרו של הפועל שחייב במס. משתנים אלה מוגדרים בפרק -שת1אעסא
6
נחזור להסבר התכנית הראשית:
שורות 201 - 198: השגרה לחישוב שכר נטו מחזירה מצב טעות אם היא
לא קיבלה כקלט דרוג קביל. המשתנה ש1806-5 יקבל את הערך אחא
והמשתנה 6₪61-1806-86₪0861כ בתכנית הראשית גם הוא יקבל ערך זה,
מצב שגורם לתנא: 1 להתקיים. כאשר תנאי זה מתקיים,
נעביר הודעה מתאימה למשתמש (שורה 0). אם התנאי לא מתקיים אין
טעות ונוכל להכין את הפלט להדפסה (שורה 199). שים לב שטעות זו
אינה מציינת טעות בגודל. השתמשנו בדגל זה ככלי לקבל את המתג
המועבר מן השגרה.
שורה 202: לכאן מגיעים אם השגרה 10שתם מחזירה את 000₪מם-יטגי,
- 167 -
המציין טעות בגודל כאשר תוצאת החישוב באמת גדולה מדי. מעבירים
הודעה מתאימה למשתמש.
5 תוגילים
שאלות
1. נניח שאתה כותב שגרה המחשבת את כמות ההנחה (08408א1.4-החסהאחת)
שלקוח מקבל. ההנחה מבוססת על קוד הלקוח (0408א802-14) וכמות
המכירות לאותו לקוח (0804א1-1.4ש60).
(א) כתוב פקודה ,0411 שקוראת שגרה זו מתוך תכנית ראשית כלשה*.
(ב) כתוב | א08-5₪0110אא11 וכותרת | לחטיבת הנוהל בשגרה
זזסהאת.
2. רשום את הסיבות לשימוש בשגרות המהודרות בנפרד מן התכנית
הראשית, לעומת שימוש בפרוצדורות בעזרת הפקודה אתסעתמק.
3. מה תציג השגרה להלן :
תכנית קוראת: . 'א5₪410' מטתגט (5)א סזק 4 1
0 מטגעט (9)3 0זק 2 01
. א01 גא11טת טפ .041
תכנית נקראת: . (6)א 10ק א 1
. (9)3 10ק צ 1
.צ, א 60א1ט א2101510 מתטפטססתק
.א 151
.צ צג,1ספצס
רמז: השגרה מתייחסת לכתובת של 8 כמו שהוגדרה בתכנית הראשית,
אבל לאורך של א כמו שהוגדר בשגרה.
4. האם מותר לכתוב את הביטוי "15 04108" בפרק א5₪0110 מסהאאדן?
נמק.
תכניות
1. שיעור המס הוא 20% על הכנסה של זוג נשוי אשר מגיעה עד 2,000
ש"ח ו-40% מס על הכנסה גבוהה יותר. השיעור הוא 10% על הכנסה
של אדם בודד עד 500 ו-60% למעלה מזה. כתוב שגרה שמטפלת בכל
אחד משני מקרים אלה והשתמש בה בתכנית הקולטת שנ* משתנים:
* מצב משפחתי: % (נשוי), 5 (בודד).
* רמת הכנסה.
עליך לחשב את המיסים על-פי נתונים אלה.
- 168 -
כתוב תכנית המקבלת מספר ומדפיסה אותו. ליד היא משרטטת קו
המורכב מן הסימן מקף (-), שאורכו יחסי למספר הספרות במספר
(זוה: היסטוגרמה). את שרטוט ההיסטוגרמה יש לבצע על-ידי שגרה
עם משתנה ערכי אחד, אשר שווה למספר הספרות במספר.
כתוב שגרה שמחשבת את הרווח ממכירת מוצרים.
נתונים: מחיר הפריט (1ק2), כמות שנמכרה מאותו פריט (01), עלות
קבועה לניהול יומי של העסק (8) ועלות שיווק משתנה (1א)
המיוחסת לכל פריט שנמכר.
השתמש בשגרה זו בתכנית המדפיסה את מצב הרווח בימים שונים.
הבא בחשבון שהחנות מוכרת לכל היותר 20 מוצרים שונים. יש
להדפיס כותרת לדוח.
כתוב שגרה (א, א1אסעשא, 500)א030 לחישוב סכום ריבוע*י האיברים
בטורה א או בעמודה א של המטריצה א1אתשא. אם 'פ500='5 מחשבים
את סכום האיברים בשורה, אם '500='4 מחשבים את סכום האיברים
בעמודה. השתמש בשגרה 5010% בתכנית הקוראת מטריצה בעלת שלוש
שורות ו-4 עמודות ומחשבת את סכום הריבועים של כל שורה וכל
עמודה. בפלט יש להציג את המטריצה המקורית ובסוף כל שורה - את
סכום הריבועים באותה שורה. בסוף כל עמודה יש לרשום את סכום
הריבועים באותה עמודה.
כתוב שגרה הקוראת מערך שמות וסופרת את מספר השמות בקלטס.
מקומות ריקים במערך ממולאים ברווחים. כתוב שגרה נוספת כד:
למיין את השמות. השתמש בשגרות אלו כדי להדפיס רשימה מסודרת
של השמות המשמשים כקלט לתכנית.
כתוב שגרה שתבצע בדיקות תקינות על שדה תאריך (ששה תווים
במבנה צצועאאפס).
כללי הבדיקה הם:
שנה - (צצ) שדה מספרי שיכיל מספר בין 8% ל-99 (1988-1999).
חודש - (%%) שדה מספרי שיכיל מספר בין 01 ל-12.
יוסם - (עפ) שדה מספרי שיכיל מספר בין 01 ל-31.
על-פי הכללים הבאים:
חודשים: 12,10,08,07,05,03,01 - ככ יהיה בין 01-31.
חודשים: 11,09,06,0% - ככ יהיה יכיל בין 01-30.
חודש 02 - פ2 *היה בין 1-28 פרט למקרים בהם השנה מתחלקת ב-4
בהם ככ יהיה בין 01-29.
ארגומנט הקלט: (9)6
ארגומנט הפלט: 7 (עבור תקין) או 2 (עבור לא תקין).
כתוב תכנית ראשית המפעילה שגרה הזו.
- 1-99 -
פרק 10
מחרוזות
1 יישומים
בפרקים הקודמים הגדרנו מחרוזת תווים בעזרת התו א. למשל, מלה בת
0 תווים הוגדרה כ-(10)א. סימון זה מאוד נוח בהשוואה לסימון
המקביל בשפות אחרות, שברבות מהן חייבים להצהיר על מחרוזת כמערך.
לפעמים אי-אפשר להת:יחס למלה כולה כגוש אחד, אלא רוצים להתייחס
לכל תו בנפרד. עם זאת, שיטת ההגדרה על-ידי א לוקה בחהסר בשטת
אחד - גישה ישירה לתו כלשהו. יש שתי שיטות להתגבר על בעיה זו,
כאשר משתמשים בהגדרה זו:
א. להגדיר את המחרוזת כמערך של תווים נפרדים, כך שיש גישה לכל
תו כאיבר נפרד של המערך.
ב. להשתמש בפקודות מיוחדות בשפת קובול המאפשרות גישה לתווים
במחרוזת. פקודות אלו הן:
(1) 50801א1, המאפשרת ספירת והחלפת תווים מסוימים במחרוזת.
(2) 0א51%1, המאפשרת חיבור של קטעי מחרוזות ותווים נפרדים.
(3) אדתדפא0, המאפשרת פירוק מחרוזות לגורמיהן.
שלושה מקרים מחייבים טיפול בתווים הנפרדים המרכיבים מחרוזת:
א. אימות נתונים: בדיקת שדות כד: לוודא שאין בהם תווים לא
רצויים, למשל רווחים בשדות נומריים, או ספרות בשדות
אלפנומריים.
ב. תרגום תווים: הפיכת תו מסוים אחד לתו אחר. למשל, החלפת
הרווחים לאפסים בשדה נומרי, או פענוח תמליל בו הוחלף כל תו
בתו אחר כלשהו.
ג. עריכת תמלילים: הוצאת (או החלפת) תת-מחרוזות ממחרוזות. למשל,
הוצאת השם הפרט* משדה שמכיל שם משפחה, פסיק ושם פרט*.
הטיפול במקרים א' ו-ב' נעשה בעזרת פקודת ₪01פפא1. הטיפול במקרה
השלישי דורש בדרך כלל גם שימוש בפקודות 8א5131 ו-6א1תצפאש.
- 170 -
2 הפקודה 180801
מבנה הפקודה 61מקפא1:
1 מע סמפפאך
סאזצזזאד ]
ד 0-3 זָ מו
1+ אזסא ז 1 /
5 8886-2
5-4 מתסקטם
2 ז ן ו ונ 1
1106281-2 המזי
0 ]
6-6 מתסעתם 58066-5
1 / 1 זאד ז הז 1 עצם 5תמ תס
8 .,. התד -11%0281-3
88066-5 0-7 1
ן 1 [ 7 ]] סטממן
1100281-3 11%56281-5 פד
1-6 מתסזסם
[ ]
1-84 המד
הסבר: הפקודה 1סמקפא1 בודקת את תוכן הפריט היסוד: או הקבוצת:
1 (המכונה השדה הנבדק) משמאל לימין. סוג שדה זה הייב להיות
צגפפזת 15 050. השדות האחרים שמוזכרים בפקודה זו הם פריטים
יסודיים אלפביתיים, אלפנומריים, או נומריים שלמים, אלא אם הוסבר
אחרת. הקבועים הם קבועים לא נומריים. יש שת אופציות להמשך
הפקודה:
א. 0א1צ]: הפקודה תספור את מספר ההופעות של מחרוזת מסוימת,
או מספר התווים לפני או אחרי הופעתה הראשונה של מחרוזת
מסוימת. להלן הסבר מפורט של הפרמטרים השונים הקשורים לאופציה
זו.
(1) 2 השדה המונה (1816ע 6תט00 6ם7). זהו שדה נומר:
שלם (ז"א שתמונתו מכילה את הספרה 9 בלבד) שמכיל את מספר
ההופעות המבוקש. על המתכנת לקבוע ערך התחלתי.
(2) 13 או 81-1ע11002 הם שדות הדוגמה, אשר *כולים להיות
גם קבוע סמלי (חוצ מ-/111) שאורכו הוא 1. 3 חחייב
להיות פריט יסודי. לפני השדה או הקבוע תבוא המלה ,411 ואז
נקדם ב-1 את ערך השדה המונה עבור כל הופעה של שדה הדוגמה
בתוך השדה הנבדק. אם תופיע המלה 0א10401,| נקדם את ערך
השדה המונה במספר ההופעות המובילות של שדה הדוגמה בהתחלת
השדה הנבדק (עד שסדרה זו תיפסק על-:די מחרוזת שהיא שונה
- 171 -
משדה הדוגמה). שדה הדוגמה יכול להכיל תוי אחד או תווים
אחדים.
(3) 8806-84 או 81-2ע1108₪ הם השדות המגבילים. אם כוללים
אופציה זו, הספירה שהוזכרה לעיל תחל רק מן ההופעה
הראשונה של שדה ההגבלה (אם כתבנו תםך7ק2), או תמשך רק עד
ההופעה הראשונה של שדה הגבלה (אם כתבנו מתסעמם).
(8) במקום | לכתוב שדה דוגמה, אפשר לכלול את האופציה
5 וא הספירה תתייחס למספר התווים (כולל
רווחים) בשדה הנבדק. מספר זה בעצם :דוע מהגדרתו של השדה
הנבדק, לכן אין משמעות לאופציה זו אלא אם נבצע אותו עם
מתסעתת או תמנתקה ואז נדע כמה תווים נמצאים לפנ* או אחר:
השדה המגביל.
ב. לכתוב 0א01,]פמת: הפקודה תשתמש במחרוזת מחליפה כדי להחליף את
כל התווים לפני מחרוזת מסוימת, או את כל המופעים של דוגמה
מסוימת. להלן הסבר מפורט של הפרמטרים השונים הקשורים לאופציה
זו.
(1) 88066-5 או 1106281-3: השדה המחליף.
(2) ]- או ל-1106281: השדה המוחלף.
(3) | 8806-6 או 11%66281-4: השדה המגביל.
אם בוחרים באופציה 012407805 צם, השדה המחליף (שאורכו חייב
להיות 1) מחליף את כל התווים בשדה הנבדק, אבל החלפה כזאת אפשר
לעשות גם בעזרת פקודת 0/8א פשוטה. שימושה היחיד של אופציה זו
הוא כאשר משתמשים באופציה מת0קמם או המצעה כדי להגביל את היקף
ההחלפה. באופציה זו אין שדה מוחלף, שהרי כל תו הוא< בגדר שדה
מוחלף.
אם בוחרים באופציה ;81, כל המופעים בשדה המוחלף *וחלפו על-:ד:
השדה המחליף. אם בוחרים באופציה 06א1421 ההחלפה תתבצע רק אם
השדה המוחלף הוא בהתחלת השדה הנבדק והיא תתבצע מספר פעמים השווה
למספר המופעים של המחרוזת המוחלפת. אם בוחרים באופציה עפתדק,
ההחלפה תתבצע רק פעם אחת, במופע הראשון של השדה המוחלף החל מצד
שמאל של השדה הנבדק. גם עבור אופציות אלו, אפשר להגביל את
ההחלפות בעזרת האופציה טה0עעם או הסדקה.
גם ט6א1צ]תגד וגם 6א401קמת נקראות אופציות, אבל חייבים לבחור
לפחות באחת מהן. אם בוחרים בשתיהן, 0א%1צ1410 חייב להקדים את
6אדס תת
בקובול עבור מחשב א8/ וגם בניבים שונים למחשבי 1284 (אבל לא
בקובול 85) קיימת פקודה המאפשרת החלפת כל תו בשדה הנבדק שנמצא
במקום מסוים במחרוזת דוגמה על-ידי התו שנמצא באותו מקום במחרוזת
המחליפה. למשל, נניח שרוצים להחליף את האות 2 בסיפרה 1, את האות
8 בסיפרה 2, עד האות 1 שרוצים להחליף בסיפרה 9. נגדיר את השדות
הבאים:
= 172. =
. '01100א0' 08106 (9)א 16ק 8% 01
. ' 0081 6ט1אט (9)א 16ק 8משנוע-2020%ת86 01
. '123156789' 08106 (9)א 6נק 8" 01
בקובול של 18% הפקודה שמבצעת את ההחלפה ה*א:
8%ט1א-5806 | מע0+פתהקץך
. 108 1ת180/-28802026% 10 8משַט2-862026% שספע
בקובול עבור ה-78% הפקודה המתאימה היא:
68%טנ1א-5866 666כ5תך
8 10 8משַט880120266-2 שת61ת6טת0ס6
במחשב א8/ אפשר גם להוסיף את הביטוי המגביל את היקף הפקודה:
106 מתסעתם
[ ן זג זזאך ז 1
11 המד
בשתי הגירסאות של פקודה זו, מחרוזת הדוגמה והמחרוזת המחליפה
יכולות להיות שדה או קבוע. בדוגמה שלפנינו לאחר ביצוע הפקודה
המתאימה התוכן של 68%ט1א-5886 יהיה: 31943א117. האורכים של
מחרוזת הדוגמה והמחרוזת המחליפה החייבים להיות זהים ואסור שתו
כלשהו יחזור על עצמו במחרוזת הדוגמה.
= 173 =
3( דוגמאות לשימוש בפקודת 152801
הטבלה להלן מציגה דוגמאות לשימוש בפקודה 607מספא1. 0-1
מוגדר כשדה אלפנומרי באורך ]. הערך ההתחלתי עבור המונים 6-1תסש₪
ו-6-2ת₪0 הוא 0. .
מו|מו'| 58066-1| 5866-1
2 1 אחר: לפנ: פקודה
לא | 1 |5216.98|5216.98| 6-1מסא% שת1ע71811 9806-1 52606ת1.1
."." 11 עסקע
לא 8 |0000008| 6-1תסא/ שת1ע1811 58066-1 606ע5ת2.1
.8 ש₪>שףת108601 עסק
לא | 3 |123,1,4|123,1,4| 6-1תסא שת1נצץ1811 5866-1 606קפת3.1
."," 1%5181ת1 262026 59ע8060ע0282 עסק
8 563.28
2 | 4
1 דפצ, ןגא | דסץ, זהאה "4" 421600 "2" שת16861 עסקע
"4" 41602 "א" שת16861 עסע 6-2מסא
לא |לא |99|0089099 89 1 שת3601861 5866-1 60%כ9ת6.1
"0" זב הכח
לא |לא |83.28|0000.28
6 "0" צעַם 5ע828006ת0
"." 16181תך
לא |לא |123***%|123*א%*+ שַת1801ק36 5806-1 8.18060%6
יפו צַםּ "+" %נח
לא |לא | תג0411| 185 זה שת1801קסת 58066-1 60%6ק5ם9.1
5 | 5115 "ם" ע2+06 "₪" צעַם "8" 8ם16861
לא |לא | אתחתת אא | התחת,זהה 1 אשם1801ק36 5866-1 5260%ת10.1
אאא, ]אא | תת זאאת "א" צעם "ג"
7 | 40121.7
."אא" 065ס? "א" עַם "ת" 11ב
לא-פרושו "לא מתאים".
1תסא שת1צץ1811 5866-1 606ס5תך.84
"." 261026 פַּתססַ6הע8ת0 עסק
"." ע4200 8ע8000ע8ת0 עסע 6-2מסא
1-מס) שת1ץ71811 5866-1 8060%ת5.1
שת1801קסת3 5866-1 60%ק9ת1.1
1מסא 8ת181171 5806-1 8260%ת11.1
"012" 411 עסץ
. "00" עם "וא" 411 שת1ס18קסת
- 178 -
הסבר:
1. סופרים את מספר הנקודות בשדה, כדי לוודא שיש נקודה עשרונית
אחת ויחידה. אין שינוי בהרכב השדה.
2. סופרים את מספר האפסים המובילים. אין שינוי בהרכב השדה.
3. סופרים את מספר התווים לפני הפסיק הראשון. אין שינו*י בהרכב
השדה.
8. סופרים את מספר התווים לפנ: הנקודה העשרונית וכותבים ערך זה
ב-6-1תסא, אחר-כך סופרים את מספר התווים אחר*י הנקודה וכותבים ב-
2-סתסא. אין שינוי בתוכן השדה.
5. סופרים את מספר המופעים הצמודים של האות ":" בהתחלת השדה
ואחרי ה-"4" הראשונה. בדוגמה שלנו אחר* ה-"" הראשונה נמצאת
"א", לכן אין "1" מובילה והמספר המוכנס ל-98066-1 הוא 0. סופרים
גם את מספר המופעים הצמודים של האות "א" בהתחלת השדה ואחרי ה-
"8" הראשונה. מכיון שהאות הנמצאת מיד אחרי ה-"8" הראשונה היא
"א" ויש רק אחת מהן, מכניסים 1 ל-6-2מסא. אין שינוי בתוכן השדה.
6. החלפת רווחים באפסים, צעד הנחו אם רוצים להשתמש בשדה זה
לחישובים. פעולה זאת אינה משפיעה על המונים.
]. איפוס החלק השלם של המספר בשדה. פעולה זאת אינה משפיעה על
המונים.
8. הכנסת סימן דולרים בראש השדה כדי שהמספר בשדה *וכל לייצג
סכום כספי. פעולה זאת אינה משפיעה על המונים.
9. החלפת "ג" מובילה אחרי ה-"2" הראשונה. בדוגמה הראשונה אחר:
ה-"1" הראשונה נמצאת עוד "2" ולכן אין "ג" מובילה. בדוגמה השניה
יש "8" מובילה אחר* ה-"" הראשונה והיא תוחלף ב-"מ₪". פעולה זאת
אינה משפיעה על המונים.
0. שת החלפות באותו שדה. בדוגמה הראשונה "ה" לא מוחלף ב-"א"
כי אין אף לא מופע אחד של "אא". בדוגמה השניה מוחלף כל תו "ת"
שמופיע אחר:* "אא". אם תיווצר מחרוזת "אא" כתוצאה מן ההחלפה
הראשונה, היא לא תחשב, כי היא לא היתה קיימת בשדה הנבדק בזמן
הפעלת הפקודה. פעולה זאת אינה משפיעה על המונים.
1. ספירה והחלפה בפקודה אחת. שים לב שאפשר לספור או להחליף
מחרוזות מכל גודל, אבל האורכים של המחרוזת המחליפה והמוחלפת
צריכים להיות שווים.
- 175 -
4 תכנית לדוגמה
נציג תכנית המתרגמת ספרות לתמליל המייצג אותן. למטל, אם התכנית
מקבלת את המספר 5001.02 כקלט היא תוציא כפלט את המשפט:
5 - 0א'- פא - 1.435 זסק-שאס- פא10053'-מטדע
תכנית כזו נחוצה בזמן שמכינים המחאות בעזרת מחשב, אשר בהן
חייבים לכתוב את הסכום גם כמספר וגם במלים.
התכנית מתבצעת בשני שלבים:
א. פירוק המספר לספרות. מפרידים בין החלק השלם (הדולרים) והחלק
העשרונ* (הסנטים). אחר-כך מחלקים בחזקות שונות של 10 כמה
פעמים. אחרי כל החילוק, המנה היא ספרה בודדת שמתרגמים למלה,
והשארית מספקת את המחולק הבא שינותח.
ב. תרגום כל סיפרה למלה. הוספת שם תואר מתאים (למשל 5א7₪0054 או
פפתפאטא) כדי לתעד את מיקום הסיפרה, המלה 2011/25 בסוף החלק
השלם והמלה 15א0₪ בסוף החלק העשרונ'.
להלן פלט של תכנית כזו ואחר כך התכנית עצמה (המיקום בתוך השורות
שונה קצת, כדי לאפשר לרוב הפלט להופיע בדף הספר):
5 אמ - אמ עמפ- עס דט - פא -405. 011 -ממו- צדאמות 2.7
-₪א1א-צ1011ם- פאה -5הג.011ס- אמ ע5- צ'א1ס5- פטתפאטת-מטזק 9. 0567
ל
5זאפס- 107 - צזן0 דט - פא - סג תס - זז זט - פמתפאנ- מאצא -, 0.08
-011.485 -₪א1א- צ'101ט- פמתפאטז - אמע56-פאהפטסצ1-א1ס :1
פא 00-0ע- צדת1אד- פארה
15אמס-מא1א- 1 - פא - 485 011ע-טא1א- פפתפאטת-טאזא 0.99
- 8-201/4%5א0- צזאמש- פמתפאח- טמותזד- פאה 3005 -טשצק 2.08
07-05 זמ - צנטא1א-פאג
5את-טא1א-פא011.405-4ע-מעדש- ציזאסנט - פטתפאת- טאזא 0.9
5עאםס- צנטא1א-פא01485-4כ- אמעמפ- צאמטס 0. 0077
15 אמס- אםשמפ- צנטאדא- פא -פתה.1 ז0פ-מטדק 0.7
אמ -8א1א- צ זט - פאהב -01.485כ - אממדדק 09
זא - צנטא1א-פא011485-4ע145-2ש- צד'אד5- פמתפאטת-טאס 5.0
- 176 52
פא -מא1א- 107 -קאג -פת42/ 1 0ע - אטטע'אטסע
פא 0-טא1א-פא011.435-4כ- אמ לפ- עד זט - פמתפאנתז-מאזא
9
7.9
סא ס- 0א- פא -5ת1.4 01 - עדת זה ד- פמתפאטת-טאס 1.00
-כא2011.485-4-51%- צתיע דע- פמתפאנזז- מא1א- פא 05 סזת- ד 5
5אמס- צינטאזא
- 1.485 201-מא1א- צידשא זא- פמתפאטט-טא1א-פאב5טס- סז 09.(20
15אמס-0א-פאבה
התכנית: .ת1810ט1ת ב%192108010ת160
. ₪8-18קטכ .16-םהעשסלק
. 566610 6-005028:6גוקתך
. 116-006201ע
. "28%. םט1ת185" 10 ת2551₪ מ1שט1ת6%2-189ע0א 5618666
.7 10 בש4891₪ ג2006 5618066
.ם1910ט1כ 868
.ת500010 116ק
מנמט1ת006%2-185 פק
18061 6002685 42206
ס:1 01
תסספ פץ
4 06 3600265 18061
8 5% 15 6ש8ת11
0 460 שתבסססע ₪10
6 סס1 46 68ת11
6 30550₪ 46 65ת11
. 86-20061ות65 18 60026 8608
.טפס 01
.א 160 116%נעק | 01
.. (9)12 16 6 01
.(10)א 16ק 1162גע | 01
. (75)א 216 6166ק2-20₪111₪-שטת 50 01
.ת960610 5%02886-שת1אסס₪
.8 - 15081 01
1 סנק 3810₪ת5-616%ת0 02
.+ 16 שנ%ת15082-00א 02
.4 16 8 02
.4 160ק 8 סא 02
.+ 16 8תנות085-80₪ | 02
16 6מסא 02
- 177 -
. "011.3"
. "פתאמס"
. "פעאמס-0א"
9 "סאג"
883 6ט781 (10)א
8 6טג1אט (10)א
8 8106 (10)א
158 6ט1א7 (10)א
.א 216 1108 75 000028
.א 16 1168 9 000025
. "פאס"
, " 0"
. "ממתצדי"
. "סק"
. "מטדק"
. "51%"
. "אמש5"
"ןד"
. "מאדא"
" ּ" אחז"
. "אמעט זמ"
. "מש זטק"
. "אמפדהזזוד"
. "אמפדתטסק"
. "אממנע1ץ"
. "אמטץא1"
. "אממדא 5"
. "אמט סד"
. "אממעשאדא"
"צינאמר""
"עת דצ"
. "תס"
. "תקד"
. "51"
. "5"
. "101"
. "צנמאדא"
15
18
159
158
158
15
18
158
18
18
15
155
18
18
18
18
18
18
158
158
15
15
155
18
155
155
18
6גו81
16
816
1%6
816
6
16
816
06(
סונא
6
16
816
816
6
%06
06
16
סונא
06
816
ספ
16
106
816
816
206
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
(9)א
6
6
6ב
6
6ב
16
16
6
6בק
6
6
16
6
6ב
6בק
6ב
6בם
16
6
16
16
16
6ב
16
16
6בק
6בק
6בק
6ב
6ב
6בק
ב מננצ
8 02
8 02
8 02
8תה-118א 02
. מ1[1מסם-מטתס6
ה8תטתפ 02
. 286-40008טתפ
022 8
.116ת111-868א->8מ1תפסת
11162ע 02
162ונק | 02
1162נעת 02
5 02
1160נע | 02
162ונע | 02
165ונעק 02
1162נע 02
165נ1נת 02
160ונע | 02
160[נעת 02
1162נעק 02
1165נעק 02
11162ע | 02
11162ע 02
1162נע 02
1162גע 02
1162נע | 02
%ע116נע 02
ע116נ1ע 02
1162נע | 02
ע1116ע 02
11165 02
1162נע 02
ע1116ע | 02
6% 02
ע1116ע | 02
.11%שת268-111₪א-01₪86ת65 698ת606691ת 111₪א-18%ט78
. (9)א 18 2106 11₪68 27 5עט060
."0" 18 078106 (3)א 16ק
. "אמא" 18 0816
ססעף?ם 02
. 11₪הקסת
שנתטס6א-268₪61-509 02
- 178 -
שנתטססא-+50 88
1
1
1
1
1
1
)81(
)42(
)33(
)48(
)85(
)86(
)47(
)48(
)49(
)50(
)51(
)52(
)53(
)58(
)55(
)56(
)57(
)58(
)59(
)60(
)61(
)62(
)63(
)68(
)65(
)66(
)67(
)68(
)69(
)70(
)71(
)72(
)73(
)7%(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
* 1
,ת2101810 6עט60ססעק
.1%תפהת-8ת1טסטת
, 11מנו1ת006%2-185 ס>טסת1 ת006
.סכ 006016
דט [06%2-185א 3086
. ₪שנתטס6א-+26861-50 סז "אמא" 6טסא 6םם 46
. םנתטס6א-?50 11סת0 6ט00ע, שעס?מסק
.206 , מ1מט1ת06%2-185א 6
.תות סססס
₪16 .
. 8גות5ה38-מס8%א 10 0 6טסא
. 5286-0008 , 20₪111₪-מותסס סז 508068 6טסא
. מ810ת5-02616% 10 016ו08₪ 6טסא
( 6₪ 6616-5081 - 16ו08₪)= 61₪מ18082-00א 6סגקם 00
.26006-418+1₪ םע0ס+מסק
.6006-8606 מעס?עסק
.60160%ע86/-606-45820% םינ0+ינ סק
. 1₪ע180828%6-2018] ₪ע0+?עסק
.01₪ת1180828%6-00 םע0+עסק
ם1מט1[ת%006%2-185 3686
. מנמטטסא-+26861-50 0 "אמא" שטסא 6םם 4%
. 8+1₪ 360116-41
28+51% שת1ט01 0 ע2 52816₪-616%ת0 210166
. 810₪ת5-616%ת0 662ת1המסת
0 < 51998 1%
8-רטט 10 (8ע5122) 528206 סטסא
מנט18-180828% םעס?עסק
8 סד "11005482" 6טסא
1801₪-1880828%] מםע0ס+עסק
. ₪300116-1160%
51+28 שת1ט01 0 ע2 8160₪ת5-616%ת0 186ט1ע
. ₪=592816-0616% ע66ת1המסת 5
0 < 8ע?1ס 1%
8רטשטט 10 (51228) 52820006 6טסא
מנט8]-1180828% שעס%עסק
סט סי "סמתפאשת" פטס
.שנט8%6-18ע8ט] 02₪+עסק
---- 0006-4580
0 < מסַנַַת5-6186%ת0 1%
0 < 810₪ת5-616%ת0 12
51):8 שת1ט01 10 ע8 810₪ת5-616%ת0 210166
810₪ת5-616%ת0 ש66ת1המסת
8 סד 18 268
8 10 (519/28) 0%ע52/8 6טסא
₪םנע1180828%6-8 םע0ס+ע6ק
- 179 -
)83(
)88(
)85(
)86(
)87(
)88(
)89(
)90(
)91(
)92(
)93(
)93(
)95(
)96(
)97(
)98(
)99(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
)120(
)121(
)122(
)123(
)128(
)125(
)126(
)127(
0 < מסנַַת5-616%ת0 12
סי" (8106₪ת5-616%ת0) 5/8206 סטסא
5-8
814 -880828%!] מעס?תסק
ו
6
8 10 (810₪ת5-02616%) 06ע5+8 סטסא
.מ1טל18]-8286ט8 שע0ס+ע6ק
. ₪דש18 -88%ע118082
.8 -סהא ,(סתסא 10 0 ס6טסא
0828009 עסץ 6תסא את1ץ1811 68סט86-4עטתפ 1506066
.1 10181ת1 6ע86?%0
0 < 6תסא +1
פמ 6תס ט11880828%6-18 שפס+עסק
תסתד "פ1אמס-0א" 6ם4 "פאס" = שסא 68סט6-4העטת5 19
8תגום85ם-8%0₪ 10 1 266
. (178ות085-8%0₪א) מעטת5 70 "-" 6טסא
.180 -86תהטה
ה[נמהם-מסאה8א ,הטַתפַּהַם-ם0ס8א סך 1 466
. (28נות288-8%0₪) ה8עטת5 10 (118שהם2-םס;8%א/) 8118 סטסא
. 1₪ע86-2018עפט
3+ 170 20118258 6ט0
. 01₪ט18-180828%] מעס+עסק
.01 ת886-00עהט8
רטט 5 10 6ם118-4 סטסא
. ם1801-180828%] מעס?עסק
ת6ם' 0 < %61₪ת15282-00א 19
0616-5810 10 ש1₪סת82-00ק15/ סטסא
%------58/-0006ע שע0ס?עסק
8 10 85סת06 6ט0
מנט180828%6-18] םע0ס?ע6ק
6
8 10 08ת0-06א שטסא
. םנט18 -1180828% שעס?עסק
.ה00כ86-2מט0ת368 10 528665 6טס
. 0616%-206₪111₪-מטת56 10 260₪111₪-מטב56 6טסא
170 08116 6טס!1
יז 2 שת1סת8ט460 420605 ב86-206מטת65ת3 166עש₪
הסבר:
שורה 95: קיצו השבר העשרוני (המייצג את הסנטים) על-ידי
)128(
)129(
)130(
)131(
)132(
)133(
)138(
)135(
)136(
)137(
)138(
)139(
)180(
)181(
)182(
)183(
)188(
)185(
)146(
)187(
)188(
)189(
)150(
)151(
)152(
)153(
)158(
)155(
)156(
)157(
)158(
)159(
)160(
)161(
)162(
)163(
)168(
העברת
המספר המקור:* לטדה שאינו יכול להכיל שבר עשרוני. התוצאה היא
מספר הדולרים בלבד (הערך השלם של המספר המקורי).
- 180 -
שורה 96: בידוד מספר הסנטים על-ידי הפחתת מספר הדולרים מן המספר
המקורי. כופלים במאה כדי שהתוצאה תהיה מטפר שלם.
שורה 104: מחלקים את החלק השלם של הכמות ב-1000. המנה (51+28)
מסמנת את מספר האלפים במספר המקורי. אם המנה גדולה מ-0, מעבירים
את המלה שנמצאת במקום מספר 51128 ב-111₪א-186ט78 (המלה באנגלית
עבור 28ע+511) לשורת העבודה (108). כעת עוברים לפסקה = ס6םַכם8ט188-
מנט8?" (שורה 135) שתפקידה להעביר את המלה המ*יצגת את הסיפרה
משורת העבודה לשורת הפלט (8עטת5). המלה החדשה תצטרף לסידרת
המלים המקבילה לספרות האחרות שנותחו (במקרה של אלפים, עוד לא
ניתחנו סיפרה כלשהי ואם כן הסיפרה הזאת תיכנס להתחלת המלה).
אחר*י שמעבירים את המלה המייצגת את מספר האלפים, מעבירים את המלה
"פא054" לשורת העבודה (110) ושוב פעם מסתעפים -סתִתַּטְ₪8
₪שנט8+ כדי להוסיף גם מלה זו לשורת הפלט.
שורה 135: כדי לשבף את המלה החדשה שנמצאת ב-0868ט86-40עטת5 במקום
הנכון בשורת הפלט, צריכים לעשות שני דברים:
א. לספור כמה תווים אשר שונים מרווח נמצאים בשורת העבודה
(שאורכה המירבי הוא 9). תווים אלה נמצאים בהתחלת השורה עד הרווח
הראשון, לכן אפשר לבצע זאת בעזרת הפקודה 152666 (שורה 137).
ב. להעביר מספר תווים זה למקומות המתאימים בשורת הפלט. המקום
האחרון שבו היינו בשורת הפלט נמצא במשתנה עטהפ08-מס8.
מעבירים את התווים אחד אחד ממקומם בשורת העבודה למקומם בשורת
הפלט. לפני כל העברה מוסיפים 1 למשתנים 118שם2-םס8%א ו-מס%ה8א-
מעטת85ת (שורה 155). כאשר נשתמש שוב בפיסקת ם1טה]-אהעַהט188 נאפס
שוב את המשתנה 118ם08-מסה8א מכיון שרוצים תמיד להתחיל להעביר מן
מהקום הראשון בשורת העבודה המחזיקה את המלה המיועדת להעברה.
במשתנה ַפטתפ28-₪ס%8% לא ניגע, כי המקום הפנוי הבא בשורת הפלט
הולך וגדל עד שמסיימים לבנות את שורת הפלט. אנו נאפס את המשתנה
8גות885-4%0₪/ רק בהתחלת הטיפול במספר חדש (שורה 93).
שורה 181: הפסקה מ1ש18808286-18 משמשת להעברת כל מלה לשורת
הפלט, כולל שמות הספרות (100 ,מא0 וכדומה), תיאורי הכמויות
(פא10054 | , פטתפאטת) וסוגי הכסף (15א0₪ ,2011485). אחרי כל מלה
כזאת יש להוסיף מקף, חו>צ מאשר אחרי המלה בסוף השורה, שברוב
המקרים תהיה פזאת0 (או 15אמ0-0א במקרה שאין סנטים כלל).
שורה 112: אחרי החלוקה הראשונה (בשורה 105), מחזיקים את השארית
(שיכולה להיות לכל היותר 999) בשדה 816₪ת59-02616% ומחלקים אותה
במאה. אחרי החלוקה, אם המנה שונה מ-0, מעבירים את סיפרת המנה
(שורות 117 - 116) ואחריה את המלה "פתתפאטם" (שורה 118) לשורת
הפלט.
שורה 120: אחרי החלוקה השניה (שורה 113), מחזיקים את השארית
(שיכולה להיות 99 לכל היותר) בשדה מס81ת5-616%ת0. אם היא קטנה
מעשרים, תיאורה במלים נמצאת ב-111₪/-18018% במקום -616%ת0
מ816₪ת5. אחרת, מחלקים מפנ1התפ-616%ת0 ב-10. המנה (51?58) תהיה
- 181 -
מספר העשרות (צשתז | צעאמא וכדומה) בכמות המקורית והשארית
(מ810ת5-610%ת0) תהיה מספר היחידות. המלה המקבילה למספר העשרות
נמצאת ב-111₪א/-18018% במקום ה-18 אחרי ערכה הנוכחי של 8ע511.
משתמשים ב-מ1ט₪88808286-18 כדי להעביר לשורת הפלט את המלה המתארת
את מספר העשרות (שורה 127) ואת המלה המתארת את מספר היהידות, אם
מספר היחידות שונה מ-0 (שורה 130).
שורה 135: בשלב הזה פירקנו את הדולרים וכתבנו אותם במלים. כעת
יש להעביר את המלה "011885" (שורה 147) ואז לטפל בסנטים (שורה
90).
שורה 151: מעבירים את המלה פא84 לשורת העבודה וכותבים אותה במקום
הנכון בשורת הפלט.
שורה 153: אם מספר הסנטים גדול מאפס, כותבים מספר זה במלים
(שורה 155) ואחר כך מעבירים את המלה 15א05 לשורת הפלט (שורה
6). אחרת, תועבר המלה 18א0-08א לשורת הפלט (שורה 159).
שורות 164 - 161: הכנה והדפסה של שורה אחת בדוה.
שורה 102: קריאת המספר הבא. התהליך ממשיך עד לסיום הקלט.
5 הפקודה 818186
הפקודה 8א5181 מצרפת יחד את תוכנם החלקי או המלא של כמה פריטים
לתוך פריט אחד. מבנה הפקודה:
8806-2 0-1
2 צ**,ם סמדצאזטם ... אזתד
8 1
[5806-4 תתזא01ע ₪1178] 8886-3 0זאד
[[0א1ת51-סא2] 8%קת₪15 שסתעתמטס אס]
הסבר: הקבועים המוזכרים חייבים להיות קבועים לא נומר*יים. השדות
חייבים להיות מסוג שעבורו ניתן לכתוב "צ8ק15כע 15 05205"
(דהיינו סוג נומרי, אלפנומרי או אלפביתי). השדה 5866-8 חייב
להיות פריט יסודי נומרי שלם.
א. צם פמדזאזזעת: מציין עד היכן רוצים להעתיק מכל שדה הרשום
לפנ* המלה כמץזא1,1מכע. אפשר לצי:ין את הגבול בכל שדה על-ידי קבוע
או טשדה, או על-ידי המלה 5128 שמציין שרוצים להעתיק את כל השדה.
אפשר לכתוב לפנ* המלה ממעזא1,]מכע מספר שדות כלשהו. גם על המלה
סמדזאןמת והשדות לפניה אפשר לחזור כמה פעמים שרוצים. ההגבלה
שאחר* הביטוי פמץדזא1מת תקפה לגבי כל השדות שקודמים לו.
- 182 -
1 או 11600281-1 נקראים "השדה השולח". 8866-2 או 1166281-2
נקראים "השדה המגב:ל".
ב. 8866-3 10א1: 8806-3 הוא השדה המקבל את המחרוזת המשולבת
מקטע* השדות השולחים שהוזכרו בהתחלת הפקודה. ב-11 00800 75 שדה
זה חייב להיות אלפנומר'.
ג. תמזאזסק נחזט: מציין באיזה מקום בשדה המקבל נתחיל לשב את
התווים מהשדות השולחים. אם לא כוללים ביטוי זה, 5886-4 (המכונה
השדה המצביע) מקבל ערך התחלתי 1, ז"א נשבא את השדות השולחים החל
מן המקום הראשון בשדה המקבל. אחר* שמעבירים תו, ערך השדה המצביע
עולה ב-1. כתוצאה מכך ערכו הסופי של השדה המצביע הוא 1 *ותר
מערכו לפני שהעברנו את התו האחרון. כאשר מסיימים את העברת
התווים מהשדות השולחים ונשארו עדיין מקומות בשדה המקבל, ערכם
המקור* לא משתנה.
ד. אסתעתמטס א0: בכל פעם שמעבירים תו לשדה המקבל, תוכנו של
14 (בין אם הגדרנו אותו לבד ובין אם הוגדר באופן אוטומט')
עולה ב-1. אם בשלב כלשהוּ ערכו עולה על מספר. המקומות הקיימים
בטדה המקבל, נפסיק להעביר תווים לשדה המקבל (שהרי אין בו מקום
לקלוט אותם). אם הוספנו את הביטוי א0עהמט0 א0, גלישה כזאת
תגרום לביצוע של 86כג18ם. אם לא כללנו א0עתמט0 א0, נמשיך בלי
ציון שקרתה גלישה.
6 זוגמאות לשימוש בפקודה 81816
הטבלה להלן מציגה דוגמאות | לשימוש בפקודה | 68א57181. השדות
5016802 ,1-ת5201686, ו-3-ם1686סת5 מוגדרים כ-(5)א, השדה
1 מוגדר כ-(20)א והשדה 862018 מוגדר כ-(9)2. ערכו
ההתחלת: של שדה המקבל הוא "22222272277777777777" ו-ס מסמן
רוות.
1 שת:1סס1.9
01680-2ת5
3-ת01680ת5
6 ב 2611810668
. 68061 ססת1
1 3
1 |501-2 | 1-1סתפ
27 טטדז אק כ*400 | פססנ1| ה*קם
1
- 183 -
1 שת1ע2.5
2-ת1680סת5
3-ת1680סת5
"*" עַם 6111004
. 6%8061א ססתך1
1 3 |01-2ם5 | 1-1סחפ
2נכ/|/|/|//// 0 | ססטנ1 | ואקמ | מ
1 שת1עס3.5
2-ת01080ת5
3-ת01680ת5
"*" עם 611₪16066ע
1 ססמד
8 טססטת1סק תטנא
227 | סססנ1
הסבר:
1. כל שלשת השדות השולחים מחוברים יחד (15 תווים *חד, כולל 3
רווחים ב-3-ת01680ת5). נשארו 5 מקומות בשדה המקבל, אשר אינם
מושפעים על-ידי הפקודה 0א51(1, ז"א ערכם המקור* נשאר בע'נו.
2. מעתיקים מכל שדה שולח רק עד (ולא עד בכלל) הכוכבית הראשונה.
בשדה השלישי אין כוכבית ולכן כל השדה מועתק.
3. השיבו בשדה המקבל מתחיל רק מן המקום החמישי. תוכנו המקור:
של השדה המקבל נשאר בעינו באותם מקומות. ההעברה ממשיכה עד מקום
1 וערך המצביע מקודם ל-15.
שימוש נפו בפקודה 0א5181 הוא בהכנת תויות מתוך מידע הנמצא
בקובצץ. במקרים אלה יש צורך להעביר רק תווים שאינם תוו* רווח
בשדוּת המשתתפים. בנוסף, יש להציב פסיקים או נקודות אחרי מלים
מסוימות, כאשר לא ידוע מראש היכן יהיה מקומן בתוית.
דוגמה: 4% פפפק
.1 2260 6002635 18061
. (133)א% 16ק .2 ְ 01
177 + 2 2ְ9ְ2 1 16
.0 01
. (5)א 216 % 022
. (20)% 16ק 8 ת15א-מסת5 02
- 188 -
. (20)% 16ק 1 02
. (20)א 16ק 62 | 02
. (20)א 16ק 8 02
. 6-2616%6אעטת5 70 508008 סטסא
.861 81ת1866]-₪ס>ה₪8 10 30 סטסא
₪ 9 2611₪1606 60 שת1עטס
6 עב 2611₪1606 9
₪ 2 6111608 5-1
6 עמ 6111006 ₪
₪ 5 61121606 56-18
616% -6ענות5 ססמך
. 861 81ת11800-8%0₪ עססת1סק ב1%א
.1 1 שתנ1סתהט20 2/6002 6106%6ק-6העטם9 166תט
.616%ק-80עטת5 10 508668 סטסא
. 1860081861-מס8%6 10 30 סטסא
₪ עם 611₪1666כ עס שת1עסס
6 עב 611₪1%606כ ₪
₪ עב 611₪16668 618
%רטטטט 150
. 861 [1186008-8%0₪ עססתנסק הסנש
.6 1 שת01ם4608 42002 6166ק-86עטת5 6ס1עט
הסבר: בתכנית שולפים כותרת, שם פרטי ושם משפחה מרשומה, מורידים
את הרווחים הנמצאים בסוף כל שדה, מכניס רווח אחד בדיוק בין שדה
לטדה ומדפיס את השם החל מעמודה 30. אחר-כך מעבדים את שם העיר
והמדינה בצורה דומה, מפרידים בין העיר והמדינה על-ידי פסיק
ורווח ומדפיסים גם שורה זו החל מעמודה 30. שיטה זו מאפשרת הכנת
כמה תויות באותה שורה, כאשר ממקמים אותן בעזרת השדה המצביע.
בדוגמה הקודמת, נניח שתוכן הרשומה 6%6ע860-מסת5 נראה כך:
1
1 2 1 5|6 7 0
צ א|ג |אןם|ט|מ|פ . |א|פ
אחרי ביצוע הפקודות הרשומות למעלה, תודפס התוית הבאה [התווים כ
(של .פ) ו-5 (של ₪1:1) יודפסו בעמודה 30]:
. אגא הס עסאהצ .הכ
,ד
- 185 -
7 תכנית לדוגמה
להלן גירסה משופרת של התכנית המתרגמת ספרות לתמליל שמייצג אותן.
ת2101810 ב61+168610ת166 (1)
. 8-15משטכ .16-מפעשסעק (2)
.ם810נט1ת 2808 | (16)
.560010 116ק (171)
םנשט1ת2006%2-185 פת | (18)
)19( | 128061 6002068 126 58686
.9 סז
8 סנמ08- 51228% 02 (22)
., 210 11₪68 6 58ע0600 082016
)20( 01 369ת0₪8%-185ת1ונמ1מ .
)21( 02 6
.ת566610 5502886-שת1אמס₪ (35)
.וא 01 (36)
. (10)א 16ק ם19082-418%1א 02 (371)
.(10)א 16ק 0% 022 (38)
. (10)א 16ק 022 (39)
. (10)א 216 ץר 02 (340)
. (10)א 16ק ₪נ%)ת00-45820% 02 (41)
. (10)א 16ק 0001₪סת-01₪ת06 02 (82)
. (10)א 16ק בתהפטסת 02 (83)
. (10)א 16ק 4פט 02 (88)
)45( 02 8 16 4.
)46( | 01 ₪.
. "עא011.4235-4כ2" 18 6שט1א0 (12)א 16ק2 6תה-5ע01182כ 02 (81)
. "פזאת0" 18 6ט781 (5)א 16ק 8 02 (88)
.שננשסת-מטת 56 01" (89)
.א 216 11₪65 75 08ש000 הנטתפ 02 (50)
.1 01 (51)
.א 216 711₪0658 9 000895 8 02 (52)
. "- צדאמי"
. "- צדתדזד"
. "-צ'נתש0סק"
"-צתעדק"
. "-צ%א1פ"
. "- צינא/5"
. "-צ10"
. "-צתטאזא"
158
18
15
18
18
18
18
18
%06
06
7816
106
716
816
16
%06
(10)א
(10)א
(10)א
(10)א
(10)א
(10)א
(10)א
(10)א
ס6בק
6
16
16
16
6ב
6בק
16
)53( 01 366ת1₪8%6-0111₪-008תש[16.
11169 02 (73)
ע116וע 02 (1%)
1169נת 02 (75)
5 02 (76)
31169 02 (77)
11165ע 02 (78)
1162גת 02 (79)
ע16[גע 02 (80)
- 186 -
.......
606 .
. 0006-2011 שע0ס?עסק
. %61₪ת260116-00 02₪?ע6ק
.ת86-200ש0ת365 0 508008 6טסא
3 10 0806 סטסו
, 66 תטזן , 115082-605 , 6תהפנוסת (19082-418+1₪א שת1ע6פ
0תה-2011825 0 , 13082-488200
1
59 ,1₪ 6001-0660 ,ם1סת488205-00
ב6166ק-200₪111₪-מטבת56 ססת1 50806 ע2 2611₪1006
,1 2 שתזסת8ט20 41002 ב86-206ת0ם365 106עע
ם1שט1ת%006%2-188 3686
. שנתטט6א-+26₪61-50 10 "אמא" שטסא 6םם 26
. ₪דת8 6006-2001
תסת7 0 < (1) 511286-08206 12
51028 70 (1) 512286-0820%6 סטסא
82-18]1₪ק15א 10 (51?28) 0%6ע8+?5 6טסא
בתהפטסג' 16 "-כא4ב11005'" 6טסא
86
תהפטסם1 ,15282-418+1₪ 10 508008 6טסא
תסמ 0 < (2) ₪06ש911286-08 19
5188 170 (2) 206ם512286-08 6טסא
ם15082-418)1א 10 (51+28) 598206 6טסא
6פפמט 0 "-קמתכאן" סטסא
86
.סט ,15082-8606א 10 58068 6טסא
מס 1 = (3) 91128%6-08₪0%6 19
8 שתצט01) (4) 6טש51228%6-08 ,10 448
6% 10 (51228) 598206 6טסא
5% ספ 508668 סטסא
6
מס 1 < (3) 0%ש911280-08 12
8ע+91 שםמ1ט01 (3) 6ש51?28%6-08₪ ,18 288
0%ע15282-58א 10 (51?28) 0%ע5?8 6טסא
6
10 508068 6ל0ס
6 (3) 05ם81128%6-08 6ת8 0 < (4) 5122860-08₪06 1%
תסתדך
5118 10 (4) 08₪06-51228% סטסא
%- 10 (51+28) 528206 6טסא
6
0% ס1 508068 6טסא
תסמ 1 > סג08₪ 19
.0 סץ' "-0א" 6טסא
- 187 -
)95(
)96(
)97(
)98(
)99(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
)120(
)121(
)122(
)123(
)128(
)125(
)126(
)127(
)128(
)129(
)130(
)131(
)132(
)133(
)138(
)135(
)136(
.₪נסת4-00טססע (137)
מסתך 1 * (5) 06ם511280-08 17 (138)
198 שת1ט01 (6) 5122860-08₪06 ,10 466 (139)
%12ת00-48820% 10 (591+28) 5+8206 סטסא (180)
500001₪-01₪ת09 10 528008 סטסא (141)
)182( 6
מסת1 1 < (5) 51+2860-08₪0%6 9ך (183)
48 שתצט01 (5) 512280-08₪06 ,18 286 (188)
01₪ת28820%6-00 10 (91228) 006ע5+8 סטסא (185)
)186( 6
.01₪ת00-45820% 10 528008 סטסא (187)
1 = 806 (5) 6ש512286-08₪ 6ם3 0 < (6) סטם81+286-08 "ך (188)
תסתך
8 10 (6) 08₪02:6-51+28% סטסא (189)
01₪-סת00 10 (51+28) 58206 סטסא (150)
)151( 6
0 > (5) 8% -51/80 6ת3 0 = (6) 06ם912286-08 ?ד (152)
מסתך
0661סם-618ת00 0 "-0סא" 6טסא (153)
)158( 6
.ם800001-61₪ת00 10 508668 סטסא (155)
הסבר: הפקודה 06א5181 פוטרת את המתכנת מסידור הפלט בעזרת מערך
וגם מהעברת התווים אחד אחד לאותו מערך עד הרווח הראשון בשדה.
כעת אפשר לתרגם כל סיפרה בנפרד למלה, ורק בסוף לשב אותם יחד עם
תיאורי הערכים והכסף.
שורה 100: במשך התכנית מילאנו את השדות 15082-418+1₪א, -עהקפנא
0% 1-0 0-ו ם1סת00-0%ע 4882 ו-
ם200001-1₪סת66 בתרגום הסיפרה המתאימה למלים. גם את השדות
במהפוסם1' ו-66ע8תטז] מלאנו במלים "פאהפטסו" ו-"פמתפאנתז" בהתאמה.
כאשר לא היו אלפים או מאות, מלאנו את השדות המחזיקים את תרגום
הספרות וגם אלה שמחזיקים את שמות הכמויות ברווחים. כאשר מפעיליס
את פקודת השיבוף> 0א1ת1פ לא יפריעו שדות ריקים אלה כ* מעבירים את
כל התווים עד הרווח הראשון. אם השדה מכיל רווחים בלבד, אין
מעבירים דבר לשדה המקבל.
8 פפקודת 518186
תפקיד הפקודה א1ַ1פאט הפוך מזה של 0א5181. במקום לשלוף קטעים
(המוגדרים היטב על-ידי שדה מגביל) מכמה שדות שולחים ולשלב אותם
יחד בשדה מקבל אחד, פקודה זו מפרקת תמליל הנמצא בשדה שולה אחד
המכיל בתוכו כמה מופעים של שדה מגביל כלשהו ומחלקת את התמליל
בין שדה מקבל לחברו. התמליל המועבר לכל שדה מקבל הוא קטע שהופיע
בטדה השולח בין שדה מגביל למשנהו.
- 188 -
המבנה הכללי של פקודה זו:
-586-1 60א1תדפאס
8806-3 6-2
0 [,גז ] הס [,נז] צם ספמדזאד טס
11060081-2 1
... [8866-6 אז זאטסס] [5866-5 א תמצזא11מע] 5866-4 0זַאך
[5866-8 א1 שאזצנזג] [5866-7 המצאדסק אתדש]
[ [6א1ת'פאט- סאמ ] 286ת₪15 שסמעתמטס אס]
הסבר:
א. ש6אזחזפאז: השדה השולח, ז"א השדה העומד לפירוק. שדה זה חייב
להיות אלפנומרי או אלפביתי, עם או בלי עריכה.
ב. צם פמדזאזטע: השדה המגביל, ז"א השדה שהופעתו מציינת שסיימנו
קטע שיועבר לשדה מקבל נפרד. אחרי השדה המגביל, מתחיל עוד קטע
שנרצה להעביר לשדה מקבל נוסף. אם השדה המגביל איננו קבוע לא-
נומרי, הוא חייב להיות שדה אלפנומרי. השדה המגביל בעצמו לא
יועבר לשדה המקבל. אם מוסיפים את המלה ,411,| תוכן השדה המגביל
וכל ההופעות הצמודות שלו נחשבים לשדה מגביל ארוך אחד ורק אחר:
כולם, נתחיל שוב לשב את תוכן השדה השולח בשדה מקבל כלשהו. אם
מוסיפים [411] 08, מאפשרים ליותר משדה אחד לסמן את סוף הקטע
שרוצים להעביר לשדה מקבל. אם שנ* שדות מגבילים נמצאים אחד אחר:
השני, שדה מקבל אחד ימולא עם רווחים, אם הוא לא נומרי ועם אפסים
- אם הוא נומר*.
ג. 10א1: רשימת השדות המקבלים, שיכולים להיות שדות נומר'ים,
אלפנומריים, או אלפביתיים. מספר השדות המקבלים איגו מוגבל ולכל
אחד אפשר לצרף את הביטויים המ7זא1,טת ו-1א000. כאשר קטע מועבר
לשדה מקבל המעבר מנוהל כדין כל פקודת 0/8₪א8 אלפנומרית, כלומר אם
הקטע הנשל גדול מהשדה המקבל, האגף הימנ* שלו מקוצ% ואם הקטע
הנשלח קטן משדה המקבל, שארית השדה תמולא ברווחים. מעבר התווים
לשדות מקבלים ממשיךך עד שלא נשארים תווים בשדה השולח, או עד
שנוצלו כל השדות המקבלים שנרשמו בפקודה.
ד. א המזזא1מס: מכיון שראינו שאפשר להשתמש ביותר משדה מגביל
אחד, יש חשש שאחרי הפירוק לא נדע איזה שדה מגביל סימן את סופו
של קטע מסוים. ביטוי זה מספק תשובה לשאלה זו ומאפשר למתכנת לבקש
שתוכן השדה המגביל שסיים קטע *וכנס ל-5866-5. 6-5 חייב
להיות שדה אלפנומרי. אם הקטע הסתיים כאשר הגענו לסוף שדה השולה,
5806-5 יכיל רווחים.
ה. א עא000: שדה נומרי שלם שמכיל את מספר התווים שהועברו לשדה
המקבל שכתוב לפניו. אורך השדה המגביל לא נכנס לחישוב זה.
ו. תתצא01ע [11א: שדה נומר* שלם שמכיל את מספר התור בתוך השדה
השולח שם תתחיל פעולת הפירוק.
- 189 -
ז. א1 6אזעתאד: שדה נומרי שלם שמכיל את מספר השדות המקבלים
שנוצלו כתוצאה מפירוק השדה השולת.
ח. א0תעתעטס א0: גלישה מתרחשת כאשר ממלאים את כל השדות המקבלים
ועדיין נשארו תווים בשדה השולח. במצב גלישה נבצע את המשפט הכלול
פה אם הוספנו ביטוי זה. אחרת, נמשיך בפקודה הבאה.
9 דוגמאות לפקודה 6ו181פא
הטבלה להלן מציגה דוגמאות לשימוש בפקודת אַא1ַא7פאט. 5016801
מוגדר כשדה אלפנומרי באורך 10, כאשר 1-6%א8 ו-2-86% הם שדות
אלפנומריים באורך 5 שמכילים במצבם המקור* אפסים. התו טל מסמן
רווח. ערכו ההתחלתי של השדה 818061ת1866-מס88% הוא 5.
אסתטת | סססםג | זהסץמכ*ס20 | עֶם 2611₪1%686 5201680 שתנע%6פתחס.1
[-68% ססתך "א"
0 | סקט | דאסשטפ*סם. | עפ 2611₪1666 ג1680סת5 שתנעפפתט.2
2 [068-1 ססםתך "*"
ספסססס | 2202 | 1*==עמססם) | עפ 611₪10606כ2 ב1680סת5 שתנע6פתט.3
ססם1 "=" 411 00 "א"
6-1מסא 1 סתטס 0 6%8-1א
6-2תס) ם1 6006 2-א6%א
6% פס ת1 שת1צ11ג
. "407" 219018 שס1+עסט0 ת0
. נ818%ת18%50-מס08% עפסתבסק ת₪1%6
הסבר:
1. מעבירים את הקטע שנמצא עד הכוכבית ל-1-6%א. מכיון שיש רק 3
תווים להעביר, שנ* המקומות הנוספים באותו שדה ממולאים ברווחים.
הקטע השנ*י להעברה הוא זַא6ַעמכ2, המוגבל על-ידי סופו של השדה
השולח. היות והוא מורכב מ-6 תווים, השמאלי מקוצצ ורק 5 מג'עים
לשדה 86%8-2.
2. ההבדל בין דוגמה זו לבין (1) הוא שכללנו מצביע עם ערך התחלת:
5. כתוצאה מכךך התו הראשון שנבדק הוא כ, המוגבל רק על-ידי סוף
השדה. תווים אלה מועברים ל-1-6%א8. אין נוגעים בשדה 2-%86% ולכן
תוכנו המקורי נשאר בעינו.
3. הקטע הראשון מוגבל עקב שני מופעים של "=". מסתכלים על שניהם
כשדה מגביל אחד כי הוספנו את המלה [241. לו היינו משמיטים מלה
זו, ה-"=" האחרון היה נחשב כשדה מגביל נוסף של מחרוזת באורך 0.
- 190 -
אורך הקטע השני הוא 0 כי המגביל "*" צמוד לשדה המגביל הראשון.
לכן מעבירים רווחים ל-2-6%א. המספר בתוך 68-1תסא יהיה 6 כמספר
התווים עד השדה המגביל (למרות שהעברנו רק 5 מהם). המספר 6-2תסוַי
יהיה 0 כי לא נמצא אף לא תו אחד בקטע השני. השדה 8606כ6-5מסא
יכיל את המספר 2, שהר* שני שדות מולאו (על אף שהשני מולא
ברווחים מכיון שהקטע היה ריק). המלה "1201" תוצג, כי אכן קרתה
פה גלישה. מילאנו את שני השדות המקבלים ותו אחד נשאר עדיין בשדה
השולח. לו היינו כוללים פה את הביטוי "א1 תמ7זא1עפס" עבור שן*
שדות המקבלים, הראשון היה מכיל את הסימן = (או == אם אורכו 2)
והשני היה מכיל *.
דוגמה: אחד מן השימושים הנפוצים בפקודה ַא181פא0 הוא לקליטת
נתונים שהוכנו | בצורה חופש'ת (₪86ע02ס2 66כ2קת). ז"א, נתונים
המורכבים משדות שא*נם מוגבלים לעמודות מסוימות, אלא מופרדים אחד
מן האחר על-*ידי סימן כלשהו, למשל פסיק. תיאורי הנתונים והפקודות
שמופיעים להלן מדגימים שיטה זו:
. (80)א 16ק %רורטטטרפסת 01
. (80)א 16ק רוט 01
01 אסתפ1 16 +.
1 16 2-פתסא 01
. ם00ת65ת 8881-0 01
. (20)% 216 1 022
. (20)% 216 1-2ס86תק-₪סת 5 02
. (20)% 16ק 8 ,02
. (20)א 216 תגא 02
. (20)א 216 6טאףטפת-עסת 02
.(9)9 16ק ם 19082-02658000 02
9 סנק ם65300ת086-טת 50 02
נתונים לדוגמה:
76, 6790065522, , 2, ת8ו60 1 , 5100 , מהתפינטה
0, 008136753, צמ1ם, א, 1ט11816, , תפס
פקודת 0א1ת1פאם: %- טס שַת1ע%פת
"," ע0 508065 411 צ%ם 10866ם611כ
1מסא ם1 %תש00 2861-1ק-מסת5 | 0ס6םת1
2861-2ק-0₪ת5
6-2תסא ת1 6מש00 8ת151086א-מסתפ
מנא
8086 -מסתס
ב00ת065-ש8סף ו
. ת00ת286165-מטת5
הסבר: מפרקים את רשומת הקלט שדה אחר שדה. אם שדה חסר, למשל שם
הרווקות אצל אברהם פרידמן ושם פרט* שני אצל חנה הלוי, במקום
למלא את השדה כותבים פסיק בלבד. השדה המקביל ברשומה -2881
מ00ם68ת0 ימולא ברווחים, מכיון ששדות אלה מוגדרים כאלפנומריים.
- 191 -
שצים לב שההעברה היא העברה אלפנומרית ולכן במספר החשבון ובסכום
החשבון, חייבים לכלול אפסים מובילים, אחרת המספר. יוצמד לשמאלו
של השדה המקבל וצדו הימיני ימולא באפסים. אם רוצים להוריד את
הדרישה של אפסים מובילים, אפשר לקלוט את המספרים בשדה אלפנומר:
המיושר בצד ימין (ז"א אם תיאור הכולל את האופציה 1051) ולהשתמש
בפקודת 1סמפפא1 כדי להחליף את הרווחים באפסים. אחר* החלפה זאת,
נוכל להתייחס לשדה כשדה נומרי, אם יש לו הגדרה נומרית מקבילה
להגדרה האלפנומרית שלו.
נניח שרוצים לפתוח דף חשבון עבור כל לקוח, כאשר בראש כל דף
במרכזו (רוחב הדף 80) רוצים לכתוב את השם הפרט* והמשפחתי של
הלקוח. הקוד להלן מטפל בהדפסה זו:
. 00000א- 1180768
.רכרטטטט 10 5280065 סטסא
= 818%1ת11860-מס48% 6סנוקמסס
(1+ 6-2תס% + 6-1תסא)- 840
6% 211 8 611₪1666 1 ששת1עספ
6 ע2 2611₪1606 90806
8 411 צַם 2611₪1%666 808קת15א-מ₪סם5
6 ססתך
. 861 80-1860681 עססתבסק ם1%
.6 1 שתנסתהט36 ע60+?4 6166ק->העטם5 6ס1תעש
הסבר: השדה 6-1מסא/ מכיל את אורך השם הפרט' ו-6-2תס% מכיל את
אורך שם המשפחה. מוסיפים 1 למספר זה כי רוצים להכניס רווח בין
השמות. היות והמרכז עובר בעמודה 40, אם נוריד מ-50 חצי מאורכן
של המלים שרוצים למרכז ונתחיל את ההדפסה מאותה נקודה, נקבל
כותרת ממורכזת.
9 תחרגילים
7
שאלות
1. מלא את החסר:
ת160ו60א | תס61נססאם
0%
ב0ס1סנוססא
סאד אד דסמספאד 33
5 תסק מאסא 99
9
א
'9' מתסקתם
0 את דסמקפאד
'9 6א1₪421 08ע מאסא
אע 6
המל
מ2601510 | מ6011610א 601610
6אזצ זו את 1סמספאך 2"
5 תסע מאסא 7
'9' מתסקטם
סאצצ זו אתעז עסמקפאך 9(
'פ9' ,811 הסע מאסא
'+' צם '9' 10 0א201 זקטת
אצ אתדז עסמקפאך 2
5 האדכגמ תסע מאסא
5 אד אד20, קת
5 צם
6אדצ ד אמ עסמקפאד 3
שתסעסם פתמ1ך0תס ה0ע מאסא
5 0א01/ קת מסהקס
₪ משמתסעתם '*' צם
2. אםחפ-1האפעת מכיל שם פרטי, שם אמצעי ושם משפחה, מופרדים
על-ידי פסיק אוה על-ידי הסימן "א". אם אין שם אמצע'י, שנ:
המפרידים יוצמדו זה לזה, משתמשים במפריד "א" אם מדובר באשה
ובמפריד "," אם מדובר בגבר. כתוב פקודות שתאפשרנה אחסנת
הנתונים בשדות הבאים:
אסאפדת-א , 241אם-א , הה150א-א עבור נקבה,
א150ת-2 , 2-241 , ה01קו15א-2 עבור זכר.
3. טדה אלפנומרי (עם תמונה (10)א) מכיל מספר עם פסיקים (למשל
808)). כתוב פקודות להעביר מטפר זה לשדה נומרי, למשל
אטא עם תמונה (9)10, וכמובן ללא פסיקים.
4. מלא את הטבלה להלן עבור הפקודה את0עפאהת1 (א18) או עסמספא1
60 (א08). כתוב גם את הפקודה המלאה כדי לבצע העברה
זו.
12387 10 '280ד' 75
155
- 193 -
'2צאוו' סס 'כסםג' פזעם
003
א >(3+16)
'8446>' 70,=)+(' 2-8+0
4(8
5. רוצים לסכם את כל המספרים הרשומים בשורה אחת ומופרדים אחד מן
השני על-ידי פסיקים. כתוב פקודות שיבצעו משימה זו.
תכניות
1. כתוב תכנית הקוראת תמליל באנגלית ומדפיסה אותו כפלט, כך שכל
אות מוחלפת על-:די האות שבאה אחריה באלפבית: האות 6 מוחלפת
על-ידי האות 25 וכדומה (2 מוחלפת על-ידי ג).
2. כתוב תכנית הקוראת ומדפיסה תמליל ומחשבת את הערכים הבאים:
* מספר השורות בתמליל.
* מספר המשפטים.
* מספר המלים.
אפשר להנית שכל משפט מסתיים בנקודה-רווח וזה השימוש היחיד של
זוג תווים זה. אפשר גם להניח שמלה מורכבת אך ורק מאותיות.
3. בשורת הנתונים הראשונה מופיע המספר א ולאחריו א מחרוזות בנות
90 תווים כל אחת. כתוב תכנית אשר:
* קוראת את א המחרוזות.
* מחשבת את מספר הפעמים שהתו 7 מופיע בכל אחת מהמחרוזות.
* מדפיסה את המספר הסידורי של המחרוזת המכילה את המספר
המירבי בו מופיע התו 1. אם יש שיוויון בין שתי מחרוזות,
אפשר להדפיס את המספר הסידורי של אחת מהן בלבד.
* מדפיסה בכמה מחרוזות, המופע הראשון של האות 5 היא לפנ:
האות 8 בתנאי ששתי האותיות מופיעות.
8. כתוב תכנית כדי לקרוא תמליל ולהדפיס כל משפט שונה בשורה
נפרדת. משפט יכול להסתיים בנקודה, בסימן קריאה, או בסימן
שאלה שאחריהם יבוא תו רווח.
5 1|08 -
בכתיב אנגלי הכלל הוא שהאות 1 קודמת לאות ₪, חוצ מן המקרה
שזוג תווים זה צריך להיות אחרי האות 6, ואז הסדר מתחלף והאות
= מקדימה את האות 1. כתוב תכנית הקוראת תמליל ובודקת אם כלל
זה מתק'ים. אם הוא לא מתקיים, התכנית מדפיסה את המלה השגויה.
כתוב תכנית המקבלת כקלט מחרוזת תווים ושני מספרים 1א ו-2א.
היא מפיקה את תת-המחרוזת שמתחילה ממקום 1א במחרוזת המקורית
ואורכה 2א תווים.
כתוב תכנית אשר סורקת תמליל באנגלית בכדי למצוא את השכיחות
היחסית של המופעים של כל אות.
בנה מערך: התא תס [1..26 ]501101
נתון תמליל בעברית שנראה כך:
אבגדה וזחט למנס
למטרה מסוימת יש צורך להצמיד את התמליל העברי שמאלה ולדאוג
לכך שהמלה שהופיעה ראשונה מימין בתמליל המקורי תופיע ראשונה
משמאל, המלה השניה מימין תופיע שניה משמאל, וכן הלאה.
למנס וזחט אבגדה
כתוב תכנית שתבצע פעולה זו. הגדר שדות עזר ככל שי:דרש.
שדה התוצאה ייראה כך:
שים לב: אורך הטקסט העברי אינו קבוע, כלומר מספר הרווחים
משמאל בתמליל המקורי אינו קבוע.
- 195 -
פרק 11
מיון קבצים
1 מנוא ו
בקטע זה נסביר כיצד מתבצעות במחשב פעולות מיון ומיזוג.
הגדרות:
מיון פנימי (5096 81תעססת1) - שיטת מיון הדורשת שהנתונים למיון
יוחזקו בזיכרון הפנימי של המחשב. דוגמאות למיון פנימ* רא*נו
בפרק 8.
מיון חיצונ' (5006 [8ַתת6סאם) - שיטת מיון, שבה רק חלק מהנתונים
מוחזקים בזיכרון הפנימי של המחשב, כאשר רוב הנתונים מאוחסנים
בזיכרון המישני (דיסק או סרט).
מפתח (צַ%8) - שדה המשמש לסידור הרשומות בקובף.
מיון קוב בסדר עולה (₪ם01ם4800) - סידור הרשומות בקובף מהרשומה
בעלת ערך המפתח הנמוך ביותר עד לרשומה בעלת ערך המפתח הגבוה
ביותר.
מיון קוב בסדר יור (8ת61ת )26900 - סידור הרשומות בקובף
מהרשומה בעלת ערך המפתח הגבוה ביותר עד לרשומה בעלת ערך המפתח
הנמוך ביותר.
מיזוג (686א) - תהליך שבו שתי קבוצות נתונים או *ותר אשר
ממוינות בסדר עולה, או יורד, משולבות לקבוצה אחת ממויינת באותו
סדר.
החסרון העיקרי במיון פנימי הוא בכך שצריך להחזיק את כל הרשומות
בזיכרון המחשב בו זמנית, דבר שלפעמים בלתי אפשרי מפאת המספר
הגדול של רשומות הקובצ. במצב זה משתמשים במיון חיצוני.
המיון החיצוני מתבצע בשני שלבים:
א. המיון: קבוצת רשומות נקראת מקובף קלט לזיכרון המחשב, ממוינת
במיון פנימי ונכתבת בקובצ פלט. אחר-כך קבוצת רשומות שניה
נקראת מקובצ קלט לזיכרון המחשב, ממוינת במיון פנימי ונכתבת
בקוב פלט שני. כך התהליך נמשך עד שכל הרשומות בקובצ הקלט
עוברות את שלב המיון.
- 196 -
ב. המיזוג: טילוב הקבוצות הממוינות של רשומות לתוֶך קבוצה גדולה
אחת ממוינת.
דוגמה: נניהח שרוצים למיין את קוב א', שמכיל את הרשומות עם
5 א 5 | =
המפתחות הבאים:
כדי לבצע את המיון נוקטים בצעדים הבאים:
א. מחלקים את הרשומות בקובף לקבוצות בנות 2 רשומות כל אחת (חו
מן האחרונה).
בדוגמה שלנו נקבל:
קבוצה 1 אחרי מיון (קוב פלט 1) :56| 52
קבוצה 2 אחרי מיון (קוב> פלט 2) :262
קבוצה 3 אחרי מיון (קוב פלט 3) :62 | 39
קבוצה 4 אחרי מיון (קוב> פלט 4) :59| 37|
(קובץ פלט 5) 75
ב. ממזגים את הקבוצות הקטנות (הקבצים השונים) עד שמגיעים לקבוצה
אחת ממוינת, שהיא ההרכב של כל הקבוצות הקטנות.
קבוצה 5 אחרי מיו
-
לדוגמה, נניח שמשמעות צ:א היא ש-א הינו מספר קוב ו-צ הינו
מספר הרשומות באותו קובצ. בנוסף על 5 הקבצים שהוזכרו לעיל
נשתמש בקבצי עבודה שמספרם 22, 21, 20 והקוב> הממוין יוחזק
בקובץ 23. ממזגים קבוצות קטנות (קבצים 1 ו-2 וקבצים 3 ו-8)
ומקבלים קבוצות גדולות (קוב+ 20 וקוב> 21, בהתאמה) ואח"כ
ממזגים את הקבוצות הגדולות (קבצים 20 ו-5 ואח"כ קבצים 21 ו-
:)2
קובץ פלט לאחר מיזוג קוב קוב שלב
2008 2:2 12 1
2:8 2 412 2
225 1 2008 3
9 (סוף) 2205 21:84 8
2 שיטות לקידוד תווים
במחשב מ*וצגים התווים על-ידי 8 סיביות, בקוד 880210 או בקוד
1, הנפוצים היום.
א. 280016 (060066 6שת8ת0ע662ת1 1 00066 עעהחנ1ם 4 א):
, בקוד זה משתמשים ב-8 סיביות בכדי לייצג 256 (2**8) תווים
שונים. ה*יצוג של תו מחולק לשנ* חלקים: איזור(6ם20) וספרה
(1017ס), אשר כל אחד מהם מורכב מ-% סיביות.
מכיון שאפשר ל*'צג כל 4% סיביות כסיפרה הקסדצימלית אחת, נוכל
לייצג כל קוד בשת*י ספרות הקסדצימליות. הטבלה הבאה מדגימה את
הקוד ההקסדצימל: עבור הספרות והאותיות. גם לשאר הסימנים יש
ייצוג מתאים.
כדי לייצג מספר, אין צורך להחזיק את 4 הסיביות השמאליות ביותר
(האיזור), כ ה שוות בכל הספרות. מכאן, שאפשר לשמור נתונים
כאשר ידוע שהם מספרים במבנה עשרוני ארוז (גא01מע כמאסגק),
כלומר ב-% סיביות ולא ב-8 סיביות הדרושות למבנה עשרוני מלא.
הפעולה שהופכת ספרה עשרונית מלאה (בת 8 סיביות) לספרה עשרונית
ארוזה נקראת פעולת א40%ק. פעולות חישוביות אפשר לבצע על מספרים
ארוזים. לשם הדפסה או הצגה, יש להפוך מספר במבנה ארוז למבנה
עשרוני מלא< ולבצע פעולה הפוכה ל-א80%ק - פעולת אסהקאט. שיטת
0 מקובלת בעיקר במחשב: אם18.
ב. 45011 ( ת8%10מעס+ת1 עס+ 6 5580826 | ת108ת₪60ב
6שמפתסססת-): הקוד פותהחה בחסות מכון התקנים בארה"ב בשיתוף
פעולה עם כמה יצרני מחשבים. הקוד הוא בן 7 סיביות ולכן הוא
יכול לייצג 128 (2**7) תווים שונים. הסיבית השמינית בכל בית
מיועדת לביקורת תקינות. בהתאם לדרישות החומרה נקבע אם מטפר
הסיביות הדלוקות (ז"א שערכן "1" ) בכל בית יהיה זוגי (תסטם
ץסנעהא8ק) או אי-זוגי (ע16ע8ק 088). תפקיד הסיבית השמינית הוא
להשלים את מספר הסיביות כנדרש. אם בעת קריאת הנתונים המחשב
מגלה שמספר הסיביות במצב "1" שונה מן הדרישה, הוא מודיע על
שגיאה בהעברת הנתונים.
- 198 -
לדוגמה, נתון תו שהסיביות שלו הן 1101110, ז"א מספר סיביות "1"
הוא אי-זוגי. במחשב בעל ביקורת אי-זוגית, תהיה הסיבית השמינית
"0" ובמחשב בעל ביקורת זוגית תהיה הסיפרה השמינית "1", כד:
שמספר ספרות "1" בבית יהיה זוג'י.
הייצוג של כל תו ב-49011 הוא בשלושה חלקים: סיפרה בינרית 0 או 1
ואחריה שת: ספרות אוקטליות. כל סיפרה אוקטלית תופסת 3 סיביות,
ז"א היא מורכבת מקבוצה של 3 ספרות בינריות. הצורה הכללית של תו
ב-85011 מופיעה להלן:
סיפרה סיפרוז 0
אוקטלית אוקטלית 1
הייצוג של הספרות ב-89011 הינו בין הערך האוקטלי 060 לבין 071.
הייצוג של האותיות הוא בין 101 לבין 132.
נתאר בטבלה את התווים של האלפבית האנגל: ואת תוו* הספרות. להלן
מקרא:
הקוד שלו ב-200216 (בייצוג הקסדצימלי).
הערך הדצימלי של הקוד ב-0216םם.
הקוד שלו ב-25011 (בייצוג אוקטלי).
הערך הדצימלי של הקוד ב-49011.
ערך ערך
קוד דצימל: קוד דצימלי
00 של קוד 5011 של קוד
התור (8) 0 (0) 011
4 1 13 11 655
8 2 134 12 6
0 3 155 13 7
פ 08 106 108 08
5 55 177 15055 09
4 6 108 106 70
0 07 199 17 1
א 08 200 1150 2
1 9> 201 11 3
(י 21 209 112 1%
א 22 20 13 5
0 3 21 118 76
א 4 22 15 7
א 55 23 116 8
0 16 218 117 9"
ס זי 255 1 009
5 8 216 1211 1
ה 529 217 12 2
5 2 206 13 3
7 3 221 128 8
ט הכ 208 155 55
- 199 -
ערך ערך
קוד דצימלי קוד דצימלי
6דסמ של קוד 01 של קוד
התור (א) 00 / 0) 501
טְ 5 29 16 6
טּ 6 200 127 7
א ₪ 21 10 08.
צִּ 8 22 131 09.
90 1312 213 99 2
88 00 200 0 0
29 1 221 1 1
90 02 202 2 2
1 3 23 3 3
2 3 2 8 4
3 65 205 5 5
6 6 26 76 הק
7 ד 27 77 55
56 10 208 1.8 8
57 71 29 ₪9 9
האמז-ת, | ב0-001.
בעת שהמחשב מבצע את ההשוואה בין המפתחות ברשומה א' לרשומה ב'
הוא בודק את הסדר בשדה משמאל לימין לפ קוד מסוים. לכן חשוב
לדעת לפי איזה קוד המחשב פועל.
בשפת קובול קיימת פקודת 508 שהיא כעין תכנית שירות למשתמש,
המבצעת את המיון החיצוני. יתרונות השימוש בפקודה זו:
א. על המשתמש.לדעת רק איך להשתמש בפקודה ואינו צריך להכיר את
פרטי תהליך המיון החיצוני.
ב. פקודת 5081 היא סטנדרטית בקובול ולכ יכולים להשתמש בה
במחשבים שונים ולקבל תוצאה דומה.
- 200 -
43 הפקודה 8081
המבנה הכללי עבור פקודת 5081 מופיע להלן:
ו
ה [ת281%6080] עצמא ] / אס 1 8 50
וט( ן
[2806%ק81-6₪ת5 15 05א58008 6א1 01
[תטפתס אד 104785 פטס הדש
ו
| 8-2 ז | 1 75 מתטסמססתק עטפאך1
הסטסתחד
[%616%6-5006%52+ 6א51ס
שיד
| 8-4 | | 313 175 מתססמססתק לטסקדטס
ו
010186 )5006%2-%616%(
בפקודה 5081 6 חלקים:
1. זיהוי שם קוב המיון (0068ט6%2-8ט0א 508₪7).
הערה: לפני המיון, הרשומות מועברות לקובצ עבודה. המיון *:*עשה
מתוך קוב עבודה זה והרשומות הממוינות תוחזרנה לקובף זה בסוף
המיון.
2. פירוט מפתחות המיון. בפקודת 5081 כתוב:
ו 1
... (06802+?₪8) צשא ז 1 אס
6 וני
כדי לסדר את הרשומות בקובצ בסדר עולה (8ת061ת4506) או בסדר
יורד (8ת61ת268006) חייבים להגדיר בפקודה 508% את מפתחות
המיון. שאר השדות שלא משמשים למפתחות מיון י*כולים להיות
מוגדרים כשדות 11189ע. סדר המפתחות כפי שמופיע בפקודת 5081
יקבע את סדר המיון, ללא תלות במקום הופעת שדות אלה ברשומה.
כאשר משתמשים באופציה מאסקמססתק עסקא1, אפשר להרכיב את שדה
המפתח מנתונים הנמצאים ביותר משדה אחד בקובף הקלט. מספר
המפתחות מוגבל. במחשבי 18% למשל, יש הגבלה ל-12 מפתחות מ*ון.
כאשר קיימים מספר מפתחות מיון וערך המפתח הראשון שווה בשת:
רשומות, משווים אותן לפי המפתח השנ*. אם עד:יין יש שוויון,
7 201 -
ממשיכים להשוות לפי המפתחות הנוספים עד שמגלים הבדל בין
הרשומות, או עד שאין מפתחות נוספים. במקרה השני*, הרשומות
נחשטבות זהות מבחינת הסדר שלהן בקובף.
. זיהוי קוב הקלט (... 616%א-500602 | ש6א91ס) או, באופן
חילופי, נרשום את שם הקטע המטפל'בניהול הקלט (ז"א העברת
רשומות מקובף הקלט לקובצ העבודה) על-ידי כתיבת:
ד
9-2 | ( 1 158 מתטסמססתק עספאד
טתחך
הערה: אם נוקבים בשם של יותר מקובף אחד אחרי המלה 6א091,
כוונת המתכנת היא למיין את כל קבצי הקלט יחד לקוב פלט אחד.
זיהוי קבצי הפלט (... 6%02-0616%5ט100 60א06101) או, קריאה בשמו
של קטע המטפל בניהול הפלט (ז"א העברת רשומות מקובץ העבודה
אחר* המיון לתוך קוב הפלט), על-ידי כתיבת:
וו
4 | 0-31 8 מתטסמססתק צשקצטס
שחזוד
הערה: אם נוקבים בשם של יותר מקובף פלט אחד, הכוונה היא
שהקובצ הממוין היחידי יועבר במלואו לכל אחד מקבצי הפלט
הרשומים בפקודה.
. 5604006 8₪ת0011801: ישנה אפשרות לקבוע שמחשב יבצע את
ההשוואות בין המפתחות לפי סדר תווים שונה, בהתאם לכללים
דלהלן :
(א) יש אפשרות להשתמש באלפבית בסדר שונה על-ידי הוספת
הביטוי: 806%םק81-0₪ת8 15 66ב6ש560 8ת60118%61. בחטיבת
הסביבה צריכים להוסיף פיסקה חדשה שנקראת 65מ8א-9066181
ובה לתאר את האלפבית החדש בעזרת ההגדרה הזו:
1 ה
0
כ
| 0 מס ג 1 -11086281 5 8065תק81-₪סת5
ד
40150 1156281[
5%
לדוגמה: .1666-0000 00
,"2" טעם1 "2" 18 ב8685ת%06-0 806%םק41 . 18165- 506061.81
ב "וש =
ב "0" 150 ווכוו
- 202 -
אם (רשום בפקודה 50817 בחטיבת הביצוע:
תט16-1נעה8ק-1602 ע6א 8ת61ם2360 ת0 מנו1א-006%2-86181 סעספ
.00-0806888 18 5000606 שת00118%61
אזי, סדר התווים לאחר המ*וץ *ה*ה: 4-2 *ופיעו בסדר הרגיל
אך סדר הספרות יהיה 5,3, 9 ובסוף 0. בכל מקום שיופיע 2
הוא יהיה מבחינת הסדר כ-0. כל תו שאינו מוזכר פה יתפוס
את מקומו אחרי התווים שהוזכרו לפי הקוד המקובל באותו
מחשב.
דוגמה: יש אפשרות למ*ין לפי צופן ₪80210 במחשב שפועל
בדרך-כלל בצופן 45011. אם נרשום בחטיבת הסביבה
6 18 06010ע-06א 8066תק1
ובפקודת 5081 נכלול במקביל
6 185 59000606 8ת0011861
(ב) יש אפשרות להשתמש באלפבית החדש בכל הפעולות בתוכנית
כולה, כולל השוואות בעזרת "1 ופקודות מיון ומיזוג על-:די
הוספת הבי*טו* בחטיבת הסביבה, בפסקה 8מ07ק0871₪01-00:
5-0 5 מ0א5008 6א1י.601 אההססתק
בחטיבת הסביבה צריך להוסיף בפסקה 68.מ8₪א-60181ק5 את
התיאור של האלפבית החדש, כמו שהוסבר קודם. לדוגמה, נוכל
לרשום:
.08-0080888 15 5600606 8ַת0011861 1 .005ט0מ001665-00
2 טתמ' "4" 15 ג80688ת08-0א 66ס8ת210 . 68מ8א-60181כ5
ל , "ם" 3
"0" 150 "2"
אזי המיון ייעשה לפי האלפבית 06-45011א אפילו ללא ציון
מפורש בפקודת 5081.
דוגמה: יש אפשרות להשתמש בצופן 0 במחשב שפועל בד"כ
בצופן 85011, אם נרשום בחטיבת הסביבה בפסקה -66181ססי
פפפא: 6 18 084-2006160 8066תק41
ונוסיף לפיסקה עשסטקש00186%5-00 את הביטו*:
6 185 5640606 8ת0011801
. אם כל המפתחות זהים בערכם בזמן ההשוואה בין הרשומות, המחשב
יסדר אותן לפי הסדר הרצו* לו. אבל במחשב 7% ישנה אפשרות
לסדר את הרשומות במצב זה לפי הסדר הפיס: שהם רשומים בקובף
הקלט. לשם כך נשתמש באופציה בפקודת המיון: 1041785תפטס ₪178
המפתס אז, שמשמעותה: כאשר * שיוויון בערך המפתחות בשת*
הרשומות שמשווים, נסדר את הרשומות בסדר הפיס* כפ: שהן
מופיעות בקובצ הקלט.
- 203 -
יש 4 דרכים להשתמש בפקודה 5081:
1. בלי עיבוד מיוחד של רשומות קוב הקלט לפני המיון, ובל* עיבוד
של רשומות קובצ הפלט שאחרי המיון. במצב כזה נרשום:
50 8
;5
2 ....[₪895080 + צמא --- 1 אס
ונ
... [2006%52-86160)+ באדפס
[00602-0616%א) 6א1עז0
השלב' הצעד
קלט: פתיחת קובף העבודה.
פתיחת קוב הקלט.
אין עיבודים על קובאצ הקלט.
העברת רשומות זו אחר זו מקוב> הקלט לקובצ העבודה.
סגירת קוב הקלט.
תהליך מיון קובף העבודה כפ* שתואר במבוא.
סגירת קוב העבודה.
פתיחת קוב הפלט.
העברת רשומות זו אחר זו מקוב> העבודה לקובצ הפלט.
0. אין עיבודים על קובצ הפלט.
1. סגירת קובצ הפלט.
.
מיון:
פלט:
= ₪ 6= תאו בס סא
כל 11 הצעדים מתבצעים באופן אוטומטי בלי צורך להוסיף פקודות
₪ ,,אמסס, סגמת או מ17תא עבור הקבצים שמשתתפים במיון:
קובצ הקלט, קובצ הפלט, או קוב העבודה.
2. עם עיבוד לפני תהליך המיון ואחריו:
0-8 0
ו
א
. . . [ת%6680+8) -
אזפאעספטכ
יד
סא 1 1 5 מתסספמססתק צעספאד
וגל
תד
4 ז 13 15 מתטססמססתק צשפצטס
[זחזזיד
במקרה זה העיבוד לפני המיון (צעדים ,2 3, 5 ו-5) ואחריו
(צעדים 8 עד 11) נעשה על-ידי המתכנת. במקרה זה, רק פעולות 7
,1, 6 נעשות באופן אוטומטי. פעולות אלו מאפשרות למתכנת לשנות
את הרשומות לפנ* או אחרי המ*ון, למיין באופן סלקטיבי ולהכניס
רק חלק מן הרשומות הממוינות לקובא הפלט.
- 20% -
3. שילוב אפשרויות מיון 1 ו-2 לעיל. שלב הקלט מבוצע על-:די
המתכנת | (8ת20מ00תע2 עשקא1) יהד עם עיבוד פלט אוטומטי
(0א0101), כלומר: (0א1ע01 .. .סק טקאת ... 5087).
4. שילוב אפשרויות מיון 1 ו-2 לעיל. עיבוד הפלט מבוצע על-:די
המתכנת (מהסקמטס0סתק 0001) אחרי עיבוד אוטומטי של הקלט
(0א1פט), כלומר: (20022025 עשקנשס. . . סאדפט. . .י5091).
1-1 דוגמאות לתכניות מיון
נניח שקיים מפעל גדול לייצור כלי עבודה ואביזרים למכוניות ובו
המחלקות הבאות:
מחלקה 1: ייצור כלי עבודה כגון מפתחות פתוחים, מברגים וכדומה.
מחלקה 2: ייצור צמיגים וכלי עבודה להחלפת צמיגים כגון מגבהים
ואבובים.
מחלקה 3: | *יצור מכשירי חשמל כגון מצברים, מתנעים וכדומה.
את הנתונים על הפריטים במלאי מחזיקים בקובצ שרשומותיו מכילות את
השדות הבאים:
(1) קוד מחלקה - קוד המחלקה שהפריט מיוצר בה.
(2) מספר פריט - מספר, אשר בעזרתו ניתן לזהות בוודאות את
הפריט.
(3) תיאור פריט - תיאור הפריט במלים.
(%) כמות במלאי - כמות פריטים שיש כרגע בַמלאי.
(5) נקודת הזמנה - ה"קו האדום" של כמות המלאי, אשר מחייבת
להזמי|ן למחסן פריטים חדשים.
מחיר הפריט בשקלים.
הכנסה בשקלים ממכירות במשך החודש.
(6) מחיר ליחידה
([) מכירות לחודש
המבנה המדויק של כל שדה | מוגדר ברשומה 6181א-8%שטת369 בקוב
המלא* בשורות 17-24 בתוכנית להלן.
.ת1510ט1כ ת%1+168%10ת160 (1)
.שַת1סע0ס5 .12-מהעשסעק (2)
.ת566%10 6גוק%ט6-0טסת1 (8)
.0 116-00ע (9)
.'6187.280א' סס ת4551₪ 86181-8616%6. 561605 (10)
.1% 600 45818 068ט86181-4 561606 (11)
. '28%. צ08%₪618' %0 ם4551₪ 86181-2616% 5616066 (12)
.תסנפנטנת 2808 | (13)
.ם560010 116קע | (14)
4% פפץ (15)
)16( 1.8061 3600265 426 9.
- 205 -
01 3ת65תט86-6[1 81 .
. (2109)2 %6166-18%8ת80א-0066 02
. (9)8 16ק %נ1עפת-ע8 :א 02
. (18)א 216 -עט' 92
1 ס:1 1 [סמהם-0805 02
. (9)3 16ק 8 -68%נואסא 02
9.1 ס:1 0-8 02
-4 ס:21 ב0668ת1206-1260ג₪66 02
. 06%2-6181-4008א 55
8-רטררטטטטסת 01
. (9)2 216 18%8-40008ת6066-86 02
.(9)8 210 | 68ס0ט10-8ע82ק-₪15082 02
. (29)% 16ק 11160עת 02
4% פופפק
18061 600268 06 48
9 46 18 86מת11
90 ק0ס?1 46 1166
206000 4% 68ת1.1
. (39)א 16ק %- 81 1186-0[1ות368 | 01
.ת21019810 6עש66ס6ס2ק
. 38511
ץ%6 ₪ת01ת4800 ת0 088ט6181-8 >עספ
8 |, 808-0068 1ת80/- 6006
להלן הקלט עבור הדוגמה שלנו
מכירות מחיר נקודת
לחודש | ליחידה הזמנה
2 01053 012
0 190000 050
5 07555 00
0 01155 0
0 02068 007
0 00335 050
0 15600 200
08 500060 100
3 20033 20
0 30010 0150
1 (1238 00
90 03625 0150
6%- 1 שתבצפט
% שת1ט1)
.תטת 5600
(תכולת הקוב 8618.286):
כמות תאור מספר
במלא:י פריט פריט
010 מפתח 12 10987653
1200 מצבר 123 36950087
10 מצבר 200 5
055 בוקסה 34 14563289
100 ברגים 17685838
09 * מפתח 9/16 13
09 צמיג למכונית ]2069000
200 סטרטר 34208905
1 צמיג למשאית 29082089
3 ג'ק 20323612
012 אבוב 28042077
20 מצת 34 228
- 206 -
הפלט עבור הדוגמא שלנו (תכולת הקוב 005₪618.286) מופיע להלן:
מכירות מחיר נקודת כמות תאור מספר קוד
לחודש ליחידת הזמנה במלאי פריט פריט מחלקה
72 105% 2 010 מפתח 12 10987658 55
0 01155 080 035 בוקסה 34 14563289 11
0 02068 7 100 ברגים 17685438 11
8 300160 0 013 ג'ק 20323612 12
15600 0 300 צמיג למכונית ]2069000 12
1 (1238 0 012 אבוב 28042077 12
3 20033 90 011 צמיג למשאית 29042089 12
08 500060 0 280 סטרטר 38208905 3
90 03625 09 020 מצת 354 352081498 3
08 10000 0 399 מצבר 123 36950087 3
5 075855 0 130 מצבר 200 36970045 3
שים לב שבקובף הפלט הרשומות מסודרות לפי קוד המחלקה ובתוך קוד
המחלקה הרשומות מסודרות לפי מספר פריט, בסדר עולה.
הסבר התכנית::
שורה 25: ב-52 מתוארת רשומת קוב המיון המפרטת את שמות המפתחות
הנחוצים למיון. שאר השדות יכולים להיות מתוארים על-'ד' 11168ע
בלבד (אלא אם נשתמש ב-0080088הק עטקא1 או ב-₪ת20ש00הע שטקצט0ס
ואז שאר השדות שיתבצע עליהם העיבוד יפורטו בתוך ה-62).
נשים לב שבמקרה הבסיסי הגדלים של סוגי הרשומות בקבצים השונים
(קלט, פלט ומיון) שווים, מכיון שהעברה מרשומת קלט לרשומת עבודה
ומרשומת עבודה לרשומת פלט נעשית באופן אוטומטי בלי התערבות
המתכנת.
שורות 38-39: בפקודה 59081 משתמשים בשם קובף העבודה המתואר ב-52
ובשמות המפתחות המתוארים ברשומת העבודה. במקרה שלנו רצינו
שהרשומות בקובף הפלט יופיעו בסדר עולה לפי מפתחות המיון, שהם
קוד מחלקה (008ט80018%8-40/-0066) ומספר פריט(-16ע8ק-82ק15א
8)).
לו רצינו למיין בסדר יורד לפי קוד מחלקה ומספר פריט, ה*:נו
כותבים:
8 |, 8%8-40068 1ת86/-0086 36 ש8ת01ת268500 ת0
או: 8 - 0006-8618 86 8₪ת01ת26860 ת0
46 נצת8ק-15082 86 ₪מ61ת26500 ם0
אפשר למיין את קוב> הקלט, כך שהמפתח הראש* *מויין בסדר עולה.
אבל, אם המפתחות בשתי רשומות זהים בערכם, סדר המיון של המפתח
המשני יהיה בסדר *ורד.
במקרה זה נכתוב בתכנית: 1-8 ַא שת01ת4500 ם0
8 נס15082-8 86 שת61ת26860 ת0
- 207 -
אם רוצים למיין לפי סדר מפתח משנ* עולה בתוך מפתח ראשי *ורד
נוכל לכתוב:
9-8 ,א שת01ת26860 מ0
8 86 שת61ת4500 ת0
נציג עתה דוגמה שניה. במקום להשתמש באפשרות הראשונה של פקודת
המיון (6א051 ו-06א011) נשתמש כעת באפשרות השניה (עטפאד
₪ ו-מתטסס60סהע עשק1ט0). מעבר כזה נעשה כי 8א051 אינו
מתאים במקרים הבאים:
א) אם קוב הקלט אינו קובף סדרתי (על סוגי קבצים שונים יוטבר
בפרקים הבאים).
ב) כאשר המתכנת רוצה לשנות את אורך רשומת הקלט (למשל, לקצר
רשומת קלט בזמן העברתה לרשומת עבודה על-מנת להסיר שדות
מיותרים).
ג) כאשר המתכנת רוצה להסיר מספר רשומות לפני תהליך המיו(.
האופציה 6א61/1 אינה מתאימה כאשר המבנה של קובצ הפלט שונה מזה
של קובצ העבודה. אפילו אם המבנה זהה, כאשר רוצים להוסיף כותרות
או סיכומים - החייבים להשתמש ב-מת0כמ00תק שטשקצט0.
.ת1510ט21 ת01+168%10ת180 (1)
. מ%16%8060-8ת502%1 .12-מהפפסמק (2)
.ם566010 005006->טקת1 (8)
. 6201ת116-00ע (9)
. '280. ע618שת1' 10 ת4581₪ 86181-86166 561606 (10)
.1% 10 45518 תטנא 68סט6181-4/ 561606 (11)
. '280. ₪618 2616%61' 10 תש8881 6181-6166 5618006 (12)
. '080. 680000₪ת5' 10 מ4551₪ 90₪גו68ת602-5ט80 561666 (13)
.םסנפנטנת 2868 | (14)
.ת560010 116ק (15)
24 755 | (16)
)17( 18061 600268 22060
)18( | 01 ת65תט86-א61 1 --.
. (9)2 16ק 8 02 (19)
. (9)8 16ק %נתפק-ע15082א 02 (20)
. (18)א 16ק 9-6 02 (21)
.6 שת160881 מ51₪ 5999 216 זַהַַָסַתַהם08₪0%6-2 02 (22)
. (9)3 216 086-82טאטא 02 (23)
1 סצק 8 02 (28)
1 ס:21 | ב06468ת160-120%ת66] 02 (25)
)26( 55 3.
. 008ש4-ע8 [46-8%ת69ת | 01 (27)
. (9)2 216 068עש8-4א18ַַסַ88א-0066 02 (28)
.(9)8 2160 | 068ט16-4ת8ק7-ע18282א 02 (29)
- 208 -
. (184)א 16ק 0-8 02
0-8 02
.5082866 שת10861 ת518₪ 5999 6בק
8 .
2020.
8.
2000.
8.
0.
8008 .
20.
508008 .
20.
3( .
16 8 -118828- 0686אא 02
.9 ס21 | 068ט108-40ת12-16760ת660/ 02
9.
6
6נו81
6ו81
6נו81/
7816
816
106
6
816
816
)9 216 6621206-16608091-40068 02
%- 1 כע
4 0ְ₪ת22 3600265 18001
8 46 185 6ַאַ8ת1.1
11698 46 10 90
.1 205000 46 68ת11
(132)א 16ק %- 83 [6א-+8%שטת69 | 01
%00602-508001 פע
4 426 36002685 1/8061
8 416 15 6שַהת1,11
0 10 46 1165
.1 מסס6ס2 46 68ת1/1
(132)% 216 08000₪ת5-ם86-200שטתפסת 3 01
.ת500610 56002886-ת1אעסא
. 082180168-אַת1א%עסא 01
. (3)א 16ק 0פ-5092-800602 02
. 'ת6א' 6ט%81 662ט0א-+50 88
.1%6-86001ת385-05620%א 01
.ב" 017171
.[1060681-118088-00020%א 01
4 011
. 81 [6-8%נ8%6-3050עטת 5 01
(6)א 16 1[65נת 02
(9)2 216 616%ק-806218%8/-00686 02
(6)א 16ק 165ונע 02
(9)8 210 | 6166ק2-1%ע82-782ק15א/ 02
(5)א 16ק 1116%ע 02
(18)א 16ק 2% 02
(6)א 16ק 60[[נע 02
9 216 6166ק6181-2םַ08206-28 02
(8)א 16ק 1116%ק 02
02 8-26166ת42₪8-68%טא6א 216 9)3(
022 ----%
.1 781066 222.99 16ק
5.
06
(13)א 16ק 62ןונע 02
% "9 02
.1 78106 22,222.99 16ק
508068 .
0816
(42)א 16ק 1162 02
.2 01
- 209 -
.ת1510ט21 206060226
.ת560010 1ב
. 1חפפת
8 5900
, 8018%8-40068/-0066 צ86 שת61ת4500 ת0
תגו1א-8816ק13082-2
תגו1א-6ת+ ;,6006-1 22060026 סגוקתך
. תגו826-1 46 -₪200₪6 220660026 05006
. תטת 5600
. ת566%10 תגו1א-60016-1,1106
. נתפפת
82 מפ 0ס2עסק
9% נת ?סק
.6%52ט0א-+50 11טתם
. 510-1186166 ע0ס+?עסק
.0-1 500-+6-0ת₪ 70 60
.118%6166-8% 1180081
6% סטסת1 ת006
.00100 ת8006%2-5א 0606 ב006
.שפ%8006%2-5-502 10 '0ס1' 6טסא
. 1.6082-510011008-6%1086-305026% שעס?עסק
. 0016-118%616%
1 3680
.שפ-6%2ט0א-+501 710 'ת6א' סטסא 6מע 46
2 ססא 19
סבעסמטא ססא% 0066-80218%8 - 12
6בתסמטא %ס( 16ע8ק-ע19082א 05
6בנסמטא ססא 286181-0%ם 08 00
6סטטא %06 8ת18208-6008%א 00
6בעסטטא %ס% 12-16602108ת 60 05
(10עסמטא 0%סא ג16020668- 602120% 09
מס 04008 20601-5(08-8%טת365 06 בע
%-- 6986-6181
₪ע0]עסק 05ם 26
000100 - 1/0081-40%6620%-6%108%
86
90 60108-0א םעס?עסק
--- 1-0
8 2-60008%[ > 6181ע08₪16-28 ?1
8-8 [ת0066-80 סד 8+ ס6=>קטס
9-8 590 %6בעהת-15082/ 6טס
8 1עק-1002 0 טבעפת-עט10 6טס
1-8 [₪6ַ28-6820% סד 0-1 ס6טסא
0-8 2-64068%א סד 8 686-82סא סטסא
8 70 6021608ע12-16ת66 6טסו
- 210 -
)95(
)96(
)97(
)98(
)99(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
)120(
)121(
)122(
)123(
)128(
)125(
)126(
)127(
)128(
)129(
)130(
)131(
)132(
)133(
)138(
)135(
)136(
6018 10 ב16020668-120%ת60 6טסא (137)
8-8 01-8%טת5סת 3616850 (138)
.100וקסת- 1/0081-00020%א-6%108% (139)
.2 מוסעע מ60000ת2002-5->המטתפסת 166עש (180)
.18%616%-שט51 (141)
. 60₪טקסתס-000%2 ,6166א6181-8 01086 (182)
(143)
.א (188)
. 560010 תנו826-1ת₪008-40 | (185)
. 1תפמ (186)
1 מס 0+עסק (187)
2% נמ 0 )סק (188)
.2 1בסחט (189)
. 1180616%-₪ט51 ₪ע0ס+עסק (150)
)151( 60 1
.1180616%-818%ת11860 | (152)
.6% טגטססט0 006 (153)
.אפ-%800602-502 10 '10' סטסא (158)
.389016-80001-%00020%-%60108% 02₪ס+עסק (155)
ת8085ת1.0000-0-%05626%-%6%108% םע0ס+עסק (156)
.6% (157)
468 6181-4000₪/-3006%2 תעטפסת (158)
.שפ-00002א-+50 10 'תס6א' 6טסא 6תת 6ב (159)
2 ססמא 15 (160)
%,ָ-ָָ 10| 18%8-40068ת6066-80 סטסא (161)
% 9-2 0 8 ס6קטס (162)
6 טס סי 8 6עטס (163)
%- 815 [286-080% 10 ה6סט-בַהַַָסמַה682₪%5-28 שטסא (168)
0 4068 -8ת1182₪8-100108% סטסא (165)
%- 2 -08%נואסא
0 60168-40068ש12-1.6םת66 סטסא (166)
%--ץ-י 601
0 תט1א-120%6-16620668ת66 טס (167)
"661
מסעע 60160ק-6181א-8%טת365 166סש (168)
1 [16)-8%מ1ות 05 ->8ענות5
. 1 שת1סת8ט46 0628+?1 (169)
ת10081-0806898-0%026%א4-860108% םעס?מסק ססם 6ב (170)
. 16-1.86001ב385-%05026%-36%108% | (171)
מסעץ 6160ק-6181א-6המטתפסת 02166 (172)
ת18006-1%ת89-06626%
.5 15 שת1סת4608 49002 (173)
= 211 =
סע %- 3638-1611 66 בס
8606.]-2>דַתִפַה38-00026%
.1 1 שתדסתהט20 426620
. ת008088-+1.008-%00620%-6%6108%
מסינץ 1% 0-8%נות365 06 בקע
8685-+1/068-%0006%
. ספ שת61ת4008 2?6000
1 שנספע 6181-616%-+8םנות365 06 בקעש
.16 1 שתזסת4008 2?600
8806166-מט1פ
.6181-0616% 01086
.0-1 6-09-500ת
.דאס
)178(
)175(
)176(
)177(
)178(
)179(
)180(
)181(
)182(
)183(
)188(
לפנ: שנסביר את התוכנית, להלן תרשים שיציג את מבנה התוכנית
באופן כללי:
11866081 8%-
13%
-%0%626%6-0108%6
סט
-₪שוץ51
5%
360116-
6%
2%6108%-%06626%-
1068-0085
-818%ת860
0%
- 212 -
%%6108%6-30%66266-
10082-5 16
בגו זא- 468176 -6גומ 10
-%805626%-8%6108%
ת1.84001-> דתפאת
תנו1א-56+ 116-1,1 0
קובצ הקלט עבור תכנית זו (תוכנו של הקוב 618.286מםם1) הוצג
קודם לכן. לתכנית | שני קבצי | פלט: (תוכנו | של הקובף
0. ץ61660618ק) ודוח השגויים.
דוח מלאי, ממוין לפי סוג פריט וקוד מחלקה
הופק בתאריך: 4.11.89
מכירות מחיר נקודת כמות תיאור מספר קוד
לחודש ליחידה הזמנת במלאי פריט פריט מחלקה
0. 577 105 0 5 בוקסה 34 19 11
20.10 20.0.10 20 13 מגבה 222202 12
1 123.89 90 2 אבוב 22077 12
2003 2003 29 11 צמיג למשאית 29082089 12
דוח שגויים, ממוין לפי סוג פריט וקוד מחלקה
הופק בתאריך: 84.11.89
מכירות | מחיר נקודת כמות | תיאור מספר קוד
לחודש | .ליחידה | הזמנה במלאי | פריט פריט מחלקה
22 8 12 010 מפתח 12 1898756%
10 10 200 0 צמיג למכונית 20690007 12
השגיאה ברשומה הראשונה היא בזה שקוד המחלקה אינו מספר* (אלא
רווחים). השגיאה ברשומה השניה היא בזה שהשדה מכירות לחודש אינו
מספרי (הוא כולל אותיות). שים לב שרשומה זו לא היתה נכנסת למיון
בכל מקרה, כי כמות המלאי גדולה מנקודת ההזמנה. אבל התכנית בודקת
תחילה אם השדות הנומריים תקינים ועל-ידי כך נתגלתה הרשומה
השגויה.
הסבר: בתכנית זו השתמשנו באפשרות השניה של פקודת 5081, בנוהל
קלט ונוהל פלט. בנוהל הקלט נעשה עיבוד של קובצ הקלט לפני תהליך
המיון ובנוהל הפלט נעשה עיבוד לאחר תהליך המיון.
שורות 18-25: תיאור רשומת קוב הקלט.
שורה 26: קוב העבודה מתואר תחת הכותרת 52-א2₪50817710 5087.
שורות 27-35: תיאור רשומת קוב העבודה.
שורות 52,56: שתי שורות כותרת לדוח.
שורה: 60: כותרת עליונה, המופיעה בכל תחילת דף בדוח.
שורה 75: שורת תוו* "=".
שורות 79-9%: תוכן שורת פלט שתופיע בגוף הדוח.
- 213 -
שורה 95: כותרת דוח שגויים.
שורות 99-102: פקודת 5081 תמיין את קוב הקלט לפי מפתחות המיון
"קוד מחלקה" ו"מספר פריט". יתבצע עיבוד לפני המיון וגם אחריו.
שורות 104-145: העיבוד לפני המיון.
בתהליך נוהל הקלט 3 חלקים:
חלק א' - שורות 111-115: התחלת נוהל הקלט - פתיחת קבצי הקלט
והשגויים ויצירת כותרות לקובצ השגויים.
חלק ב': עיבוד רשומות הקלט עד שמסיימים לקרוא את כל הרשומות
בקובצ הקלט.
שורות 118-129: נניח שלפני תהליך המיון רוצים לבדוק אם הרשומות
בקובצ הקלט תקינות, דהיינו אם תוכן השדות סוג מחלקה, מספר פריט,
כמות במלאי, נקודת הזמנה, מכירות לחודש ומחיר ליחידה הוא נומר*.
אם מתברר שאחד משדות אלה אינו נומרי ברשומה כלשהיא, אותה רשומה
תועבר לקובצ שגויים ולא תשתתף בתהליך המיון.
שורות 131-139: אם תוכן השדות תקין, תועבר הרשומה לבדיקה נוספת,
אם תוכן השדה "כמות במלאי" קטן בערכו מתוכן השדה "נקודת הזמנה".
רק אם התשובה חיובית תועבר הרשומה לתהליך המיון.
שורה 139: מכיון שקובף העבודה הוא קוב מיוחד, אין להשתמש
בפקודה 68118 לכתוב בו רשומות. במקום זה, משתמשים בפקודה
6,. מבנה פקודה זו דומה לפקודהת 03417₪:
[5866 700%8] 076%2-80008א-086ת268 מ6התותת
רק בתהליך נוהל הקלט חייבים להשתמש בפקודה 3616856 על-מנת
להעביר רשומות לתהליך המיון, ולא כאשר משתמשים בביטוי )אדפט.
נשטים לב לכך שאורכי רשומת הקלט ורשומת המיון אינם חייבים להיות
זהים, כמו שהם חייבים להיות כאשר משתמשים ב-06א091 שאינו מאפשר
סיפול כלשהו ברשומות העומדות למיון.
הסבר הפקודה 8616856: תחילה מועבר תוכן 5866/ל-6%2ש%0א-365286
8 ואח"כ אותה רשומה משוחררת לתהליך המיון. במקום:
6 מסעץ 00602-80008א-8%מטת268 610886
ניתן לכתוב: 8 רטע 10 8806 סטסא
9-8 סע 616886
חלק ג' - שורות 142-143: סיום תהליך נוהל הקלט - סגירת קוב
הקלט וקובף השגויים.
שורות 146-183: קטע העיבוד לאחר תהליך המיון מתואר בשורות אלו.
- 2184 -
בתהליך נוהל הפלט 3 חלקים:
חלק א' - שורות [153-15: התחלת נוהל הפלט - פתיחת קובף הפלט
וכתיבת כותרות לדוח ולדף הראשון בדוח.
חלק ב' - שורות 158-171: החזרת הרשומות שמוינו מקובצ העבודה
לקוב% הפלט, בו מוצגות הרשומות בצורת דוח, עם כותרות לעריכה.
שורה 159: הפקודה אתשעמת שימושית רק בתוך נוהל הפלט. מבנה פקודה
זו דומה לפקודה 686(:
6 פאט דא [ 6 ס0ץעא1 ] 380002 2006%2-80068 אתודחת
שס קוב העבודה שנכתב בפקודה הוא כשם קוב העבודה שניתן ב-85.
הסבר הפקודה: הפקודה מבצעת קר:את רשומה מקובף העבודה. שימוש
באופציה 0דאך בפקודה אתטזשת דומה לשימוש ב-10אך בפקודה ספגטת,
ז"א הרשומה נקראת מקוב העבודה לתוך רשומת קוב הפלט.
חלק ג' - שורות 226-227: סיום של תהליך נוהל הפלט - סגירת קוב
הפלט.
5 מיזוג
הפקודה למיזוג קבצים היא מכתהטא. מבנה הפקודה:
8 מסת (1)
ו
7 ].. (86198008) למא | 1 אס 1 (2)
6 | סניו
[08060ק81-6₪ת5 15 מסאש5000 אד 6011 ] (3)
.. . [0166א0006%62-4) | 6אדפם (8)
ו
0-2 ] | 5 מתססמססתע צשפדטס
טתחד
(פ)
(006%2-0616%5א) 6א0101
הפקודה מ6תם מכילה 5 חלקים:
1. קביעת שם קוב> העבודה. לפני המיזוג, הרשומות מועברות לקוב
העבודה,. המיזוג ייעשה מתוך קובף עבודה זה והרשומות הממוזגות
תוחזרנה לקובצ הפלט בסוף המיזוג.
- 215 -
2. פירוט מפתחות המיזוג.
3. זיהוי קבצי הקלט.
8. זיהוי קוב הפלט (או קבצי הפלט), או הקטע המטפל בניהול הפלט
(ז"א העברת רשומות מקובצ העבודה אחרי המיזוג לתוך קוב
הפלט).
5. קביעת סדר המיזוג של התווים (למשל, אם רוצים לסדר את המפתחות
לפי צופן 45011 או 10פ0מם).
קיימות שתי אפשרויות לשימוש בפקודה מס6תםא:
א. כאשר רוצים שכל רשומות קבצי הקלט הבלתי ממוזגים *מוזגו
ויעברו לקובץ הפלט לאחר המיזוג. נרשום:
8 -602ט0> )תויח
6
ל" .. [13700860 - וו / או
יס(
[2006%2-5616%) | 60א1פם
[5006%2-0616%)+ 610180
במקרה זה העיבוד לפני המיזוג וגם אחריו מתבצעים באופן
אוטומטי.
השלב הצעד
קלט: 1. פתיחת קוב העבודה.
2. פת:חת קבצי הקלפ.
3. אין עיבודים על קבצי הקלט.
8. העברת רשומות זו אחר זו לקובצ העבודה.
5. סגירת קבצי הקלט.
מיזוג: 6. תהליך מיזוג קוב העבודה כפי שתואר במבוא.
פלט: 7. סגירת קוב העבודה.
8. פתיחת קובף הפלט.
9. העתקת קוב העבודה רשומה אחר רשומה לקובצ הפלט.
9. עיבודים על קובף הפלט - אין.
1. סגירת קוב הפלט.
כל הצעדים מתבצעים באופן אוטומטי ללא צורך להוסיף פקודות
סופת אמקס, 00058 או תחא עבור הקבצים שמשתתפים במיזוג:
קבצי הקלט, קוב הפלט או קוב העבודה.
ב. עיבוד הפלט על-ידי המתכנת (6עט220080 6טק6ט0) אחרי עיבוד
אוטומטי של הקלט (8ת051). במקרה זה, שלב הקלט (צעדים 1-5),
שלב המיזוג (צעד 6) וסגירת קובצ העבודה (צעד 1) מתבצעים
באופן אוטומטי, ועל המתכנת לקדד לבד את הצעדים 11-8.
האפשרות לקידוד עצמי פותחת בפני המתכנת את האופציות הבאות:
(1) שינוי מבנה הרשומות אחרי המיזוג.
(2) הכנסת רק חלק מן הרשומות לקוב הפלט.
(3) הכנת דוח עם כותרות וסיכומים.
- 216 -
להלן דוגמה לשימוש הבסיסי בפקודה מסתטא:
.מ1810ט1ת מ%12108%10ת166 (1)
.קט12א .12-םהעפסעק (2)
.1 סע | (10)
. '1.286ת1' 10 ת8981₪ 4006%2-861811 561606 (11)
.'2.280ת1' 10 ם4981₪ 652-861812ט300 981606 (12)
. '+28. ₪6ת6' 10 ם4981₪ 068ט-6181א-3006%2 561606 (13)
.'₪6.280ע6ג%ט0' 10 מ0391₪ 61866ק-006%2 561665 (18)
(15)
.ם1810ט1ת 2808 | (16)
.ם560%10 116ק (17)
1 פ5פ (18)
)19( 18061 3600268 0.
)20( | 01 395תט₪86-061811 .
. (9)2 216 8 0066 02 (21)
. (9)8 16ק 02 (22)
. (18)א 16ק %נפפק-00 02 (23)
.4 ס:1 1-ה 02 (28)
. (9)3 16ק 6086-8288 02 (25)
.9 ס1:6 8 02 (26)
ס21 | ב120%6-16020605ת₪66 02 (27)
2 פ5ם'. (28)
)29( 18061 36002068 426
(זהה ל - ₪6181 >8שטתפס3) .רפת 01 (30)
)38( 5955
)39( 01 ת69תטמ8%-א6181-4008 .
. (9)2 216 008ט18%8-4ת80א-0066 02 (40)
.(9)8 216 | 68סט16-4ע8ק-:8ק15א8 02 (41)
. (29)א% 16ק 1162נע 02 (42)
5% פע (83)
)88( 1.8061 36002658 06 6
8 46 18 886ת11 (85)
0 10 46 658ת13 (86)
.+ ₪ 0000 46 68מ11 (841)
. (39)א 16ק 6% --טטסת 01 (488)
.ת1810ט21 6עט66סס2ק | (49)
.ת566%10 ת81/ (50)
. חפ (51)
ץ% שת61ת4566 ת0 008ט6181-4א-006002א 6שתסא (52)
8 , 808-2068 0068-8861 (53)
2 ,|, %006%2-61811 8ת₪81 (58)
שתצט01 (55)
.תטת 5602 (56)
- 217 -
תוכן הקבצים למיזוג מופיע להלן (הוספנו רווחים בין השדות ליתר
בהירות):
מכירות מחיר נקודת כמות תיאור מספר קוד
לחודש | ליחידה הזמנה במלא' | פריט פריט מחלקה
6%
2 0105% 02 09 מפתח 12 11987564 11
08 02068 007 100 ברגים 13685138 11
0 00606 | 020 3 מגבה 21323612 12
1 (1238(9 0 2 אבוב 25082077 12
0 100060 | 050 200 מצבר 123 33950087 13
0 50006 100 200 מתנע 35208905 13
6%
90 01155 080 05 בוקסה 34 12563289 11
90 00335 050 200 מפתח 9/16 18800003 11
6 156060 200 0 צמיג למכונית 21690007 12
9 9020 20 01 צמיג למשאית 25042089 12
0 903625 010 20 מצת 34 39208198 13
5 075355 00 100 מצבר 200 33970045 13
הקוב הממוזג 86ע6שסט0 נראה כך:
מכירות מחיר נקודת כמות תיאור מספר קוד
לחודש ליחידה הזמנה במלאי פריט פריט מחלקה
2 %*0105%/ 012 00 מפתח 12 11987564 11
90 01155 048 35 בוקסה 34 12563289 11
080 02068 067 10 ברגים 13685038 11
0 00335 050 200 מפתח 9/16 18800003 11
0 30010 010 3 מגבה 21323612 12
0 15606 200 0 צמיג למכונית ]2169000 12
1 (1238 090 12 אבוב 25042077 12
3 20033 020 1 צמיג למשאית 25012089 12
0 100060 050 200 מצבר 123 33950087 13
5 075355 040 13 מצבר 200 33970045 13
0 50006 108 200 מתנע 35208905 13
90 0362 010 00 מצת 34 39208198 13
הסבר שורות התכנית:
7: תיאור רשומת קוב הקלט הראשון.
2: רשומת העבודה, בהבלטת מפתחות המיזוג.
88: רשומת קוב הפלט, כלומר האורך והמבנה שלה זהים לאלו של
רשומות קבצי הקלט.
2: פעולת המיזוג על קבצי הקלט לפי המפתחות: -00866-48618%8.
8 |ו-10-400608ע8ק-15080א. הפלט מועבר ל-616%ק6%2-2ט0א באופן
אוטומטי, בלי צורך בפקודות נוספות.
- 218 -
6 תרגילים
שאלות
1. כתוב פקודת 5081 עבור המקרה הבא:
א. 4 הוא שם קוב הנתונים שרוצים למי:ן.
ב. 8 הוא שם קובצ העבודה.
ג. 0 הוא שם הקוב שיכיל את הנתונים הממוינים.
ד. %ַ1ת4ס-15248א הוא שם המפתח הראשי: המיון הוא בסדר *ורד.
ה. 1%ַת4ע-ת100 הוא שם המפתח המשני: המיון הוא בסדר עולה.
ו. איך תשתנה הפקודה, אם מבקשים למיין רק פריטים שמספרםס
מתחיל בספרה "1".
ז. איך תשתנה הפקודה אם רוצים שהפלט יודפס בדוח שיש לו
כותרת מתאימה בראש כל דף.
תכניות
1. חברת *צחקי מחזיקה נ(תונים לגבי המועסקים שלה בקובף שבו
הרשומות מתוארות כך:
עמודה שם שדה תיאור
1-30 אמחפ אלפבית:
31 אזא זכר=2 , נקבה=א
כתוב תכנית שתכלול רשימה של המועסקים, כאשר שמות הנשים
יופיעו תחילה ושמות הגברים לאחר-מכן.
כמו ב-א', אבל רוצים שהגברים יופיעו תחילה.
כמו ב-ב', אבל רוצים ששמות הגברים יופיעוו בדף נפרד עם
כותרת מתאימה ושמות הנשים יופיעו בדף נפרד עם כותרת
מתאימה.
כמו ב-ג', אבל רוצים שברשימת הגברים, השמות יהיו מסודרים
לפי הא"ב וכן ברשימת הנשים.
קבוצת כדורסל רוצה לאסוף נתונים על ביצועי כל השחקנים בכל
הקבוצות נגדן היא משחקת. הקלט והפלט נראים כך:
קלט פלט
שם הקבוצה 1-20 1-00
מספר נקודות | 21-26 5
שם השחקן 2-7 900
רוצים למיין נתונים אלה לפי "נקודות", בסדר יורד. אם ש(*
שחקנים הגיעו לאותו מספר נקודות, שמותיהם *ופיעו לפי סדר
הא"ב.
- 219 -
א. כתוב תכנית שתקבל את הנתונים הבסיסיים כאשר הם לא
מסודרים ותחזיר אותם ממו*נים.
ב. נניח שבעמודות 58-68 של הקלט כתוב השם של הליגה בה משתתף
השחקן (ז"א הקבוצה שלו). הקבוצה מעוניינת רק בשחקנים
מליגה א'. כתוב תכנית שתקח גם דרישה זו בחשבון.
ג. נניח שרוצים פלט ממוין לפי נקודות ושמות עבור כל אחת מן
הקבוצות בנפרד. הכן פלט זה.
ד. נניח שרוצים דוח נוסף הממוין לפי שמות בסדר א"ב. הכן דות
זה.
7 220 -
פרק 12
מחולל דוחות
1 מנוא
חלק ניכר מזמן התכנות מושקע בהפקת דוחות. למטרה זו ניתן לתכנת
בקובול, ואפשר להשתמש בכלי מיוחד להכנת דוחות, ושמו - ס6עסססת
1660עא, או "מחולל דוחות". מחולל הדוחות הינו חלק מהגירסאות
המתקדמות של השפה.
21 דוגמה להפקת דוח
נניח שהמתכנת רוצה להפיק דוח שייקרא "דוח מצב מלא* ומכירות
מלאי" עבור מנהלי חברה מסוימת. הקלט עבור דוח זה הוא תוכן הקובא
%. 6ע0סט0 שהוצג בפרק 11.
הקלט עבור דו"ח זה הינו התוכן של הקוב 6181.286מת1 שלהלן:
3 01 0003162 01054 090687 012 010 מפתח 12 10987565 11
0 01 0057750 01155 011287 080 035 בוקסה 33 18563289 11
0 01 0062040 02068 021187 067 100 ברגים 176858439 11
0 01 0003350 00335 070887 050 200 מפתח 9/16 19800003 11
0 02 18404000 15600 041187 200 300 צמיג למכונית 20690007 12
0 02 0020033 20033 050787 020 011- צמיג למשאית 29082089 12
0 02 0030010 30010 090987 019 013- ג'ק 20323612 12
0 02 0883171 12389 060787 090 012 אבוב 21042077 12
0 03 0001000 10000 031187 050 390 מצבר 123 36950087 13
3 03 0098085 07585 091187 040 130 מצבר 200 36970045 13
5 03 0142500 50000 050587 100 280 סטרטר 384208905 13
6 03 0002030 03625 630387 010 020 פלג 34 35208198 13
- 221 -
קוב הפלט שהינו הדוח (תוכן הקובף 281.תסטפ8) מוצג להלן:
דו"ח מצב מלא' ומבירות מלאי
הד"ח הונק בתאריך 4/11/99
נמות להזמין קוד מחהלקה מבירות להודע מח'ר ליחידה נמות במלאי תיאור בריט | מסבר נרים םוג פריט
םפוג כריט: 11
3 1 2.2 4 6 מבתה 12 4 11
[ מ 1 77.9 105 55 בוקפה 34 09
= 1 200.00 20000 109 ברגים 8
1000 01 2.0 2.55 200 מבתח 9/16 13
מכירות לחודש עבור ברים מסוג 11: 1,263.02
מבירות הודשיות עבור מחלקה 1,263.02:01
םפוג ברים: 12
1000 2 0 0מ10 = צמ' ג למבונ ית 20007 12
19 2 200.3 200.3 1 צמיג למשאית 200009
מטנר דך: 1
נמות להזמין קוד מחלקה מכ'רות לחודש מחיר ליחידה כמות במלא' ת'אור ברים מסבר ברים שוג בריט
100 2 5 " 0.10 3 ג'ק 220012 12
100 2 71 1.09 12 אבוב 2000007
מבירוה להודע עבור בריט מםוג 12: 19,372.14
מבירות הודש'ות עבור מחלקה 19,372.14:02
םוגנריט: 13
10 3 108 1.00 100 מובר 123 7 13
133 33 5 05 139 מצבר 200 005
205 3 1,768 5.0.9 200 סטרטר 2.0005
6 3 20.08 5.025 20 נלג 31 520|08
מבירות לחודט עבור ברים מםוג 13: 2,436.15
מנבירות הודע'ות עבור מחלקה 2,436.15:03
מה"כ מכירות: 23,071.31
ממוצע של מכירות לחודט למחלקה: 4366. 7690 מסכר מחלקות: 3
מטנר דך: 2
= פוך הדו"ח %%
- 222 -
1. כותרת הדוח (שת₪6861 סעסקס6ת) מופיעה פעם אחת בדוה בדף נפרד.
2. כותרת דף (₪ם160801 6ְשָ88ק2) מופיעה בתחילת כל דף.
3. תוכן הדוה (69ת11 26%811) שורות המכילות שדות שמקורם מרשומות
קובצ הקלט.
%. סיום דף (₪ם00%1ת 6שַ8ק) בסיום כל דף יופיע מספר הדף והמלים
"מספר דף:".
5. סיום הדוח (שםת00%1ת 6עסססת) בסיום הדוח תופענה המלים "סוף
הדוח".
נהוג לחלק דוח לקטעים, כאשר כל קטע מכיל נתונים לגבי משתנה
המייצג מחלקה מסוימת או פריט מסוים. עוברים לקטע חדש כאשר יש
שינוי בערך אותו משתנה (הנקרא שדה הבקרה או משתנה הבקרה
(18016ע08 01ע6ת60). בתכניתנו יש שני משתני בקרה. האחד נקרא
%בעפת-אטפ-א ומייצג את סוג הפריט והשני נקרא 18%8ת0066-486-א
ומייצג את המחלקה בה מיוצר הפריט. נקודת המעבר מערך ישן של
משתנה הבקרה לערך חדש נקראת רמת בקרה (2268% 01ע%6ם00). עבור
כל קטע יש אפשרות להדפיס כותרת מסוימת בזמן השינוי ברמת
הבקרה, כמו שיפורט להלן:
6. כותרת בקרה (שת16861 01עסת60) - כשחל שינוי ברמת הבקרה תכתב
כותרת בקובצ הפלט.
בתכנית, כל פעם שישתנה ערך שדה הבקרה 6דַתַ8ק-שַטפ8-5, כלומר
כשיתרחש 2268% 01ע6ת0ס6 על שדה הבקרה 16ע8ק2-קַטפ5-א, יופיע
בקובצ הפלט הערך החדש של השדה 16ע8ק-8ט5-% החל מעמודה 106
והמלים "סוג פר*ט:".
7. סיומת בקרה (8ם70001 01עטת )00 - כשחל שינוי ברמת הבקרה,
רוצים לפעמים לסכם שדה מסוים.
(ראה כיצד הדבר בא לידי ביטוי בתכנית:
א. בכל פעם שישתנה ערכו של השדה 6געַ8ק-שַטפ5-א, יופיע בקובף הפלט
משמאל לימין החל מעמודה 73, סיכום של ערכי השדה-6621206
ת16600665, ערכו של השדה 16ע8ק-קט5-א, והמלים "מכירות לחודש
עבור פריט מסוג:". הסיכום הוא צבירת ערכי השדה-009ע1ת%866
0008 עבור פריט זה.
ב. בכל פעם שישתנה ערך השדה 18%8ת86א-0066-%, יופיע בקובץ הפלט
משמאל לימין, החל מעמודה 80, סיכום של ערכ* השדה -1206ת66א
ם0605ת166 עבור מחלקה זו, מספר קוד המחלקה והמלים "מכירות
חודשיות עבור מחלקה:".
ג. בסוף הדוה, אחרי השורה האחרונה של תוכן הדוה (6מ11 60811ק)
ואחרי שהופיעו א ו-ב, יופיעו שורות סיכום. השורה הראשונה
תכלול 132 תווי "*". בשורה השניה יופיע הסכום של כל המכירות
ולצידו תופענה המלים: "סה"כ מכירות:".
דרישות מיוחדות:
1. ציון מספר הדף לא יופיע בדף בו מוצגת כותרת הדוח, אלא רק החל
מהדף השני, שמספרו ייחשב כ-1.
- 223 -
2. חישוב ממוצע המכירות לחודש למחלקה יוצג כאחת משורות הסיכום
של הדוח כולו.
המבנה הכללי של התכנית מתואר קלהלן :
תכנית הפקת דוחות
הסבר:
התחלה: פתיחת הקבצים, הדפסת כותרת לדוח ולדף הראשון של הדוח
וטיפול ברשומה הראשונה בדוח. טיפול זה כולל כתיבת כותרת בקרה -
08 (קת16801 01ע6ת00) לסוג הפריט וכתיבת השורה הראשונה של
הדוח.
עיבוד: העיבוד כולל כתיבת כותרות בקרה וסיומות בקרה (01ע6ת00
8תנסססת) כאשר חל שינוי ברמת הבקרה הנובעת מן המשתנים סוג פריט
ומחלקה.
סיום: קטע זה יכיל:
1. הדפסת שורות סיכום לדוח הכוללות:
א. שורה של כוכביות בדוח.
ב. סך המכירות החודשיות במפעל.
ג. מספר המחלקות וממוצע מכירות למחלקה.
2. הדפסת סיומת לדף.
3. הדפסת סיומת לדוח.
8. סגירת קבצים.
נתבונן עתה בתכני*ת קובול רגילה להפקת דוח זה:
.ת1810ט21 ת612108010ת160 (1)
.ת200-8%ת1188008 .16-םהעשסעק (2)
. [0ע%ת116-00ץ (9)
.'616%.28%א' 10 מ4881₪ 6181/-2616% 56186066 (10)
. '+28.ת06ע' 10 ם2551₪ 6181א8-ת00כ2 561606 (11)
.ת1510ט1ק 868 (12)
.ת500010 116ק (13)
81 פע (18)
)15( 18061 600265 2260 6.
- 228 -
. 0166א-86טת365
.(9)2 16ק 8 02
. (9)8 16 9% 02
. (14)א 16ק %--- 02
9 ס6ץצ 8-1 ס- 02
.582866 שת16861 תש1ס
. (9)3 16ק 8 12-68%א-% 02
.9 סץצק 8 02
1-6ק ת1600665-120%ת66א-2 02
2-1
18061 3600203 48
8 36 13 6שַהת11]
4 46 שתנסססק
11685 4% 7100 9
1 שעססססם 26 1165
. (132)א% 16ק ב206-8%נ0ת365
1
פע
1
.ת560610 8₪6ע0ס5%-שת1אעסטט
. 180168ע8/-שת1אעסט
.'10' 08106 | (3)א 16ק 0פ-4006%2-50% 02
. 'ת6א' 08106 2 88
.'10' 08106 | (3)א 6נק שפ-+91-28ס3 02
. 'תסא' 78106 9פת-תפסת 88
.1 081806 (9)2 16ק 0% -6תסא 02
.1 08106 | (9)2 16ק || מנסהת-6תסא 02
.2 810606 | (9)3 16ק 6מס 02
.0 78106 (9)2 16ק 808-000 0066-1801 02
. פמגוס- 0
.0 8106 9)9(799 16ק הס8ת0608-120%ת60 02
.0 6ט1ע 9)9(/99 16ק 0%ע1ת60 02
. 2-1ת10861->עסקסת
.8 081665 (53)א 16ק 2ע1116ע 02
(26)א% 16ק 1162נע 02
.'דוח מצב מלאי ומכירות מלא:י' 6ש%81
08106656 (53)א 6צ4ק 1116%ע 02
.2-שת6-1681עסקסת
08165 (5%)א 16ק 62 02
(26)א 16ק 1162גע 02
. 'הדוח הופק בתאריך: 4/11/89' 6טש781
1 0810646 (52)א 16ק2 11160עק 02
. 6-1ת6-10801פַמק
. 508068 08186 (3)א 16ק 2ע1116ע 02
.'קוד מחלקה' 6ט081 (9)% 16ק 1116%ץ 02
:2 0816656 (1)א 16ק 1116%ע 02
- 225 -
1
1
1
1
1
)16(
)17(
)18(
)19(
)20(
)21(
)22(
)23(
)28(
)25(
)30(
)31(
. 'מספר פריס' 78106 (9)א 16ק 1[85נץק 02
1 781646 | (5)א 16ק 1116%ע 02
.'תיאור פריט' 781806 (10)א 16ק 1162צע 02
.2 78166 (7)א 16ק 11162ע 02
.'כמות במלאי' 78106 (10)א 16ק 11162ע 02
.3 08166 | (3)א 16ק 11162 02
.'מחיר ליהידה' 6ט781 (11)א 16ק 2ע1116ע 02
1 081066 (11)א 16ק ע1116ע 02
. 'מכירות לחודש' 78106 (12)א 16ק 11162ע 02
. 0816656 (231)א 16ק 11160ע 02
. 2-₪ת6-110801שָהק
1 8166 | (3)א 16ק 2ע1116עת 02
.'==' 811 6ט781 (121)א 16ק 1160נע 02
1 081066 | (5)א 16ק 0ע1116ע 02
. ₪ת10861- 601 תס0
.8 08106(6 (108)א 216 160[נעת 02
.'קוד מחלקה: ' 78106 (10)א 16ק 1169גע 02
.(9)2 16ק 8 02
1 081066 (12)א 16ק 1169גע 02
. 6מ1- 65811
8 1665 | (6)א% 16ק ע1116עק 02
1 08166 | (2)א 16ק 8 02
1 0811646 | (6)א 16ק : 11162 02
.2 781065 | (9)8 16ק %ע-1582א-ק 02
. 08 0816 (5)א 216 11162ע 02
8 08106(5 (18)א 160ק 6% -טטסי-ק 02
1 081665 | (6)א 16ק 11160ע 02
.0 781068( 9(--- 16ק 1 -טטוה8ס-ק 02
081065 | (8)א 160ק 11162ע 02
.0 78106 222.99 16ק 9-8 02
8 081605 (13)א 16ק 11162 02
.0 78106 22,222.99 216 ב060959ת1260-120%ת66א-ק 02
0810645 (535)א 10ק 1116%עת 02
. 8ת00%1ת-6201ת00
.8 08106656 (81)א 10ק 02
..222,222.99 216 18%8ת1206-28%880ת66א-ת580 02
.':' 08186 א 16ק 1162נ1ע 02
.(9)2 16ק 8 022
1 0810646 | א 16ק 1162נע 02
(26)א 016 11162 02
.'מכירות חודשיות עבור מחלקה ' %8106
:2 081646 | (2)א 16ק 11162 02
. 81-1ת8-71ת%201-700%1ת60
,'*' 811 078106 (132)א 16ק 11169ע 02
- 226 -
1
1
1
1
1
.81-2ת71-שַת00%1ע-%6201ת60
.3 0810606 (79)א 16ק 162ונע 02
, 222.99, 772, 22,222 216 06ע1ת60א/-ת580 02
. 8608 08106 (3)א 16ק 1165נע 02
, 'סה"כ מכירות:' 78106 (12)א 16ק 11162עק 02
1 081646 (20)א 16ק 11162עק 02
0-3
.8 0810600 (55)א 16ק 165ונת 02
1 18%06ת80/-₪19082 02
. 8 081046 א 16ק 2ע1116ע 02
. 'מספר מחלקות: ' 78106 (13)א 16ק 11162ע 02
. 508608 08186 (2)א 16ק 11162ע 02
, (2222.9)8 216 %80118%8-662120%א628-8ט9₪א 02
. 808 08106 א סנק 1[162ע 02
(29)א% 16ק ע1116ע 02
. 'ממוצע של מכירות לחודש למחלקה:' 781866
1 781066 (28)א 16ק 2ע1116ת 02
.6ם886-700%1ק
.8 0810606 (59)א 16ק 11162ע 02
סג ,8-:58נא 02
. 508008 08186 א 16 1165נע 02
.'מספר דף:' 08108 (8)א 16נק 1165נץ 02
.8 08166 (41)א 16ק 11165ק 02
.ת1ל00ת-6עסק6ת
7816065 (57)א 16ק 162ונע 02
(17)א 16ק 11162ע 02
.' ** סוף הדוה ** ' 08106
.8 78166 (55)א 16ק %ע116נ1ע 02
1
1
1
1
.ת1910ט1כ2 26גו690ספק
. 1תפפת
.8 מ םסק
6 מעס?עסק
.0 0011
.510 שע0ס]עסק
.תטת קסטספ
.ד
. 6181א-616%א 6טסת1 ת6ק0
. 200-6181 6טק6ט0 מ006
.8ת116801-02%ק360-60108%א מפ0ס?עסק
.8ת7826-16801-66108%א מעס+עסק
. 8ת0ג3 288-1181 מעס?עסק
.8ת16861-6%1085-36002%א
1 360025-08 מסעת ב200->המטתפסת 166ע₪
- 227 -
)99(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
)129(
)121(
)122(
)123(
)128(
)125(
)126(
)127(
)128(
)129(
)130(
)131(
)132(
)133(
)138(
)135(
)136(
)137(
)138(
)139(
.8 27 שת01ת4008 242002
2-קת10861-+עסק 6 מסע הססכע->8שטתפסת 166עח
.6 1 שת01ת4608 241002
. 8ת2826-110801-36%6108%
1-ו מסע ב86-200מטת9פסת 166עא
.2886 שת1סת4008 ע2?06
8-2ת826-0801ת מסעת ב86-200שטב69ת 166עא
.1 1 שת1סת8ט460 42002
. 8ת0ת118218-תפהק
'ת6א%' שטסא בת 46 6181א-616%א 366
.שפ-6%2ט40-+50 70
מפס?עסק
8 (10 18%8ת080/-0006- שטסא
. 1₪תוס6א(-11880828% שעס+עסק
.עטתס-8060108% שעס+עסק
.------ מ ם 20ע6ק
. 808-4000 0066-2801 10 18%8ת86/-4-0066 סטסא
.0-0
0 ת602120%6-1.600068-% 266
.1 , 848 1ת208080-120%ת60
. גוס
'תסא' 6טסא בת 46 %86181-0616%א 688
.שס-%006%2-502 70
2 ססמא 19
8 = ססא 060א%-00866-80118%8 19
8 -1נת1ת781-5ק11 שפס]עסק
6
+א8ם-תפסת +12
8 2-0066-8 10 18%8ת4-0066-880 6טסא
שפ-28%-ת9ס 70 '120' 6טסא
6
8 תסאא-2-0066 10 528008 6טסא
6-1%ת
-ת
ם1תט66א-1880828%6] םעס?עסק
א8עטתפ-601085א ₪שע0ס+?ע6ק
.20698110%ת0-2601120%-5100₪ מעס+עסק
. עטתפ-8%ש3601
6 מספ ב86-200מטת65ת 106תא
58 ְ שת01ת2008 005ס+24
ססם 34260
ש8ת2886-70051-%60108% ₪שע0ס+ע6ק
₪ח081]-886ק-86%108% שעס+עסק
.שפ-+28-ת308 10 'תסא' שטסא
- 228 -
)180(
)181(
)182(
)183(
)1848(
)145(
)146(
)147(
)188(
)189(
)150(
)151(
)152(
)153(
)158(
)155(
)156(
)157(
)158(
)159(
)160(
)161(
)162(
)163(
)163(
)165(
)166(
)167(
)168(
)169(
)179(
)171(
)172(
)173(
)17%(
)175(
)176(
)177(
)178(
)179(
)180(
)181(
)182(
. 8ת2886-100%1-6%108%
ס12' 1ק6-28מס סטסא
.8ת2826-200%1 מסעת ב200->המטמפסת 2166ש
.מנקהתע-6תסא 10 1 266
. 8%8 20₪801- 1גות1ת5- 1גוק ני
. 6-86018%0%תסא 0 1 246
.שת01-200%1ע%2ת00-%6%108% שעס+עסק
.8ת6201-16801ת%6%108%6-00 מעס+עסק
. מ8%8-4006 0066-8621 10 18%8ת0086-886- סטסא
.אַת00%1ת-6201ת%6%6108%6-00
0 60₪ס0א-848 1ת0006-80 סטסא
שַת1טססע-006201. +0 86218%8א-0066
. 888 1ַהַ6ַַ28-5862-600120% 10 הַאהַָתַסַ08-120%ב06 סטסא
שת00%1ע-01ע62ת00 מסעת ב6-2006ה8מטחפסת %66נסשט
.6 1 שת1נסתה8ט26 ע06+?4
. 08₪080018%8-120%ת60 10 2020 סטסא
. ₪ת6201-108061ת6%0108%6-00א
0 18%8ת80א-0066-% 6טסא
. קת5201-10801ת00 09 0086-8018%8
. קת%201-10801ת00 מסעת ב6-200המטת68ת 1%6עט
. 1₪ת6%0א-6הכַהט1188
-תגא-2 10 16עהק-15082א-5 ס6טסא
.16עא8ת-עט2-10 10 16ע8ק2-עט2-10 6טסא
. 2-08₪0%5-0806181 10 6181תַ0%5-08מ5-08 סטסא
.---ָָ 10 168ת66ע12-126ת8-866 סטסא
. 2-6011200-160206091 10 ב1.600668-8-662120% פטסא
. תט1ס
.86-07עטתפ-86%108% מעס+עסק
. 81-1ת1ע-8ת%201-20001ת00 שסעע ב200-%המטתפ6ת 6>נסשט
.120%ת5802-060 10 06ע1ת60 6טסא
.2 -קת%5201-00001ת00 מסעע בססכ86-2שטב68ת 166עח
. 18%0%ת15082-86 10 18%06ה86א-6תסא סטסא
= 18%8ת6₪0%28-6601120%5-880 66גוסםסס
. 800% 1ת6-86תסא / 661206
. 81-3ת1ע-קת01-70001ע6ת00 מסעץ בססכ2->המטמפסת 6סגכט
. 6תסא 10 ע606תט86-00ת11 6טסא
.תס - 33 = 6תסא 000066
.טפס 10 528008 סטסא
. 1.105 6תס שַת1סת8ט40 ע2+60 ב86-200מטת69ת 166עט
.מ1ק15082-08 10 ש1ק8כ6-2תס 6טסא
.קת00%1ע-886ק מסעץ ב2006-%הנטתפסת 6ס1קש
.שת00%1ע-36002% מסעץ ב86-206מטתפסת 6טנעח
. הסטעה-4000%2 , 4006%62-06181 061086
- 229 -
)183(
)183(
)185(
)186(
)187(
)188(
)189(
)190(
)191(
)192(
)193(
)193(
)195(
)196(
)197(
)198(
)199(
)200(
)201(
)202(
)203(
)203(
)205(
)206(
)207(
)208(
)209(
)210(
)211(
)212(
)213(
)218(
)215(
)216(
)217(
)218(
)219(
)220(
)221(
)222(
)223(
הסבר התכנית:
שורות 126-131: קטע העיבוד הראשי בתכנית מחולק ל-3 חלקים:
א. התחלה; ב. עיבוד כל רשומה בקוב; ג. סיום.
א. ההתחלה (שורות ]132-13) - מתבצעים בה הדברים הבאים:
1) פתיחת קובצ הקלט וקובא הפלט.
2) כתיבת הפריטים הבאים בקובצ הפלט (ז"א בדוח):
(א) הכותרת הראשית.
(ב) הכותרת לראש הדף הבא.
3 טיפול ברשומה הראשונה הנקראת מקוב> הקלט. טיפול זה כולל
העברת קוד המחלקה 18%8ת80א-%06-< למשתנה 066₪א-18%8ת80/-6066
(הוגדר בשורה 40), שם *ישמר ערכו לצרכי השוואה עם קוד המחלקה
ברשומות הבאות, כדי לדעת מתי הוא מתחלף (שורה 156).
ב. עיבוד כל רשומה בקובצ (שורות 159-175):
במשך התכנית יכולים להיווצר שלשה מצבים:
(1) שורות 163-16%: שינוי בקוד המחלקה. מסתעפים ל-1טת1ת11201-5-
האה[תסהמסת, שם: (א) דואגים לכתיבת שורת הבקרה עבור מחלקה זו
ואיפוס המסכם 18%8ת88080-120%ת60/ כדי שיהיה שימושי עבור המחלקה
הבאה (שורה 189); (ב) דואגים לכת*בת כותרת בקרה למחלקה החדשה
(צורה 190); (ג) מעבירים את הערך החדש של קוד המחלקה לשדה 6066-
06₪א-18%8ת%86 לצרכ* השוואה בעתיד.
(2) שורות 166-168: נמצאים בראש דף. המתג ש5-+28-ת5ס3 נדלק מיד
אחר* שמדפיסים את השורה התחתונה בדף הקודם (שורה 182). במצב זה
רוצים שיודפס ערך קוד המחלקה הנוכחי בראש הדף, לכן מעבירים ערך
זה לשורת הפלט ומכבים את שפ-287-הפסת.
(3) שורות 169-170: מצב רגיל, בו לא רוצים שיודפס קוד המחלקה
בטשורת הפלט, לכן מעבירים רווחים לשדה 18%8ת80/-0066-ק.
ג. סיום (שורות 209-223):
הפעולות הבאות מתבצעות בסיום קריאת כל הרשומות בקובצ הקלט:
1. שורה 210: כתיבת סך המכירות לחודש עבור המחלקה הקודמת, כפ:
שמתואר בשורות 192-197.
2. שורה 209: כתיבת 132 תווים מסוג "*" בקובף הפלט.
3. שורות 210-211: כתיבת סה"כ המכירות של המפעל.
שורות 212-215: כתיבת סיכום מספר המחלקות הקיימות במפעל והממוצע
של מכירות חודשיות למחלקה.
שורות 216-219: חישוב ערך השורה שבה תיכתב קבוצת סיומת לסוף הדף
(שת1ףססץ 6שַ28). מוצאים את ההפרש בין השורה בדף בה תודפס הסיומת
(שצורה 33) ומספר השורה בה נמצאים (על פ' עפסתטס0 סקַ8ת11, שהוא
משתנה המוגדר על-ידי קובול המכיל את מספר השורה התורנית. ע:ין
בשורה 217). מקדמים את דף המדפסת לאותו מספר שורות (שורה 219).
שורות 220-221: כתיבת סיומת לסוף הדף.
שורה 222: כתיבת סיומת לסוף הדוח.
הערה: אפשר גם להכין דוח שבו מספר משתני בקרה. למשל, בדוגמה
שלנו, יתכן שכל מחלקה תתחלק לתת-מחלקות. השדה תת-מחלקה יהיה
משתנה בקרה משני. במצב כזה, היינו צריכים להוסיף משתנה המכיל את
- 230 -
ערכה הקודם של תת-המחלקה ופיסקה מיוחדת שתבצע את הטיפול המתאים
בכל פעם שערך תת-המחלקה ישתנה. פסקה זו תופעל גם כאשר מספר
המחלקה משתנה, שינוי הגורר אחריו אוטומטית שינוי בתת-המחלקה.
הבדיקות לשינויים במשתני בקרה בשורה 163 *יבדקו תחילה עבור
שינוי במשתנה הבקרה המשני (תת-מחלקה). מושגים אלה מתרחבים לכל
מספר של משתני בקרה.
43 הפקת דות בעזרת ש6ל1ע₪ 600%
הקדמה כללית
מחולל הדוחות הוא חבילת תוכנה המקילה על המתכנת שרוצה להכין
דוחות. במקום לתכנת כל פרט הכרוך בהכנת דוה, מחולל הדוחות מטפל
בפיתוח הפקודות הלוגיות. על המתכנת למלא את תוכן הכותרות
והסיומות למיניהם בלבד. כ דוח מורכב ממירב של 7 חלקים שונים,
כאשר במינוח של המחולל כל חלק נקרא קבוצה.
ניתן לחלק את 7 הקבוצות שיפורטו להלן באופן לוגי ל-3 התחומים
הבאים:
הדוח כולו: 1. כותרת הדות (שת10861 6עסססת).
א. גוף הדו (26%811 6עסססת).
2. סיומת הדוה (שםת1טססץ 6עסקסת).
גוף הדוח: 3. כותרת הדף (שת816801 סשַק).
ב. גוף הדף (266811 6ִשִ8ק).
4. סיומת הדף (שת1טססע סְשַק).
גוף הדף: 5. כותרת בקרה (שת816861 1סעסת00).
6. שורת תוכן (6ת11 26%6811).
][. סיומת בקרה (שת61>ססע 01ע6ת00).
את הקשר בין החלקים
אפשר להציג בתרשים שלהלן :
כותרת דוח
כותרת דף
כותרת בקרה
גוף הדוח
סיומת דף
סיומת דף
סיומת בקרה
גוף הדף
שורת תוכן
- 231 -
מחולל הדוחות מאפשר להפיק דוחות על-ידי פירוט תבנית הפלט ב-
ת560%10 טעסקסת, אשר נמצא בחטיבת הנתונים. פירוט תבנית הפלט
נעשה על-ידי תיאור תוכנן ומיקומן של ] הקבוצות המוזכרות לע:ל.
תיאור הדוח ניתן בחטיבת הנתונים בקטע מ10סק205021 6עסספת (כת)
המכיל שלושה חלקים:
.1
תיאור סדר הבקרה - מודיע למחולל את החשיבות היחסית של שדות
הבקרה הקובעים את סדר ההדפסה של כותרות, סיכומים וסיומים.
למשל, בתכנית שתופיע להלן (עיין בשורות 41-83 להלן) נכתוב
6 0189ע6ת00
[תנע
0-8
86-68
והמשמעות היא, שכל פעם שיש שינוי בערך משתנה הבקרה המש(:
186-8, תודפסנה כותרות וסיומות מתאימות. בעת שינו:
בער | משתנה הבקרה הראש' הַאַ1ַהסַה8א-6066 יודפסו סיכומים
וכותרות מתאימים לאותו שינוי, אבל רק אחר* שיודפס סיכום
המתאים לשינוי ב-18%8ת80/-18%. משתנה הבקרה 8018%8/-6086
נקבע כמשתנה יותר מקיף מן המשתגה 18%8ת%80-18%5, כך ששינוי בו
מורה על סיום טיפול ב-16ע8ת-ט5 עבור המחלקה הקודמת. כאשר
נגיע לסוף הדוח, נעשה סיכומים סופיים המתייחסים לשינוי בערך
המשתנה המדומה 1ַַם1ץ, אבל רק אחרי שנסכם את שני המשתנים
מדרגה נמוכה יותר, 18%8ת86א-786 ו-18%8ת%806-6066. קיימת
אפשרות שיהיו מספר סיכומי ביניים משינו* ב-18%8ת886/-186, ורק
פעם אחת יהיה סיכום המתאים לשינוי ב-18%8ת0086-886, שהוא שדה
בקרה יותר מקיף.
פירוט תבנית הדף - התבנית מגדירה את גודל הדף הפיסי (שורה
8) והגבולות בהם ניתן לכתוב כותרות (שורה 85), שורות תוכן
הדוח (שורות 46-87) וסיכומים (שורה 48).
תיאור מדויק של תוכן ומיקום הכותרות והסיומות למיניהן בתוך
הגבולות שנקבעו להן בחלק 2 (עיין בשורות 59-113).
הפקת הדוח בחטיבת הביצוע אינה דורשת מהמתכנת לכתוב באופן
מפורט את הוראות התהליך. אין המתכנת נזקק לפקודות +1, 6טסא
64, 266, כדי ליצור את הדוח. הביטו' 500206 ב-6עסקסת
560010 משמש בדומה לפקודת 6ט%80 להעברת נתונים, כאשר על
המתכנת רק לציין את מקור (06עג50) התוכן של שדה הפלט. הביטוי
מנוס ב-מ560%10 6עס0ק36 משמש בדומה לפקודת 8664 כדי ליצור
סיכומים אחרי שינוי בערך משתנה הבקרה. הביטויים 6ם11 ו-6א6א
קטטסי משמשים לקביעת השורה בה תהיה כתובה אחת מ-7 הקבוצות
בדף, בהתחשב בהגדרת הדף כמו שמתואר בפירוט תבנית הדף ב-קת.
הביטוי 216 קובע את גודל שדות הנתונים וכיצד תהיה העריכה
שלהם. הביטו*י תמט001 קובע באיזו עמודה ייערך הנתון, הקבוע
המילולי, או הסיכום. יצירת כותרות, סיכומים וסיומים בדותח
- 232 -
נגרם על-יד שינוי אוטומט* ברמות הבקרה, לפיכך אין צורך
בפקודת ?+ על-מנת לכתוב אותם במקומם וכסידרם. המתכנת נדרש
לכתוב רק 3 פקודות עיקריות בחטיבת הב'יצוע:
1. 101866ת1.
2. 02866ת00.
3. 8%56ת76201.
1% מתן ערכים התחלת*ים למונים ולאוגרים פנימיים של
המחולל.
6:: "פסקודה המורה למחולל הדוחות ליצור את תוכן הדוח כולל
כותרות וסיומות.
6 : פקודה המורה למחולל לסיים את פעולת *צירת הדות.
עם זאת, המתכנת צריך לבצע פתיחה, קריאה וסגירה של קבצים.
פרק מ*וחד הנקרא ת560010 86 מאפשר למשתמש לטפל במצבים
מ*יוחדים וחריגים שאינם כלולים בעיבוד השגרתי של המחולל.
כמה מן היתרונות בשמוש במחולל הדוחות רשומים להלן:
א. נוח יותר להשתמש במחולל ליצירת דוה, מאשר להפיק דוה בדרך
הרגילה, מכיון שאין צורך לכתוב את תהליך הפקת הדוח באופן
מפורט. למשל, בדוגמה בפרק זה חטיבת הנוהל הצטמצמה מ-125
שורות ל-35 שורות כאשר השתמשנו במחולל (על אף שהתכנית השניה
מורכבת יותר, שהר* היא מאפשרת שנ* משתני בקרה).
ב. מחולל הדוחות מאפשר שיפור בהבנת התכנית, מכיון שתיאור הדות
כתוב בצורה ברורה בחטיבת הנתונים ובחטיבת הנוהל משתמשים ב-84
פעלים בלבד:
1161866 .1
2. 028086ת06
3. 8%66ת762₪1
4. שַתנסעסקסת 209026 086
אין צורך לכתוב את הפקודות השגרתיות להעברת נתונים וחישובים.
ג. כאשר חלים שינויים במבנה הדוה, אין צורך להוסיף ולהוריד
ע1116ת במקומות פזורים בקבוצות השונות. המתכנת רק צריך לשנות
את מספר העמודה בביטו* משט001 בשורת 260811, או בקבוצה אחרת.
אבל, למחולל הדוחות יש גם חסרונות בהשוואה ליצירת דוח בדרך
הרגילה, למשל:
א. המחולל מאפשר ליצור דוחות סטנדרטיים בצורה נוחה, אבל מתקשה
בהכנת דוחות עם תנאים מ*וחדים.
ב. המעקב אחר* טעות לוגית במחולל קשה, מכיון שחלק מתהליך הדות
נעשה באופן אוטומט'י, למשל סיכומים. לעומת זאת ביצירת דוח
בדרך הרגילה, אשר בו שולט המתכנת על תהליך יצירת הדוח באופן
מפורט, הוא יכול לעקוב טוב יותר אחר* טעויות לוג'יות.
7 233 -
4 תרגילים
שאלות
1. לאילו 3 חלקים אפשר לחלק כל דוח ?
2. לאילו 3 חלקים ניתן לחלק כל דף בדוה ?
. איך משפיע קיומס של משתני בקרה על התבנית של הדוה ?
3
8. מהו התוכן הטיפוסי של 6א1פגמת עסת1אסס ?
5. מהו תוכן הטיפוסי של 0א0011ק מסתנאסס ?
6
. איך מציגים שינויים במשתנה בקרה בתרשים זרימה?
תכניות
1. בקובצ של עולים שקיבלו הלוואות קיימים שני סוגי רשומות. אחר:
כל רצומה מסוג 1 תבואנה 0 עד 4 רשומות מסוג 2.
סוג 1 סוג 2
6 מספר עולה 6 מספר עולה
6 שם עולה 6 שם עולה
1 תאריך עליה 2 סכום הלוואה /
0 מספר זהו:י 7 תאריך פרעון סופי צצאאסת
7908 כתובת 2 סכום שהוחזר
5 רחוב 3 זיהוי 1-חדש 0-אחר
0 בית 8 תאריך התחלה
0 עיר
כתוב תכנית הקוראת קוב זה ומפיקה דוח שבו מפורטים שמות
עולים וסכומי הלוואה שתאריך הפרעון עבר והן טרם נפרעו. לגב:
הלוואות חדשות, יש להנפיק מכתבים לעולה:
הר*נ* לאשר כי בתאריך......... קבלת הלוואה בסך...........
2. התייחס לחלק ג' בתרגיל 3 בפרק 11. הכן דוח שיציג כל קבוצה
בנפרד, כאשר שם הקבוצה מופיע רק בשורה הראשונה של הפלט עבור
אותו דף. הכן גם כותרות מתאימות לכל דף של הדוח ולכל עמודה.
3 התייחס לתרגיל 2 בפרק 11. הכן דוח על הקורטסים שיתקיימו
בסמסטר הבא, כאשר הדוח ממלא את הדרישות הבאות:
א. כל מחלקה תופיע בדף נפרד.
- 232 -
.84
ב. מספר ושם כל מחלקה *ופיעו בכותרת של כל מחלקה, אבל לא
כאחת מן הכניסות.
ג. תופענה כותרות מתאימות לעמודות המכילות את מספר הקורט,
ההקבצה, השעות והימים.
נתונה כרטסת מלאי במבנה הבא:
רטשומה סוג 1 רשומה סוג 2
.8 סמל פרי0 8 סמל פריט
בקובצ מלא* 0 שם פריט 5 כמות במלאי
נמצאות שת:
רשומות עבור 31-55 כתובת מחסן 1 מלאי מינימום
כל פריט 5 שמם הספק ]22-27 כמות להזמנה
5 סוג רשומה-1 5 כתובת ספק
5 סוג רשומה -2
א. כתוב תכנית שתפיק מכתבים לספקים לביצוע הזמנות, אם הכמות
במלאי נמוכה מהמינימום. במכתב תופיע הכמות להזמנה וכתובת
הספק. הכן גם דוח להנהלה המפרט ומסכם את ההזמנות שבוצעו,
הכמות, שם הספס, כמות שהיתה במלאי בעת ההזמנה ומלא'
מינימום.
ב. ערוך שינוי בתכנית למצב אפשרי, שבו יש לפריט רק רשומה
אחת (סוג 1 או 2). הזמנות יבוצעו רק כאשר מופיעות שת*
רשומות לפריט, תחילה רשומה 1 ואח"כ רשומה 2.
נתונים 2 קבצים. קוב אחד מכיל 20 רשומות במבנה זה:
1-2 מספר מוצר
90 תיּאור המוצר ך1 רשומה אחת למוצר, הקובף אינו ממוין.
0 מחיר *חידה
הקוב השני מכיל רשומות במבנה הבא:
1-2 מספר מוצר
6 מספר *חידות שנמכרו ך הקוב ממוין לפי תאריך מכירה.
2 תאריך מכירה צצאאפת
לכל מוצר בקובצ א' יכולה להופיע בקובצ'ב' *ותר מרשומה אחת,
או שלא תופיע רשומה כלל. יש להדפיס דוח במבנה:
מספר מוצר תיאור מוצר מספר יחידות שנמכרוּו סכום המכירה
אא א--א א ------% א----%
הדוח לכל חודש יתחיל בדף נפרד (מספר החודש והשנה *וצגו
בכותרת).
- 235 -
פרק 13
קוב סידרתי
1 עדכון קובץ סידרתי
בפרק זה נציג את פעולות העיבוד העיקריות שמבצעים בקבצים -
פעולות העדכון (שת6861סט0) השונות:
א. הוספת רשומה חדשה.
ב. מחיקת רשומה ק*ימת.
ג. שינוי ערך שדה ברשומה.
קיימות שתי שיטות עיבוד בכלל ועדכון בפרט. השיטה הראשונה היא
עיבוד באצווה (ג88%60) שמשמעותו הגשת תכניות לעיבוד יחד עם
נתוניהן, כאשר יש ניתוק מלא בין המפעיל, או המתכנת לבין התכנית
עד סוף הביצוע. בעדכוןן | כזה נהוג לבנות קובצ תנועות
(7116 5פת880%10מ128), אשר מכיל את כל הפעולות שרוצים לבצע
בקוב>. הקובף המקור* שאותו מעדכנים נקרא קובצ-אב ישן (016
8 מסספהא) וקוב> הפלט המעודכן נקרא קוב>-בן, או קובץ-אב חדש
(116/ 885560 שסא).
האיור להלן מראה את אופו העדכוו בקוב> סידרת':
תכנית
העדכון
שיטת העיבוד השניה נקראת עיבוד מקוון (שַת2200081 6ת1/1-ם0).
בשיטה זו יש קשר תמידי בין התכנית המתבצעת והמפעיל או המתכנת.
בשיטה זו מעבדים כל תנועה בנפרד ולכן אין צורך להחזיק אותן
בקוב> סידרתי.
בפרק זה נדון בעדכון סידרתי (ז"א בעדכון של קוב סידרתי ממוין
על-סמך הנתונים הנמצאים בקובף תנועות סידרתי ממוין) כמצב טיפוס:
בתכנות| באצוה. רשומות העדכון בקובף התנועות חייבות להיות
ממוינות לפי מפתח זהה למפתח שממוין בו קובף האב. בפרק הבא נדון
- 236 -
בעיבוד מקוון, כאשר קוב האב יהיה מאורגן בשיטה מכונה אינדקס
סידרתית והטיפול יהיה בתנועות בודדות ולא בקובף תנועות ממוין.
כדי להשתמש בסובץ התנועות למטרות עדכון, כל רשומה מקובף התנועות
חייבת להכיל לפחות שני שדות: שדה שישמש כמפתת לרשומה ושדה
שיחזיק קוד פעולה המציין את סוג העדכון - הוספת רשומה, מחיקת
רשומה, או שינוי הערך של שדה ברשומה.
בתהליך של עדכון סידרתי, עוברים על קובצ האב הישן וקובצ התנועות
מתחילתם עד סופם. במהלך התכנית נמצאים תמיד באהחד משלושה מצבים:
א. ערך מפתח הרשומה בקובצ האב גדול מערך מפתח הרשומה בקובף
התנועות. א הופעת אותו המפתח בקובף האב הישן מסמן שאותה
רשומה חסרה וברצוננו להוסיף אותה כעת על-ידי העתקת הפרטים
המתאימים לקובף הבן. הטיפול מחייב קידום של קובצ התנועות,
אבל לא של קובצ האב.
ב. ערך מפתח הרשומה בקובי האב" קטן מערך מפתח הרשומה בקובףא
התנועות. במצב כזה, עלינו להעתיק את הרשומה הקיימת במלואה
מקובצ האב הישן לקובצ הבן, שהרי העדרותו מקובף התנועות מסמנת
שאין בכוונתנו לשנות אותו. טיפול זה ממצה את השימוש ברשומה
זו בקובץ האב ומחייב אותנו לקדם אותו אל הרשומה הבאה. מיקום
קוב התנועות לא משתנה, שהרי לא ניצלנו את הרשומה הנוכתית.
ג. ערך מפתח הרשומה בקובצ האב שווה לערך מפתח הרשומה בקוב
התנועות. שוויון זה מסמן שיש ברצוננו לשנות את הרשומה
הנוכחית על-ידי שינוי שדה אחד ברשומה (לפנ*י העברתו לקוב.
הבן), או על-ידי מחיקתו (דהיינו א* העברתו לקובצ הבן). לאחר
טיפול בשתי הרשומות עלינו לקדם את שנ* הקבצים לרשומה הבאה.
כאשר מגיעים לסופו של אחד מן הקבצים, מכניסים לשדה המכיל את ערך
המפתח עבור אותו קוב ערך מוגזם בגודלו. בכל ההשוואות שנשארו,
הטיפול :היה רק ברשומות הקוב השני (זה שלא נגמר), שהר* ערך
המפתח שלהן יהיה תמיד קטן מן הערך המדומה של מפתח הקוב שנגמר,
וכך נסיים את הטיפול בכל הרשומות של הקוב> השנ'י.
שלש טעויות יכולות לחול כאשר משווים את ערכ* המפתחות בקובף האב
הישן עם ערכ* המפתחות בקובף התנועות:
1. ניסיון מוטעה להוסיף לקובצ הבן רשומה שכבר קיימת בקובף האב
(אין צורך בהוספה זו, שהרי הרשומה כבר נמצאת בקוב).
2. ניסיון מוטעה למחוק מקוב% האב רשומה שאינה נמצאת בו (אין
צורך במחיקה זו, שהרי הרשומה כבר לא נמצאת בקובף).
3. ניסיון מוטעה לשנות ערך שדה ברשומה מסוימת בקובף האב כאשר
אין רשומה בעלת אותו מפתח בקוב>. במצב שיש אפשרות לשנות אחד
מכמה שדות ברשומה והפעולה חייבת לציין את שם השדה, יש אפשרות
לטעות בשם, או ברישום של ערך שהוא מחוף לתחום ההגדרה של אותו
שדה.
- 23] -
להלן מבנה של תכנית המבוססת על הגישה המתוארת לעיל. התכנית
מניחה שבקובצ התנועות אין יותר מפעולה אחת בעלת אותו ערך בשדה
המפתח.
000
תכנית יצירת דוחות
2000
ו
1000
ד
- ז דסא דט
2000
2-ו
0
105-012
דסזטק
וס תת 10
0
- 238 -
-₪/40-5111--40/₪72 -800₪12-קטטמ
1סטטק 2למעסא אגזא-247
עג-ד'ות חח סמת- דה אדסטא
/ג--האססת--נטאדס
500- החמתמ ם-- פד
קובצ האב הישן שנשתמש בו עבור תכנית זו (518628%1.68%6ת1) מופיע
להלן (הוספנו רווחים בין הטורים ליתר בהירות).
מכירות מחיר נקודת כמות תאור מספר קוד
לחודש ליחידה הזמנה במלאי פריט פריט מחלקה
2 "01055 012 0510 מפתח 12 5% 11 (1)
90 01155 040 055 בוקסה 34 9 111 (2)
0 020688 | 067 100 ברגים 8 11 (3)
0 003355 050 200 מפתח 9/16 3 117 (ףם)
0 300140 | 020 3 מגבה 2 15 (5)
0 156066 | 200 200 צמיג למכונית ]2069000 12 (6)
1 123888 | 090 012 אבוב 7 12 (ך7)
3 200333 020 011 צמיג למשאית 29042089 12 (8)
0 50006 | 100 200 מתנע 65 13 (9)
90 03625 010 0200 מצת 3% 8 133 (10)
0 100060 | 050 100 מצבר 123 7 13 (11)
5 075555 080 10 מצבר 200 5 133 (12)
קוב התנועות שנשתמש בו בתכנית זו (5.286ת128) מופיע להלן
(הוספנו רווחים בין הטורים ליתר הבהרה). שים לב לסוג התנועה (5
המסמן שינוי, א המסמן מחיקה, או 8 המסמן הוספה) המופיע בעמודה
השמאלית. עבור שינויים ומחיקות, מספר הפריט בקובץ התנועות
(עמודה 3) אמור להיות שוה למספרו של אחת מן הרשומות בקובףצ האב
הישן, אבל עבור הוספות אין דהישה כזו.
מכירות מחיר נקודת כמות תאור מספר | קוד | טוג
לחודש ליחידה הזמנה במלאי פריט פריט | מחלקה תנועה
2 0105% 012 0830 מפתח 12 5% 11 (1)
90 01155 080 095 בוקסה 34 9 11
0 020668 067 8408 ברגים 8 - 11 (3)
0 00335 050 300 מפתח 9/16 | 19800003 - 11 (8)
90 30010 010 053 מגבה 2 ,12 (5)
808 15606 200 300 | צמיג למכונית]2069000 | 12 (6)
1 (1238 090 012 אבוב 7 - - 12
3 200333 | 20 012 צמיג למשאית 29042079 | 12 (8)
0 500060 100 280 | מתנע 5" 13 (9)
90 03625 010 120 מצת 3% 8 13
0 10006 050 890 מצבר 123 7 "13
5 0753555 0%0 130 מצבר 200 5 13
ב
0000 ₪ = ₪ = ₪ ש ₪
- 239 -
הדוח המופק על-ידי התכנית (ותוכן קובצ הבן 00%691028%61.28%6) מופיע
להלן (הוספנו רווחים ליתר הבהרה):
מכירות | מחיר נקודת כמות תאור מספר קוד
לחודט ליחידה הזמנה במלאי פריט פריט | מחלקה
2 0105 012 040 מפתח 12 8% -11 (1)
909 01155 0830 095 בוקסה 31 9 11 (2)
0 02068 | 067 800 ברגים 88 -11 (3)
90 00335 090 300 מפתח 9/16 | 19800003 - 11 (8)
09 300160 | 010 053 מגבה 2 ,12 (5)
0 156066 | 200 | 300 צמיג למכונית20690007 | 12 | (6)
3 200333 | 020 012 צמיג למשאית 29082079 | 12 (7)
3 200333 020 011 צמיג למשאית 29012089 | 12 (8)
0 03625 010 120 מצת 3% 8 13 (9)
08 100060 | 050 390 מצבר 123 | ]3695008 13 (10)
דוח השגויים של התכנית (תוכנו של קוב השגויים 568000₪.2865א)
מופיע להלן :
דוח רשומות שגויות
0 10006 050 890 מצבר 123 36950087 13 פ
אם נסתכל בתוצאות נראה שרשומות 1-6 בקובצ הקלט שונו על-:ד:
פעולות 1-6 וקבלנו רשומות 1-6 בקובף הפלט. רשומה 7 בקובף הקלט
נמחקה כתוצאה מבקשת מחיקה שהופיעה בפעולה מספר 7 ולכן ה*א לא
מופיעה בקוב> הפלט. מאידך, פעולה מספר 8 מבקשת הוספת רשומה שלא
הופיעה בקובצ הקלט ועל כן היא יצרה רשומה מספר 7 בקוב> הפלט.
עבור רשומה מספר 8 בקובצ הקלט לא מופיעה אף פעולה בקוב
התנועות, לכן היא מועתקת ישירות לקובף הפלט ומופיעה כרשומה
השמינית בקובף הפלט. הרשומה מספר 9 בקובף הקלט (נמחקת כתוצאה
מפעולה מספר 9 בקוב> הקלט. רשומה 10 בקובצ הקלט עודכנה על-:ד:
פעולה מספר 10 ומופיעה כרשומה מספר 9 בקובף הפלט. פעולה מספר 11
בקובץ התנועות שגויה (שהרי כ אינו קוד פעולה חוקי) וכתוצאה מזה
מופיעה בקובף שגויים. היא היתה מיועדת כנראה לרשומה מספר 11
בקובצ הקלט, אבל היות ואינה תקינה, רשומה 11 עברה כמו שהיא
לקוב+ הפלט. רשומה מספר 12 בקובף הקלט נמחקה כתוצאה מפעולה 12
בקובצ התנועות.
להלן תכנית המבוססת על הגישה המתוארת:
.ת1810ט1 ת612108%10ת66ד (1)
. 602-510628%1ט0א-ת1600 .16-מְהסשסעק (2)
.ת566%10 ס6טוס6ט6-0טקחד (8)
. 01ע6ת116-00ק (9)
. '280. 5162801ת1' 10 ם881₪ תַּתַפ8+-ט800602-4 561605 | (10)
.'286. 00%551008%1' 10 ם4591₪ בג8688ת0-ט%00662-4 561605 - (11)
. '286, פת8ת'1' 10 ם4591₪ %600662-201106 561606 | (12)
. '+28. 0₪סגקסת5' 10 48518 מססשַסהס-006%2א 561606 | (13)
- 280 -
.תסנפנטנכע 2868
.ת560010 16נ1ק
58 -ט/-6%62ע0
.1 22060 600265 1.8061
. 4 -8%טת368
.(9)2 16ק 8 02
. (9)8 16ק 1%פפס-₪15082 02
. (18)א 16ק 6 -טס 02
9 6ב 21 02
.6 6₪6בת10801 תפנל
. (9)3 216 8 2ת-0886א6א 02
.9 ס60דק > 8 022
סדק 160206081-120%ת1!66 02
ת018088-ט006%2-40
.9 06₪6ע4 3600265 18061
. (842)א 16ע 1₪86-4-08685ות65ת
9 0%
18061 3600268 406 1.
.0110ק-108%גות365
.א 16 8 02
.'' 08106 1טתנםפ 88
.'' 08106 8 88
. 'א' 08106 8 88
.(9)2 16ק 9-8 02
. (9)8 16ק %-8 15 02
. (14)א 16ק 0-1 02
9 ס6צ מס 02
.6 שת10801 ב518
. (9)3 16 18288-6%068% 02
.9 16 8 02
ס6נק 1160220%6-16606651 02
200-5306
426 3600265 18061
. (42)א 16ק 0160 5- 3650086
פץ
1
פץ
1
פע
1
פע
1
.מ566610 5%02886->ת1אעסט
. 80108 1ת8/-8ת1אעסש
. '10' 08106 (8)3 216 %פ-טה-602ט40-+50 02
. 'תסא%' 6גו81/ טג-662ט0א-+?50 88
. '10' 6גו081 (3)א 216 | 662-260106-5%ט0א-+50 02
. 'תסא' 08106 0 88
. 'תסא' 08106 (3)א 16ק 5-5%0מ666-1'28א 02
. 'ת6א%' 6ט81/ פתםת'666-1א 88
. 'ת6א' 08106 (3)א 16ק ₪פ-6606-88602 02
. 'ת6א' 08106 85662/-60א 88
= 21 =
1
)18(
)15(
)16(
)17(
)18(
)19(
)20(
)21(
)22(
)23(
)28(
)25(
)26(
)27(
)28(
)29(
)30(
)31(
)32(
)33(
)38(
)35(
)36(
)37(
)38(
)39(
)40(
)41(
)82(
)33(
)88(
)45(
)86(
)37(
)48(
)49(
)50(
)51(
)52(
)53(
)58(
)55(
01 400026%-1 09000000.
781016 (30)א 6נק 11162ע 03
(18)א 16ק 1160נץ 03
.'דו"ח רשימות שגויות' 78186
.8 :08106 (31)א 16ק 11162ע 03
. 868588ת8-0מטת69ת 01
.(9)2 216 0086-8%8 02
. (9)8 216 ט1עמ-פ8ס5נא 02
. (18)א 16ק %פף-וס? 02
9 1:6 1 02
. 50082866 שת16801 תש1ס
. (9)3 16ק 8 12-2068%א 02
.9 סץדצ 8 02
1 ס:1ק 65 600/-120%ת60 02
. מ2101510 6ת2ו600סמק
. הפפ
. 118600818 מעס+?עסק
₪604 מעס+עפק
₪6 שב-652ט0א-502 11טחם
.ונס ₪ע0ס?ע6ק
.מטת קסטס
.0
ת808 צ-3006%52-4 6גוסת1 ת006
%- 1
08685-ט006%2-4א 0060006
. ז100ו08ת5- 00662
. 1.05001008-%0%026%-20%108% שעס+?עסק
. ם00266-1.650081100 %0-6%1086
0001 1.053-300026% מס שססגוקסתפ-86מנות65ת 66 בע
.6 1 אתנדסתהט40 22002
. 6016
8 -6606א 11
בת 46 6106ק-652ט40 3686
%פ-6%2-20010%5ש%0-+50 10 'תסא' סטסא
טה-8%מט0ם365 +0 16ע82ק-82ק15א 10 99999999 6טסא
4-ו
.שפ-5ת8ע660-12א 70 '0סם1' 6טסא
060 6006-0898 12
4 46 ת8ג7%85-ט4006%2-40 686
0פ-ט502-800652-24 10 'תסא' 6טסא
%ש טפס 02 16ע8ק-15082/ 10 99999999 6טסא
: 4-ו
.שפ-ע88002/-6606/ 10 '0' 6טסא
.8508 שע0ס+עסק
- 242 -
)56(
)57(
)58(
)59(
)60(
)61(
)62(
)63(
)63(
)65(
)66(
)67(
)68(
)69(
)70(
)71(
)72(
)73(
)73(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
)83(
)83(
)85(
)66(
)87(
)88(
)89(
)90(
)91(
)92(
)93(
)94(
)95(
)96(
)97(
. 18508
< טה-6השטתפסת3 09 16ע8ק-ע19082א 19
0% 09 16ע8ק-15282
0-1 - סע מעס?עסק
6
> טה-6אמטתפסת3 09 160ע8ק-82ק15א ?19
0% 058 6דַתפק-82ק15
תא -ע6%52-4ט0א-₪0000 שעס?עסק
6
."90 טנמנפסעסק
. [286010)- ט662-4ט%0-₪606
8 159
9 -05828 מעס+עסק
6
. 8ע8-000011מטת11001-36208 שעס+?עסק
. ת38%8-ט/ -2ס6ט%0-16וס6
.רפס 0 ש8%6-4ש0ת65 8ת01ת6500עע0ס0 שטסא
. 028-028068888ת69 סע" ת8689ת0-ט4->המטתפסת 166ע₪
.שפ-ע6ס 600-089 10 'תסא' פטסא
= --0602
/4006%2-4-+502 ססא 19
8 159
טבה-86מטת305-128%ת866 שעס?עסק
6
םת 12
ט-המטת5ס1-3ות01ת5 שעס?עסק
6
. 08-5008718ת001-26269ק11 שעס?עסק
. 19%06%62-201110%/-1108828
10 86-2610%6מנות365 שתנתסק65עע0ס6 פטס
. 808508ת0- 3658
. 808508ת8-0מטת65ת3 מעסע" בה028085-ע8%5-4שטם368 166סח
.שפ-5ת660-128/ 710 'תסא' 6טסא
. 8 01 - 8נות 269 26- [טק גת
.רפס מסע" 60₪ג86-52600מטת65ת 106סח
.ש5-5ת8ע86006-12 10 'תסא' סטסא
. ט86-4מ1ות365-18%ת66
.שפ-5ת666-128 10 'תסא' ס6טסא
.שפ-ת666-085066 10 'ת6א' 6טסא
. ט188-4ות68- נות1ת5
0 8%6-20010%6טת65 8ת61ת0ק65עע0ס0 6טסא
. 808888ת08-0נות65ת3
= 23 5
)98(
)99(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
)120(
)121(
)122(
)123(
)128(
)125(
)126(
)127(
)128(
)129(
)130(
)131(
)132(
)133(
)138(
)135(
.טפס מסע" בה8685ת0-ט86-4שטת65ת 106ע₪ (136)
.שפ-ע89500/-606/ 10 'תסא' 6טסא (137)
.שפ-8ת666-128/ 10 'ת6א' סטסא (138)
.שטנפ (139)
,ת028085-ט6%2-4ט0א , תה8ת85/-ט6%2-4ט00א 01036 (180)
. 1008ו6%52-5068ש0א ,006%52-2010% (188)
י
הסבר התכנית: נתונים קוב תנועות, קובצ אב ישן ורשומת קובצ הבן.
שורות 32-35: בתחילת הרשומה מופיע השדה 18ש6ק, שתפקידו לזהות את
סוג התנועה שתבוצע. התו 5 מציין שזו פעולה לשינוי ערכים בשדות
רשומת קובצ האב הישן. התו 8 מציין שזו פעולה להוספת רשומה. התו
א מציין שזו פעולה למחיקת רשומה מקובצ האב הישן. כמובן שהתווים
5 בעצמם לא יופיעו ברשומה החדשה שתכתב בקובא הבן.
שורה 5 תאור רשומת קוב השגויים, בו *יכתבו הרשומות השגויות
בקובצ התנועות.
שורה 52: שפ8-5ת666-128א מהווה דגל המסמן שהגענו למצב שעלינו
לקרוא רשומה חדשה מקוב> התנועות.
שורה 54: שפ-85062א-666 מהווה דגל המסמן שהגענו למצב שעלינו
לקרוא רשומה חדשה מקובצ האב היש(.
שורות 4]-70: חטיבת הביצוע בתכנית מחולקת ל-3 חלקים:
א. התחלה (שורות 75-80).
ב. עיבוד כל רשומה בקובצ (שורות 84-97).
ג. סיום (שורות 180-141).
שורות 85-90:
1. קריאת רשומה חדשה מקובף התנועות כשערך הדגל פת8ע660-1א הוא
'תשא'. בסיום קריאת כל הרשומות מקוב> התנועות יתבצעו הדברים
הבאים:
א) קביעת ערך הדגל 662-2001106-58ט%80-50% ל-'תסא'.
ב) שינוי ערך השדה ס1ס8ק-82ק15/ של טגב-6א8שטתפסת ל-99999999
שהינו ערך מירבי עבור שדה זה. כמו שהוזכר קודם, ערך גדול כזה של
המפתח יגרום לטיפול עתידי רק ברשומות קוב האב הישן; שורות 111
,2, 103 יתבצעו תמיד וממילא לא יהיה ניסיון לקרוא הלאה בקובף
התנועות שאל סופו הגענו כבר.
2. קביעת ערך הדגל אפ-8ם8ע604-1 ל-'20' לאחר שנקראה רשומה
מקובץ התנועות.
שורות 91-96:
1. קר'את רשומה חדשה מקובף האב הישן כשערך הדגל | ע06ס856א-606א
הינו 'תסא'.
בסיום קריאת כל הרשומות מקוב האב הישן י*תבצעו הדברים הבאים:
א) קביעת ערך הדגל אפ5-ט602-4ט%0-509 ל-'תסא'.
ב) שינוי ערך השדה 16ע8ק-15082א של 106ט6ק6-2אעת8סת ל-99999999
= 204 =
שהינו ערך מירבי עבור שדה זה. ערךך גדול כזה של המפתח יגרום
לטיפול עתידי רק ברשומות קוב התנועות (שורות 106 ,100 ,99) ועל
כן לא יהיה ניסיון לקרוא הלאה מקובצ האב הישן.
2. קביעת ערך הדגל אפ-ע6060-8850602 ל-'0' לאחר שנקראה רשומה
מקובצץ האב הישן.
שורה [9: השוואת ערך המפתח בקובף האב הישן לערך המפתח בקובצ
התנועות. בתכנית זו, מושווה ערך השדה 16ע8ק-82ק15/ של 6המטתפסת-
טג לערך השדה 8216ק82-2ק818 של 106גו20->8שטתפסת.
שורות 106-110: נבצע קטע זה כשערך השדה 16ע8ק-₪15282 של
טג-086ת365 גדול מערך השדה 16ע8ק-15282 של 6ס1טס6ק-8%מטתפסת,
או כשרוצים להוסיף רשומה לקובץ הבן מקובףצ התנועות, או כשקרתה
שגיאה ויש להעביר את הרשומה לקובף השגויים. לאחר הטיפול
ברשומה, נרצה לקרוא רשומה נוספת מקובף התנועות, לפיכך נעביר
לדגל אפ-5ם6066-128א ערך של 'תסא'.
שורות 111-114: כשערך השדה 16ע8ק15082-2 של טג-8%שטת388 קטן
מערך השדה 1%ע7282-ע1508 של 106ט60ק-6המטתפ36, נעתיק את הרשומה
מקובצ האב הישן לקוב הבן. לאחר ביצוע ההעתקה, נרצה לקרוא רשומה
חדשה מקובף האב הישן, לפיכך נקבע את ערך הדגל שפ-ע85%0א/-606א ל-
'תסא'.
שורות 115-123: כשערך השדה 16ע282-ע18082 של טג-6השטתפסת שווה
לערך השדה 16ע8ק-15280א של 86-2000106שטת365, ניתן לבצע מחיקה של
הרשומה מקובף האב הישן, או שינוי בערכים שברשומת קובא האב הישן.
אם בפעולה רשומה בקשה אחרת ממחיקה או משינוי, זו רשומה שגויה
ונעביר אותה לקובצ השגו:ים.
שורה 116: תנאי זה נחו כאשר מגיעים לסופם של שנ*י הקבצים וערך
השדה 16ע8ק-ת8ק15א בשניהם שוה ל-99999999, אם ננסה לבצע בתנאים
אלה פעולת שינוי, עלולים לכתוב רשומה נוספת ומיותרת בסוף קוב
הבן ולכן עלינו למנוע אפשרות זו על-ידי בדיקה, כדי לראות שלא
הגענו לסוף הקבצים.
שורות 131-133: מחיקה מקוב> האב הישן מחייבת העברת ערך 'תסא'
לדגלים שפ-ע%8566-866 ו-שפ-8ת8ע686-1א כד* שתיקראנה רשומות
חדשות מקובצץ האב הישן ומקובצ התנועות. עיבוד נוסף א*נו נחוף
במקרה זה, שהרי אי העברת הרשומה הישנה לקובף הבן היא למעשה
מחיקתו מן הקובא.
שורות 134-138: ביצוע שינוי בערכי השדות בקוב> האב הישן מחייב
העברת השדות המתאימים מרשומת קוב התנועות לרשומת קוב הבן. על-
מנת שאפשר יהיה לקרוא רשומה חדשה מקובף התנועות ומקובצ האב
הישן, משנים את ערכם של הדגל'ם שפ5-5ת6686-128א ו-שפ-88062/-660א
לערך 'םסא'.
שורות 140-141: סגירת הקבצים.
5 205 -
2 רושומות באורך מטתנה
עד עכשיו עבדנו בעיקר עם רשומות באורך קבוע (ם80ת16 60א1ע
8) :.: ָ שיש שג מקרים המעוררים את הצורך לעבוד גם עם רשומות
בעלות אורך משתנה (3600268 םסשת16 18016ע8/) והם:
א. הקובצ מכיל רשומות המוגדרות באופן שונה לחלוטין. למשל, בקובצ
התנועה רשומת ביטול צריכה להכיל רק שני שדות - שדה המפתח
ושדה שבו הקוד המציין את סוג הפעולה (פה 'א'). רשומת הוספה,
לעומת זה, עשויה להכיל הרבה יותר שדות (למעשה את כל השדות
שעתידים להיות ברשומה, מלבד שדה קוד הפעולה, פה 'אַ').
דוגמה לרשומות בעלות אורך משתנה מן הסוג הראשון ראינו כבר בפרק
], כאשר הגדרנו שני סוגי רשומות, אַגט8א-6-785%020%6המטתפפת ו-
1ת28-85%020%/-8%שטת365, עבור הקוב%ף 06ע662-085%0ט0א. תבנית
ההגדרה הכללית היא:
2 כפפק
426 600265 18061
.1-א8שטתפסת 01
.א 216 1-ת0260 02
אורך של א תווים 12 02
.. .58062 02
.פטתפסת 01
.א 2106 2-ת0260 02
1 02
אורך של צ תווים .. .88668 02
כאשר יש יותר מסוג רשומה אחד בקובף, גודלו של שטח המאגר המוקצה
בזיכרון להחזקת רשומות הקובצ הוא כגודלו של סוג הרשומה הגדול
ביותר.
הטיפול ברשומות הוא על-ידי שימוש באחד מן השדות כדגל לקביעת סוג
הרשומה. בדוגמה שלנו, (ניח שהשדה ג0260 מכיל שנ* ערכים אפשר:י:ם:
'6' שמסמן רשומה גדולה ו-'א' שמסמן רשומה קטנה. על-ידי בדיקת
תוכן השדה ת02606 בזמן קריאת הרשומה, ניתן לגלות את אורכה של
הרשומה ובהתאם לכך לטפל בה באופן הנכון.
בדיקת סוג הרשומה הנקראת יכולה להיות כדלהלן:
. 60116
'0' > 1-ת60ע0 12
0-8 11-26וק11 מעס+עסק
6
']' = 2-ת60ע02 19
8 6א-18נות7110₪1-36269 מע0ס?ע6ק
6
.86 מע0ס+ע6ק
- 246 -
שים לב שלבדיקות אלו אפשר להשתמש בשדה 1-ת0260 או בשדה 2-ג60ע02
לפי שהם חופפים אחד על השנ*י ולכן גם מכילים אותו נתון ממש.
ב. רשומה בתוך הקוב מכילה שדה העשוי לחזור על עצמו פעמים
אחדות, למשל רישום כל ההמחאות שנמשכו מחשבון. במצב זה חלק מן
הרשומה (המכונה הגרעין) הוא בעל אורך קבוע ורק החלק השני
המכיל את הנגררות הוא בעל אורך משתנה, כתוצאה מן העובדה
שמספר הופעות השדה החוזר על עצמו משתנה מרשומה לרשומה.
להלן מבנה רשומה באורך משתנה הכולל נגררות קבועות:
. 8-1טת368 01
12 02
החלק הקבוע של הרשומה .. .5862 02
.
. 16 6תסא 02
סז 810₪1ת(82-5ק₪15 060028 ]5886 02
החלק 6 810₪2ת15082-5ת
המשתנה של הרשומה . ₪8-1טבת365 +0 6תסא ת0 8ת61ת6ק6כע
...8 03
.. .88689 03
בטדה 6תסא מכילים את מספר'המופעים של איברי המערך הנמצא באותה
רשומה. הטיפול ברשומה כזאת מותנה בשדה תס שקובע את מספר
ההופעות של איברי המערך.
1 "- מספר שלם המציין את מספר המופעים המי*זערי של
איברי המערך.
2 -- מספר שלם המציין את מספר המופעים המירבי של
איברי המערך.
לסיכום, נשתמש באפשרות הראשונה כשהקובף מכיל מספר רשומות בגודל
שונה. נשתמש באפשרות השניה כשקיימת רשומה שבחלקה יש מספר משתנה
של נגררות.
43 דוגמאות לעיבוד ועדכון רשומות
בעלות אורך משתנה
הבה ונבנה רשומות בעלות אורך משתנה מן הסוג השני (בעלות נגררות
קבועות). כדי לעשות זאת, נקים תחילה קובף סידרתי המכ*ל כאחד
משדותיו מונה המכיל את המספר 1, 2, או 3. מונה זה יציין את מספר
הנגררות שיופיעו ברשומות הפלט. אחרי המונה יבוא מערך בן 3
מקומות. לקוב הפלט יועברו חלק מן האיברים באותו מערך (כמספר
המופיע בתוך שדה המונה). בדרך זו יווצרו רשומות שאורך כל אחת
תלוי במונה שמופיע לפני המערך.
- 217 -
להלן הקלט עבור תכנית זו (תוכן הקוב 662128.28%*, בשינויי מבנה
קלים). שים לב לערך שמופיע במונה,
שמופיעות ברשומת הפלט.
שים לב: את הנגררות רשמנו זו מעל זו ולא בשורה אחת.
נגררת
3 ירושלים גדי 1
2 ירושלים אבי 1
1 תל-אביב גדי 2
3 ירושלים גדי 84
2 תל-אביב דו 2
1 ירושלים אבי 1
3 תל-אביב אבא 7
2 ירושלים דו 2
1 באר-שבע גדי 84
3 ירושלים דן 2
2 חיפה אבא 7
1 ירושלים רון 6
3 ירושלים רון 6
2 באר-שבע רון
1 עכו אבא 1
3 ירושלים אבא 7
2 תל-אביב רון 6
1 ירושלים אסי 8
מונה
2
מפתח 12
בוקסה 31
ברגים
מפתח 9/16
מגבה
צמיג
הקובע את מספר הנגררות
103
19
18
1.3
222022
2200007
פלט התכנית (תוכן הקוב 01.28% בשינויי מבנה קלים) מופיע להלן:
נגררת
₪ ₪
תל-אביב
תל-אביב
ירושלים
תל-אביב
ירושלים
באר-שבע
גדי 2
דו 2
אבי 1
אבא 7
דו 2
גדי 4
חיפה אבא 7
ירושלים
ירושלים
באר-שבע
רון 6
רון 6
רון
עכו אבא 7
תל-אביב רון 6
ירושלים
אסי 8
מונת
1
- 208 -
מפתח 12
בוקסה 3%
ברגים
מפתח 9/16
מגבה
צמיג
1%
199
18
13
22202
2000007
להלן תכנית היוצרת רשומות באורך משתנה לפי השיטה השניה, דה**נו
הוספת נגררות לאחר הגרעין הקבוע של כל רשומה:
.ם1510ט21 מ%12108610מת160 (1)
. 6ת5068 1א-ת360266-+סעטם365-602128%צ .סנס (2)
....
.1 0ס-116ע (9)
.ב'652128.080ע' 10 ת2581₪ 116+ת1 5616065
.'1.086סא' 0ץ ם4881₪ 0052116 561666
.ם590010 116ק
6 פק
.4 060 3600268 18061
.זז 01
. (16:9)8ק 16ע8ת-15082 02
. (14)א 16ק %ע-0 02
.4 216 סתסא 02
.5 3 5עש060 8808%-% 02
. 16 15082-5808%א 03
.(3)א 16ק %-מסת5 03
.(7)א 16ק % 0-8 03
6 פת
6 4200 36002685 18061
082800028 56 10 31 מספל שַתנעַע8/ 6עסססת
4 01
. (9)8 16ק %בתפת-15080/ 02
. (18)א 16ק 02
16ק 6תס 02
8 3 720 1 8עט000 2-5808% 02
.6 0 6תסא ם0 8ת01מ0ק6ע
.4 160 88%-מהק15א 03
.(3)א 16ק 8% -מסת 03
.א 16ק 1162נע 03
. (7)א 16ק 600006-8%א 03
.ת560010 8-5602886ת1אעס₪
. 180168עה8/-שת1אתסא 01
.'10' 6ט1א (3)א 6נק
. 'מסא'
6ט
. 16
שפ-400662-+90
2ססטסא-502 88
1
(022
2
.ת2101510 6ע068600עק
. 118600818 20202
.2 11סת0 הע1תם מע0ס+עסק
- 29 -
.מט1ס םע0?עסק
.תטת קסספ
3851 .
)10(
)11(
)13(
)18(
)15(
)16(
)17(
)18(
)19(
)20(
)21(
)22(
)23(
)23(
)25(
)26(
)27(
)28(
)29(
)30(
)31(
)32(
)33(
)38(
)48(
)45(
)46(
)47(
)48(
)89(
)50(
)51(
)52(
)53(
)53(
)55(
)56(
)57( 8.
6 סטסת1 ם6ק0 (58)
.6 סנס6ט0 (59)
.בע (60)
.שפ-662ט0א-+50 10 'מסא' 6טסא 6תם 26 116/ת1 6ַהסת (61)
2 ססמא 19 (62)
0 10 860-ת1 8ת61ת26500ע00 סשטסא (63)
1-6 -1תטס 6א-11880828% מעס+עסק (68)
6 09 שתסא < 1 1בסמט 1 עַ2 1 שספת 1 שתבעעה8ש (65)
.006-6 166עש (66)
0-0 1תט60א-3880828% (67)
. (1)א5808%-ק2 10 (8%)1ק58-% סטסא (68)
.מט:פ (69)
:4 , 116/ת1 01056 (10)
הסבר התכנית:
שורות 16-23: תיאור רשומת הקלט. זוהי רשומה באורך קבוע.
שעורות 24-26: בתיאור רשומה באורך משתנה יש לכתוב במחשב אג/ ב-כעק
את המלים הבאות:
.0082806628 1₪2ט82-68ק₪15 10 1ש1נט68ס-82ק₪159 שתבעעה8/ 6עסססת
1 -158ע: מספר התווים המזערי של הרשומה. בדוגמה זו מספר
התווים המזערי הוא 34 (23 תווים בחלק הקבוע ולפחות נגררת אחת של
2 בתים).
19082-2ם: מספר התווים המירבי של הרשומה. בדוגמה זו מספר
התווים המירבי הוא 56 (23 תווים בחלק הקבוע ו-3 נגררות של 2
בתים כל אחת).
שורות 27-35: תיאור רשומת הפלט. מספר הנגררות (שיקבע את אורך
הרשומה) מותנה בשדה 6תסא.
שורה 36: אפ-2ס6ט0א-+50 מהווה דגל המסמן שהגענו לסוף קובצ האב
הישן.
שורה 80: 1 הוא משתנה שישמש כמציין (6ס1ע50סט5) עבור העברת
הנגררות מקובצ הקלט לקובף הפלט.
חטיבת הביצוע:
שורות 22-86: קטע העיבוד הראשי בתכנית מחולק ל-3 חלקים:
א. התחלה; ב. בניית רשומה באורך משתנה מרשומה באורך קבוע;
ג.סיום.
שצורות 50-56: מתואר קטע הבניה, שמתבצעים בו הדברים הבאים:
א. קריאת רשומה מקובף הקלט. בסיום קריאת הרשומות מקוב הקלט
הדגל שפ-60602ט0א-+50 ישונה ל-'תסא'.
ב. העברת השדות הקבועים מרשומת קוב הקלט לרשומת קוב הפלט.
ג. העברת הנגררות מרשומת קוב הקלט לרשומת קוב הפלט. מספר
הנגררות שיועברו מותנה במספר שמופיע בשדה סתסא.
שורה 58: העברת הנגררות מרשומת קוב הקלט לרשומת קוב הפלט.
שורה 60: סגירת הקבצים.
- 250 -
נכתוב תכנית שמטרתה לעדכן קובצ בעל רשומות באורך משתנה מהסוג
השני. ראינו שמספר האיברים הכלולים במערך המהווה חלק מכל רשומה
נע בין 1 ל-3. בתכנית זו נאפשר קליטת מספר שיציין איבר מסוים
שרוצים לשנות או למחוק. נאפשר גם הוספת איבר אחר* האיברים
הקיימים.
לתכנית זו שני קבצי הקלט: קוב האב הישן (2.286קא)
נגררת מונה
1 ירושלים גהי 2 1 מפתח 12 % ((1)
2 תל-אביב דן 2
1 ירושלים אבי 1 2 בוקסה 34 | 18563289 (2)
3 ירושלים אבא 7
2 באר-שבע דן 2
1 ירושלים גדי 4 ברגים 1108
2 ירושלים אבא 7
1 יבושלים רון 6 2 מפתח 16 808 (8
3 ירושלים רון 6
2 תל אביב רון 6
1 באר-שבע אבא 7 3 מגבה 2 ((5)
2 ירושלים רון 6
1 חיפה אסי 8 2 צמיג 0 " | (6
סובץ התנועות (52.286מ798) (עם רווחים כדי להפריד בין השדות).
=
מוגה
נגררת הנגררות מספר פריט
תל-אביב דן 2 1 83 |(1)
ירושלים אבי 9 2 9 (2)
חיפה גדי 5 3 8 (3)
באר-שבע רון 3 2 3'' ".| (4)
2 202022 (5)
2 20007 (6)
להלן הפלט -קובץ הבן (1.286ת%608685, בשינויי מבנה קלים):
מספר
נגררת מונה
2 תל-אביב דן 2
1 ירושלים גדי 2 2 מפתח 12 1% (1)
2 תל-אביב דן 2
1 ירושלים אבי 9 2 בוקסה 34 | 18563289 (2)
3 ירושלים אבא 7
2 באר-שבע דן 2
1 חיפה גד* ברגים 118
2 באר-שבע רון 3
1 ירושלים רון 6 2 מפתח 9/16 19800003 (4)
2 ירושלים רון 6
1 באר-שבע אבא 2 מגבה 2 ((459
1 חיפה אסי 8 1 צמיג 17 "((6)
ברשומה הראשונה של קוב התנועות מצויין סוג הפעולה הוספה (1),
"א שיתוסף האיבר המופיע ברשומה זו לקוב> הבן אחרי* האיבר שק*ים
כבר בקובץ האב (עיין בשורה 1 בקובף האב ובקובף הבן). בשורה
השניה של קוב התנועות מצויין סוג הפעולה ש*נוי (5) ומספר
הנגררת שבה יחול השינוי (בדוגמה זו - 1) ז"א שישונו הערכים
באיבר הראשון של רשומה זו בקובף האב. ברשומה המקבילה בקובצ הבן
רואים שחל שינוי באיבר הראשון. גם שורות 3 ו-84 מתייחסות
לשינויים בקובף האב.
- 251 -
בטורה החמישית של קוב התנועות מצויין סוג הפעולה מחיקה (א)
ומספר הנגררת שתימחק (בדוגמה זו - 2), ז"א שימחק האיבר השני
ברשומה זו. ברשומה המקבילה של קוב הבן רואים שנימחק האיבר השני
של רשומה זו. גם השורה השישית בקוב> התנועות גורמת למחיקת איבר
מרשומה.
התכנית שיצרה פלט זה מופיעה להלן:
.ת1810ט01 מ612108%610ת1640 (1)
.ל (2)
. 6מ2602600-150%58->סנטת365- 6%2-910628%1ט0א-תט66ד
1" (9)
. '22.286א' 10 מ1551₪ תהה85/-ט-002ט%0 561606 (10)
. '28%. 68808511 70 מ4551₪ ת8685ת0-ט602-2ט00א 561606 (11)
. '28% . 82תפתיד' 0 4881₪ 00106ק006%2-2א 561606 (12)
. '28%. 6625368000₪1ט0א* 70 4881₪ מססטשַסת006%2-5א 561665 (13)
.ם1510ט01 2808 (14)
.560010 116ע (15)
ת8808צ-ט00602-4 | פע (16)
67 10 25 שת1עע8/ 6עסססת (17)
.ת8ת85+-טה-86מטת9ת3 | 01 (18)
. (9)8 216 %בעפת-ת8 וא 02 (19)
. (18)א 16ק 6% -טס 02 (20)
.4 216 858 ?-ט6-4תס!] 02 (21)
8 כ3 10 0 0000208 5808%- 02 (22)
.ת8ת85]-ט6-4תסא ת0 שַתנת6קסכ (23)
. 16ק %- 1 03 (28)
. (3)א 16 % וס 03 (25)
.(71)א 16ק 5808%-%6%006% 03 (26)
ב8085ת0-ט%000%2-4 | פע (27)
. 8ת8000ע82ת0 56 10 23 שת1עע8/ 6עסססת (28)
.80881ת0-ט6-40המטתפסת | 01 (29)
.(9)8 16ק סבעהת-ת1908 02 (30)
. (18)א 16ק %בתפת-עטסי' 02 (31)
.9 16 [8085ת0-ע6-4תסא 02 (32)
8 כ 10 0 060028 5808%-ק 02 (33)
. 80881 0-ט6-4תסא ת0 8ת61ת606כ (38)
. 16ק % 03 (35)
. (3)א 16ק 8%-מסת5 03 (36)
. (7)א 16ק 3600065-88% 03 (37)
- 252 -
5% הפפ (38)
)39( 18061 3600268 426 4.
טטסת | 01 (80)
.א 216 8 02 (41)
.'ת' 08106 8 888 (82)
.'8' 081066 1טמנתם 88 (83)
.'ש' 08106 8 88 [88)
. (9)8 216 %+נעת-ת8ק15א 02 (55)
.9 16 0% -8ס15א-' 02 (846)
.7-8 02 (847)
)58( 03 1-0 216 9.
.(3)א 16ק + טס 03 (49)
.(7)א 16ק 9% 03 (50)
08100 ת076%2-5 פע (51)
)52( 1.8061 3600265 426 0.
. (80)א 216 00006 ת5- 6586-2062 1 (53)
ת560610 5602886-שת1אעסט (58)
ב" 01 (55)
.'0]' 08106 (3)א 16ק %פ-ט2-4ס6ט0א-?50 02 (56)
.'תסא' 08106 שב-662ט0א-50% 88 (57)
.'00]' 08106 (3)א 16ק ₪פ-006%2-20010%א-+50 02 (58)
.'מסא' 6ט81/ 9% 88 (59)
.ב'ת6א' 6ט1ה0 (3)א 16ק 0פ-58ת660-128 02 (60)
.ב 'מסא' 08106 600-188 88 (61)
.ב 'ת6א' 78106 (3)א 16ק 666-88%602-56א 02 (62)
. 'תסא' 6ט81/ 185602/-660א 88 (63)
.0 8106 9 16ק טב-6תסא-₪5 02 (68)
. 216 מנעהטה-15082/ 02 (65)
.ם1810ט1ת 20606026 (66)
.םת (67)
.8 מס 0?עסע (68)
646 מע0ס+עסק (69)
. 06%2-261010%א-+50 6 ט2-4פסט0א-+50 11סתטס (70)
.שט51 מעס?עסק (71)
. תטת ססס5 (12)
. 8602818 (73)
ת8ַ88/-00662-4א סטסת1 ת6ק0 (78)
0-0 (5ד)
ב08685-ש200652-84 6טקסט0 (76)
100₪גו8ַ0ת00602-5 (77)
- 253 -
.וס
% ססא 8426 5ת8ע606-1א 19
4 46 0010%6ק-4006%2 3686
1 ספ 'תסא' סטסא
תהתפהע-ט0086-8ת68ע 09 16תהק-עה8ק15א ס1 99999999 פטסא
4 -ת
.שפ-58ת666-128א 70 '0ע' 6טסא
טב-00662א-+50 06 6ת2 606-885608א 19
בת 46 תהַתפה8+-ט8006%2-4 בהסת
0-1 0 'תסא' סטס
% טפס 02 16ע8ת-82ק15א 10 99999999 פטסא
4-ו
.שפ-600-85%662א 70 '10' שטסא
.8 מעס+?עסק
. 18508
= תהת85+-8%6-40שטת365 0% 8016ק-15282א 1%
%- 65 +0 16עהק-82ק15
6 "-538800-ט006%52-4א מעס?עסק
6
> ת8ת88+-ט8%6-2מטתפס3 0% 16ע8ק-82ק15א 19
%ששרטטטפסת 02 16ע8ק-15082/
ת8808/-6-40המטת365 מסתעץ ב8085ת0-ט4->8נטתפסת 2166
שפ-ע8500/-606/ 70 'תסא' 6טסא
68
< תַַת85+-40-8%מטת9פ6ת 09 ס16ע8ק-ע8ק19א 19
%רשרכרשטטטפסת 02 8216ק-15080
שפ-58ת606-128 10 'תסא' סטסא
. 008 8-5מטת7110₪1-26269 שעספעסק
. 0010%- 06%2א-6ט58-ט-6%2ש0א
ט662-4ט0א-502 ססא 12
886851ת0-ט42-8%מות365 10 תהתפהצ-ע₪8%6-4טב365 פטסא
8 15
מ א-1058786 מעס+?עסק
6
1טמגם 1%
מהת85+-ט1-4ות1ת5 מעס?ע6ק
6
8 15
1 מס ס?פסק
6
. 8ע0₪8-500811ת26265- 11061 פעס+?מסק
.שפ-ע8560/-666א 10 'תסא' שטסא
.שס-5ת660-128/ 10 'ת6א' 6טסא
- 258 -
)78(
)79(
)80(
)81(
)82(
)83(
)88(
)85(
)86(
)87(
)88(
)89(
)99(
)91(
)92(
)93(
)98(
)95(
)96(
)97(
)98(
)99(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)119(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
.6 תשנא-3058+8% (118)
.80851ת0-ט6-4מסא 70 1 286 (119)
. ((ת028088-ט6-4תסא) 8%ק2-58 10 אַַקְ1-58 סטסא (120)
. ת028088-ט -86טםת65ת 6ס בעש (121)
. ת78508-ט11-4ות51 (122)
. הפ8ה8ת0-ט6-4ת0 10 1826260א-15082א-1' סטסא (123)
. ( [88688ת0-ש6-4תסא) 2-5828% 10 8%ק7-58 סטסא (128)
. 806891ת0-ט6-4ת0 10' תהח5 צ-6-4תסא סטסא (125)
. [80685ת4-0-+8מטת365 דעש (126)
.06%תקנא-1%8%ת₪60 (127)
תפההַת0-ט6-4תסא = 66ע6ע2ש1א-ע82ק15א-1 9ך (128)
הפהת0-ט6-4תסא שסעע 1 66ב8ע6סטפ (129)
6 (130)
0 1 266 (131)
םנתהטה-82ק19א 10 ב6-4-028885תס% סטסא (132)
טה-6תסא-05 קת1ץע08 שט121₪%2 מעס]עסק (133)
1 ע 0006ע182א-15082א-1 שספק
.שנעהטה-15082א < טב-6תסא-₪5 1בסתטס (138)
. ת186-4-0286858ות69 66 בעש (135)
.8₪ו%2ם121 (136)
. 086881-ט6-4תסא 10 ט4ה-6תס-₪5 סטסא (137)
.1-5808% 10 (02806852-ט6-4תסא) 08%ק2-58 סטסא (138)
. ת80888ת0-ע6-4תסא מססץ 1 86060ע6סטפ (139)
. (80858ת0--6מסא) 8%ק2-58 10 1-5808% סטסא (180)
. 08178 - טמ 609ם- 1טכצי (141)
. ת78508-ט-008%מ65ת3 מסעץ מססט08ת5-ת6-200המטב5ס3 6ס1עח - (182)
. 100₪ו08ת2000-9-0₪8%מ365 10 508068 סטסא | (183)
.טפ (184)
,ת[8085ת0-ט006%2-4א , תהַתפ88+-טה-%006%2 010586 (145)
. 00000 ה8006%2-5 , 1106ו0076%2-20 (186)
שורות ]16-1: בדוגמה זו, מספר התווים המזערי ברשומה הוא 23,
שהוא אורך החלק הקבוע ברשומה. מספר התווים המירבי הוא 56 (23
ועוד אורכם של 3 האיברים, כאשר אורכו של כל איבר הוא 2),
שורות 19-21: תיאור החלק הקבוע ברשומה.
שורות 22-26: החלק שמכיל את הנגררות הינו בעל אורך משתנה.
בדוגמה זו, יכולות להיות 0 עד 3 נגררות. בשדה שתסא נמצא מספר
הנגררות שיהיו בכל רשומה.
שורות 80-50: תיאור רשומת קוב התנועות. רשומה בקובצ זה בנויה
מרכיבים אלה:
א) שדה 8[ט6ת2, שתפקידו לציין את סוג הפעולה שתבוצע, כדי לעדכן
- 255 -
את הרשומות בקוב האב: התו 18 מציין שזו פעולה להוספת נגררת
חדשה; התו 5 מציין שזו פעולה לשינוי ערכים בנגררת אחת ברשומת
האב; התו א מציין שזו פעולה למחיקת נגררת ברשומת האב.
ב) שדה 16ע282-ע813082. לצורך פעולת העדכון צריך לבצע השוואה בין
השדה 16ע82ק8159282-2 בקובף האב לבין השדה 1%ע8ק-ת8ק15א בקוב%א
התנועות.
ג) שדה 66ע1₪00/-ע8ק9נא-1 שבו רשום מספר הנגררת שרוצים למחוק או
לטנות (שדה זה אינו בשימוש עבור הוספת נגררת).
ד) נגררת בשם 1-5828%, שבה תרשם הנגררת החדשה (שדה מורכב | זה
אינו בשימוש עבור המקרה של מחיקה).
שורה 53: תיאור רשומת קוב> השגויים, שבו :ייכתבו הרשומות השגויות
מקובצ התנועות.
שורה 56: 6%2-40-5%ט00א-50% - דגל המסמן שהגענו לסוף קובצ האב
הישן.
שורה 58: 5%-662-20010%ט0א-509 - דגל המסמן שהגענו לסוף קוב
התנועות.
שורה 60: שפ-8ת6860-128א - דגל המסמן שהגענו למצב שעלינו לקרוא
רשומה חדשה מקובף התנועות.
שורה 62: ש5-ע88%0/-606/ - דגל המסמן שהגענו למצב שעלינו לקרוא
רשומה חדשה מקובף האב הישן.
שורה 64: ט6-3תסא-₪58 - מונה לביצוע הלולאה המצמצמת את מספר
הנגררות ב-1.
שורה 65: מנעהטה-82ק815 - משתנה עבודה שמשתמשים בו כדי להחזיק
את מספר הנגררת לפני מחיקת אחת מהן.
חטיבת הביצוע:
שורות 67-72: קטע העיבוד הראשי בתכנית מחולק ל-3 חלקים:
א. התחלה;
ב. עיבוד כל רשומה בקובף;
ג. סיום.
שורות [13-7: קטע ההתחלה, אשר מבצעים בו את הפעולות הבאות:
פתיחת קבצי הקלט: קוב האב הישן וקובצ התנועות.
פתיחת קבצי הפלט: קוב הבן וקובצ השגויים.
שורות 78-91: קטע העיבוד.
שורות 92-102: לאחר ביצוע ההשוואה נוצרים 3 מצבים:
א. שורות 93-9%: ערך השדה 8216ק15082-7 של תהתפה8ע-ט4-סהמטמפסת
שווה בערכו לשדה 82-28216ק15א של 6106ק-6ה8מטתפס6ת.
- 206 2
ב.טותות 96-98: ערך השדה 16ע8ק419082-2 של תַּתפ8/-ט4->המטתפסת
קטן מערך השדה 16ע82ק-19282 של 105ו6ק-86שטתפסת3. במצב זה ישונה
ערך הדגל שפ-600-88%020א ל-'ת6א' כדי לאפשר קריאת רשומה חדשה
מקובצץ האב הישן וכתיבת הרשומה בקובף הבן.
ג. שורות 99-102: ערך השדה 16פַ8ק-1508א8 של תהַתפ85/-ט4-)השטתפ6ת
גדול מערך השדה 821%6ק2-ע82ק15א של 6₪10%ק-86שטת365, דבר המהווה
טעות, שהרי תכנית זו לא מיועדת להוספת רשומות לקובף האב.
במצב זה יתבצעו שני דברים:
1) משנים את ערך דגל אפ-8ם8ע606-1 ל-'ת6א' כדי לאפשר קריאת
רשומה חדשה מקובף התנועות.
2) הרשומה תיכתב בקובף שגויים.
שורות 103-11]7: כשערך השדה 16ַע8ק-ע815082 של תת85+-ט86-4מטתפסת
שווה לערך השדה 1%6ע8ק-ע08ק15א8 של 60106ק86-2שטג365 מתבצעים הדברים
הבאים:
א. שורה 105: העברת הרשומה עם נגררותיה מקובצ האב הישן לקוב
הבן.
ב. שורות 106-107: אם סוג הפעולה הוא הוספה, יש לבצע פעולת
הוספת נגררת מקובצ התנועות לקובצ הבן.
ג. שורות 109-110: אם סוג הפעולה הוא< שינוי, יש לבצע פעולת
שינוי נגררת.
ד. טורות 112-113: אם סוג הפעולה הוא מחיקה, יש לבצע פעולת
מחיקת נגררת.
ה. שורה 115: אם בפעולה רשומהּ בקשה אחרת מהוספה או מש'ינוי או
ממחיקה, זו רשומה שגויה ונעביר אותה לקובף השגויים.
ו. שורות 116-117: על מנת לגרום לקריאת רשומה חדשה מקובף האב
הישן ומקוב התנועות ערכם של הדגלים שפ-ע8866א-%666; -666א
שפ-פת7128 ישונה ל-'תס6א'.
שורות 118-121: כשמוסיפים נגררת לרשומת הבן הדברים הבאים
מתבצעים:
א. מוסיפים 1 לשדה ג80858ת0-ט6-4תס כדי לאפשר הוספת הנגררת
החדשה.
ב. מוסיפים את הנגררת שמופיעה ברשומת הפעולות אל רשומת הבן.
שים לב שהערך הסופי של המוגה ג8085ת0-ט6-4תסא₪/ שווה למספר האמית*
של ה
נגררות. אם הוא< היה שווה לערכו הישן, הנגררת האחרונה היתה
מקוצצת, שהרי ערך המונה הוא שקובע את אורכה של הרשומה.
שורות 122-126: כדי לשנות את הערך של הנגררת חייבים לבצע את
הדברים הבאים:
א. העברת מספר הנגררת שרוצים לשנות לשדה ַַפּ808ת0-ט6-4תסא, כד:
שהשדה גת8688ת0-ט6-4ת0 יהווה מציין לצורך העברת ערכי שדות
הנגררת מקובצ התנועות למקומם בקובף הבן. המציין היחיד שמותר
להשתמש בו לצורך זה הוא המונה המוגדר עבור קובף הבן: -טג6-2תסא
פה פת0.
ב. החזרת ערך ג8685ת0-ט6-4תסא/ לערכו המקורי המצ**ן את מספר
- 25] -
הנגררות ברשומת קוב הבן. לו היינו משא*ירים אותו שווה למספר של
הנגררת ששונתה, יתר הנגררות היו מקוצצות.
שורות 127-140: מחיקת נגררת דורשת העתקה של כל הנגררות אל קוב%
הבן פרט לנגררת שאותה רוצים למחוק.
התהליך מתבצע כך: אם הנגררת הנמחקת היא הנגררת האחרונה ברשומה,
מספיק לחסרי 1 מן המונה (שורות 128-129), אחרת: לאחר שהועברה
רשומת האב הישן לקובץ הבן, מועברות הנגררות זו אחר זו מקוב> האב
ל-17-5808% (שורה 138) החל מהנגררת שמופיעה אחרי הנגררת שאותה
רוצים למחוק (שורה 131) וכלה בנגררת האחרונה במערך (שורה 132).
מ-1-5808% מועברות הנגררות לקוב> הבן (שורה 140) החל ממקומה של
הנגררת הנמחקת עד המקום השני מהסוף, שם נרשמת הנגררת האחרונה.
המקום האחרון יקוצץ, שהרי הזזנו את כל האיברים קדימה ולכן אין
בו צורך. שים לב שיש להעביר את הנגררות לשדה 1-5808% וממנו חזרה
לקוב הבן (שורות 60) במקום להעביר אותן ישר ממקום מסוים
בקובצ הבן למקום שלפניו. הסיבה לכך נעוצה בעובדה שאפשר להת*יחס
לנגררות בקובצ הבן רק בעזרת ג8688ת0-ט6-4ת0 ואי אפשר שאותו
מונה *חזיק שני ערכים באותו זמן. לכן נותנים לוה ערך אחד,
משתמשים בו כדי להוציא את הנגררת ממקומה ולשים אותה במקום זמנ',
מורידים אחד מן המונה ורק אז מעבירים את הנגררת מן המקום הזמני
חזרה למקום לפניו במערך שברשומת קוב הב(.
שורות 141-143: כשיש רשומה שגויה היא נכתבת בקובף שגויים.
שורות 185-146: סגירת הקבצים.
4 עדכון רשומות במקומן
פעמים רבות פועלים עם קבצים שתוכם כמעט יציב, כלומר, יש בו
שינוייס מעטים. במצב כזה לא נוח לעבוד לפי* השיטה של העתקה מקובף
אב לקובצ בן כאשר מבצעים שיגויים לעתים רחוקות. עדיף להחזיק רק
קובצ ראש* אחד בלבד ולאפשר תיקונים באותה רשומה הזקוקה לכך.
אם מכילים את הקובא בדיסק, ניתן לתקן רשומה במקומה אם ננקוט
בצעדים הבא*ם:
א. נתקדם על 5(* הקוב%א מרשומה לרשומה בעזרת הפקודה עגמת, עד
שנגיע לרשומה הזקוקה לעדכון.
ב. לאחר שנבצע פקודת עגמת על הרשומה שרוצים לעדכן, נכניס אותה
לשטח עבודה ב-22 או ב-8₪6ע500 שתבאעסח.
ג. נבצע את העדכונים הרצויים על הרשומה בזמן שהיא נמצאת בשטת
העבודה.
ד. נשתמש בפקודה: [5866 7808] בשטתפסע-םמ6ת3 מדדתאתת כדי
להחזיר את הרשומה ששונתה לקוב הראש'.
2 208 -
ה. נסגור את הקוב%א אחרי ביצוע העדכון.
אם יש מספר עדכונים, אפשר לבנות קוב תנועה ממוין ולעבור על פנ:
הקוב הראש:י באופן סידרתי וכך להפגיש כל פעולת עדכון עם הרשומה
המבוקשת בקוב האב. ניתן גם למחוק רשומות מקוב האב בצורה
לוגית. הכוונה היא שאפשר לקבוע שאם מכניסים ערך מסוים לשדה
כלשהו, הרשומה נחשבת כמחוקה. כמובן, אם מוחקים רשומות רבות
בצורה זו, רוב המקום בקוב>צ לא יהיה מנוצל וכדאי להעת:יק אותו
לקובצ חדש ולהפטר מן הרשומות המחוקות בזמן ההעתקה.
ניתן גם לאפשר הוספת רשומות לקובצ סידרתי, אבל רק בסופו. אם
רוצים שהקובף יהיה ממוין, אפשר למיין את הקובף אחר* הוספת
הרשומות החדשות.
האפשרויות של כתיבה מחדש והוספת רשומות לקובף סידרתי המוחזק
בדיסק מבוססת על השימוש באופציות חדשות של פקודת אמק0. מבנה
פקודה זו ניתן להלן:
ספא
[פאזשפת סא ₪ 662ט0א-6₪ת5 בו אפס
ספאמדאם
0
הסבר: לקבצים בסרט מגנטי מתאימות רק שתי האופציות הראשונות. גם
הביטו* האופציונלי "פאצשמת 0א 1ע1ש" מיועד לקבצי | סרטים,
ומשמעותו היא שבסוף העיבוד, אין לגלגל את הסרט חזרה להתחלה, אלא
משאירים אותו בסוף הקוב שזה עתה נכתב.
האופציה פאשעאם מאפשרת למתכנת להוסיף רשומות בסוף קוב בעזרת
הפקודה 118תא. לו היינו פותחים את הקובףֶ על-ידי עשסקדצסס אמסס,
התוצאה היתה שתוכנו המקורי של הקוב היה נמחק. בל* אפשרות זו,
כדי להוסיף שמות בסוף קוב היינו צריכים להעתיק את הקוב במלואו
לקוב> פלט חדש ולכתוב את הרשומות הנוספות בסוף הקוב החדש. את
הקוב המקורי ה*ינו פותחים ב-1ט0קא1 א028 ואת החדש ה*ינו פותתחים
ב- 001207 אמפס.
האופציה 1-0 מאפשרת קריאה בעזרת הפקודה כמ וכתיבה באותו מקום
ממנו נקראה הרשומה האחרונה בעזרת הפקודה שצ1וחמת. אופציה זו
מאפשרת איפוא עדכון סידרתי במקום.
פעולה זו ניתן לבצע בדיסקים בלבד.
5 תרגילים
שאלות
1. איך חייבים לפתוח קוב כדי להשתמש בפקודת פגמת (ציין שת:
אפשרויות)?
- 259 -
2. איך חייבים לפתוח קובצ כדי להשתמש בפקודת ₪118 (ציין שת:
אפשרויות)?
3. כדי לעדכן רשומות קוב המוחזק בדיסק, אפשר להשתמש בפקודה
מסוימת אם פותחים את הקוב בצורה מסוימת. איזו פקודה ואיזו
צורת פתיחה מאפשרות פעולה זו.
4. באיזה שדה ניתן להשתמש כדי לברר אם פעולת קלט/פלט הצליחה ?
איפה מוזכר שדה זה; איפה הוא מוגדר?
5. הסבר למה קובצ האב וקובף התנועות חייבים להיות ממוינים עם
אותו מפתח ראשי, כדי שתוכנית עדכון תפעל כראו*.
תכניות
1. נתונים שני קבצים - ממוינים בסדר עולה.
קובצ א', מבנה רשומה: קובצ ב', מבנה רשומה:
8 מספר ז'יהן: 60 תםדק
הםוןודעת 9-80 8 מספר ז'הן:
כתוב תכנית עבור כל אחד מן המקר*ם הבאים:
.2
א. לכל רשומה בקובצץ ב' יש מקבילה בקובף א'. יש להדפיס את כל
הרשומות בקובצ א' שאין להן רשומות מקבילות ב-ב'.
ב. לכל רשומה בקוב+ ב' יכולה להיות או יכולה שלא להיות
רשומה מקבילה (אחת לכל היותר) בקוב א'. אם יש רשומה
מקבילה, יש להדפיס את הרשומה מקוב> א', אחרת יש להדפיס
את הרשומה מקובף ב'.
הרשומות בקוב>צ מלא* מכילות את השדות הבאים:
* מספר פר*י0.
* מלאי קיים.
* נקודת הזמנה.
* רמת מלאי* רצויה.
* כמות בהזמנה.
מזמינים השלמת מלאי של פריט כאשר הסכום של המלאי הקיים ושל
הכמות בהזמנה קטן מנקודת ההזמנה. הכמות המוזמנת היא ההפרש
שבין הסכום של המלאי ושל ההזמנה הקיימת לבין רמת המלא:
הרצויה.
מבנה רשומה בקובף התנועות:
* מספר פריט.
* סוג פעולה (הוספה למלאי, הוצאה ממלא*).
* כמות.
בהנחה' .ששני הקבצים ממוינים לפי מספר הפריט, כתוב תכנית כדי
לבצע עדכון שיתייחס לאפשרויות הבאות:
א. אין פעולות עבור פריט מסוים.
ב. יש פעולות אחדות עבור פריט מסוים.
ג. יש פעולות עבור פריט שאינו קיים (ז"א יש במספר פריט או
בקובצ האב).
- 260 -
3
נתון קובצ עובדים במבנה: קובצ עדכונים:
1-9 מספר זיהו: קוד פעולה: 0 - עובד המפסיק לעבוד
5 שם עובד 1- עובד חדש
17 ססמל דירוג 90 מספר זיהו:
0 סמל דרגה 2 ססל דירוג
5 סמל דרגה
1 שם עובד
שני הקבצים ממוינים לפי מספר זיהוי. יש ליצור קובצ מעודכן
ולהדפיס את הסיכומים הבאים:
- | מספר רשומות בקוב> עובדים לפני העדכון.
- | מספר עובדים חדשים שנקלטו.
- | מספר עובדים שהפסיקו לעבוד.
- | מספר רשומות בקובצ עובדים לאחר העדכון.
כמו כן יש להדפיס דוח שגויים:
- קוד שגיאה 1 - עובד שמפסיק את עבודתו וא*נו בקובא.
הנתונים של אותו עובד.
- קוד שגיאה 2 - עובד חדש שכבר קייסם בקובף. הנתונים של
אותו עובד.
רשומה מכילה פרטים אישיים ופרטים כלליים על מצב בריאותו של
כל תושב, או תושבת. בנוסף לכך מוחזקת ברשומה טבלה המתארת את
כל המחלות שהיו לתושבת. לטבלה יש 1% כניסות שכל אחת מהן היא
בת 10 תווים המתאר*ם את סוג המחלה, עוצמתה, תאריך ועוד.
מבנה הקובצ: מספר זיהו: - 8 ספרות
שם משפחה - 12 אותיות
שם פרט: - 10 אותיות
כתובת - 18 אותיות
שנת לידה - 2 ספרות
מצב משפח: - 1 ספרה
מידע נוסף - 9 אותיות
שדה מספר 1 | - 10 אותיות
שדה מספר 2 - 10 ספרות
. קודי מחלה,
, כל קוד מכיל 10 ספרות
שדה מספר 184 - 10 ספרות
במקומות ששדה הקוד לא תפוס, יש בו אפסים.
מבנה התנועה: מספר זיהוי - 8 ספרות
קוד מחלה - 10 ספרות
שדה ריק - 2 אותיות
- 261 -
שני הקבצים ממוינים על-פי מספר הזיהוי. בזמן העדכון יש לשים
לב לנקודות הבאות:
א. אם התנועה לא פוגשתחשומה מקבילה, יש להדפיס שורה ובה
הערה: "אין רשומה מקבילה", מספר זיהוי (מהתנועה כמובן).
אין להוסיף רשומה זו לקובצ.
ב. אם התנועה פוגשת מקבילה, אזי קוד המחלה צריך להרשם
בכניסה הראשונה הפנויה מבין ה-11.
ג. אם התנועה פוגשת מקבילה וכל 1% המקומות כבר תפוסים, יש
להדפיס שורה ובה הערה: "אין מקום לקוד מחלה", ואת מספר
הזיהוי.
ד. אם התנועה פוגשת מקבילה וקוד המחלה מתחיל בספרה 9
(בתנועה), יש לבטל את הרשומה בעלת מספר הזיהוי הזה מקובף
אב.
לבור
א) יכולה להופיע למעלה מתנועה אחת לרשומה בקוב> אב.
ב) יתכן שקוב> התנועה יסתיים לפני קוב אב, אך יתכן גם
המקרה ההפוך.
שרטט תרשים זרימה, וכתוב את התכנית.
- 262 -
פרק 14
ארגון קוב אינדקס סידרתי
1 מנוא
בקובצץ סידרת:י הגישה לרשומות היא על-ידי סריקת הקובצ מתחילתו עד
למציאת הרשומה המבוקשת. נניח שרוצים שהרשומות תה*ינה מסודרות
באופן סידרתי בהתאם למפתה הרשומה, כד'י לאפשר גישה סידרתית
לרשומה בקובצץ, אבל גם רוצים לאפשר גישה ישירה לרשומה מסוימת
בקובצ בהתאם למפתח הרשומה. שילוב שתי גישות אלו לרשומות בקוב%
מתאפשר על-יד* ארגון קוב אינדקס סידרתי (%6181ת50016 66א66ת1
6 400085%8%5) או לגישה רציפה לפי אינדקס.
בשיטת ארגון זו הרשומות ממוינות לפי מפתח הרשומה בסדר עולה.
בנוסף על הרשומות המוחזקות בשטח המ*ועד לנתונים עצמם, מחזיקים
גם אינדקס שהוא טבלת מפתחות של רשומות וכתובות:יהן. האינדקס
מאפשר למצוא רשומה בקגבף בגישה ישירה בלי צורך לסרוק את הקובצ
באופן סידרתי.
בארגון אינדקס סידרתי ניתן לגשת לרשומות באחת משלוש הדרכים
הבאות:
א. סידרתית (0181ת56006) - הגישה לרשומות תהיה באופן סידרת:
בהתאם לסדר מפתח הרשומה. הגישה היא לשטח הנתונים בלי צורך
באינדקסים.
ב. אקראית (שס6תת) - הגישה לרשומות היא באופן ישיר לפי מפתח
הרשומה. איתור הרשומה בקובף הוא בעזרת אינדקסים.
ג. דינמית (סבַמַּתצַכ) - הגישה לרשומות הינה באופן אקרא* וסידרת'י.
2 מבנה קוב? אינדקס סידרתי
שני מבנים קיימים לארגון קובצ אינדקס טידרתי:
א. 1548 (00ת86% 4600685 6181ת50000 808א66ם1).
ב. 0548 (00ם866 460055 5600886 [הטסענט).
במבנה 154%, הרשומות מוחזקות בקבוצות, אשר כל אחת מהן תופסת
מסילה אחת בדיסק. רשומות חדשות מתוספות למסילות לפי סדר מפתח
הרשומה. אם אין יותר מקום לאחסון רשומות במסילה, הן תועברנה
= 203 -
לשטח גלישה ויהיו אליהן מצביעים. הרשומות שמועברות לשטח הגלישה
משורשרות ביניהן, על-ידי שמוש במצביעים שקושרים רשומה לרשומה.
כל פרק זמן צריך לארגן מחדש את הקוב עם שטחי הגלישה כדי שלא
יהיה שטח גלישה "מלא" מדי. מצב זה גורם לאיטיות בזמן הגישה
לרשומה מסוימת, בגלל שרשור הרשומות בשטח הגלישה. המשמעות של
ארגון מחדש היא כתיבת הרשומות מחדש לפי סדר המפתת ובניית אינדקס
חדש בהתאם לכך.
מכיון שכל הרשומות מוחזקות לפי הסדר, אין צורך לרשום באינדקס את
הכתובת של כל רשומה, אלא צריך לרשום את המפתח הגדול ביותר בכל
מסילה. אינדקס זה נקרא אינדקס המסילה (א66%ם1 80%ע62>) והוא מספק
מידע עבור כל המסילות בגליל אחד. אינדקס מסילה מאוחסן במסילה
מספר אפס, בגליל שבו הוא משמש כאינדקס, ונראה כך:
מספר מספר מספר מספר
מפתתח מסילה מפתח מסילה מפתח מסילה מפתח מסילה
5 [
למשל, 400 הוא המפתח הגדול ביותר במסילה 3. מפתח הרשומה 700 הוא
המפתח הגדול ביותר בגליל.
נניח שרשומות הקוב תופסות יותר מקום מגליל אחד, אזי *ידרש
אינדקס נוסף עבור האינדקסים של המסילות. אינדקס זה נקרא אינדקס
גליל (א66ת1 0606%ם11ץ6) והוא מכיל את המפתחות הגדולים ביותר בכל
גליל. אינדקס גליל :יראה כך:
מספר מספר מספר מספר
מפתח גליל מפתה גליל מפתח גליל מפתח גליל
שו ו
למשל, בגליל 15 המפתח הגדול ביותר הוא 2000. אינדקס הגליל
מאוחסן בשטח (פרד שנקרא 8268 ת60םת11ע0.
לפעמים הקובא מאוד גדול ודרושים מאות גלילים כד*י לאחסן את
הרשומות. במקרה כזה נשתמש באינדקס עבור אינדקס הגלילים. אינדקס
כזה נקרא אינדקס אב (א66%םת1 ע₪8806). אינדקס אב מכיל את המפתח
הגדול ביותר המוחזק בכל מסילה של אינדקס הגליל.
יש כמה חסרונות בשיטת 154%:
א. 158% מטפלת בהוספת רשומות חדשות באמצעות שטחי גלישה, ז"א
הקצעת המקומות עבור הרשומות היא סטטית (יש שטח שמוקצה מראש
עבור רשומות חדשות). החיסרון בכך הוא שזמן גישה לרשומה בשטח
הגלישה הוא גדול, כיון שבשטחי הגלישה איתור הרשומה הוא
- 264 -
סידרתי וכאשר יש הרבה שרשור, זמן איתור הרשומה גדל. בנוסף
לכך, נדרש לבצע ארגון מחדש של הקוב%ף מדי פעם כד: ששטת
הגלישה לא יתמלא, דבר שדורש זמן רב.
ב. הגישה לרשומה לפי כתובת הגליל, כתובת המסילה ומפתח הרשומה
יוצרת תלות במבנה המערכת. לדוגמה, העברת רשומות למסילה חדשה
גורמת לשינוי כתובת הרשומות וגוררת שינויים בכל האינדקסים.
אם מעבירים את הקוב לדיסק חדש, יתכן שהמסילות לא תוכלנה
להחזיק כל כך הרבה רשומות כמו בדיסק המקור: ונצטרך לבנות את
הקוב מחדש.
כדי לענות על בעיות אלו פותחה שיטת 0584%8. שיטה זו מאופיינת כך:
1) להוספת רשומות חדשות משתמשים בשטחים ריקים שמוקצים למטרה זו
באופן דינמי, כפי שיוסבר בפירוט בהמשך.
2) שיטת 0528 אינה תלויה במבנה המתקן שעובדים בו, כיון שהשיטה
של סידור קבצים במערכת מבוססת על אחסון לוגי. כמו-כן, הגישה
לרטשומה היא על-ידי התייחסות לכתובת היחסית של הרשומה. כתובת
יחסית לא משתנה כתוצאה מהעברת רשומה למקום אחר במסילה.
שיטת 054% מאפשרת למשתמש ליצור 3 סוגי קבצים:
1) קובצ ₪995 (5668 2868 066מ50000 עעטתת) - זהו קוב סידרתי.
הרשומות מאוחסנות בקוב> לפי סדר הגעתן לקובף. רשומות חדשות
מתוספות לסוף הקוב.
2) קובץ פפתת (5668 2868 6עסספת3 )26180106 -- זהו קובף ישיר.
גישה לרשומות בקובף היא באופן ישיר.
3) קוב 8925 (58668 2868 50006066 צעְ6א) - זהו קוב אינדקס
סידרתי. הרשומות מסודרות בהתאם למפתח הרשומה. גישה לרשומה
בקובץ היא באופן ישיר וסידרת'.
3 יצירת קוב? אינדקס סידרתי
ברוב המחשבים חייבים ליצור קוב אינדקס סידרת* בשלב נפרד לפנ:
שמעדכנים אותו (כלומר, לא ניתן לבצע פעולות עדכון, כולל הוספת
רשומה לקוב שעד עכשיו היה ריק). מחשב א04 הוא יוצא דופן בכך
שהוא מאפשר הגדרה ועבודת עדכון באותו זמן.
ישנם שני שלבים עיקריים ביצירת הקוב והם:
א. מיון הקובצ בסדר עולה לפי השדה שישמש כמפתח ראשי של הקובא.
מיון זה צריך להעשות על-ידי המתכנת כהכנה לבניית קובף א*נדקס
סידרתי בשפת קובול. מיון זה נחוצ בגלל שרשומות הקובא מוחזקות
בשטח הנתונים בסדר עולה. הקוב הממויין הוא קובף הקלט המיועד
לשלב ב'.
= 265--
ב. בנית מערכת האינדקסים. בונים אינדקס המבוסס על המפתח הראשי,
כדי שאפשר יהיה לגשת לרשומה באופן ישיר לפי המפתח הראש:
ובונים אינדקסים המבוססים על מפתחות משנ*יים, כדי לאפשר גישה
ישירה לרשומות הקוב גם לפי מפתחות משניים. שלב זה מתבצע
באופן אוטומטי על-ידי קובול בזמן יצירת הקובצ.
הערה: בזמן יצירת קוב אינדקס סידרת* חייבים לבחור את השדה
שישמש כמפתח במועד מאוחר יותר. מפתח ראשי (צ%6 עעהמ1עק) חייב
להיות יחודי (ז"א שאין יותר מרשומה אחת בעלת אותו ערך של המפתח)
עבור כל רשומה. מפתה משני (צַ28 808ת81662) אינו חייב להיות
יחודי.
להלן נציג דוגמה לבניית קוב אינדקס סידרתי. נניה שבשלב א'
התבצע מיון בתכנית נפרדת באמצעות פקודת 5081 לפי השדחה-פהספנא
% (שישמש כמפתח ראשי של הקוב>).
ביצוע שלב ב'. הדברים הבאים מתבצעים עבור קריאת כל רשומה מקובצ
הקלט:
א. הרשומה הנקראת מועברת לתוך שטח רשומת קובצ האינדקס המתואר ב-
פץ, ז"א ערך מפתח המיון מועבר לשדה שישמש כמפתח הרשומה הראש:
ואחר-כך מתבצעת העברת שאר השדות ברשומה (ביניהם ערכים של
מפתחות משניים) לרשומת קוב האינדקס.
ב. כתיבת הרשומה בקובף האינדקס (הפקודה מַדַזַ₪).
התהליך מטתיים כשהגענו לסוף קוב הקלט.
המבנה של פקודת שַעַזַתַ₪ לכתיבת רשומה בקובף> אינדקס סידרת':
[5806-520₪ 730%] 8ות65ת-0₪ת5 מצדתט
[178תש-2א] 8%6כת₪15 עצמא פד הטאד
התנאי צטא 411/א1 מתקיים כשערך מפתח הרשומה הנכתבת אינו גדול
מערך מפתח הרשומה שנכתבה לפניה, מכיון שהתכנית יכולה לבנות את
הקובץ רק אם הרשומות מסודרות בסדר עולה לפי ערך המפתח הראשי.
בהגדרת קוב הפלט, שהוא קובף האינדקס הנוצר, חייבים לצי:ן
בפקודת א45510... 51,007 את הדברים הבאים:
א) אופן ארגון הקוב הוא ארגון אינדקס סידרת':
מטאטפאז 15 א124110א תס
ב) השדות שישמשו כמפתחות הרשומה במועד מאוחר י*ותר:
עבור מפתח ראשי (רשום 1תפ8ע2-ת₪81+6080 15 עמא פמססטת.
עבור מפתח משני נרשום צ1תה18ש-ת₪8+0080 15 צמא מצבאתטדךזה.
כדי להתיר רשומות כפולות במפתח משני, ז"א רשומות שמכילות אותו
הערך של המפתח, חייבים להוסיף את הביטוי: ₪5ש7ב16קטכ זד1ח.
- 266 -
שיטת הגישה (06ת6% 2600898) מתייחסת לדרך שבה ניגשים לרשומות
הקוב>. נראה בהמשךך שבזמן עדכון קוב> אינדקס סידרתי הגישה היא
אקראית. לעומת זאת, בזמן בניית הקובף הגישה היא לפי סדר הרשומות
בקובצ החדש. מומלצ להוסיף את הביטוי המדגיש עובדה זו: 200855
15 מססא, על אף שהוא אינו נחוצ, כי גישה סידרתית היא
ברירת המחדל.
תכנית דוגמה. תכנית זו יוצרת קוב אינדקס לאחר שכבר בוצע מיון
קובצ הקלט לפ* השדה 861ע62-516סַט0א-16עַ88ק-עה8ק15א. כעת נותר רק
לבנות אינדקס עבור כל רשומה.
.ם2101510 ב012108010ת166 (1)
. 9102861-א06ת%006%2-1-6%2128%? .16-םהעשסעק (2)
. '616%.28%א' 10 ב581₪ 86181-8616% 561666 (10)
'616%.280ק' 10 ם45518₪ 616%6-086181ק 561666 (11)
48 15 ב128010ת0228 (12)
1 185 20008585 (13)
)18( 366026 86 15
.ת1910ט1כ2 2868 (15)
.ת560%10 116ק (16)
1 פע (17)
.1 36002685 1.8061 (18)
רפת | 01 (19)
. (9)2 16ק 8 022 (20)
.(9)8 210 8%61ע16-916ע8ק-15082א 02 (21)
. (18)א 16ק 02 (22)
9 סנק 9-1 02 (23)
. (9)3 16ק 086-128 02 (28)
.9 שסצנ 8 02 (25)
סצק [1.6020068-60120% 02 (26)
31 "פע (27)
.1 6₪6תג 6002068 1,061 (28)
.616%ק->המטתפסת | 01 (29)
.(9)2 16ק 8 02 (30)
. (9)8 16ק ס1עפק-ע1508/ 02 (31)
. (18)א 16ק 1% -טטסץ 02 (32)
9 0ס6צ 1-ו 08 02 (33)
. 500828%6 8ת16861 תהש51
.(9)3 16ק 18288-60068% 02 (38)
.9 שסצק 8 02 (35)
16 ב16620668-0%ע1ת%60 02 (36)
.ת560010 5002886-שת1אעסט (37)
.סט 01 (38)
.'10' 6טש781 (3)א 16ק שפ-4076%2-+50 02 (39)
. 'תסא' 0816 12 88 (80)
- 207 =
.ם1510ט1ק 6עט0606ק (81)
. נתפפת (82)
. 18600818 מתעס+עסק (83)
46 מע 0ס+עסק (48)
.4 11ס6חשם (85)
.שגפ ₪ע0ס+??0ק (86)
.תטת 5600 (47)
.8 (488)
1 שנצטפם1 ת006 (89)
. 81 61/-616%ק2 01606 (50)
.טפס (51)
% רפס ס%6ת1 6181-%616% 3686 (52)
.שפ-652ט%0-+502 170 'ת6א' סטסא 6תם 46 (53)
2 ססמא 18 (58)
%6שירטטתפסת 160ע (55)
עס% 81186טמך (56)
.'אין אפשרות לכתוב רשומה זו בקובף' 218018
.91 (57)
. 6181-2616%, 86181-%616% 01088 (58)
הסבר:
שורות 12-1%: מציינים שהמבנה הלוג* של ארגון הקוב> המיוצר הוא
אינדקס סידרתי. הגישה אליו היא סידרתית לפי סדר המפתח הראש*
שהוא השדה 16ע8ק%13082-2 (שלפיו הקוב מו:יין).
שורה 39: שפ-6%2ט0א-+50 מהווה דגל המסמן שהגענו לסוף קוב הקלט.
שורות 42-47: קטע העיבוד הראשי מחולק ל-3 חלקים:
א. התחלה; ב. עיבוד כל רשומה; ג. טיום.
שורות 51-56: קטע העיבוד שמתבצעות בו הפעולות העיקריות הבאות:
א. העברת הרשומות מקובצ הקלט לשטת רשומת קוב אינדקס סידרת:*
(שורות 52-53).
ב. כתיבת רשומות אלו בקובצ אינדקס סידרתי (שורות 55-56).
שורות 57-58: טסגירת הקבצים.
- 268 -
141 שיטות גישה לקבצי ז
מציינים שרוצים לעבוד עם כ בף אינדקס על-ידי הוספת 618086
לפקודת א45510. . .₪01 501:
1%201ת: מסג8 10 א29510 662ט0א-םשסת5 07ם, וסט
קטאטפאת 15 א2710 א
ו
את 15 מפסא 400855
6האצת
בתפע-ת₪820080 15 עצמא פתססמת
זו ] 1תת15ש-ת₪820086 18 צטא פתססמת מךהאתסדוה ]
. . . [ 10847₪5.זסטס
[38%00662(-₪86280 15 574705 מ דע]
הביטוי קטאמפא1 15 א12110א0₪04 הכרחי כדי לציין שעובדים עם
קובצ אינדקס סידרתי, הביטוי השני (15 8028 400₪55) מפרט את אופן
הגישה לרשומות בקוב+ (סידרתי, אקראי, דינמי). נפרט להלן את
המשמעות של כל אחת מהגישות השונות:
א. גישה סידרתית (0ם712א008מ5 158 מפסא 60888סת)
קריאת רשומה. בגישה סידרתית אפשר לקרוא רשומות מתחילת הקוב
באופן סידרתי בסדר עולה לפי המפתח הראש* או לפ: המפתח המש(:
בעזרת הפקודה כפאם 817...תעגמת. כל פקודת כפגמת מקדמת מצב*ע המורה
על הרשומה הבאה, כדי שפעולת פעגמת הבאה תקרא את הרשומה הבאה.
הפקודה ממשיכה להתבצע עד שהתנאי פאע 1 מתקיים.
כדי להשתמש בפקודת ₪2 חייבים לפתוח את הקוב בעזרת הפקודה
עשפאז אמק0 (המאפשרת קריאה בלבד ולא כתיבה), או בעזרת הפקודה
0 0% (המאפשרת קריאה וגם כתיבה מחדש של אותה רשומה שעכש:ו
קראנו).
אפשר להתחיל את קריאת הקוב מרשומה מסוימת בעזרת הפקודה לַתג51,
בעלת המבנה הבא:
2 תס
0
| 080-808 +₪8- 50 אוזוד תח 5 עסא |
אהזוד מז סא
> דסא
[5741-פא] 150286 עצמא 18הטאד
- 269 -
88גות8205ת-ת8/00806ם-0₪ת8 *כול להיות שדה מפתח ראשי, או שדה מפתת
משני (כלומר השדה המיוחס בביטוי: 15 עצמא פתס0סמת או בביטוי:
5 צמת פתססטת מצגאתטך]ןה), או שם שדה המרכיב את החלק השמאלי של
שדה המפתח. בדוגמה להלן אמטתפסת-60080+הע-0₪ם5 יכול להיות
השדה ת896680א, או השדה ם61-88%0680ת56₪811-5-6616%.
- 6580-0062 01
. 00801+?8 02
. (3)א 6 ב8960860- 50₪811-5061-05616% 93
. (2)א 6 ב8+6080]/- 5061- נתהנסצ-0610% 03
כדי להתחיל את הקריאה במקום מסוים משתמשים בפקודה 80 כד:
להכניס ערך ל-השת8265ת-0680 50-84 ומיד מבצעים פקודת 578281.
פקודת הקריאה קגמת שתהיה אחרי ביצוע הפקודה 81ג51 תחול מהרשומה
הראשונה שמפתח הרשומה שלה (ראשי או משני) מקיים את התנאי בביטו:
5 צסשת המתואר בפקודה 81ג51. כל קריאה שמבוצעת אח"כ, תקרא את
הרשומה הבאה לף: סדר המפתחות. אם לא נמצאה אף רשומה בכל הקוב
המקיימת את התנאי, יתבצעו המשפטים המופיעים אחרי הביטוי פדוג/אדך
צמת. אם לא נרשם הביטוי 15 צשא, המפתח הראשי יהיה המפתח לביצוע
הפקודה וברירת המחדל עבור התנאי 15 צשטא תהיה ₪004.
שים לב כי הפקודה 511 אינה מבצעת קריאת רשומה, אלא רק ממקמת
את המצביע, כך שפקודת פגמת הבאה תתבצע מן הרשומה הראשונה
שמקיימת את התנאי בפקודת 5187. בנוסף, גם לביצוע פקודה זו חייב
הקובצ להפתח בפקודת צַטפא1 א₪פ0 או 1-0 אםק0. אם לא כוללים את
הביטוי 15 עשא, ברירת המחדל עבור התנאי היא: ₪004 198 צסא.
שינוי ערכי שדות ברשומה. בגישה סידרתית ניתן לשנות את תוכן
השדות ברשומה על-ידי שימוש בפקודה:
[5866-מ6ת5 20%] המטהתפסת-02ת5 מדדתטסת
[מדחוומת- פא ] 86ת₪15 צטא פדתהטאד
כדי להשתמש בפקודת מ11תאמת חייבים לפתוח את הקוב ל-1-0 (כיון
שגם קוראים את הרשומה (%טסת1) וגם כותבים אותה מחדש (סטססטס) עם
שינויים באותו מקום שממנו נקראה). לפני ביצוע הפקודה מצדתשמת
חייבת להתבצע הפקודה פגמת הקוראת את הרשומה שאותה רוצים לשנות.
מעבירים את הערכים החדשים של השדות לשדות הרשומה המופיעים ב-פק,
ומיד אח"כ ניתן לבצע את הפקודה מדדתשטת.
התנאי צטא פ41/א1 יתקיים כאשר ערך מפתח הרשומה עבור הרשומה
שרוצים להחליף אינו זהה לערך מפתהח הרשומה האחרונה שנקראה
מהקובצ. (הדבר יכול לקרות אם שינינו את ערכו של שדה המפתח בין
פקודת עגמת3 לפקודת מצזתשאמת).
מחיקת רשומה. אפשר למחוק רשומה בגישה סידרתית בעזרת הפקודה:
2 00602א-6₪ת5 שד ומת
- 270 -
הביטדי צשא פ1/גטאד אינו מתאים, מכיון שההתקדמות היא באופן
סידרתי לפ סדר המפתח. כדי להשתמש בפקודת מ7ט/מע הייבים לפתוה
את הקוב ל- 1-0. לפני ביצוע הפקודה ₪78₪/מק חייבים לקרוא לרשומה
שרוצים למחוק.
הערה: אם רוצים שפעולת שינוי או מחיקה תתבצע על רשומה מסוימת,
אפשר לבצע תחילה 51881 כדי למקם את המצביע ברשומה הרצויה ואח"כ
לבצע את הפקודות עגמת ו-מצ1תאעת, או מעשטס.
הוספת רשומות. נ*תן להוסיף רשומות חדשות בעזרת הפקודה:
[ 526-5886 2008] המטתפסע-6₪ת5 מדדתשט
[מד1ו-פאם ] 8%6קת15ם צשא פד,]הטאד
כדי להשתמש בפקודה ₪178 הייבים לפתוה את הקוב בפקודה אםק0
צעטפצטס או 1-0 אמק0. מציבים ערך יחודי בשדה המפתח הראשי של
הרשומה שרוצים לכתוב. כמו-כן, מציבים ערכים בשאר שדות הרשומה
ומיד אחר-כך מבצעים 3₪17₪ח. בגישה סידרתית כתיבת הרשומות חייבת
להיות בסדר עולה לפי ערך המפתח הראש'.
התנאי צטא פ411/א1 יתקיים במקרים הבאים:
1. כשערך המפתח הראש* של הרשומה הנכתבת אינו גדול מערך המפתה
הראשי של אחת מן הרשומות שנכתבה כבר בקובף.
2. כשנעשה נסיון לכתוב רשומה שאחסונה תגרום לחריגה מהמקום
שהוקצה עבור הקובא.
ב. גישה אקראית (אספאתת 158 שפסא 5פ5עססת)
קריאת רשומה. בגישה אקראית יש להכניס ערך של מפתח הרשומה (הראש:
או המשני) שרוצים לקרוא לשדה מפתח הרשומה (הראשי או המשנ'),
ואח"כ לקרוא את הרשומה (פקודת כגמת). כדי להשתמש בפקודה פגמה,
הקובצ חייב להפתח בפקודה צטסקא1 אמפ0, או 1-0 אמק0. מבנה פקודת
הקריאה:
[ 5866-0₪ת5 170א1 ] 20082 662ט60-ש6ת5 פגחת
[ המטתפסהת-ת₪826080 15 לטא]
[פגמת-פא] 8%כת₪15 עצמא פ1הטאד
פקודה זו מאפשרת לקרואה כל רשומה בקובף בגישה ישירה. השדה
מנגותפסיהת-ת₪820680 בביטוי 15 צא% יכול להיות מפתח המוזכר
בביטוי צשא פת0ס6מת, אם גרצה לקרוא רשומה לפי מפתח ראשי. הוא
יכול גם להיות מפתח שמוזכר בביטוי צשא מזגאתם1, אם נרצה לקרוא
רשומה לפי מפתתח משני. אם משמיטים את הביטוי 15 צשא, ברירת המחדל
היא קריאה לפי מפתח ראשי. התנאי צשא 8012/א1 יתבצע כשלא נמצאה
הרשומה בקוב> - ז"א, כאשר אין זהות בין הערך של מפתח הרשומה
שרוצים לקרוא לבין מפתח של רשומה כלשה* בקובף.
- 271 -
הערה: הפקודה 91881 אינה מותרת בגישה אקראית.
שינוי ערכי שדות ברשומה. בגישה ישירה ניתן לשנות את תוכן השדות
ברשומה על-ידי הפקודה:
[5866-0₪ת5 240%8] המטב265-6₪ת5 מדדתטמת
[מד'דתמת- פא ] 8%קת15ם צמא תךד,הטאד
כדי להשתמש בפקודה 118העת חייבים לפתות את הקוב ל-1-0. מציבים
ערך בשדה המפתח הראשי של הרשומה שרוצים לשנות. הרשומה שתוחלף
היא הרשומה שהמפתח שלה מתאים לערך שנמצא בשדה המפתח הראש*.
מעבירים את הערכים החדשים של השדות לשדות הרשומה המופיעים ב-עק
ומיד אח"כ ניתן לבצע את הפקודה מע[חאפת. כדי לעדכן רשומה בעלת
ערך מסוים לף: המפתח המשני, חייבים לקרוא תחילה את הרשומה לפ:
המפתח המשני, להעביר את הערכים החדשים של השדות לשדות הרשומה
המופיעה ב-כתק ומיד אח"כ לבצע את הפקודה מע[תשמת. התנאי פדמהטאד
צטא יתבצע כשאין זהות בין הערך שהוצב עבור שדה המפתת, לבין ערך
של אף לא אחד מן המפתחות של הרשומות אשר בקוב.
שים לב: לפני ביצוע מעתשסת לפי ערך של המפתח הראשי, מומלצ לבצע
עגמה הקוראת את הרשומה שרוצים לשנות.
מחיקת רשומה. אפשר למחוק רשומה בגישה אקראית בעזרת הפקודה:
0 508-8006005 חים, וטס
[שזש,מק-2א2] 86פם15ם צסא פד הטאד
כדי להשתמש בפקודה שמת חייבים לפתוח את הקוב ל-1-0. מעביריס
את ערך המפתח של הרשומה שרוצים למחוק לשדה המפתח של רשומת הקוב
המתואר ב-פק. אחר-כך ניתן לבצע מעש/מת. התנאי צמא פדעגעטאד
יתקיים כשהקובצ אינו מכיל רשומה בעלת ערך מפתח זהה לערך של
המפתח שהועבר לשדה מפתח הרשומה. כדי למחוק רשומה בעלת ערך מסוים
של המפתח המשני, חייבים לקרוא תחילה את הרשומה לפי המפתח המשנ:
ומיד אח"כ לבצע את הפקודה מ זטת.
שים לב: לפנ: ביצוע ₪78ז8ת לפי הערך של המפתה הראשי, מומל
לקרוא את הרשומה שרוצים למחוק.
הוספת רטומות. הוספת רשומות חדשות בגישה אקראית נעשית בעזרת
הפקודה:
[5866-536₪ 200%] המטתפסתפת-מ6ת3 מדדתט
[מדדת- פא ] 0% צפא פ1הטאד
כדי להשתמש בפקודה מצנתט הקוב> חייב להפתח בפקודה 2ש0צט0 אמסס,
או בפקודה 1-0 אמק0. תחילה מציבים ערך יחודי בשדה המפתח הראש:
של הרשומה שרוצים לכתוב. כמו-כן, מציבים ערכים בשאר שדות הרשומה
ומיד אח"כ מבצעים 17₪זא0. ביצוע הפקודה מעביר את הרשומה החדשה
למיקומה הלוג* הנכון באותו קוב.
- 212 -
התנאי צטא פ1/עא1 יתקיים במקרים הבאים:
1. ערך שניתן עבור שדה המפתח הראשי זהה לערך המפתח הראשי של
רשומה כלשהי הקיימת בקובף.
2. נעשה נסיון לכתוב רשומה שאחסונה יגרום לחריגה ממקום האחסון
שהוקצה לקובף.
ג. גישה דינמית (6זאתאצתע 5 מספסא 58עססת)
גישה דינמית משלבת את היתרונות של גישה סידרתית ואקראית גם יחד.
ז"א, ניתן להשתמש בפקודות סגמת, מצדתא, [תג51, מדדתוסת, מדם סק
כמו בגישה סידרתית וגם ניתן להשתמש בפקודות שךד[תשתת, מעם מס
,עגמת, מענחח כמו בגישה אקראית. הבעיה היחידה שמתעוררת היא
בנושא הקריאה. היות והפקודה כעגמת מאפשרת גם קריאה סידרתית וגם
קריאה אקראית, איך נדע איזה סוג קריאה רוצה המתכנת לבצע? התשובה
לשאלה זו היא מלה מיוחדת - ?אמא - שהוסיפו לפקודת עגמת, כד:
לציין שבוחרים בקריאה סידרתית ולא בקריאה אקראית.
מבנה הפקודה כגמת עבור קריאה סידרתית, הכוללת את המלה צ+אמא:
[5866 10א1] כת00טת [אמא 602ט0א-0₪ת5 פגחת
[סגמת-כאם ] 8%קת15ש פאס 7ב
המבנה של הקריאה האקראית נשאר כמו שהיה (בלי דאמא) ועם הביטו:
צטא 15הטא1, כמתואר להלן:
[5866 10א1] 3₪0082. 662ע0א-6₪ב5 פגמת
[ 88וה098ע2-ת₪896680 15 עשא]
[עגמת-קאם] 8%6כבת15ם עשא פדהטאד
הערה: אם מבצעים קריאה אקראית בגישה דינמית לפי מפתח ראשי או
מפתח משני משתמשים בביטוי 15 צשא, אזי אחזור הרשומות בקריאה
הסידרתית הבאה אחר-כךך יהיה לפי המפתח הראשי או המשני שנקבע
בקריאה האקראית הראשונה. בקריאה אקראית וסידרתית בגישה דינמית
ללא שימוש בביטוי 15 עמא, אחזור הרשומות יהיה לפי הערך של המפתח
הראשי.
שים לב: בדרך כלל נשתמש בפקודה 5111 (ולא בפקודה כגמת אקראית)
כדי להתחיל את הקריאה מרשומה מסוימת. אח"כ נבצע פקודה ספגמת
סידרתית (כמו שתואר בגישה זו) אם נרצה לקרוא מרשומה מסוימת
בקובצץ באופן סידרת'.
- 273 -
טבלת סיכום של האופציות השונות בשיטת ארגון יא'ינדקס סידרת'
מופיעה להלן:
צורת פתיחת הקובצ
שיטת הגישה פקודה
וו שדט, זט
(סידרת') פהגמת כן לא כן
זט
זתהס
מעזתט
מש זט
עגפת
שדזתאנת
מז
סאה אצת מש זט
(דינמי) פגמת כן לא כן
מדדתאפת
דתגדס
מדזתט
צאמא פגמת
מפתחות. בשדה 1ג288-ת₪8+6080 שמופיע בביטוי עמא כתססמת (שהוא
חלק מפקודה א45510. .581.₪07) מפורט השדה שמשמש כמפתח ראשי של
הרשומה. המפתח הראשי של הרשומה חייב להיות שדה מתוך הרשומה של
הקובצ, המתוארת ב-כע. מפתח הרשומה חייב להיות יחודי - ז"א, ערך
זה חייב להיות שונה מערכם של המפתחות הראשיים של רשומות אחרות
המופיעות בקובצ. לדוגמה, מספר תעודת זיהוי הוא מפתח יחודי המזהה
את הרשומה עם הפרטים של אדם מסוים. לכל אדם יש מספר תעודת זיהו:
שונה מזה של אדם אחר, ולכן מזהה מספר זה באופן חד-משמע את
הרשומה. גם מספר פריט הוא מפתח יחודי, לכל מוצר במפעל יש מספר
פריט שונה ממספרו של כל ממוצר אחר, ומספר זה מזהה את המוצר
באופן חד-משמע'י.
דוגמה למפתח לא יחודי (מפתח כפול) היא מקום ישוב כמו עיר ששמה
ירושלים, כיון שגרים בירושלים אנשים רבים. תיאור פריט של מוצר
הוא מפתח לא *חודי, אם קיימים מוצרים רבים שמתוארים בשם זה.
לדוגמה, תיאור פריט של מוצר במפעל יכול להיות מצבר. קיימים
מוצרים אחדים הנקראים "מצבר".
בשדה צתת15ש-ת₪8+0080 המופיע בביטוי צטא פתססמת מעבאתקה]זה
שבפקודה א5₪/₪07...45510 מציינים את השדה שמשמש כמפתח המשני של
הרשומה. השדה 1צתת15ש-ת₪8+0680 חייב להיות שדה מתוך הרשומה של
הקובף, המתוארת ב-כע. מפתח משנ' אינו חייב להיות *הוד'.
כשכותבים 164785.סטת 118 בביטוי עצמא כתססמת מדהאתעץ]ה, מאפשרים
- 27% =
מצב שהמפתחות המשניים ברשומות הקוב לא יהיו יחודיים - ז"א,
מאפשרים מצב שערך זהה של המפתח המשני *ופיע במספר רשומות שונות
בקובצ. השמטת הביטוי 104785קטע ₪118 גורמת לכך שגם המפתח המשנ:
חייב להיות יחודי. מותר שלרשומה אחת יהיו מספר מפתחות משניים.
בדיקת מצב הקובצ (518105 2118). לפעמים נרצה לדעת מה היתה הסיבה
שאחת מן הפקודות עגמת, 01055, אמקס, מעקעתא, מדנתטאתת, שתבשפ
לא התבצעה בהצלחה. לדוגמה, נניח שפקודה 8ך17וח לא התבצעה
בהצלחה ולכן מתבצע הביטוי עטא פ0/41א1. הסיבה לאי ביצוע הפקודה
תא אינה ידועה לנו. אולי הסיבה היא שהערך של המפתח הראשי של
רשומה שכותבים זהה לערך המפתח הראשי של רשומה כלשהי הקיימת
בקוב>, ואולי הסיבה היא שהתכנית ניטתה לכתוב רשומה שאחסונה גרם
לגלישה מעבר למקום שהוקצה עבור הקובא. כדי לדעת את הסיבה
המדויקת | אפשר להשתמש בביטו: ו טמוק שבפקודה
א...07מפ. המבנה הכללי של הביטוי 9141085 שמזק מתואר
להלן :
2 175 574105 ₪,זדק
המשתנה שַס6טְסאַַת-₪86280 שבביטוי 518105 מ/זק חייב להיות מוגדר
כ-2 תווים אלפאנומריים (אא 10ק) ב-א5₪0110 6-5108408א1אתסט. שני
תווים אלו יקבלו ערכים בזמן ביצוע אחת מן הפקודות הנזכרות
למעלה, הצלחה בביצוע אותה פקודה תגרום לכך שבמשתנה ש8%528ם-
2 יי*וצב ערך '00'. אי הצלחה של פקודה מסוימת תגרום לכך
שבמשתנה אסַ6ט0א8ת-₪86280 יוצב ערך אחר. המשמעות שניתנת לערך .זה
בזמן ביצוע הפקודה שונה בכל מחשב. ניתן לבדוק את ערך המשתנה
2 בכל מקום בתוך חטיבת הביצוע ולבצע פקודה מסוימת
בהתאם. מומל%> לבדוק משתנה זה מיד אחרי ביצוע כל אחת מהפקודות
הכוללות את הביטוי צמא כ1הטא1 -- מצדתשסת ,מצדתא, כגמת ,מדם וט
57 - כדי לדעת את הסיבה המדויקת של הבעיה, אם הפקודה לא
הצליחה. כמו-כן, אחרי פקודה כפגמת סידרתית מומלצ לבדוק את ערך
המשתנה <סַ6טְ0ַאַת-ש₪8028 כדי לראות אם ניסנו לבצע פקודה סגחת
אחרי שכבר הגענו לסוף הקובף. גם אחרי כל פעולת פתיחה או סגירה
כדאי לבדוק את משתנה המצב, כדי לדעת אם פעולות אלו התבצעו
כראוי.
להלן דוגמאות לערכים שונים שיכול לקבל המשתנה <ַס6ַסטסאַם-טַ628אם.
המספרים אמורים להיות סטנדרטיים, חוצ מן המספרים שהם 90 ולמעלה.
(1) מצב הצלחה (ספרה ראשונה של 0)
- ערך '00' - הצלחה בביצוע אחת מן הפקודות משזמת
,1 מדדתאמת ,מצדתא ,אמקס, 01058, פגמת.
- | ערך '02' - הצלחה בביצוע הפקודה מצנחאמת או מדזתח.
נוצרה רשומה בעלת מפתח משני שכבר קיים. מצב זה א*נו
מצב שגיאה, כי בזמן יצירת הקוב כללנו את הביטו:
טע ₪171 המרשה רשומות בעלות מפתחות משנ:
כפולים.
- 275 -
(2) מצבי שגיאה
₪ ערך '13' - ניסיון לקרוא רשומות באופן סידרת* אחר*
שהמצביע הגיע לסוף הקוב.
- ערך '22' - נסיון לבצע ₪שצ1תא של רשומה שערך המפתת
הראשי שלה כבר קיים בקובף, או פקודת שצזת₪ או
מיזאסת לרשומה שערך המפתח המשני שלה כבר ק*ים בקוב
(כאשר לא מאפשרים ערכים כפולים עבור אותו מפתח בזמן
יצירת הקובף).
- ערך '23' - ניסיון לבצע אחת מן הפקודות פגמת, מץ ומת
דתדפ, מדזתחסת עבור רשומה בעלת ערך של מפתח שלא
נמצא בקובף.
- | ערך '2%'- ניסיון לכתוב רשומה כאשר לא נשאר מקום
פנוי בקובף.
הערה: יש מהדרים שאינם מבחינים בעובדה שהוספנו רשומה בעלת מפתח
משני הקיים כבר. לכן מקרים שמובילים לקוד מצב של 02 או 22 לא
יאותרו וידווחו כמצב'ישל 00.
5 עדכון קובץ אינדקס סידרתי
כדי להעריך את הפשטות של עדכון קובץ אינדקס סידרתי, נחזור על
כמה פרטים שהיו חשובים בעדכון קובףצ סידרתי.
א. בתהליך העדכון צריך להשתמש בשלשה קבצים - קוב אב, קוב
תנועות וקובץ בן, שהוא הקוב המעודכן. קובצ הבן נוצר תוך כד:
תהליך העדכון.
ב. דרישת קדם לביצוע העדכון היא שהרשומות בקובצ התנועות תהי;נה
ממוינות לפי מפתח זהה למפתח של מיון קוב האב.
ג. בתהליך העדכון, עוברים על קוב האב וקובצ הפעולות מתחילתםס
ועד סופם כאשר משווים תמיד בין ערך המפתח בקוב האב לבין ערך
המפתח בקובף התנועות.
במשך ביצוע העדכון, מגיעים לאחד משלושת המצבים הבאים:
1. ערך המפתח של רשומה בקובצ האב גדול מערך המפתח של רשומה
בקוב התנועות. אי הופעתו של אותו מפתח בקובצ האב סמן שאותה
רשומה היתה חסרה עד עכשיו וברצוננו להוסיף אותה כעת על-:ד:
העתקת הפרטים המתאימים לקובצ הבן.
2. ערך מפתח הרשומה בקובף האב קטן מערך מפתח הרשומה בקוב
התנועות. במצב זה, היה עלינו להעתיק את הרשומה במלואה מקוב%
האב לקובצ הבן.
3. ערך מפתח הרשומה בקוב האב שווה לערך מפתח הרשומה בקוב
התנועות. שוויון זה סימן שרצינו לשנות את מעמד אותה רשומה
5 206 =
על-ידי שינוי של שדה אחד ברשומה (לפני העברתו לקובצ הבן), או
על-ידי מחיקתו (דהיינו אי העברתו לקובצ הבן).
כאשר מגיעים לסופוּו של אחד מן הקבצים, מכניסים לשדה המחזיק את"
ערך המפתח של אותו קובצ ערך מוגזם בגודלו. בכל ההשוואות הנותרות
מטפלים אך ורק ברשומות הקוב השני (זה שלא נגמר).
לעומת זאת, שיטת העדכון של קובצ אינדקס סידרתי היא כדלהלן:
א. בתהליך העדכון יש צורך להשתמש בשני קבצים בלבד - קוב האב
וקובצ התנועות. בתהליך העדכון אין יוצרים קובצ חדש. קובצ האב
נפתח בפקודה 1-0 אמק0 והעדכון נעשה בו עצמו.
ב. בביצוע העדכון לא נדרש שרשומות העדכון בקובף התנועות תהיינה
ממוינות.
ג. בתהליך העדכון עוברים רק על קוב התנועות באופן סידרת:
מתחילתו ועד סופו. מבצעים את פעולת העדכון הנדרשת בקובף האב
לפי מפתח הרשומה וסוג הפעולה המופיעים ברשומת קוב התנועות.
הוספת רשומה חדשה לקובףצ האב ה*א הוספת הרשומה במקום הנכון
בקובצ ופעולת המחיקה היא הסרת הרשומה מהקובף. פעולת שינו:
בקובצ האב היא העברת ערכים חדשים לשדות הרשומה וכתיבת הרשומה
באותו מקום שבו הרשומה היתה לפנ העדכון.
תהליך העדכון נגמר כשמגיעים לסופו של קובצ התנועות.
דוגמה. התכנית להלן מעדכנת קוב אינדקס סידרתי. בעדכון נפעיל
פעולה מסוימת (המצוינת על-ידי קוד הפעולה, או סוג התנועה, הנמצא
ברשומת התנועה) על רשומה מסוימת בקוב האב בעלת מפתח הנמצא גם
הוא ברשומת התנועה. שני קבצי הקלט עבור התכנית הם קובף האב
וקובצ התנועות.
בקובצ התנועות שישה סוגי רשומות, כאשר כל סוג מתייחס לסוג פעולה
אחר. בתחילת כל רשומה מופיע שדה אלפאנומרי בעל אורך של תו אחד
שתפקידו לזהות את סוג הפעולה (טס"פ) שתבוצע - עדכון רשומה בקוב
האב או הדפסתה. הערכים השונים שיכול לקבל שדה זה הם:
התו '8': מציין הוספת רשומה ('א8' משמעותו 10958+8).
התו 'א': מציין מחיקת רשומה ('א8' משמעותו 1%8ת860).
התו '1': מציין שינוי ערך בשדה כמות במלאי ('1' משמעותו
1-בטת1ת5).
התו '2': מציין שינוי ערך בשדה מחיר ליחידה ('2' משמעותו
2גותז1ת5).
התו '3': מציין שינוי ערך בשדה מכירות לחודש ('3' משמעותו
1-3טת1ת5).
התו '2': מציין הדפסה טידרתית. ההדפסה תהיה מרשומה מסוימת
בקובצ האב עד רשומה אחרת באותו קוב כמצוין ברשומת
פעולת ההדפסה ('ק' משמעותו 88602888).
- 271 -
קוב> אב (286.
שג) לפני העדכון (הרווחים הוספו לצורך הבהרה):
מכירות מחיר נקודת כמות תאור מספר קוד
לחודש ליחידה הזמנה במלאי פריט פריט מחלקה
0 01155 0430 035 בוקסה 3% 7 11 (1)
0 02068 067 100 ברגים 8 111 (2)
0 00335 050 200 מפתח 9/16 3 111 (3)
90 300160 020 013 ג'ק 8 127 (ף5)
0 15606 200 300 צמיג למכונית ]2067000 12 (5)
1 ((12388 090 012 אבוב 7 1223 (6)
3 20033 020 011 צמיג למשאית 9 12 (ך)
0 50006 100 280 סטרטר 65 -13 (8)
0 03625 010 020 פלג 34 8 133 (9)
096 10000 050 390 מצבר 123 7 131 (10)
0 10000 050 390 מצבר 123 7 13 (11)
0 10000 0950 390 מצבר 123 8 122 (12)
0 10000 050 390 מצבר 123 9 133 (13)
08 100060 090 390 מצבר 123 0 11 (18)
0 10000 050 390 מצבר 123 1 12 (15)
90 10000 050 390 מצבר 123 2 133 (16)
5 075555 030 130 מצבר 200 5 3 (17)
קובצ התנועה (28%6.פת728):
סוג
הפעולה
2 01053 012 010 מפתח 3/4 00056156 11 ג (1)
9 6 (2)
0 20323612 - 1 (3)
5 19800003 - 2 (5)
0 30016 010 013 צמיג 35 20223612 12 8 (5)
0 206700077 | 3 (6)
4 18042077 1 (7)
3 29012089 2 (8)
7 34208905 | :₪ | (9)
1 35208190 - 1 (10)
0 100060 050 390 מצבר 123 ]3695008 13 ₪8 (11)
6 א (12)
8 |" (13)
תיאור
5. ברשומה המיועדת להוספה (שורות 32-86,
תוכן
(שורות 47-89, ס"פ 'א') אין צורך שיירשם תוכן
מפורט של סוגי רשומות התנועה השונות מופיע בתכנית בשורות
ס"פ
'א') ,
ירשם
השדות העתידים להיות ברשומת קובצ האב. ברשומת המחיקה
כל השדות,
אלא
מספיק לרשום את מספר הרשומה (ערך המפתה 6ע8ק-15082/) שרוצים
למחוק. ברשומות המת*יחסות לשינויים בכמות במלאי (שורות 50-53,
ס"פ '1'), במחיר ליחידה (שורות 58-57, ס"פ '2') ובמכירות לחודש
(שורות 58-61, ס"פ '3'), יירשמו מספר הרשומה (ערך המפתה-ע8קפ1א
%נעפק) המציין איזה רשומה לשנות והשינוי החדש בשדה שרוצים לשנות
(כמות במלאי, מחיר ליחידה, או מכירות לחודש, בהתאמה). ברשומה
5 208 =
המתייחסת להדפסה (שורות 62-65, ס"פ 'ק'), נרשום את מספר הרשומת
הראשונה (ערך המפתח 16ת82-28ק18א) ואת מספר הרשומה האחרונה
שמבקשים להדפיס.
בתכנית זו ישנם שלושה קבצי פלט:
א. קוב הבן (28%6.ש4) לאחר העדכון.
מכירות מחיר נקודת כמות תאור מספר קוד
לחודש ליחידה ה%מנה במלאי פריט פריט מחלקת
2 8 012 010 מבתח 3/8 6 11 (1)
0 0206868 067 100 ברגים 8 11 (2)
0 5 0506 200 מפתח 9/16 3 111 (3)
08 30010 010 013 צמיג 35 2 12 (5)
0 30010 010 150 ג'ק 8 17 (5)
08 156060 200 300 צמיג למכונית 20670007 12 (6)
1 1238889 090 012 אבוב 7 123 (ך7)
3 211333 0 011 צמיג למשאית | 29082089 12 (8)
08 500060 100 280 סטרטר 65 133 (9)
2000 5 010 020 פלג 3% 8 133 (10)
08 100060 050 390 מצבר 123 7 13 (11)
08 100060 050 390 מצבר 123 7 133 (12)
0 100060 050 390 מצבר 123 8 12 (13)
0 10006 050 390 מצבר 123 9 133 (18)
0 100060 050 390 מצבר 123 0 11 (15)
0 10006 050 398 מצבר ,123 1 12 (16)
0 10006 050 390 מצבר 123 2 13 (17)
5 "07555 080 130 מצבר 200 5 133 (18)
ב. קובצי דוח התנועה (רגיסטר). קוב זה מכיל דוח על התנועות
שהופעלו על קוב האב במהלך התכנית:
אם פעולת הוספה התבצעה בהצלחה, *יירשם בקובף דות התנועה
סוג הפעולה וכל שאר פרטי הרשומה שמופיעים ברשומת קוב
התנועות.
אם פעולת מחיקה התבצעה בהצלחה, *ירשם בקובף דוח התנועה
סוג הפעולה וכל שאר פרטי הרשומה שהופיעו ברשומת קוב האב
לפני מחיקתה.
אם פעולת שינוי התבצעה בהצלחה, תרשם הרשומה לפנ* השינו'
ואחר'ו.
אם פעולה נכשלה מסיבה כלשהי, *ירשם סוג הפעולה, סיבת
הטעות וכל פרטי הרשומה שמופיעים בקובא התנועות.
אם סוג הפעולה אינו מזוהה, יירשם קוד הפעולה השגו*, מספר
הרשומה (ערך המפתח 8216ת-15082/) וסיבת הטעות.
אם סוג הפעולה הוא הדפסה, :ירשם סוג הפעולה וטווח ההדפסה
ממספר הרשומה הראשונה להדפסה עד מספר הרשומה האחרונה
להדפסה.
ג. דוח מודפס. רשומה מקובא ההדפסה כוללת את השדות המופיעים
בקוב האב. אם יש יותר מפעולת הדפסה אחת, הרשומות המיועדות
להדפסה תופענה בדוה זה אחת אחר* השניה לפי הסדר של פעולות
ההדפסה בקובף התנועות.
- 279 -
להלן תאור קובף דו"ח הפעולות (
:) 1 .
מבירות מהיר נקודת כמתות האור
לחודש יחידה הזמנה במלא' ברים עוד. בעולה
1.2 % 12 18 מנתח 3/4 11 הוטכה
9 155 40 35 נוקטה 34 ו מח'קה
8 99.8 18 13 ג'ק 2 לכבני שינו' בכמוח המלא'
8 5 30089 10 158 ג'ק 2 אחרי שי!!' בכמות המכאי
1.(.0 5 55 20 מבתח 9/16 וו לבנ' ש'נוי במחיר ליחידה
11.8 5 555 20 מבתח 9/16 וו אחר' ש'נוי בתת'יר ליח'דה
8 5 300808 18 13 צמיג 35 12 הוטכה
8 156.0 200 300 צמ'ג למכונ'ת 12 לבני ש'נוי במכירות להודפ
8 155.09 208 309 צמ'ג למכונית 12 אחר' שינוי במכירות להודש
4 שינוי בכתות המלא'
3 200.33 20 11 צמ'ג למשאית 12 לכנ' ש'[!' במהיר ליה'דה
3 21.33 20 11 צמיג למשא'ת 12 אחר' ש'נו' במה'ר ליהידה
7 34208905 מ!וח הדבסה הדבסת דו"ח
21 שינ!' בכמות המלא'
1.00 8 55 399 מצבר 123 13 הוסבה
מח'קה
להלן תאור דו"ח מלאי (20622.28%6):
מכירות
מחיר נקודת כמות תאור
לחודש ליחידה הזמנה במלאי פריט
0 500.06 100 280 סטרטר
20.00 255 19 20 פלג 38
1.0.00 100.00 50 200 מצבר 123
1.00 10.00 50 200 מצבר 123
- 280 -
מסבר
הסבר מעות ברים,
0-6
09
22202
222
13
13
22002
207
207
נע ות המבתח 14042077
22009
2000009
טע ות במבתח 35208190
טע וח במנתח 36950087
ות במנתח 36970046
קוד שגוי ד 85208198
מספר קוד
פריט | מחלקה
5 13
13 8
13 7
13 7
מבנה התכנית מוצג בתרשים להלן:
ו
|| תכנ'ת עדכון | |
| קובץ אינדקט טדרת' |
| אפ | | פצ₪ם | | האסז |
4----% ר-ד--% ד-דֶ-ך-----%
7-7
| הסאספע+- דסי ת בוקאם- אנד |
7 -----%
וו |
| זסאס+-זס ת טקהם- אנד |
7------7-------ה------+ דד
ר---7- 7-77 0-1 ר7--0 07-07-77 ר---1-- 1-7
| - תתצד| | -פהססזן | -1-3(א₪11| | -01-2א₪11| | -01-1א1ו8| |-זואנדספאן | -<ופסה|
| - 84| |-לה/ס)>טא| | -זוא 4כסט| |- 40| |-המתצ+צסתספ| |-זמותובסה| |-2הו/0)אן
| ₪00 | או | צן | או | שן | צן | הסתםס|
%------% 0-2 0-2 0-0 4
67-74 דד------ נ-.]
| -אפמססוע | | -ת-:אתו₪ | | -זואזוססא | | -תקתפסון
|-2ה/ס)םא | | -זצפטוסם | | -זמאא | | -2דש/0ון
| ₪ | ן א | ן | | זסתםסן
| -אנופאן |-נאפו-עמ | | | -עתש| |-נשסדתאבזא| | | -<תתאן |-נאפדאב2חפן
בהססוז| = | | תא-10 א/א1| |/א-2דפ/סאטאן | | :סז אשאנ| |/א-2ה/0)טן | | :סז אא |
------! בח ר--% הררד ,--------- "יר
- 281 -
התכנית .ם0נפנטנת מ61?108010ת 149 (1)
.א60ם6%2-1ט80-תט1406 .16-םהעשסעק (2)
)9( 116-001.
'+28.ט8' 10 מ2581₪ טה-%00602 581600 (10)
6 159 128010ת88ע0 (11)
6מתעת 18 400058 (12)
%נעאת-15082א 18 +86 6עסססת (13)
.00602א-880280 18 568648 116ע (18)
. '280. 82ת1'28' 10 ם4551₪ 6110%ק6%2-2ט%00 561666 (15)
.'1.286ת206' 10 ת2551₪ ת206 581606 (16)
. '+20602.28' 10 ם4551₪ 1802858-ת200 561666 (17)
.ם1510ט1כ 868 (18)
.ת566010 116ק (19)
טב-00662א | 6ק (20)
)21( 18061 3600268 0.
.ט4-8%שטת65ת | 01 (22)
. (9)2 16 8 92 (23)
. (9)8 16ק סנתאק-₪15080 02 (28)
. (18)א 16ק טס 02 (25)
9 סנ 0-1 02 (26)
. (9)3 16 8 18-068%א6א 02 (27)
.9 שסצק 8 02 (28)
ס:1ק ם1.600665-11602120%] 02 (29)
)30( 6 0%
)31( 1.8061 360020085 426 1
.רפס | 01 (32)
.א 16 - 0018ק-אָט5 02 (33)
. 'ז' 6גו081 8 888 (38)
.'' סגו1אש 8 88 (35)
.'' 08106 1 םתס 88 (36)
.'2' 08106 2נותנת5 88 (37)
. '3' 08106 3 88 (38)
.'פ' 6גו081 8 88 (39)
.(9)2 016 8 02 (40)
.(9)8 16ק %ת-ת158א-ק 02 (81)
. (18)א 16ק -ט0ד-ק 02 (42)
.א 16 1 רברטטס-ת 02 (83)
. (9)3 16ק 8ת1828-68%א6א-2 02 (848)
. 999099 16ק 8 02 (85)
.9 סנק 1.6606681-120%ת66א-2 02 (86)
. 6001%8->ה8מטתפסת 01 (47)
.א 16
. (9)8 16ק
8 02
2-28 15א-ק 02
- 282 -
)48(
)49(
.א 16ק
. (9)8 16
9 סנק
.א 16ק
. (9)8 216
.9 סד
.א 160
.(9)8 16ק
סדק
.א 16
. (9)8 16
. (9)8 216
. (9)8 16ק
. (2)א 016
. (18)א 16ק
.א 16ק
.א 6גק
. (12)א 016
. (28)א% 16
. (2)א 16ק
. (9)2 16ק
.(2)א 16ק
. (18)א 16ק
.א 16ק
. 9 6צס
. (3)א 216
. (2)2(9)1 16ק
.(5)א 16ק
סד
.א 16ק
שסשצס
. (32)א 16ק
. (28)א 16ק
. (28)א 16ק
. (6)א 016
.1-1גות1ת0085-5ת365 01
1 נתפ-60186ק-2 02
11ת5-815082-2821%-ק 02
81-11 28₪61-08260%-ק 02
. 2- 1נגות1תפ-86מטתפסת 01
1-2טת1ת1186-5ו6ק-ק 02
2טתנתפ-1%6ת15082-28א-2 02
1-2ות1ת12-1.660108-5ת60א-ק 02
. 11-3ום1ת5-₪8%ט0ת368 01
11-3ות501-118%ו6ק-ק 02
3 02
090-313 02
. 11860858-08%ם365 01
1-8 02
8-ץ---1508!)-ק 02
ץץץ--------- 02
מססכ 6ץק
1.8061 3600208 226 14.
. 00כ-86מטת5סת 01
02 8
11160ע 02
סט" 02
.4 685ת606+1ת 7806-0066 02
1גושַה8ת0066-5 03
תע 03
03 686
8 02
1162נע 02
%בעפת-אַטפ-כ 02
%ע1116ע 02
%בטט-ת 02
1162נע 02
1-ה ס-ת 02
02 11162
8 68%5-82טאסא-2 02
2ע1116ע 02
02 7-8
02 1116
66120%6-1.60206681א-2 02
= 23 -
1165נע 02
. 18060858-ת16080 01
11160 02
1 02
1165%נע 02
)50(
)51(
)52(
)53(
)53(
)55(
)56(
)57(
)58(
)59(
)60(
)61(
)62(
)63(
)68(
)65(
)66(
)67(
)68(
)69(
)70(
)71(
)72(
)73(
)7%(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
)83(
)83(
)85(
)86(
)87(
)88(
)89(
)99(
)91(
)92(
)93(
. (9)2
. (2)א
- (9)8
א
. (10)א
.%
.2229
. (2)א
.229
.%
(9)6
א
3
27,
.'סז'
. 'תסא'
'סזי
. 'תסא'
ו
שי
08106 508608 .
א
. (28)א
7816
1106
0816
06
0816
816
6
6ב
6
6ב
6ב
6בם
א
6ב
6ב
6
6
ת2-10080 02
11162ע 02
8 02
%ס[1נע 02
8 02
02 11165
8 6
41 2060 3600268 1.8061
. 200-1800888 -1₪8%ות365 01
8 8001/א-22-0066 02
1162נץ 02
% 22-15 02
11165ע 02
%בפף-עטס02-1 02
1165נע 02
2-1 02
11162ץ 02
8 686-2טאסא-22 02
1160נע 02
ת820ה118-40ו20- ת0 1ִ88י22-1 02
1160גע 02
8 022
11162ץ 02
6000051-%66120%-22 02
11162 02
.ת506010 5502886-שת1עסח
. 82180168/-שת1עסט | 01
אפ-ט509-8006%2-4 02
טה-602טש%0-+50 88
8פ-6%2-20105ט%0-+90 02
6% 88
שפ-עססעט 02
פתסעעם 88
2 011
.0% 01
** קטע הגדרת הכותרות **
ס6בק
01 6
.ת1810ט1ת 6ע600ס6ס2ק
. 38581
.118000818 מעס?עסק
4 מעס)עסק
611 0%
.510 םע0+עסק
.תות 5000
- 288 -
)98(
)95(
)96(
)97(
)98(
)99(
)100(
)101(
)102(
)103(
)108(
)165(
)106(
)107(
)168(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
)120(
)121(
)122(
)123(
)128(
)125(
)126(
)127(
)128(
)183(
)188(
)185(
)186(
)147(
)188(
)189(
)150(
.83 (151)
,ט%006%2-4 1-0 000
,110%ו6%2-20ע0א 6טסת1
,200 6טטט0
. 8 -תססכ סקסט0 .
** קטע הדפסת הכותרות ** :
. וס
'תסא' סטסא 6תם 465 0010%5ק6%2-2ע40 686
.%פ-%006%2-201110%-502 70
%--- 0 טס
86-2001מטת365 10 528065 פטס
שפ-עספעע 70 'ע' סשטסא
ו .%סתסת185-70010%ק1-28טק1'1 פשעס+עסק
. 0%ת0ת1185-3820010%
א 19
-₪1ס1
15 8
% ס0עט1105818-016%60 םע0ס?עסק
8 15
ט3-8%מ0ת369-662128%א מעס+]עסק
6
1 12%
ט84-008%ום1-1-26265טת1ת5 שעס?עסק
6
1-2טתנתס 12
ט8%6-2ש0ת1-2-26205טת51 שעס]עסק
6 .
1-3ת1ת5 19
טה-0₪86ת01-3-26209ת51 שעס+עסק
6
8 15
טה-6%2ע11800858-10%0 ₪שעס+עסק
6
. 018 -08ט0ת1-26265וש1'1 ₪םעס+עסק
6
10 -
.ט86-4מטת69ת3 10 פּססַס5
,|, 160ע282-ע8ק 415 10 1%ת8ק82-2ק5נ1א-ק
,828 0066-8621 10 %880218%8-0086-ק
8 [2-0066-80
.%בעפת-ע2-100 ,1%6ע28-ע160 10 16ע8ק-עוסד-
, נ28618-68₪0% 10 8₪6181ם5-2טם08-ק
. 81 [2-08₪116-08116
, 8ת1828-6%68% 10 8ת718208-68%טאסא-ק
. 8 מ1828-108%ו6%א-2
,108ת60ע12-10ת860 10 168ת12-16760ת₪66-2
. 60108ע2-1./6 1ת2-60
- 285 -
6טסון
סשטסו
06
6טס!ן
6
6
06
)152(
)153(
)158(
)155(
)168(
)165(
)166(
)167(
)168(
)169(
)170(
)171(
)172(
)173(
)178(
)175(
)176(
)177(
)178(
)179(
)180(
)181(
)182(
)183(
)188(
)185(
)186(
)187(
)188(
)189(
)190(
)191(
)192(
)193(
)198(
)195(
)196(
)197(
)198(
, 06681ת160-662120%א 10 ב662120%6-1.60206658א-2 6טסו
. 1.60006681-120%ת2-66
.1 10 'הוספה' 076
טה-6המטתפסת 166עח
צֶ18ספנת 88 118הטתד
'לא ניתן לכתוב רשומה מספר' 16ע8ק-ע82ק15א 'בקוב> אב'
8% סי' 'טעות במפתח' 6טסא
6 ס 'ש' ס6טסא
. צ%6-8116ט0ת81-1ת36%2018-106 מעס?עסק
.1 1 שתנסת8ט460 4+002 ם00כ6-2מטת65ת 1>6עח
. ט4-8%מטות365-8%א1ת1166
(16עהת-82ק15א 10 1%8ת60א/-1%6ע8ק-15082/-ק סטסא
2-1
%6218-26%006%2-40 שעס?עסק
.3 10 'מחיקה' 6טסא
ש%006%2-4 261666
צֶ1סקפנת צַ36 116טתך1
'לא נמצאה רשומה מספר' 16ע8ק-815282 'בקובצ אב'
6% 10' 'טעות במפתח' שטסא
6 סךץ 'כ' שטסא
. צ%6-8110טת81-1ת366208-106 מעס+עסק
.6 1 שת1סת8ט460 41002 ב86-200שטת65ת 66בעש
. ט4-188%ות1-26265 -1טת1תס
(1%ע8ק-19082א 710 1-1טת1תפ-821%ק-82ק15א-ק 6טסא
.5-1 1-כ
.ט006%2-4א00/-%6218 שעס+?עסק
מס פעססעם פססא 12
8 10 'לפנ* שינוי בכמות המלאי*' 6טסא
6 1 שתדסת8ט20 22602 ת86-200שטבתפסת 6ס1סעא
, 81 680%6-28₪61 10 1-1נות1תפ-81 [2-08206-2826 סטסא
1 816-2861 2-0
. 8%8 [ת10//-2-00866 0 18%8ת780/-0066 פטס
%בעפת-2-1002 10 16ע8ק-2ו10' 06
8 086-82ו6א-2 10 8ת118208-08%גו4סא 6טסו
8 10 601168ע12-1,6ת1!66 סטסע
160000651-2-1602120% 10 ת0665ת160-1662120% 6טסא
8 10 'אחרי שינוי בכמות במלאי' 006
טה-86מטת69ת 6ס1עשסת
ץ18קפנת צַ%8 8118טת1
'לא ניתן לעדכן רשומה מספר 6נַסַפַק-ע1508א'
8 0 'טעות במפתח' שטסא
6 סל 'ת' ש6טסא
צ6א-8116טת81-1ת06%208-106 םע0ס?פסק
6 1נשסת-6ח₪
16 1 שתנסתה8ט400 ע492662 ת86-2060מטבפסת 1%6עא
8 70 'שינוי בכמות במלאי' 6ט0סא ₪156
780% 10 'טעות במפתח' שטסו
- 286 -
)199(
)200(
)201(
)202(
)203(
)208(
)205(
)206(
)207(
)208(
)209(
)210(
)211(
)212(
)213(
)218(
)215(
)216(
)217(
)218(
)219(
)220(
)221(
)222(
)223(
)228(
)225(
)226(
)227(
)228(
)229(
)230(
)231(
)232(
)233(
)238(
)235(
)236(
)237(
)238(
1-1 שר 10 111-1ת51- 81 [ַה068₪116-08- ס6טסא
.1 1 שת1סת4608 ע2+06 ת060סכ2-%המטתפסת 1%6עש
. ע4-1188%ת1-2-26209טת1ת5
(1%עהת-82ק15/ 70 1-2גת1ת5-1%ע8ק-15082א%-ק ס6טסא
-ת 2-1
.0006002-0א18-00ע62א שעס+עסק
תסם1 פעסעתעע ססא 1%
8 70 'לפני שינוי במחיר ליחידה' ס6טסא
6 1 שתנ1סתה8ט26 41002 ב6-200המטגתפסת 166עט
0 1-2צגגות21ת601168-9ע12-1.6ת%60-2 6טסא
, 60168ע11-1.6ת660
8----
. 8858 1[ת2-0066-80 10 18%8ת6066-806 סטסא
%בספת-עט2-10 10 סבע8ק-1002 6טסא
01-כ 10 6181שַה8ת-08206 ס6טסא
80-28 0טאסא-2 10 8ת068%6-182₪8א6א סטסא
ה16020668-120%ת2-860 10 1.66206052-120%ת₪66 6טסא
8 0 'אחר* שינוי במחיר ליחידה' 6טסא
טה-86מטתפסת 166עשסת
'מספר מפתח שגו:' 215018 86 8116טתד
8 0 'טעות במפתח' שטסא
6 סץ 'ת' שטסא
צַ6א-110הטת81-1ת06%20₪8-16 שעס+עסק
66 1עשסת-6ת
16 1 שת1סת4008 ע2+602 ב206->8מטתפסת 1%66עש
8 70 'שינוי במתיר ליהידה' שטסא ₪156
6% 10 'תע20 8ת625' סטסא
0 1-2צטות1ם60168-5ע12-1.6ב866-ק סטסא
2-8 1ת66א-2
.6 1 אַת61ת8ט400 ע4+68 ב86-206מטת65ת 6טנעש
. ע86-4מנו3-26209 - 1ומ1תפ5
(ס1ע8ת-15082/ 10 1-3טת1םפ-15082-78216/-2 סטסא
2-1
.2 מק 0ס+עסק
מפת1] פעסעעע ססא 12
8 ס? 'לפני שינוי במכירות לחודש' סטסא
6 1 שת1סתהט40 42602 ג6-206המטתפסת 168עש
0 1-3צ0(ת1.66206651-501-120%ם2-60 סטסא
, 160000081-120%ת66
ת1000665-120%ת60א-2
%נעאת-אַטפ-2 10 1%6ע8ת-8ט5 סטסא
5% 1 16ע8ק-192 סטסא
8 080-2א0א-2 10 8ת18208-68%ט66א סטסא
1-8 2-6 0 12-1676021068ת60 סטסא
8 70 'אחרי שינוי במכירות לחודש' שטסא
טה-86מטת9סת 66 נתשסת
'מספר מפתח שגוי' 215018 צַ%6 8116טמד
- 2871 -
)239(
)280(
)281(
)282(
)283(
)288(
)285(
)286(
)287(
)288(
)209(
)250(
)251(
)252(
)253(
)258(
)255(
)256(
)257(
)258(
)259(
)260(
)261(
)262(
)203(
)264(
)265(
)266(
)267(
)268(
)269(
)270(
)271(
)272(
)273(
)278(
)275(
)276(
)277(
)278(
)279(
)280(
8 סע 'טעות במפתח' 6טסא (281)
6 סע 'ת' סטסא (282)
צ6א-116הטת81-1ת36%208-10 שעס+עסק (283)
66 נתשסת-6חע (288)
6 1 שתנסת8ט20 ע4106 ת6-200א8שטתפסת 6ס1עח (285)
8 20 'שינוי במכירות להודש' שטסא ₪188 | (286)
8% 0י' 'טעות במפתח' שטסא (281)
0 111-3ת1ת1.60206651-5-120%ת66א-2 פטסא (288)
206-6006 1ת66א-2
.1 1 שת1סת2608 42602 ג200->ה8נטתפסת 6ל1עש (289)
.ט11800858-6%00662-8 (290)
.שפ-ע6%2-4ט%0-+50 70 ' 0ע' 6טסא (291)
.6נעפ--ה8 נא 10 818ת858-718%6ק16-186ע8ק-82ק15א-ק 6טסא (292)
טה-006%2א סעפסס (293)
%נעפת-ת8ק15א > טסא 18 ע6א [298)
ע8[ק15ת 36 116טםת1 (295)
'ערך המפתה' 16ע8ק-ת81508 'לא נמצא בקובא אב'
שפ-עסעעם 70 'ם' סטסא (296)
.ט 0 'מפתח גדול' 06 (297)
.1 10 'הדפסת דוה' שטסא | (298)
.8 סי 'טווח ההדפסה' שטסא (299)
0 1800858-18602818-1%ע8ק-82ק15א-2 6טסא (300)
. 8-11800858 1186681
.8 ס1 1%6-1860888-908%ע15082-28א-2 סטסא | (301)
.6 1 פשת1סתהט40 41002 ב0ס86-2שטת265 66בעש (302)
8 משמףת0ס/ע6ק | (303)
<< 16ע18080-28 611ת0 (308)
.ש502-4006%2-4 02 (305)
)306( 9.
6סססת 6א6/ טה-006%2 3686 | (307)
.אפ-6%2-40ט%0-+50 10 'תסא' שטסא 6מם 4% (308)
< 0% 16ע82ק-15082 46 טג-2סט0א-509 6סא 19 (309)
01פ-1860858-1%ע8ק-15082נא-ק
8ררברכרטטפפסת 70 528068 006 (310)
%נעפת-ע508נא-22 10 16ע8ק-15082א 6טסא (311)
8 -22-6066 10 1886218%8/-0086 6טסע (312)
סנעפתק-22-1002 10 8216ק-1602 6טסא (313)
1 02-80 10 082₪6-208₪6181 שטסא (318)
התמ 2ם1-68%ט6%א-22 10 8ת08%6-18228א6א 6טס (315)
8 סי 601168ע60212-1.6 006 (316)
1660608-22-8662120% 10 ב1.6020665-120%ת160 6טסו (317)
.6ת1 1 שתנ1סתהט46 41000 86-2001-1860858מטת365 166עע (318)
. 00118 088-50ות26205- 1טק1ע' (319)
. 2001-₪8%טת369 10 508065 סטסא (320)
(16ע8ק-1582א-2 10 16מ8ק-15080א/-2 6טס (321)
נְגהְהָ8ת0086-5 10 18ט6ק-8ט5 6טסא (322)
- 288 -
₪ היירי יי םי תפוק
.6 ספ 'קוד שגוי' שטסא (323)
.6 1 שת1סת8ט40 ע66+?4 ת00כ2->8מטתפסת 1%66ע₪ (328)
. ט-10%006%2/-8 01 (325)
שב-%00662 3688 | (326)
| צַ1קפגת ע%6 1186הטתך (327)
'לא נמצאה הרשומה שמספרה' 16ע8ק-:8ק15א 'בקוב> האב'
.%פ-עסעעם 10 '8' סטסא (328)
תסת1 פעסעעם ססא 19 (329)
8 80/-2-0006 10 18%8ת₪86-0066 6סטסא (330)
% 2-0 10 16ע8ק2-ע100' סטסא (331)
1 10 08₪115-28₪6181 סטסא (332)
86-28 0טאסא-2 170 8ת8םמ086-1182וא6א סטסא (333)
8 10 168ת60ע160212-1.6 סטסא (338)
120%5-16006651ת60א-2 10 1206-1.6020866982ת60 6טסא (335)
86 (336)
9% 10 528608 סטסא (337)
,0825-1881 ,16ע28-שַט5 10 262068 סטסא (338)
, ת820ת118-40ו0ק2- 188216 , 8ת118208-08%טא6%א
, 1602000681-160120% , 108ת66ע12-1.6ת66א (339)
. צ%6-8116טת81-1ת6%2₪8-16 (320)
2 05-006666 0810806 | (381)
צֶה[ספנת '22' ,'ש' מסתט (382)
המפתח עבור הרשומה שרוצים לכתוב קיים כבר בקובצ'
'אין אפשרות להוסיף רשומה חדשה זו, ערך' -
ץֶנספנת '23' ,'כ' תסתח (383)
מקובץ אב, רשומה בעלת ערך מפתח זה לא נמצאה בקובצ'
'אין אפשרות לבצע מחיקה' -
עֶ[ספנת '23' ,'ת' תסתט (388)
זו , רשומה בעלת ערך מפתח זה לא נמצאה בקובצ'
'אין אפשרות לעדכן רשומה' -
.6-מ (385)
.מטדפ (326)
.200-8800858 ,ג2006 ,662-2060110%ש80 |( טה-6%2ע300 01056 (387)
הסבר:
שורות 11-14: מציינים שקוב> האב מאורגן בשיטה אינדקס סידרתית.
הגישה לרשומות הקוב היא דינמית. ז"א, לפעמים נרצה לגשת לרשומות
בקובצ באופן אקראי (למשל עבור מחיקות, הוספות וש*נו*ים) לפ:
ערכו של מפתח הרשומה הראשי, ולפעמים נרצה לגשת לרשומות בקוב%ף
באופן סידרתי (למשל עבור הדפסות) לפי סדר מפתח הרשומה הראש'.
שדה | מפתח הרשומה הראש: הוא - 16ע82ק-82ק15. אם | פקודות
מדזתאעת םתא אוה טעש/מת לא תתבצענה בהצלחה ויתקיים התנא*
צטא פ1גטא1, המשתנה 6%2ט0א%-טש88628 יקבל ערכים בעלי שני תווים
שישמשו לבדיקת סיבת אי-ההצלחה. הגדרת המשתנה היא ב-שת1אעסש-
מ560%10 5602886 (בתכנית זו ההגדרה נמצאת בשורה 130).
- 289 -
שורות 32-65: תיאור 6 סוגי הרשומות בקובצ התנועות.
שורות 68-99: תיאור 2 סוגי רשומות הפלט של דוח התנועה. סוג
הרשומה 1800888-ת106080 מיועד לפעולת ההדפסה ומצוין בה סוג
הפעולה וטווח ההדפסה.
שורה 3: 6 הווא דגל המסמן את סוג הפעולה שניסינו לבצע
והוביל להפעלת הביטוי צעשא כ1/1השא1. דגל זה ישמש לנו מאוחר *ותר
בזמן תיאור השגיאה שקרתה.
קטע העיבוד הראשי בתכנית מחולק ל-3 חלקים:
א. התחלה - שורות 166-15%.
ב. עיבוד כל רשומה בקוב התנועות - שורות 167-173.
ג. סיום - שורות 349-350.
א. (1) פתיחת קוב האב ל-1-0 לאפשר כתיבות, מחיקות ושינויים
אקראיים.
(2) פתיחת קוב הקלט - קוב התנועות.
(3) פתיחת קבצי הפלט: קוב דוח התנועה וקובצ הדוחות.
(4) כתיבת כותרת (159-166).
שורות 171-190: בדיקת סוג הפעולה נעשה בהתאם לקוד הפעולה שמופיע
בשדה הראשון בתחילת כל רשומה בקובף התנועות. נטפל גם במצב שקוּד
הפעולה שגוי (שורה 190).
שורה 202: אם הוספת רשומה אינה מתאפשרת, יתקיים הביטוי פ1מה/אד
צטא, ויתבצעו הדברים הבאים:
א) תירשם הודעה מתאימה על המסך.
ב) ברשומת דוח התנועה תרשם סיבת הטעות.
ג) הדגל ₪5-0006 יקבל ערך 'ח' (המסמל פקודת מדדתח). 0-6
מחזיק את סוג הפעולה שניסינו לבצע ושהוביל להפעלת הביטו:
צטא פ11טא1. ערך הדגל הזה וערך המשתנה ש8628/-605ט%0 יקבעו את
ההודעה שתופיע על המסך, כדי להסביר את סיבת אי-הצלחת ביצוע
הפקודה 178₪א.
בנוסף לביצוע פעולת ההוספה לקובצ האב יתבצעו בתכנית הדברים
הבאים:
1. העברת ערכים של השדות שמופיעים בקובץ התנועות לשדות של רשומת
דוח התנועה כדי שנדע איזו רשומה נוספה אם פעולת ההוספה אפשרית,
או איזו רשומה לא נוספה אם פעולת ההוספה אינה אפשרית (שורות
9))..
2. העברת שם הפעולה (הוספה) לשדה הנכון ברשומת דוח התנועה כדי
שנוכל לראות איזו פעולה התבצעה (שורה 200).
3. כתיבת רשומה בקובף דוח התנועה (שורה 206).
שורות 207-216: כשרוצים למחוק רשומה מקובף האב מעבירים את ערך
המפתח של הרשומה שרוצים למחוק אל שדה המפתח של רשומת הקוב
המתואר ב-פע. אח"כ ניתן לבצע את הפקודה ש7ע/ומע. לפני ביצוע
מזטטת קוראים את הרשומה שרוצים למחוק, כדי שנוכל להעביר את
- 290 -
תוכנה לדוח התנועה שמכינים (שורה 209). אם קריאת הרשומה שרוצים
למחוק לא הצליחה (ז"א הרשומה לא נמצאה בקובצ), לא *ועברו ערכ:
השדות שברשומת קובצ האב לרשומת דוח התנועה, אלא נאפס את השדות
שברשומת דוח התנועה כדי שלא ישארו הנתונים של הרשומה האחרונה
שנכתבה לקובצץ דוח התנועה. בין אם הצליחה הקריאה או לאו, *תבצעו
הדברים הבאים:
א. יועבר שם הפעולה (מחיקה) לשדה הנכון ברשומת דוח התנועה כד:
שנוכל לראות איזו פעולה התבצעה (שורה 210).
ב. ערך מפתח הרשומה שרצינו למחוק יועבר אל רשומת דוח התנועה
(שורה 218), כדי שנדע איזו רשומה נמחקה אם התבצעה פעולת המחיקה,
או איזה מפתח לא היה קיים בקובף אם לא התבצעה פעולת המחיקה.
ג. תכתב | רשומה בקובף | דוח התנועה (שורה | 216). בתכנית
אינטראקטיבית יש סיבה נוספת לביצוע קריאה לפני מחיקה - כדי לתת
אפשרות למפעיל לבדוק אם הוא אכן רוצה למחוק את הרשומה שבמספרה
נקב.
מחיקת רשומה מקובף האב תעשה בעזרת הפקודה מץשחת (שורה 211). אם
פעולת המחיקה אינה אפשרית, יתקיים התנאי צשא פ01/א1 ויתבצעו
הדברים הבאים:
א. הצגת הודעה מתאימה על המסך.
ב. כתיבת הסבר לטעות ברשומת דוח התנועה.
ג. קביעת ערך הדגל 058-0066 ל-'פ' (המסמן פעולת מתממכ). כלומר,
סוג הפעולה שניסינו לבצע ושהוביל להפעלת הביטוי צשא פ1ג/א1,
הוא מחיקה (פקודת אזַשזטכ). ערך דגל זה וערך המשתנה -80280א%
42 יקבעו את ההודעה שתופיע על המסך, כדי להסביר את אי-הצלחת
הביצוע של הפקודה מץשוספ.
שורות 217-240: כשרוצים לשנות את תוכן השדות ברשומת קובצ האב
עושים את הדברים הבאים:
מציבים ערך בשדה המפתח הראשי של הרשומה שרוצים לשנות (שורה
8). הרשומה שתוחלף היא הרשומה שהמפתח שלה שווה לערך שנמצא
בטדה המפתח הראשי. מעבירים את הערכים החדשים של השדות לשדות
הרשומה המופיעים ב-כ2? ומיד אח"כ מבצעים מצזחקמת (שורה 230).
בשורות אלו מתבצע שינוי בערך השדה 28₪6181-08₪₪%, לכן ערכו החדש
של השדה הזה יועבר מקוב התנועות לקובף האב (שורה 223). שאר
השדות ישארו ללא שינו'.
לפני ביצוע מך1חשמת קוראים את הרשומה שרוצים לשנות (שורה 219)
כדי שערכי השדות שברשומת קוב האב י*ועברו לפני ביצוע השינו* אל
רשומת דוח התנועה. מעבירים גם הודעה שזוהי הרשומה לפנ* ביצוע
השינוי (שורה 221) וכותבים רשומה בקובצ דוח התנועה. אחר* ביצוע
8 כותבים רשומה נוספת בקוב> דוח התנועה המכילה את ערכ:
השדות של רשומת קובצ האב והערך החדש של השדה 6181ם28-08₪0%
(שורה 236). מעבירים גם הודעה לשדה שזוהי הרשומה לאחר ביצוע
השינוי (שורה 229). אם פעולת השינוי א*נה מתאפשרת, *תקיים התנא:
צטא פ1תגעא1 ויתבצעו הדברים הבאים:
- 291 -
א. תוצג הודעה מתאימה על המסך.
ב. ברשומת דוח התנועה יירשם הסבר הטעות.
ג. בדגל ₪5-0086 יוכנס הערך 'ת' (המסמל פקודת מעדתאמת). כלומר,
סוג הפעולה שניסינו לבצע ושהוביל להפעלת הביטו* צטא פ11גטא1 הוא
שינוי (הפקודה מנזתועת). ערך דגל זה וערך המשתנה 662ט0א8-ש8628
יקבעו את ההודעה שתופיע על המסך ותסביר את סיבת א*-הצלחת ב'צוע
מדתטת.
שורות 237-240: אם הקריאה לא התבצעה בהצלחה וניסינו לשנות רשומה
שאינה קיימת, נבצע את הפעולות הבאות:
1) נעביר רווחים לשדות רשומת דוח התנועה. נעביר את שם הפעולה
(שינו: בכמות במלאי) לשדה הנכון ברשומת דוח התנועה, כד* שנוכל
לראות איזו פעולה התבצעה (שורה 237).
2) נעביר את תיאור הטעות לרשומת דוח התנועה (שורה 238).
3 נעביר את ערך מפתח הרשומה שרצינו לשנות לדוח רשומת הפעולות
(שצורה 239).
4) נכתוב רשומה בקובף דוח התנועה. (שורה 240).
שורות 211-265: טיפול דומה עבור שינוי במחיר ליחידה.
שורות 266-289: טיפול דומה עבור שינוי במכירות לחודש.
שורות 290-305: כדי להדפיס רשומות מקובצ האב נדרש לבצע את
הדברים הבא*ם:
א. העברת מספר הרשומה הראשונה שמבקשים להדפיס מרשומת ההדפסה
שבקובצ התנועות למפתח הרשומה ב-פע (שורה 292).
ב. הפעלת הפקודה 51881 כדי למקם את המצביע, כך שפקודת :3542 הבאה
תקרא את הרשומה הראשונה שמקיימת את התנאי בפקודה 51482 (שורה
3).
בתכניתנו, ביקשנו שהמצביע יתמקם במספר הרשומה שאינו קטן ממספר
הרשומה הנמצא עתה במפתח הרשומה. ז"א, יתכן שהמצביע יתמקם ברשומה
שמספרה שווה למספר הרשומה שבמפתח הרשומה, או שהמצביע *תמקם
ברשומה שמספרו גדול ממספר הרשומה שבמפתח הרשומה. אם לא נמצאה אף
לא רשומה אחת בכל הקוב המקיימת את התנא* שבפקודה 51881, יתקיים
הביטוי עמא 4112/א1 ויתבצעו הדברים הבאים:
א. תודפס הודעה מתאימה על המסך.
ב. לדגל אפ-עסעעם יוכנס 'ם', הודעה שיש טעות במפתח הרשומה. טעות
זאת תצויין בשדה המתאים ברשומת דוח התנועה.
שורות 299-302: נרשום בקוב דוח את התנועה טווח ההדפסה של
הרשומות שנתבקשנו להדפיס. נעביר גם שם הפעולה (הדפסת דוה) לשדה
הנכון ברשומת דוח התנועה, כדי שנוכל לדעת איזו פעולה התבצעה.
שורות 303-305: קוראים באופן סידרתי רשומות מקוב% האב. הקריאה
הראשונה תהיה מהרשומה הראשונה שמקיימת את התנאי בפקודה תַתג57.
הקריאה הסידרתית תיפסק כשמפתה הרשומה יקבל ערך שהוא גדול או
שווה למספר הרשומה האחרונה שביקשנו להדפיס. ערך זה נמצא ברשומת
- 292 -
פעולת ההדפסה. כמו-כן, יתכן שהקריאה הסידרתית תפסק, כי הגענו
לרשומה האחרונה שבקובא האב.
שורות 306-319: קריאה סידרתית של רשומות מקוב> האב. השתמשנו פה
בגירסה של כגמת הכולל את המלה 1אמא, כדי שנוכל לקרוא את הקוב
באופן סידרתי. המלה ?אמא.היתה הכרחית, מכיון ששיטת הגישה הוגדרה
"דינמית" (שורה 12).
כל עוד לא הגענו לסוף הקוב מתבצעים הדברים הבאים עבור כל רשומה
שנקראה:
א. איפוס רשומת דוח להדפסה.
ב. העברת ערכי השדות שברשומת קוב האב לשדות שברשומת הדוח.
ג. כתיבת רשומת הדוח בקובצ של הדוחות להדפסה.
שורות 319-324: כאשר יש טעות בסוג הפעולה, מגיעים לשורות אלו
וכותבים בקובצ דוח התנועה את מספר הרשומה ואת הקוד השגו* יחד עם
הודעה על השגיאה בסוג הפעולה. אנו לא מנסים למלא את שאר השדות
הנמצאים ברשומת דוח התנועה, שהרי המבנה המתאים אינוה ידוע, כ
איננו יודעים את סוג הפעולה שהמפעיל רצה לבצע.
שורות 325-339: קוראים באופן אקראי מקוב האב לפני ביצוע
הפקודות 8ך1ש מס ו-מע1תאמת, כדי שנוכל להציג בדוח את תוכן הרשומה
לפני מתיקתה או לפני שינוי תוכן שדותיה. אם הקריאה הצליחה (ז"א
שהרשומה נמצאה בקובץ) יועברו ערכי השדות שברשומת קוב האב
לרשומת דוח התנועה, אחרת נאפס את השדות שברשומת דוח התנועה, כד:
שלא ישארו הנתונים של הרשומה האחרונה שנכתבה לקוב דוח התנועה.
שורות 310-385: בביצוע אחת מן הפקודות 178תא, משתתמק, משדתחסת
יוכנס ערך למשתנה 8%2ט0א-86280א. בקטע זה בודקים את ערך
המשתנה. הבדיקה נעשית אחרי ביצוע אחת מן הפקודות הכוללות את
הביטוי צחא פ01/א1 כדי לדעת את הסיבה המדויקת של הבעיה, אם
הפקודה לא הצליחה. בתכנית זו מדפיסים הודעות שונות על המסך
בהתאם לערך הדגל ₪05-0066 והמשת(ה 662ע%0-ש8%628.
כשערך הדגל ₪58-0066 הוא 'א' וערך המשתנה 2סַסַט0א-ש8628א8 הוא
'22', תופיע על המסך ההודעה שנמצאת בתכניתנו בשורה 332. כשערך
הדגל ₪5-0066 הוא 'ע' וערך המשתנה '23' - תופיע על המסך ההודעה
שנמצאת בתכניתנו בשורה 333. כשערך הדגל ₪8-0066 הוא 'א' וערך
ו הוא '23' תופיע על המסך ההודעה שנמצאת בתכניתנו בשורה
3
שורות 346-347: סגירת הקבצים.
- 293 -
6 תוגילים
שאלות
1. מדוע שיטת עיבוד אינדקס סידרתית אינה מתאימה לקבצים המוחזקים
בסרט?
2. מדוע המפתח הראש'י בקובף אינדקס-סידרתי ה*יב להיות *'חוד:
ולמה מפתחות משניים אינם ח*יבים לעמוד בדרישה זו?
3. כתוב את כל הפקודות וההצהרות הנחוצות עבור קריאת השמות של
אנשים שמתחילים באות "א" מתוך קובצ לקוחות. המפתח הראשי הוא
מאגא.
4. טבלה שבה שם מקוצר בן שתי אותיות וגם שם מלא של המדינות
בארה"ב מוחזקת כקובף א*נדקס-סידרתי, השימוש בטבלה יהיה
בתכנית, אשר הקלט שלה יהיה השם המקוצר והפלט שלה יהיה השם
המלא. כתוב פקודת 581807 מתאימה לשימוש בטבלה זו.
5. איזו שיטת גישה מתאימה בד"כ לבניית קבצים אינדקס סידרתיים?
6. אילו שיטות גישה מתאימות לשימוש בקבצים אינדקס סידרתיים שכבר
קיימים.
7. איך צריכים לפתוח קוב אינדקס-סידרתי אם רוצים למחוק רשומות.
8. מתי נשתמש בביטוי פאם 471 בפקודה כגמת, ומתי הביטו* צטא
פזזהטאז מתאים יותר? איזה מצבים מפעילים את הביטויים האלה ?
9. מתי מותר להשתמש בביטוי עשא פ1ג/א1 בפקודות ₪צַדתח ו-
מדזתשאסת, ומתי אסור? כאשר מותר להשתמש בו, איזה מצבים *פעילו
את הביטו:* הזה?
תכניות
1. כתוב תכנית לבנות קובצ-אב עבור לקוחות של חנות מסוימת.
. ארגון הקובץ הוא אינדקס-ס'דרת* ותיאורו מופיע להלן:
עמודה שדת
0 1 שם (מפתח)
5 21 כתובת
1- 86 תאריך הקניה האחרונה של אותו לקות
8 52 כמות שהלקוח חייב (שני מקומות עשרוניים).
- 298 -
.2
רוצים לעדכן את קוב הלקוחות שנבנה בתרגיל (1), בעזרת קובא
תנועות בארגון סידרתי. רשומות קובצ התנועות מתוארות כך:
עמודה שדתה
0 1 שם
6- 21 תאריך הפעולה
3 27 סכום הקניה.
א. הוסף את סכום הקניה מרשומת התנועה אל הסכום שהלקוח חייב
(בקובץ האב).
ב. אם אין רשומה עבור לקוח ששמו נמצא בקובצ התנועות, בנה
עבורו רשומה חדשה (השאר את הכתובת ריקה).
בנה קוב אינדקס-סידרתי להחזקת רשומות מלאי המתוארות כך:
עמודה שדה
1 -5 תאריך הפעולה
6 -21 תיאור פריט
90 -26 כמות שנמצאת במלאי.
עבור הקוב> שבנית בתרגיל (3) כתוב תכנית עדכון המסוגלת:
א. להוסיף פריטים
. למחוק פר*טים
לשנות את הרמות הנמצאות
. להדפיס רשימה של פריטים החל ממטספר פריט א עד מטספר פריט
צ, כאשר א ו- ץ הם פרמטרים המופיעים ברשומת תנועת הדפסה.
רש ב
- 295 -
פרק 15
קבצים *חסלים
1 מנוא
קוב יחסי (שט1ך)4/מת) הינו קוב שפונים לרשומותיו על-פי מיקומן
היחסי (מספרן הסידור*י) בתוך הקובף. לפיכך, שומרים בו מראש
מקומות לכל הרשומות האפשריות. מכאן גם נובע שצריך להיות קשר
ישטיר בין מפתח הרשומה לבין מקומה היחסי בקוב>ץ, כ* פונים אל
הרשומה לפי מקומה היחסי ולא לפי המפתה. המספר המצי*ן את המקום
היחסי הוא המספר הסידורי של הרשומה בקובצ ואינו מוכל בה. למשל,
בקוב יחסי המחזיק 500 רשומות, מספרה היחסי של הרשומה הראשונה
בקובץ הוא 1 ומספרה היחסי של הרשומה האחרונה הוא 500, בל:י קשר
למיקומן המדויק של הפיסי בכונן הדיסקים. יש גם אפשרות שחלק מן
הרשומות אינן קיימות כלל, ז"א שאין רשומה באותו מקום *חס'.
היתרון של גישה באמצעות מספר יחסי (או סידור*) הוא בכך שהגישה
היא ישירה, ולא כמו בארגון סדרתי המחייב לקרוא את כל הרשומות עד
שמגיעים אל הרשומה המבוקשת (דומה במקצת לגישה ישירה בארגון
אינדקס-סידרת'י).
השיטה מתאימה במיוחד כאשר אפשר לקשר בין ערך המפתח של הרשומה
ומספרה הסידורי. למשל, אם ערך המפתח הוא מספר שלם ואם אין פערים
גדולים בין המפתחות של רשומות עוקבות, השיטה עשויה להתאים.
מאידך, אם ערכי המפתח הם בעל* צפיפות נמוכה, שיטה זו תביא
לבזבוז מקום בדיסק. למשל, רשומה בעלת מפתח 20 תאוחסן במקום ה-
0. אם הרשומה הבאה היא בעלת מפתח 100, יבוזבז שטה בדיסק המסוגל
להכיל 79 רשומות.
השיטה מתאימה לאחסון של טבלאות גדולות, כאשר כל רשומה מכילה
שורה אחת בטבלה. קוב יחסי עדיף על טבלה, כי הוא בלתי מוגבל
בגודלו ואינו קשור לתכנית אחת בלבד. שליפת שורות של הטבלה מהירה
ופשוטה יותר בארגון יחסי מאשר בשיטות ארגון אחרות. למשל, בשיטה
הסידרתית אין בכלל אפשרות לשלוף רשומות מסוימות וחייבים להטעין
את הטבלה כולה לתוך טבלה פנימית בתכנית, תהליך שדורש שגרות
מיוחדות ועשוי לבזבז הרבה מקום בזיכרון המרכזי. גם בארגון יחסי,
אם השורה הרצויה בטבלה אינה ידועה לנו נעדיף לטעון את הטבלה
במלואה לתוך הזיכרון ולעבוד עם הפקודות החזקות בקובול לחיפוש
בטבלאות: 542308 ו-41 6₪4001.
- 296 -
היתרון העיקרי לשיטת ארגון יחסית הוא בכך שהגישה לרשומות מהירה
ביותר כאשר נוקבים במספר. הסיבה לכך היא שאין צורך לאתר את
הרשומה בעזרת חיפוש באינדקסים ואין גם צורךף לתחזק א*נדקסים
כאלה. במקום זה, שיטת הגישה רק מכפילה את המספר הסידורי של
הרשומה באורך הרשומה בבתים ומגיעה לכתובת של הרשומה הרצויה.
מובן איפוא, שהרשומות של קוב יחסי החייבות להיות באורך קבוע.
אפשר להקצות לכל רשומה את אורך הרשומה הגדולה ביותר בקוב>% -
שיטה קצת בזבזנית אשר מאפשרת לפעול במערכת של רשומות שאורכן
אינו אחיד.
אפשר להציג כך את הרשומות בקוב> *חסי:
התחלת
סוף הקובצ 500 1 3 2 1 הקובף
ריק |רשומה ריק |רשומה| ריק |רשומה
99| 3 1
על אף היתרונות, השימוש בשיטת ארגון יחס אינוה נפוצ ביותר.
הסיבה לכך היא העובדה שבמקרים רבים המפתחות אינם נומריים. גם
כאשר המפתחות נומריים, הם אינם רציפים, ולכן אי אפשר להשתמש בהם
בלי לבצע טרנספורמציה כלשהי של המפתח הגולמי. שיטות לבצע
טרנספורמציות קיימות, אך הן אינן מושלמות. הן מובילות לפעמים
לשמות נרדפים, ז"א למקרים של מפתחות שונים המתורגמים לאותו מקום
יחסי. במקרה כזה צריכים לחפש מקום אחר כדי להחזיק בו את הרשומה.
חיפוש מקום כזה להחזקת רשומה, ומציאת אותו מקום כאשר רוציס
לשלוף את הרשומה, מסבכות ביותר את השימוש בארגון יחסי.
21 ארגון יחסי
כאשר מתכוונים לעבוד עם קובצ יחסי יש להוסיף את ה-618%₪58 דלהלן
לפקודת א₪5510. . . 007 501:
1ת1020ת6-6₪ת8 10 א25510 662ט0א-0₪ב5 067 ספ
שמשת 15 א20710 אס
0 5 עצמא |
ּ אספאת 154 ₪008 4008585
80-01 5 עצמא פאה ופ
[18%00602-ש₪8%5298 5 205 מחדק]
הביטוי שט411טת 15 את הכרחי, כדי לקבוע שעובדים עם
קוב יחסי. הביטוי השני (15 8028 200855) אינו הכרחי, כי קיימת
ברירת מחדל: ,50147 5 מפסא 200855, ז"א גישה סידרתית. נפרט
להלן את המשמעות של כל אחת מן הגישות השונות:
- 297 -
א. גישה סידרתית (0ת71אע00ע5 15 מכ0סא פ5פ5מססת2)
בבניית קוב יחסי אפשר להשמיט ביטו* זה (כמו שהזכרנו קודם)
ולהשתמש בפקודה 8שטתפסע-ש6םת5 ₪178 אחרי שפותחים את הקוב לפלט
בעזרת הפקודה 001207 אמסס.
כמובן, שאפשר גם לכלול את הביטו*: זא 15 ₪כ0א 400055
ולהמשיך עם הביטו': 1פ- רס 15 צשא מטךד)/ ואת
המקום היחסי של הרשומה שעכשיו נוספה יוכנס לשדה: דַפַּת86ץ-מס5הם
שחייב להיות מוגדר ב-0-5108408א₪08%81 כשדה נומרי בלי סימן. אם
כבר מוסיפים את הביטוי צשא מש11ה/מת, חייבים גם לכלול את הביטו:
15 ₪פ0א 400055, כי הביטו*י השני נחשב כחלק מן הביטו:
הראשון.
בגישה סידרתית אפשר בעזרת הפקודה פאם 87..עגמת לקרוא רשומות
באופן סידרתי. כל פקודת פמ מקדמת את המצביע על הרשומה הבאה,
כדי שפעולת פגמת הבאה תקרא את הרשומה הבאה. הפקודה *ודעת לדלג
על מקומות ריקים, עד שהתנאי כאא 81 מתקיים ואז הפקודה לא
מתבצעת. גם עבור קריאה סידרתית אין צורך בביטוי 15 028₪א8 200₪55
ואפשר לסמוך על ברירת המחדל. פתיחת הקוב בקריאה סידרתית היא
על-ידי הפקודה עשקא1 אמק0. אפשר להתחיל את קריאת הקוב מרשומה
מסוימת בעזרת הפקודה 51881, בעלת המבנה הבא:
5-2 דגס
0
1 - סא אגחך תם1ךםה0 4 15 צסא
ל
א 055 לטסא
> סא
[1ת14פ-פאם ] 8%6קת₪15 עצמא פ1זהטאד
השדה צַפַת80ץ-0₪ס₪8% הוא< השדה אליו מתכוונים בביטוי: מטך7תת
5 צמא. כדי להתחיל את הקריאה במקום מסוים מכניסים את מספרו
היחסי של המקום לשדה 807851ע-₪8%0₪. הקריאה הבאה תהיה מן הרשומה
הראשונה שמקומה היחס*י מקיים את התנאי המתואר בפקודה 957407.
הקובצ שעליו רוצים להפעיל את הפקודה 51481 חייב להיות מוגדר עם
5 צטא משך7ה/מת. בגישה סידרתית יש גם אפשרות לשנות את תוכן
הרשומות. כדי לעשות זה, משתמשים בפקודה:
[ 5866-0₪ת5 2308] במטםפסת-6₪ת5 מדדתסת
(צטשא ס4/1עא1 לא מתאים פה כי אנו לא מתקדמים לפי מספרה היחסי של
הרשומה, אלא לפ* הסדר).
קוראים את הרשומות זו אחר זו עד שמגיעים לרשומה שרוצים לשנות.
- 208 2
מעבירים את התוכן החדש של השדות לשטח כץע שמוגדר בפרק הקבצים ואז
מבצעים פקודת מענתשאמת. כדי להשתמש בפקודה מע[תשמת, חייבים לפתוח
את הקוב בעזרת הפקודה 1-0 א8ת0 (שהרי עטשקא1, או ע0ש0ע001 אינם
מתאימים, כ* אנו גם קוראים כל רשומה (פעולת עשקא1) וגם כותבים
מחדש את הרשומות שרוצים לשנות (פעולת עש:1ש0). בגישה סידרתית
אפשר לבטל רשומה בעזרת הפקודה:
002 2ס6ט0סא-מסת8 טפט
גם במקרה של ₪78/מכע, מתקדמים מרשומה לרשומה בעזרת כגמ8. כאשר
מגיעים לרשומה שרוצים למחוק, מבצעים פעולת 8עשמע והרשומה תמחק.
גם פה הביטוי עצמא פ01ג/א1 אינו מתאים, כי מוחקים לפי סדר הקר:אה
ולא לפי מספרה היחסי של הרשומה.
כמו לגבי קריאה כן לגבי שינויים ומחיקות, ניתן להשתמש בביטו:
צחא מטצעהחת בפקודת א5₪1/₪01..45510 ובשילוב עם הפקודה צַתג51,
אם אנו רוצים שהקריאה הסידרתית תתחיל מרשומה שנמצאת באמצע הקובצ
ולא בתחילתו. כאשר מבצעים שינויים ומחיקות בגישה סידרתית,
קוראים את הרשומות זו אחר זו, מציגים אותן במסך ומאפשרים למשתמש
להחליט אם הוא רוצה לבצע את השינוי או המחיקה. שיטה זו מתאימה
אם יש צפיפות גדולה של רשומות עדכון הכוללות שינויים ו/או
מחיקות. אם הצפיפות נמוכה, עדיף להשתמש בגישות אחרות. אפשר גם
לפתוח קובצ בעזרת פאמזאם. התוצאה של פתיחה כזוו היא מיקום של
המצביע מיד אחרי הרשומה האחרונה בקובף. פקודת 118₪תח הבאה תוסיף
רשומה לקובצ וכך נוכל להמשיך להוסיף רשומות.
ב. גישה אקראית (אסעאתת 18 מפסא פפמסס2)
כאשר משתמשים בגישה אקראית יש לכלול תמיד:
1 175 צטא מט11טת כדי שנוכל להצביע על הרשומה
שרוצים לטפל בה. אפשר גם לבנות קובצ סידרתי בגישה אקראית. על
המתכנת רק להעביר את הערך של המקום היחסי לשדה דפַת86ץ-תסאהם
ולבצע פקודת 08178 כדי לכתוב את הרשומה באותו מקום י*חסי. חייבים
לכלול את הביטוי 86כ2ת₪15 עשא כ%1גע0א1 כדי להבטיח שהמפתח ה*חס:
יהיה בעל ערך מתאים - מספר חיובי שלם. אין צורך למלא את כל
המקומות בזמן בניית הקוב; אם נכתוב רק רשומה אחת במקום 4899,
נמצא כי 500 מקומות *ישמרו לפני אותה רשומה וניתן יהיה למלא
אותם.
עקרונית, כדי לבנות קובצ חייבים לפתוח אותו על-ידי הפקודה
עטפצטס אמפ0. יש מהדרים (למשל של ה-א04) המאפשרים בניית קוב גם
בפקודה: 1-0 א₪ת0. בכל מקרה, אפשר למלא תאים שנשארו ריקים אחר:
יצירת הקובף בעזרת הפקודה צשא פ1גטא1. .מצזת. גישה אקראית היא
המתאימה ביותר לביצוע קריאות, שינויים ומחיקות, כי בבעבודה
מקוונת לא מבצעים פעולות אלו באופן סידורי. כדי לבצע קריאה
אקראית, משתמשים בפקודה: 86קת18ם שא פ1תהטא1. .פהמת.
הביטוי צטא פ411עא1 נחוצ פה כי מתייחסים לרשומה לפי מיקומה
היחסי וחייבים לדאוג לכך שהמקום היחסי אכן יוגדר כהוגן. פקודה
- 299 -
זו מאפשרת לקרוא בגישה ישירה כל רשומה המוכלת בקובף. פתיחת
הקוב חייבת להעשות על-ידי הפקודה עשקא1 א058₪ (ואז רק קריאה
תהיה אפשרית) או 1-0 א058 אשר מתירה גם מחיקות או שינויים.
התנאי עשא כ0411א1 יתקיים אם התא אליו התייחסנו יהיה ריק. עדכון
רשומות בגישה אקראית נעשה על-ידי העברת מספרה היחסי של הרשומה
לעדכון לשדה 891גת80-₪8%0₪. קוראים לרשומה הרצויה ומתקנים את
השדות העומדים לתיקון. (קריאה זו אינה הכרחית, אלא מומלצת כד:
לחסוך מן המפעיל הכנסת נתונים עבור שדות שאינם עומדים לתיקון).
אחרי התיקונים מבצעים את הפקודה:
[5866-0₪ת5 280%] 8שטם205-60₪ת5 מדדתמת
[8%קםת₪15 צמא פדעהטאד]
התנאי צמא פ1ן1גטא1 יתקיים אם התא שהתייחסנו אליו ב-₪ס8%ם-
1 רריק. מחיקה נעשית בצורה דומה. גם פה מומל לבצע קר*אה
אקראית ולהציג את תוכן הרשומה לפני המחיקה, כדי לוודא שהרשומה
הנכונה אכן תימחק. גם עדכון וגם מחיקה מתבצעים רק כאשר פותחים
את הקובף בעזרת 1-0 אמק0.
ג. גישה דינמית
גישה דינמית משלבת את היתרונות של גישה סידרתית ושל גישה
אקראית. ז"א, מצד אחד אפשר לקרוא ולכתוב באופן סידור* בעזרת
הפקודות עגמת, טש17תא ,מת ומס ו-51481 (כאשר הקבצים פתוחים בצורה
הנכונה כמו שהסברנו לגבי גישה סידרתית) ומצד שני אפשר לקרוא,
לכתוב, לתקן ולמחוק רשומות באופן אקראי בעזרת הפקודות מצדתשחת
(עהמת, מ7זתא ו-ש1ש]מע (כאשר הקבצים נפתחים כראו*).
הבעיה היחידה שמתעוררת היא בנושא הקריאה. הפקודה כגמת מאפשרת
קריאה סידורית (קריאת הרשומה שעליה עומד המצביע, דהיינו הרשומה
שנמצאת במקום הבא בקובף) וגם קריאה אקראית (קריאת הרשומה שמקומה
היחסית נמצא בשדה: 1פַתסא8ץ-₪8%0₪). איך נדע, איזה סוג קריאה
המתכנת רוצה לבצע? התשובה לכך היא שיש מלה מיוחדת (אמא)
שהוסיפו לפקודת כמת כדי לציין שרוצים קריאה סידרתית ולא קריאה
אקראית. המבנה של עגמת עבור קריאה סידרתית כולל את המלה אחא
ואת הביטוי פאם 41 לטיפול בקריאת הרשומה האחרונה:
[580 10א1] פתססמת ]אמא 652ט0-מסת5 פגחת
[פגמת-2א] 86פת15ם פאםע 47
מבנה הפקודה כגמת3 לגישה אקראית נשאר כמו שהיה, ז"א בלי לאפא ועם
הביטוי צשא פ1אטשא1, כדי לאפשר טיפול במקרה שמספר הרשומה שנקבע
שגוי בכך שהוא לא קיים :
[5866 10א1] 80082 662ט0א-₪סת5 סגסת
[פאגמת-פאם] 8%6כת₪15 צסא פךהטאד
- 300 -
להלן טבלת סיכום של האופציות השונות בשיטת ארגון יחסית:
צורת פתיחת הקוב .
שיטת הגישה פקודה עשפא עטקעטס 1-0 פאפצאם
סידרת: - .114א000ט5 מזט זט
פחמת
מתשטת
7
מצזוטא
אקראי - אספאגת מפט וט
פגטת
פדזתטת
מז
דינמי - 10אגאצת מש זטת
פגמת
ות
תפ
מדזתט
צאמא פגמת
3 דוגמאות
נציג להלן שתי דוגמאות של עבודה בקבצים יחסיים. בדוגמה הראשונה
נבנה ונמלא< קובף יחסי ב-ת רשומות המכילות אפסים, כאשר ם ייקבע
על-ידי המתכנת. התוצאה מבניית הקוב היחסי, תהיה אפשרות בשלב
מאוחר :יותר להוסיף רשומות ולמחוק או לעדכן את הרשומות שהוספנו.
נוסיף רשומות לקובצ זה בעזרת הפקודה מצ[תשמת, שהרי אין אנו
מוסיפים עכשיו רשומות חדשות, אלא מעדכנים את הרשומות הקיימות
שמכילות אפסים. בדוגמה השניה נציג דוגמה של אחזקת קובף *חס:
והדפסת תוכנו.
דוגמה ראשונה:
.תסנפנטנת ת61/108010ת166 (1)
,16-םהעשספק (2)
'1₪.280תט21' 10 ת4551₪ ש1תט21 561666 (10)
1 15 400658 (11)
8 15 ת128610ת0288 (12)
.מנתטנ21-165% 15 568005 116ש (13)
- 301 -
.םסנפ1טנת 868 (14)
.ת560010 116ע (15)
שנתט1? | 26 (16)
)17( 1.8061 3600268 1.
.םנתט21?-6המטתפסת | 01 (18)
. (9)3 216 ע58גא 02 (19)
. (20)א 16ק 6מפא 02 (20)
. (9)3 216 1-תפתסט1א-תט21 02 (21)
.(9)3 216 2-ת8ת0ט10א-210 02 (22)
. (9)3 16ק 1 יכט 02 (23)
.ת906010 8-5%02886ת1אעסט (28)
.אא 6נק שנתטנ2-7168% | 01 (25)
. (9)3 16ק 8 01 (26)
. (9)3 16ק 1 1 (27)
.ת2101810 26ט606ס5ק (28)
. בתפהת (29)
.מנתט231 6טק5ש0 006 (30)
. ' ?המת מם 580002 500825 צאבא אסצ' צַ18ק15כ (31)
. 0-02-3600268/ 400606 (32)
1 ע 1 שסעץ 1 שת1עע08 116ע-118ט2 םעס+עסק (33)
<< 1 11סמש (38)
.₪שנתט21 01086 (35)
. מטת 0סס5 (36)
)37( 6.
. 1₪ת210-+8מטתפסת 10 262065 6טסא (38)
.15082 10 1 6טסא (39)
.'זעהז' 2150187 צ86 8116טם1 ש1תט21->8תטתפסת 6סבעח (80)
8 = ססא 1₪ת210-105% 19 (81)
1 'פתססטת תסע' ,18א51-210טד ,' 15 12705פ' צ15018כ (82)
6 (83)
. 'אטע1תא 5000957011 ' ,1 ,' עתהססמת' צ15018ע (88)
הסבר: יוצרים קובףץ יחסי בגישה סידרתית (שצורה 1, אבל שורה זו לא
נחוצה מכיון שגישה סידרתית היא ברירת מחדל). שים לב שלא כללנו
כאן את הביטו*: דַפַהת80ע-0₪ס₪8% 15 צטא מטזדהמת כי :לא היה בו
צורך, מכיון שהשיבוץ הוא באופן סידרתי לפי סדר הכתיבה.
שורה 13: 1%ַא1-210פע?7 הינור שם הקוד שיוחזר על-ידי התכנית
המהודרת אחר* ביצוע כל פקודת קלט/פלט הקשורה לאותו קובצ, כגון
פתיחה, סגירה, קריאה, כתיבה וכדומה. בדוגמה לעיל,היות והכתיבה
היא סדרתית, אין חשש שנספק מקום יחסי לא מתאים ולכן יש כל
הסיכויים שיוחזר קוד "00" המסמן שהפעולה הצליחה. הדבר היחיד
שעלול לקרות הוא שלא יהיה מספיק מקום בדיסק להחזקת הקוב (קוד
בטווח 90-99), או שננסה לכתוב אחרי סוף הקוב (קוד>24) במערכות
המחייבות את המתכנת לקבוע את גודל הקובף מראש, את השדה -57מץ
אזאעז המוזכר בשורה 13 חייבים להגדיר ב-0-5108408א1אתסש.
- 302 -
שורה 18: הקוב מ*ועד להחזיק שמות של סטודנטים, מספר זיהוי,
(מספר זה שווה למספר הרשומה), ציון במבחן הראשון, ציון במבחן
השני והציון הסופי שהמרצה נותן להם (שורה 23). בדקנו בשורות 41-
4 אם הרשומה נכתבה כראו*.
דוגמה שניה. בדוגמה זו מעדכנים ומדפיסים את תוכנו של הקובצ
היחסי שבנינו בדוגמה הראשונה. יש ששה סוגי קלט לתכנית זו, אשר
לכל אחד מהם יש קוד משלו. הקודים הם:
₪8]: הוספת רשומה לקוב
מחיקת רשומה מהקובי
שינוי ציון המבחן הראשון
: שינוי ציון המבחן הש(
: שינוי ציון סופ
: הדפסת טווח מסוים של רשומות
ב ט םש ₪
תיאור מפורט של כל סוג של רשומת קלט מופיע בתכנית להלן בשורות
9. ברשומת הוספה חייבים לכלול את כל הנתונים. לעומת זה,
ברשומת מחיקה (שורות 41-43) אין צורך בכל נתונים שהם חו מהקוד
"א" ומספר הרשומה (שהוא מספר התלמיד) העומדת למחיקה. הרשומות
שמתייחסות לשינויים בציון המבחן הראשון (27-2%), בציון המבחן
השני (48-51) ובציון הסופי (52-55), כוללים את הקוד, מספר
הרשומה והציון החדש. ברשומה המבקשת הדפסה (56-59) הבקשה היא
למספר הרשומה הראשונה להדפסה עד מספר הרשומה האחרונה להדפסה.
תמונה של הקלט (241.א1) מופיעה להלן :
6" אברהמי 1010
6 יצחקי ₪017
16 יעקבי1022
008" שולמו₪007
15
0008 כהן 11007
100 לוי2018085
12
15
97
006
57
7 החדד₪019
9-5 גורדון₪020
6" גרשו ן1023
0 יחיאלי11037
7
002
299
התכנית מספקת שני סוגי פלט. הסוג הראשון (שורות 60-77) הוא כעין
רישום כרונולוגי
הקלט. אם פעולת שינוי הצליחה, הדוח מציג את הרשומה לפנ* השינו:
- 303 -
של פעולות הכולל תיאור של כל פעולה ברשומת
ואחריו. אם פעולת הוספה או הדפסה הצליחה, הדוח מציג את הפעולות
כמו שהופיעו בקלט. אם פעולה נפסלה מסיבה כלשה*י, מציגים את פרט:
הפעולה ואת סיבת הטעות. אם קוד הפעולה א*נו זיהוי, אין כוללים
את פרטי הפעולה בדוח, שהרי לא ידוע איזה סוג פעולה רצ*ינו לבצע.
הסוג הראשון של הפלט (הדוח שנמצא ב-002.241) מופיע להלן:
ציון ציון ציון שם פעולה הסבר הטעות מספר
סופי מבחן2 מבחן1 תלמיד תלמיד
76 7 65 אברהמ: הוספה 10
65 יצחק: הוספה 17
55 יעקבי הוספה 22
3 שולמן הוספה 7
מחיקה טעות במפתח - 5
08. 7 33 כהן הוספה טעות במפתח | 7
10 09" 100 לוי הוספה 5
55 שצינוי שני טעות במפתה 14
8. 7 3 שולמן לפני* שינוי ראשון 7
08. 7 12 שולמן אחרי שינוי ראשון
שינוי ראשון טעות במפתח 85
17 שינוי סופי טעות במפתח 1%
6 שינוי סופי טעות במפתח 73
8. 7 2 שולמן מחיקה 7
7 655 27 חדד הוספה 19
55 655 8 גורדון הוספה 20
06 55 08 גרשון הוספה 23
76 65 175 יחיאלי הוספה 37
קוד שגוי 7 8
2 1 טווח ההדפסה | הדפסת דוח
09 155 טווח ההדפסה הדפסת דוח
סוג הפלט השני מיועד למקרה שאחת או *ותר מן הפעולות היא פעולת
הדפסה (שורות 18-88]). במקרה זה רוצים להפיק דוח המכיל את תוכן
הרשומות שבקשנו להציג. אם יש יותר מבקשת הדפסה אחת, תוצאות
הבקשות תופענה אחת אחר* השניה בדוח. סוג הפלט השני (דוח של תוכן
הקוב שמופיע ב-12.241ש0)
מופיע להלן: 100 9 100 לוי 5
76 7 65 אברהמ: 19
6 917 65 יצחקי 17
7 65 1 חדד 99
5 55 8 גורדון 20
76 99> 5 יעקבי 2
06 55 08 גרשון 23
10 65 5 *חיאל: 37
66 97 655 יצחקי 7
7 65 1 חדד 99
55 55 8 גורדון 20
16 9 55 יעקבי 2
06 55 08 גרשון 23
10 65 5 *חיאלי 37
והתכנית:
.ת0101810 ת%611108%610ת160
.6 .16-מהעפסעק
. %6201ת116-00עק
'4.280' 60 ם8918 ש1תט21 561800
86 185 ת0ס12801ת88ע0
/ 6מהחצָת 18 200098
.68 1859 ע6א 6ט361801
. '28%. תד'
70 45518 28%8-ת1 5861666
.'006.286' 10 ם4551₪ ג200 561666
. '+00%52.28' 10 ת4551₪ 200-8802888 61606
.תסנפנט1כ 868
.ם506%10 116ק
מנתטנ2 כץ
18061 3600268 226 9.
. (9)3 16
. (20)% 16ק
. (9)3 16ק
. (9)3 216
. (9)3 16ק
.א 16ק
. 'ז' 081₪6
.'א' 08106
.'' 08106
.'' 78106
.'פ' 08106
.'פ' 08106
16 9)3( .
16 %)20( .
.(9)3 16ק
. (9)3 16ק
. (9)3 16ק
.א 216
. (9)3 16ק
.א שת
. (9)3 16ק
. (9)3 16ע2
.שנתו21-8%שטת 369 01
הנ 02
סת5 02
1-תטנת? 02
2-מט21 02
1 -טנ 02
.3-ו פק
.8 017
46 02
68 888
8 888
1תנתפ 88
2תנתפף 88
1 886
8 888
:1-18 02
מסת5-ת1 02
1-מט21-ת1 02
2-מט21-א1 02
1 -ט21-אך 02
. 660188/-0₪8%מ 369 01
8 -06א-מ1 02
8 ץד 02
.1-1טם1תפ-86שטת 365 01
1נת08-5א-ת1 02
11 פ-15082/-ת1 02
1טת1ת1-5-תט21-א1 02
- 305 -
.011-2ום1ת5-8%טת365
.א 16ק 1-2ום1מ808-5-ת1 02
. (9)3 216 1-2נות1ת15082-5-ת1 02
.(9)3 216 נטתנת2-59-מט21-ת1 02
. 01-5021ם1ת5-08%[ם0ת365
.א 16 1 02
.(9)3 16ק 01-מה8תפנא-תך 02
. (9)3 16ק 1ות1ת50?1-5-תו21-ת1 02
. 11800888-8%מנט0ת365
.א סנק 8 2 ?2 02
. (9)3 6 15082-18800858-56820/-ת1 02
.(9)3 16ק 15082-1800858-50%/-ת1 02
ת6סכ
.4 4260 3600268 180861
. 2061-0₪8%ת369
.4 סנס 1508-כ 02
. (3)א 216 1165נע 02
. (17)א 16ק 8% 02
.18 68ת366601 06א-78₪6 02
.א 16ק 08-58 03
.(16)א 16ק 4 03
. (16)א 216 8 02
.אא 16ק 111062ע 02
. (15)א 16ק ממסת5-ק 02
.אא 16 11162 02
. (2)3 16ק 1-תטנ2-2 02
. (5)א 216 1162נע 02
.(2)3 16ק 2-תט2-21 02
. (5)א 216 1162נע 02
.(2)3 16 22-21-01 02
0-8
.1 ₪ 3600265 18061
. 18060888-ת₪86-206טת365
.2 16 ע08פנא/-ק 02
. (8)א 16 11162ע 02
. (15)א 216 6₪ת5-ק 02
. (2)3 16ק 1-מט21-ק 02
.אא סנק 1162נע 02
. (2)3 16 2-תט21-ק 02
.(8)א 16ק 1162 02
. (2)3 216 1 טט21-ק 02
* הדפסת כותרות הדותה *
1
1
1
פע
1
פץ
01
.ת560%10 8-50028₪6ת1>עסש
- 106 0
01 0.
)48(
)49(
)50(
)51(
)52(
)53(
)58(
)55(
)56(
)57(.
)58(
)59(
)60(
)61(
)62(
)03(
)68(
)65(
)66(
)67(
)68(
)69(
)70(
)71(
)72(
)73(
)78(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
)83(
)88(
)85(
)86(
)87(
)88(
)89(
)90(
* המשך הדפסת כותרות הדוה % :
.'=' 811 6ט1אט0 (77)א 16ק ש%8- 056266 02 (103)
)104( 01 4 216 9)3( .
)105( 01
.'' 0816 א 16ת שפ-1₪תטטסא-+50 02 (106)
.'א' 6גו081 ₪שנתטססא-+50% 88 (107)
.'' 08106 א 16ק שפ-1₪תט21- 50% 02 (108)
.'א' 08106 שנתטנ2-+50 88 (109)
.'' 08186 א 16 שפ-עסעעם 02 (110)
.'' 6ט1ה0 פעספסם 88 (111)
.ת2101510 6עט20606ק (112)
.1 (113)
,8%8ע-ת1 סטקת1 ,שנתט21 1-0 ת006 | (114)
. 80858-ת200 ,ת206 6טססט0
טס 86-2002-8800858מטת68ת 6ס1עח | (115)
2-ת200-6%ע066א שסע" 18002858-ת86-200מטתפסת %6נעט (116)
.1 2 שת01ת8ט460 ש6ס+4
3-ת200-%06626% שסעת 858ק1860-ת06כ2-8%םטת365 66בסט (117)
.16 1 שת1סת8ט460 ע6ס+24
ט8000206-08 מסע" 81802888-ת6-200הנטתפסת שט+עח | (118)
.1 1 שת1סתה8ט40 42602
מנמספץ ב86-200מטת65ת 6ס1עש (119)
30818062-2-%0%5620% מסעתע ת86-200שטתפ6ת שסנסש (120)
2 שת1סת8ט460 ע1)00
06818%600-3-400026% מסעת ת86-206םטםת65ת 6סבעח (121)
.16 1 שת1נסת8ט40 ע6ס+4
ע8א-%056266 מסעץע ת2006-%המטתפסת ₪166 (122)
.1 1 שת1סת8ט460 4+602
6 2808₪-ת1 86סת (123)
.%פ-1₪תטססא-+50 70 'א' סטסא 6םם 45 (128)
.מפנתוס6א-+50 11סת0 26006 שע0?ע6ק | (125)
. 206-7800888 ,ת200 ,2868-ת1 ,1₪מט21 061056 (126)
.חטת 5600 (121)
.וט (128)
.ת0₪8%6-200ת369 10 508068 סטסא (129)
.אפ-02עע22 0סס 'ע' סטסא (130)
תסגת1 105818 19 (131)
8 מס ?עטק (132)
ת6ת1 1%8ת60א 1% ₪186 (133)
8 מפ0ס?עסק (138)
מסת1 1-1טת1ת5 +1 156ע (135)
1טתנתפ-18%8%ק מע6+0ק (136)
תסם7 1-2טת1תפ +1 156ם (137)
2ותנת5-215%8% ₪ע0ס+62ק (138)
תפתך 5021 +1 ₪156 (139)
1 מע ?יטק (180)
תסת1 8860858 1% 156 (181)
8 מש 0+?ע6ק (182)
- 307 -
)183( 6
.0%ע215%86-80 שע0ס+עסק (188)
6 8608כ2-ם1 66 (18%5)
.שפ-1₪מתטס6א-+50 10 'א' שטסא 6םם 26ב (186)
)187( 1.
.ע1508א-2 ,15282-181₪16א8 ,עהקפגא 10 ע1508/-ת1 6טסא (188)
.2-56 ,א6₪ם59 10 שסם5-ת1 שטסא (1849)
.1-מטנ2-2 ,1-םתט21 10 1-מט21-ת1 6טסא (150)
.מו2-21 ,2-תט210 710 2-מט21-ת1 6טסא (151)
.5041-תט2-21 ,50+1-תט210 10 1+50%-תט21-ת1 006 (152)
.3 20 "הוספה" 6טסא (153)
מזתט8%5-21שטת65ת 06 דעש (158)
.8% 10 'טעות במפתח' שטסא ע6א 8116טתך (155)
.1 1 שתדסתהט6 ע4+60 ב86-206םטת65ת 6ס1עש (156)
. 1%8ת60-218%8% (157)
.ע8ק5נא-2 ,16ש415282-181 10 8א1%ת60/-82ק15א-ת1 6פטסא (158)
מ םק (159)
.1 0 "מחיקה" פטסא (160)
מנתט21 261666 (161)
.8% 10 'טעות במפתה' שטסא 86 1164הטת1 (162)
.1 1 שתדסת8ט40 ע4106 תססכ6-2המטתפסת 6ס1עש (163)
.1 ות1ם15%8%6-5ק (164)
.2-18 ,181₪10-ע8ק15א 10 1-1טת1ת82-5ק15א-ת1 6טסא (165)
41 60590 (166)
מס פעסעעם ססא 1% (167)
8 70 "לפני שינוי ראשון" שטסא (168)
16 1 אַת1סת4008 ע4260 ב200->המטתפסת 6ס1עש (169)
11מט2-21 ,1-תט21 10 נטתנת1-5-תט21-ם1 שטסא (170)
2-תט2-21 10 2-מט21 פטסא (171)
1 טכטנ2-2 710 50+1-םט21 ס6טסא (172)
8 0 "אחר* שינוי ראשון" 6טסא (173)
םנתט21-8%שטת365 6ס1עטסת (178)
6% 70 "טעות במפתה" שטסא ע6א% 8116טתד (175)
6 1פשסת-6חע (176)
6 1 שת1סת8ט40 42662 ת06כ6-2השטת65ת 6ס1עש (177)
8 20 'שינוי ראשון' שטסא 156 (178)
סט 10 'טעות במפתח' שטסע (179)
1-מט:2 10 1מת1ת1-5-מט210-ת1 פטסא (180)
.6 1 שת1סת8ט200 426020 ב00כ86-2מטת65ת 6סנעק (181)
- 15 (182)
.ע8ק15/-2 ,82-7181₪16ק15א 10 1-2טת1ת15282-5/-ם1 שטסא (183)
01 מש ?עס (188)
מסת1 פעסעעע ססא 12 (185)
8 סע "לפני שינוי שני" שטסא (186)
16 1 שתדסת8ט46 42602 ת200->המטתפסת 1>6עש (187)
- 308 -
2-תטנ2-2 ,2-מ210 10 1גוםת1ם2-5-מ210-ת1 סטסא
11תטנק-2 10 1-ת210 6טסא
1?ספ-תט2-21 10 50%1-םט210 סטסא
8 10 "אחרי* שינו* שנ*" פטסא
1₪תנו21-8%שטת365 106עשסת
6 70 'תע20 8ם20ש' שטסא צ86 116טתך
6 נדפשסת-6חצ
6 1 שתדסת8ט40 41602 ת86-200שטתפסת 1%6קש
8 סך7 'ש*נוי שנ*' שטסא 3156
6טפ' 10' 'טעות במפתח' 6טס!
2-מנו2-21 10 1טתנת2-59-תעו21-ת1 סטסא
.6 1 שתנסת8ט480 416028 ב86-200מטתפסת 06 1עש
. 15%8%6-5011ק
.ע1508א-2 ,15082-181₪186א/ 10 15082-5091א/-ת1 6טסא
טופס ?עס
פצסעעט ססא 12
8 0 "לפנ*י שינוי סופי" פטסא
6 1 שתנ1סת8ט460 ע4+060 ב06כ086-2ת65ת 6טנסעש
2-תט2-21 10 2-םט21 6טסא
11-מטנ2-2 10 1-תט21 שטסא
1 -טטנ2-2 ,50+1-םט210 10 1טתנתפ50+1-5-םט21-ת1 פטס
8 10 "אחרי ש*נוי סופ:*" פטסא
יֶּ ם1תו21-8%שט0ת65 166עשסת
86 0 'טעות במפתה' שטסא ע6א 116ה8טתד
ש 6 דשסת-6ת
86 1 שת01ת2608 42662 ב86-200שטת65ת 6ס1עא
8 ס1 'שינוי סופי' שטסא ₪156
8% 70 'טעות במפתח' 06
1 רפטנ2-2 10 1טת1ת5021-5-ו21-ת1 סטסו
.6 1 שתנסת4008 42062 ב86-206שטת69ת3 6ס1עש
8.
.שפ-1₪ת502-210 70 '' שטסא
. 80-181₪16ק15 10 6ע82-71802858-5%82ק15/-ת1 6טסא
84 > ססא 18 3267 ש1מט21 56826
שפ-עסעעם - 10 'ע' סטסא צ%6 81186טתד
.3% 170 '08601-ת820680/' 6טסא
1 170 'הדפסת דוהח' 6טסא
.מפתפ-2 20 'טווה ההדפסה' 06
.1-תטנ2-2 10 15082-8800858-56806/-ת1 סטסא
:2-2 10 +15082-71802858-50/-ת1 סטסא
.1 1 שת1סתהט0 ע2+06 ב6-2006אמטת65ת 166סש
6אא ם1תט21 36806
.שפ-1₪תט21-+50 10 'א' שטסא 4םתם 46
פעסעעם ססא 1%
< ₪15282-181₪16 611ם0 180628506 שעס+עסק
.םנתו502-21 ע0 15082-81800858-501א-ם1
- 309 -
)188(
)189(
)190(
)191(
)192(
)193(
)198(
)195(
)196(
)197(
)198(
)199(
)200(
)201(
)202(
)203(
)208(
)205(
)206(
)207(
)208(
)209(
)210(
)211(
)212(
)213(
)218(
)215(
)216(
)217(
)218(
)219(
)220(
)221(
)222(
)223(
)228(
)225(
)226(
)227(
)228(
)229(
)230(
)231(
)232(
)233(
)235( ₪850.
. 086-200-118800888ת365 10 528668 פטסא (236)
.ע8ק5גא-ק 10 ש8ק15א סטסא (231)
.שסת5-ק 10 מסת5 שטסא (238)
.-מט2-ת 710 1-תמ210 סטסא (239)
-מט2-2 10 2-תט21 פטסא (200)
:יטפטנ2-2 10 50+1-תט21 סטסא (221)
.6 1 שתנסת8ט46 22602 8800858-ם6-200השטתפסת 6ש1נקתשט (282)
סאסא ש1תט21 3686 (283)
.של-1₪תט502-21 10 'א' סטסא 6םם סב (288)
.0%ע0ו18-18%8%ק (285)
. ת6-200התטתפסת 10 508665 סטסא (286)
.5082:א-2 10 15088א-ם1 פטסא (287)
. 1גושָ8תפ-%06 10 1-08 סטסא (288)
.0 0 'קוד שגן: ' טס (289)
.16 1 שת01ת8ט460 22062 מ6-200המטבתפסת %6נקש (250)
1 ((251)
םנתט21 6בסת3 (252)
.אפ-עסעעם 10 'ם' שטסא ע6א 116הטתד (253)
מסת1 פעסעעם ססא 19 (258)
₪סתפ-2 10 שסת5 6טסא (255)
1-תט2-21 10 1-מט21 סטסא (256)
2-תט2-21 10 2-מט21 סטסא (257)
1טאטנ2-2 10 5904/1-םט21 סטסא (258)
)260( 6
,מסתפ2-5 10 508068 פטסא (261)
2-21 ,2-תט2-21 ,1-תט2-21 10 262068 סטסא (262)
הסבר התכנית:
שורה 12: נשתמש בשיטת גישה דינמית, שהרי רוצים לפעמים לפעול
בגישה אקראית (למשל עבור מחיקות הוספות ושינויים) ולפעמים -
בגישה סידרתית, למשל עבור הדפסות. גישה דינמית מחייבת אותנו
להוסיף: 1פת80ץ-₪8:0₪ 15 צחא ₪ בשורה 13 ולהגדיר אותו
1--- ות ב-0-5108408א₪0881 (עיין שורה 10%).
שורה 114: פותחים את הקובף היחסי א1אט21 כ-1-0 כדי לאפשר כתיבה,
מחיקה ושינויים אקראיים.
שורה 153: העברת שם הפעולה (הוספה) לטדה הנכון בדוה הרישום
הכרונולוגי כדי שנוכל לראות איזו פעולה התבצעה.
שורה.15%: מוסיפים רשומות בעזרת הפקודה מ17תח. נשאלת השאלה, איך
אפשר להשתמש בפקודה מ8דַ₪1, המיועדת לכתיבת רשומות חדשות במקומות
שהיו עד עכשיו ריקים בקובץ, אך למעשה כתובים ב"אפסים". בדוגמה
א' מלאנו את הקוב כולו ברשומות ריקות ועל כן ראוי היה להשתמש
בפקודה אד[תשמת המיועדת לשינוי. ישנן 3 תשובות לדבר:
- 310 -
(1) יתכן שאותן רשומות אפסים בינתיים נתמלאו ונמחקו בעזרת
הפקודה 6ץש]עע. במצב כזה הרשומה באמת ריקה, ואם-כן - נ*תן ואף
חובה להשתמש בפקודה 178 כדי להוסיף רשומה.
(2) יתכן שהקובף נבנה בגישה אקראית ולא בגישה סידרתית. כאשר
בונים קובצ בגישה אקראית ניתן להוסיף רק רשומה אחת. למשל ברשומה
עם מספר יחסי 100, המערכת תשמור 99 מקומות ריקים לפני אותו מקום
שנתפס. מקומות אלה הם באמת ריקים וניתן למלא אותם רק באמצעות
הפקודה משד.
(3) יתכן שפועלים במערכת כמו ה-א04 (ואכן תכנית זו נכתבה ובוצעה
במחשב זה) המאפשרת בניית קבצים יחסיים חדשים, גם כאשר פותחים את
הקובצ כ-1-0 כמוצג בדוגמה לפנינו. כל רשומה חדשה נכתבת בעזרת
הפקודה ₪3%17₪. אחרי הוספת רשומה, כאשר מבצעים שינויים או מחיקות
משתמשים בפקודה מד1תאטת, כמו שנראה בהמשך. שים לב שבשורה 1%8,
לפני כתיבת הרשומה עלינו לדאוג שמספרה היחסי של הרשומה :וצב
לשדה 15082-181₪16א (שהוגדר בשורה 104) שיוחס ל-צשא מטדי)/זחת.
שורה 161: מחיקת הרשומה שמקומה היחסי נמצא בשדה 15082-181₪16א,
שהוא ה-ע₪א ₪/421מת. אם המקום הזה ריק (לא היתה שם רשומה
להמחק), התנאי עשא פ11ג/א1 יתקיים ונכתוב הודעת טעות בשדה 78407
בדוה התנועה. אם היינו מגדירים שדה 5142105 1/8ק, הקוד "23"
המסמן שהרשומה לא נמצאה היה מועבר לשדה הסטטוס. ו
שורה 159: לפני שמוחקים רשומה, מנסים לקרוא אותה (עיין בשורות
2) אם הרשומה אכן ק'ימת, מעבירים את פרטיה לשדות
המתאימים בדוח כדי שנוכל להדפיס את תוכנה הקודם (שורות 254-
8). אם הרשומה איננה ק*יימת, מאפסים את שדות הדוח (שורות 261-
2) כדי שלא ישארו בהם נתוני הרשומה האחרונה שנכתבה לדוח. אילו
הוגדר 5714105 8₪, שדה הסטטוס היה מתמלא ב-"23" אם היה ניטיון
לקרוא רשומה שאינה קיימת.
שורה 160: העברת תיאור הפעולה ("מחיקה") לשדה המתאים בדוח כד:
שנוכל לזהות את הפעולה.
שורה 163: כתיבת מספר הרשומה שמחקנו. אם אכן נמחקה רשומה, גם
פרטיה יכללו בשורה זו של הדוח. מאידך, אם הרשומה לא נמצאה, אז
לא היתה אפשרות למחוק אותה. עובדה זו תצויין ברשומת הדוח בשדה
צטגד.
שורה 165: מעבירים ל-עשא אט411מת את המקום היחס שבו
לבצע שינוי.
רוצים
שורה 166: כדי לבדוק אם הרשומה אכן קיימת, מנסים לקרוא אותה
לפני ביצוע השינוי ומעבירים את תוכנה לשדות המתאימים ברשומת
הדוח. אחרת, מעבירים תווי רווח לשדות של רשומת הדוח.
שורות 167-169: אם הרשומה קיימת, אחרי שמעבירים את תוכנה המלא
לפני ביצוע השינוי לרשומת הדוח (שורות 258-258), כותבים את
הרשומה.
- 311 -
מממממהמהאאמ/ההההטאטאהמהמהשאמטמשהמההטמםתטהמממאשםנאבמשטממממםמעסמקממכהמממתטקקמכמקטממממשטמננננכבבטבמננשהשב םהש שש ...=
שורו 170-175: כתיבת הנתונים החדשים בקובף הי*חסי והעברתם
לרשומת הדוח כדי להציג את הרשומה אחר* השינ!וי. שים לב שפה
הפעולה מעזתשמת מתאימה, מכיון שאנו משנים רשומה שאמורה להיות
קיימת כבר בקובף.
שורות 178-181: במידה ונפלה טעות וניסינו לשנות רשומה שאינה
קיימת, נציין טעות זו ונעביר את תיאור הטעות לדוח יחד עם
הנתונים שרצינו לשנות. אילו הגדרנו שדה 514105 108ע, המערכת
היתה ממלאת אותו בקוד "23" המצ*ין ניסיון לשכתב רשומה שאיננה
קיימת.
שורות 182-199: טיפול דומה לשינוי בציון של המבחן השני.
שורות ]200-21: טיפול דומה לשינוי בציון הסופי בקורס.
שורה 221: קביעת המצביע של הקובצ היחסי לרשומה הראשונה שמקומה
היחסי גדול או שווה ל: 6ע858-5082ק15282-180/-ת1.
שורה 222: עשא 4212עא1 יתקיים, אם ניסינו למקם את המצביע אחר:
הרשומה האחרונה בקובצ.
שורות 221-228: מילוי וכתיבת רשומת הדוח לתיאור פעולת ההדפסה.
שורות 229: קריאת הרשומה שנמצאת במקום שבו נמצא המצביע. שים לב
שהשתמשנו בגירסת כפגמת הכוללת את המלה זאמא, ז"א אזאט21-פגמת-
1אמא, כדי שנוכל לקרוא את הקוב באופן סידרתי. בלי המלה זאטא
הפקודה כעגמת היתה קוראת את הרשומה שמקומה היחסי נמצא בשדה
8 שהוא ה-851ת80עץ-₪8%0₪ שקשור ל: צשא מעשךךותת.
שורה 232: בקריאה סידרתית, הערך שנמצא בשדה 815082-181₪16 הוא
המספר היחסי של הרשומה שזה עתה נקראה. נפסיק את ההדפסה כאשר
אותו מספר גדול מ: 0%פ-15082-1800858/-ת1 ודרישה זו אנו מבצעים
בפקודה זו.
שורה 5: כאשר יש טעות בקוד הפעולה, מגיעים לכאן ומדפיסים את
מספר הרשומה והקוד השגוי יחד עס הודעה על בעיה זו. לא מנסים
להדפיס את שאר חלק: הרשומה, שהר* המבנה שלה אינו ידוע כי אין
יודעים את קוד הפעולה.
4 חרגילים
שאלות
1. בקוב יחסי, איך מגדירים את מקום הרשגּמה?
2. למה השימוש בקבצים י*חסיים אינו נפו%?
3. מתי כדאי להשתמש בקבצים יחסיים?
84. האם המפתח היחסי חייב להיות חלק מן הרשומות בקובא?
איפה מאחסנים אותו?
5. מתי אפשר להשמיט את הביטוי... 15 צשא מט11הטת מן הביטו:
. . א49510 5₪1007, ומתי צריכים אותו?
6. האם יתכן שיהיו מקומות ריקים לאחר *צירת קוב יחס:*?
רמז : התייחס לשיטת יצירת הקובא.
7. אם יצרנו קוב יחסי בגישה סידרתית (דינמית או אקראית), האם
זאת אומרת שאין לגשת אליו אלא באותה גישה?
8. איזו צורת פתיחה מתאימה ליצירת קוב יהסי?
9. איזו פקודה בקובול ממלאת מקום שאין בו רשומה?
9. איזו פקודה בקובול מאפשרת שינוי תוכנו של תא שמחזיק רשומה?
1. איך אפשר לדעת את מספרה היחסי של הרשומה שזה עתה נקראה?
2. איך *כולה הפקודה מ₪7]מעת להשפיע על הפקודה פגחת שתבוצע
אחריה?
3. עבור אילו פקודות מופעל הביטוי עצמא 115געא1 בקובף יחסי ומה
גורם להפעלתו?
תכניות
1. בצע תרגילים (3) ו- (4) בפרק הקודם, כאשר קובף האב הוא קוב
יחסי ולא קוב אינדקס סידרת'י.
2. בצע תרגיל (1) בפרק הקודם עבור קוב יחסי, ז"א בנה את קוב%
האב כקובצ יחסי כאשר המפתח הוא "מספר מועסק".
3. כתוב תכנית לבניית קוב יחסי המכיל נתונים על 150 קופות
רשומות. כל רשומה מכילה גם את המקום היחסי (מספר הקופה).
תיאור הקובצ מופיע להלן:
- 313 -
וו וו ...0 0
עמודה שדה משמעות
13 מספר קופה
8-5 מספר החודש
1 י *תרת מכירות בהתחלת החודש | סכום מכירות כל השנה
7 מכירת פירות וירקות סכום מכירת ירקות של השנה
3 מכירת שימורים סכום מכירת שימורים
21-29 מכירת בשר סכום מכירת בשר
5 מכלרת מוצרי חלב סכום מכירת חלב
7 מספר שנה
הערה: היתרה שווה לסכום כל המכירות המפורטות. כל הסכומים
כוללים שתי ספרות עשרוניות.
עבור הקוב שבנית בשאלה (3), כתוב תכנית שמקבלת שם של חודש,
בודקת אם הוא אחר* החודש הנמצא ברשומה של אותה קופה, ומעדכנת
את הרשומה. רשומת תנועה נראית כך:
עמודה שדת : משמעות
1-0 שם חודש
11-22 שנה
1-88 מכירת פירות וירקות מכירות בחודש זה
0-4 מכירת שימורים ז"
2-0 מכירת בשר "
2-6 מכירת מוצר* חלב "
העדכון דורש הוספת כל סוג של מכירות לשדה המתאים בקובף האב
והוספת סכום המכירות בחודש ליתרה בקובצ האב.
כתוב תכנית כדי להוסיף רשומות עבור קופות חדשות, ולמחוק
רשומות עבור קופות שאינן בשימוש.
כתוב תכנית המדפיסה דוח הכולל את כל הקופות שמספרן מ- 8 עד ס
כאשר 8 ו-ם נתונים ברשומת הקלט.
- 314 -
נספחת א
קובול במחשבים אישיים
(?במ ותואמים)
קובול במחשבים אישיים
קיימות שתי רמות אפשריות של קובול לפי ההגדרה של זַפ5אב
(58%100%6ת1 08265ת5%68 81ת8%10/ ת168עסשה). כדי ששפה כלשהיא תקרא
קובול, היא צריכה למלא לפחות את דרישות הרמה הנמוכה ביותר.
קובול עבור מחשבים אישיים עונה על דרישות הרמה הראשונה במלואן
ובנוסף, עונה על חלק מדרישות הרמה השניה. מהדר הקובול של חברת
% למשל, מבוסס על גירסת הקובול של 197%4, אך אינו כולל
חלק מהמודולים החזקים של הרמה השניה, למשל המ11תש-1תסעמת, 5087,
מפתחות משניים בקבצים | אינדקס | סידרתיים ופקודות 08
00 ,60א1פאסקפטתת00 פפה, אדפאסספתתת 60 07גתדמספ.
מהדר הקובול עבור מחשבים אישיים כולל גם פקודות מיוחדות שאינן
חלק מקובול סטנדרטי, למשל אלו המאפשרות בניית והצגת מסכים בצורה
אי נטראקטיבית וקליטת מקשים מיוחדים המאפיינים מחשבים כאלה. הוא
גם כולל רכיבים מן הרמה השניה שחודשו בגירסה של 1975, למשל
הפקודות 50₪01א1, 6א1ת51 ו- ַא1ַת1פאע והאפשרות של כתיבת כותרות
ושוליים בעזרת הפקודות 408₪א11 ו-02ם. להלן מספר דוגמאות של
תכניות שהורצו במחשב 0ק-18% תחת המהדר של 162080+6א:
דוגמה 1
תכנית לדוגמה 1: , .תמ2101810 מ%61+168610ת186 (1)
.12 -מהקשסעק (2)
.ת1810ט1כ2 6ת6מתסת1טתע (3)
.ת566010 ב86010ע1802?תס0 (8)
.56010 06ו60ו6-0>טקתד (5)
.1 116-00ק (6)
.18%ת 10 ת48518 800662-888%020% 561606 (7)
.םס1פנטנת 2868 (8)
.ת560%10 116ע (9)
.85%000%/-602ט0א פק (10)
96 06ע2 600068 18061 (11)
% טס 18 60026 2868 (12)
. "28%. 2:888" 158 כ116-1ע 0% 6ט081 (13)
- 315 -
0 7 ו ו
1
1
1
. 855020%]%- 36586
. (9)5 16ק 15082 03
. (15)א% 16ק שסת5 03
סנ 0% 03
. (3)א 16ק 1162נע 03
.9 סנק עט1ם5 03
.+ 16 61801₪צ 03
.ת560%10 5000886-שת1אמס₪
.+ 16 6-6
.+ 08106 > 646 888
.1 0106 (9)5 16ק 0% ->סמנות פס
%- - 1
. (15)א 216 6₪םפ-< 03
.(9)5 16ק ע508:א-א 03
.9 סז 0% 03
שסנק עטנתפ-% 03
.4 16 61801₪צ-% 03
.ת560010 062600
.עַעסתם-ת 50260 01
.ת50200 318%
.6ם1[ת18 "שם:" 8106 50 משט001 1 6ת11
(15)א 16ק 16 תשט001 1 6ת13
6-0
.מסתפ-8 אַת51
.181186 "מספר:" 08106 50 תשט001 3 6ם11
. (9)5 216 16 משט001 3 6ת11
0 -96 טס
.ע8נש-א שתנפם
.םת "שעות:" 78106 50 תמט01ס0 5 6ת11
9 1:6 16 משט001 5 1126
6-0
.ת-א 8ת051
.6ם18[ת11 "שיעור:" 0/8186 50 תשט1ס0 7 6ם11
9 ס:01 16 תמט001 7 6מ11
0 -696ט36
.תגונתפ-% 8ת051
.שת1[תש1א "ילדים:" 6ט081 50 תשט1ס0 9 6ת11
9 216 16 מפט001 9 6ת11
0 - פטס
.181צ-א שַת1פ0
2
2
(2
2
2
2
2
022
02
2
(2
01 502ע00ת-תתסע-1.
.ת50260 %ת18
"מיספר הרשומות הטבות הוא:" 78188 50 תשט1ס0 5 6ם11 02
136 ג
0 תשט001 5 116 סתפ-ת50200
0 (9)5 216
. 0%סש10-0₪0%ת365 מסתע
- 316 -
2
(2
.ת1510ט1ת 6עט0006עק | (61)
.תנפסת | (62)
70 98 פטס (63)
.ת00-50266( םעס+עסק (68)
.0% 8850/א-6%2ט30 6ט6ט0 026 (65)
0611 1506 שעס+עסק (66)
.1-עע6תת-ת50200 215018 (67)
)68( 01086 %006%2-/08560206 .
. מטת 00ס5 (69)
. ת50260-שסא (70)
.8-56 10 5280605 סטסא (7)
.0-81 עט1הפ-א סַסג5-א ע8ק15א-% 10 262068 סטסא (12)
. עעטתם-ת56200 צ215018 (13)
.טס (73)
.םשת5-א (16 ,1) 460606 (75)
. 0 ו מסעת 265506ק%6-2 2006006 (76)
ססא 18% (77)
.ע8קפנא-% (16 ,3) 260006 (18)
.ץצ 280806 שסעת 205506ק2-ע6א 266005 (79)
4 ססא 1% (80)
.6ס8ת5-א (16 ,5) 406606 (81)
.ע%6 280806 מסעת 265506ק-ע86 400605 (82)
6 ססא 1% (83)
עטנת5-% (16 ,7) 4660006 (884)
.3 80806 מסעת 86-2265566 400005 (85)
טססא 12 (86)
₪נ186צ- (16 ,9) 260006 (87)
צַ6א 50806 מסע? 265866ק-ע86 460006 (88)
4 ססא 19 (89)
טסט6-10סשטת365 70 1 466 (90)
תוא 10 ע1508/-% סטסא (91)
מסת5 10 ₪סת5-א שטסא (92)
6% 10 5806-א סטסא (93)
עטנם5 10 עט1םפ-א% סטסא (94)
1861₪ע 10 61861₪צ-א סטסא (95)
% טפס 166קש (96)
.ת00-50206 ₪ע0ס+עסק (97)
- 317 -
הסבר התכנית:
הרחבות של הפקודה 400871 ממלאות תפקיד מרכזי בתכנית זו. המבנה
הראשון של הפקודה 400077 מוגדר בצורה הבאה:
מצאכ
צאפ
אסתץ 5866 00071
פאז
עצמא 05
בנוסף על האפשרות המקובלת לקליטת צגע, 2478 או מא1ד מן המערכת,
ניתן גם לקלוט את מקש הסיום האחרון שהוקש, כדי לסיים פעולת
01 ממבנה 3 או 5 (שיוסברו בהמשך). לתוך 8866 יועבר קוד בן
שתי ספרות המציין את המקש שהוקש. הקודים הם כדלהלן:
קוד מקש סיום
התצאם , םג
₪
0
מבנה 3 של פקודת 77מ200:
0-1
2-1
צ דט - דט
1-5
א60-510א תד
1 דסאסאק 1 ] 5806 מטא₪1% 400077
מס
0-8
הסמ תס- צידסוום
0-7
סטטם
1-0
הסבר: מטא1ש מציין רק את המקום של הנתון במסך. ברוב המקרים
- 318 -
מציינים אותו על-ידי שורה ועמודה (68טנה8, 8עטת5). אפשר גם לקבוע
את השורה על-:ד:
שימוט באוגרים מיוחדים א21 ו-002 שהמתכנת *כול
למלא. ניתן אז לכתוב:
] [2-810₪ת8 [-/+)+]001 ,[1-מס1ַת5 [-/++]א11 |
אפשר להוסיף אחת או יותר מן האופציות אחרי המלה ₪11%. משמעותן
היא:
ו
2-1
צשט- ד תת
צע דפ - 1
116-510
דסאסתק
טסט
- דא
אסמתס- צדקואם
1אפ-070
מקומות נוספים בשדה הקלט 88668 ובמסך *מולאו
ברווחים.
מקומות נוספים בשדה הקלט 8868 ובמסך ימולאו
באפסים בינר*ים. +
בסוף פעולת 400071 , תווי הקלט ינועו לצדו
הימני של השדה. בשדה הקלט 8866, הזזה כזו נגרמת
על-ידי | הוספת 10587 בזמן הגדרתו. אופציה זו
מתאימה במיוחד כאשר הקלט הוא בעברית ורוצים
יישור מצד ימין. אין למלים אלו משמעות עבור שדה
נומרי.
משמש כמלת-תעוד, שהרי ברירת המחדל היא *ישור מצד
שמאל.
מחייב שהסימן ייכנס בצד ימין של שדה (ומר* במקום
בצד שמאל, אם השדה תואר כשדה בעל ס*מן.
גורם לשדה אלפנומרי, או אלפביתי, שמופיע במסך
להיות מסומן בנקודות, עד שהמפעיל מקיש את תוו:
הקלט; שדה (ומרי יהיה מלא באפסים, חוף מאשר
במקום שבו תהיה הנקודה העשרונית. בשדה עשרו(:
יהיה תו רווח במקום שבו צריך להיות הסימן.
גורם להצגת ערכו המקורי של 58066 במסךך ולקליטתו
מחדש, גם אם המתכנת מדלג עליו.
מחייב את המפעיל להכניס מספר תווים השווה לאורך
השדה, ואינו קולט מקש סיום עד שהוא מקיש את כל
התווים.
מונע ממקש סיום לפעול עד שהוכנס לפחות תו אחד
בשדה.
גורם לדילוג אוטומטי לשדה הבא, אם המפעיל הכניס
את כל התווים הנחוצים למלא את השדה, ואפילו אם
הוא לא לחצ על תו סיום.
- 319 -
קטטם גורם להשמעת צפצוף כאשר הפקודה 40007?7 מתבצעת.
0 -א גורם לכוכבית להופיע בשדה עבור כל תו שהוקש.
בזמן הכנסת נתונים מותר למפעיל ללחוצ על:
א. פאש-1801א00: מוחק מה שהוכנס כבר לשדה.
ב. חצ ימינה וחצ שמאלה, מזיזים את הסמן ומאפשרים למפעיל להחליף
מה שהוקש במקומות אלה.
ג. 50408א0%הת: מוחק את התו האחרון שהוקש.
שורה 63: 98 אינו הקוד של אף לא אחד ממקשי הסיום, ולכן מכניסים
אותו כערך התחלתי.
שורה 64: מפנה אותנו לפיסקה אמםת50-שמא, שם מאפסים את השדות
שיופיעו במסך ומציגים את המפה שתוארה בפרק חדש הנקרא? אמםת50
א (שורה 31). כאן משתמשים באופציה חדשה של צ%48קפדק
שצורתה: ת₪8580 צ15018כ2 כאשר ת₪8580 הוא כניסת תיאור מסך הנמצאת
בפרק א5₪0110 אמ080פ5. מטרתו לתאר בפירוט של מסך שיוצג במלואו על
הצג ויאפשר קליטת נתונים עבור כל השדות המתוארים בו.
שורה 32: שני סוג* כניסות קשור*ים למסך. האחד נקרא "כניסת מסך
קבוצתי" ונראה כך:
[טע] [עמתדטסעת] [550085] [010] בג₪8586-6₪ב5 8מהע ע1508ם
מספר הרמה הוא מספר בין 01 ל-89 ושם המסך הוא חובה, מפ!(*.
שבעזרתו נוכל להתייחס אל המסך כולו בפקודת %צ18ק15כ. המלים
0 ,50, פמת1טסעת ו-011ע מקבילות לתכונות - א0₪₪0-צדקאם
4010-5810, | 080ע-0א ו-א08₪0-טעת בהתאמה, כפי שראינו בקשר
לפקודה 800₪2%. משמעותן פה היא שלכל שדה במסך, ש'יתואר בעזרת
כניסת מסך יסודית (יוסבר הלאה), תהיינה התכונות הכלולות בכניסה
הקבוצתית עבור אותו מסך.
שורה 33: המבנה הכללי עבור כניסת מסך יסודית, כמו שנמצאת בשורות
3, מופיע כדלהלן :
[ת₪8580-158%ת20] השהע15282-2ם
[אמםת50 אאגתם]
[1-810₪ת5 (105ע2) 15 הממאטא מאד1]
[2-810₪ת5 (2105) 15 הממאטא אאטע 0ס]
[פאזע אאהו2]
ממסבן
[שא1הטפפאט]
[18₪0ט-מפתמטמת]
[ סד ]
[אאזעם]
[3-8810₪ 00108-פאטסת0םה0ע]
ראה המשך בעמוד הבא [ 8-58106₪ 2-601.08א0800א240]
- 320 -
[5866-2 10] [[11%66281-2+ אסתע]
1 175 040
[ 8866-1) הגוס -2020%ת₪86 15ץ מתייסדק
10
6-3 10
[2880 אמט אאגזם]
וטו
תת צפטצ
[0טה ]
[5008]
[פמתדטספת]
[זטק ]
הסבר המאפיינים:
אםת0ם אאהזם
אא00 ,טא
מאז] אאהתם
,
גורם למחיקת המסך לפני שהנתונים בשורות האחרות
יוצגו. הוא גם ממקם את הסמן במקום (1,1) ומחזיר
את צבע המסך לערכו המקור'י.
כאשר נתקלים בכניסת מסך ברמה 01, מיקום הסמן
| נקבע כ-(1,1). משנים ערך זה על-יד: כתיבת מא
תתמאעא או תתםאסא אא00108. אם כוללים את המלה
5, מוסיפים 1-816₪ת58 למספר השורה הקודם או
למספר העמודה הקודמת. אחר* כל הכנסה לשדה, המונה
עולה בהתאם, ו-105ק מתייחס לערך המעודכן.
גורם למחיקת המסך מן המקום הנוכחי עד לסוף השורה
הנוכחית. הסמן נשאר במקומו.
חלק מן המאפיינים הנוספים מקבילים למאפיינים שהופיעו כבר בחלק
מן הביטוי 01181 בפקודת 84008?1, כמו שנראה מן הטבלה כדלהלן:
שאז המסא
סטג 0-1
חפנו קמס
"ומב אסמאס-1 1
זז צעצפט- 107
₪ 0-ו
פטתנזטסטת אסמאס- צייסוום
מושך קו מתחת לשדה כאשר הוא *וצג על-גב* הצג.
- 321 -
0 נט-מפתמעטת הופךך את צבעי הרקע והתווים עבור אותו שדה כאשר
יוצג על-גבי הצג.
ד גורם לתווי השדה להיות מוצגים באופן בולט.
אאזזת גורם לתווי השדה להופיע בהבהוב על-גבי הצג.
3-810₪ת5 2-00108א03₪0800ע: מאפשר בחירת צבע עבור תווים (קוד
בין 0 ל-15).
4-810₪ת5 2-00008א0800א840: מאפשר בחירת צבע עבור הרקע (קוד בין
0 ל-7).
| מציין" את המחרוזת שתוצג על המסך כאשר מבצעים
פקודת צ1/8ק5פ21. הפקודה 4008271 מתעלמת משורה זו.
אסור לכתוב 210 באותה כניסה שיש בה ₪ַ10גע.
אסתץ מציין את מקור הנתונים שיוצגו בעזרת צ082ק15כ.
0 מציין את יעד הנתונים שייקלטו בעזרת 7ק40002.
זט 88066-3 מקבל את הנתונים שהכנסנו למסך אחרי פקודת
7 והוא גם מקור הנתונים המוצגים בעזרת
הפקודה צ15018כ.
שורה 65: בהגדרת כל קובף (ב: א581₪07...25510) אפשר להוסיף את
הביטוי: 8866 15 514105 ₪/18ץ, כאשר התמונה של 58866 היא (2)א.
על-ידי בדיקת תוכנו של 8866, ניתן לברר אם קרתה טעות בזמן פתיחת
הקובצ. למשל, 30 מסמן שאין קוב בעל השם שצויין בפקודה. (נ'תן
להודיע זאת למשתמש על סמך תוצאה זו.
שורה 75: בשורה 1 ועמודה 16 הקשנו את השם. ערכו יכנס לשדה %-
ומסתס.
שורה 76: אם המפעיל סיים את ה-400871 בעזרת המקש 9ע, כוונתו היא
לסיים את התכנית. העובדה שאדם הקיש 29 תיוודע לנו רק על-:ד:
שימוש במבנה הראשון של הפקודה 400₪7?7.
שורות 77-88: קליטת המשתנים: 8 1-א, סספת-א, -א
תמטונתפ,| 61861₪צ-א.
שורות 89-95: הכנת רשומת הפלט.
שורה 96: כתיבת רשומה לקובף 06ע85%0א-1006%2 שפרטיו מתוארים
בטורה 13 ותיאור רשומותיו נמצא בשורות 14-20. אם הפלט היה
למדפסת ולא לקוב, יכולנו להשמיט שורה 13 ולכתוב בשורה 188518
]: עססתנעק 10.
במקום לכתוב 1-8400₪ עבור כל שדה במסך, כפי שעשינו בפיסקת פטמד
- 322 -
(שורות 78-88), יכולנו לכתוב פקודה 400821 אחת עבור כל המסטך.
זהו המבנה הרביעי עבור הפקודה:
[284ת₪15 09508428 א0] ב₪8580 דקמ 60
מבנה 84 מעביר את כל הנתונים מן המסך אל כל השדות שרשום עבורם
בפרק המסך 10 או 0א051 (הוא מתעלם משדות שרשום עבורם 280% או
מעעאט). אחרי הכנסת כל שדה, מקישים המזאע או 148 והסמן עובר
לשדה הבא, עד שהוא מגיע לשדה האחרון, שלאחריו מסתיימת הפעולה של
7 ישנה גם האפשרות להפסיק את הפקודה באמצע אם מקישים על
₪עסס, השדה האחרון לא נקלט ומבצעים את המשפט שרשום בפקודה, אם
כללנ ו אותו. אחרת, מסיימים את הפקודה 400021 מיד. אם לוחצים על
מקש פונקציה, השדה הנוכחי נקלט והפקודה 400871 מסתיימת. אפשר
לדלג לפנים לשדה על ידי הקשת 148 ואחורה - על-ידי הקשת 0728ג.
כל התכונות של הפקודה 800077 במבנה השלישי זמינים גם במבנה
הרביעי. במקום לכלול אותם בפקודה 400871 עצמה, כמו שעושים במבנה
השלישי, כוללים אותם בכניסת תיאור המסך, כמו שראינו בטבלה
הקודמת. פעולת %8 במבנה השלישי מבוצעת על-ידי שימוש ב-6אצפט
או באמצעות | זוג המלים 70% ו-10. כל קליטת נתון נעשית עם
התכונות של 7קאסהע ו-א0-510א133111 על-אף שתכונות אלו אינן
נרשמות, לא בכניסת המסך ולא בפקודה 400077.
שורה 67: הצגת מספר הרשומות שנקלטו בהצלחה.
דוגמה 2 קובץ אינדקס סידרתי
שני שלבים כרוכים בעבודה עם קוב כזה.
א. בניית הקובצץ. להלן התכנית לביצוע המשימה:
.ת1510ט1ק ת011168010ת 100 (1)
.2 .12-מהעשסעק (2)
.ת2101510 טתסשתסענטתם (3)
.ת560610 ת0028610ו18?תס0 | (5)
)5( | 5060181-8108 .
.עססת1ע6-7ת11 7118 עססתנעק (6)
.5000 6טס6ט6-0טסת1 (7)
.1-1 (8)
.1% 10 ם48518 0%5ע006%2-885%0א 561606 (9)
46 185 ת128010ת68ת0 (10)
.ע1508א 18 ע6א 6עסססת (11)
.מ1510ט1כע 2868 (12)
.ת560010 116ע (13)
0%ע8006%2-085%0 פע (14)
6 426 3060268 1/8061 (15)
850% -8%ות65 18 260006 808 (16)
."581.280:" 18 כ116-12ע +09 08166 (17)
- 323 -
0-0885%020%המטת695ת 01 (18)
.(9)5 16 ע8ס5גא | 03 (19)
.(15)א 16ק םסת 5 03 (20)
1 סשסדצס ס>סףת 03 (21)
. (3)א 216 ע1116ת | 03 (22)
9 סצק פטנםפ 03 (23)
.+ 160 61801₪? 03 (28)
.ת2101810 6עש0000סעק (25)
. הסהעקהזהק-ת81 (26)
.%889%000%-8006%2 05006 ם006 (271)
)28( 01085%5
.ע%66ת1עק-6ת11 תסקע 'סוף ההרצה' 215018 (29)
.מטע 5600 (30)
. 1%6ע₪-עממטע (31)
085%020%/-₪86ט0ת365 166עש (32)
הסבר התכנית:
שורות 5-6: המבנה הכללי של הפקודה צגס9דת:
06
[ע1ת5ת₪86-שסת5 אסקט]... 10 / [ גוא 3 ] ו וככוניו
מפוגותם
85801
הסבר:
האופציה מפגתם גורמת למחיקה של המסך מן המקום הנוכחי של הסמן עד
לסוף המסך. הוספת ש1צת5ת₪80-0₪ג8 מאפשרת הדפסה במדפסת, אבל שסתפ-
805012 חייב להיות מוגדר בפיסקת סמ א-,1 01 ב-
א א1004110א0ס, בעזרת פקודה מן הסוג:
2ע1ת58ת₪80-0₪ת8 15 תמלאדתק
בשורות אלו ביצענו תפקיד זה. בלי ההוספה של תהפצאנתק-8א11 אסקט,
הפלט :יישלח למסך.
שורה 10,11: הגדרת שיטת הארגון של הנתונים ושדה המפתח.
שורה [2: כדי לבנות קוב> אינדקס סידרתי חייבים לפתוהח אותו כקובא
פלט. עקרונית, זו הדרישה היחידה, אבל המהדר של קובול דורש
שבתכנית הפותחת קוב לפלט, הייבת להיות לפחות פקודת מעדת אחת,
כמו שהוספנו בשורה 32, אע"פ שאין מסתעפים אליה כלל.
- 423 =
דוגמה 3
דוגמה זו מציגה תכנית המעדכנת את התכנית שבנינו בדוגמה 2:
.ת0נפנט21 מ%19168%610ת186
. מט16% .12-מאעפסלק
.ת1510ט21 6תסמתסענטתת
.560510 ב228010ג180?ת00
.ת566010 6טססט6-0טסתך
. 116-000%6201ק*
5% סס מב48518 0%ע00662-085%0א 961606
46 185 128010ת88ע02
6במהתצת 18 100055
.ע8קפנא 15 ע6א 6עססס3
מנתטס006%2-06א 95616066
% סס 4898916
. 5000606181 6ם1] 18 ת128010ת0088
.ם1810ט210 868
.ת560010 116ק
0-6
6 ₪ 3600265 18061
0% שרררשוטוטפסת 15 360026 2868
."8:581.28%" 18 116-12ע 04 08106
. (9)5 16
. (15)א 216
סדק
. (3)א 216
.9 סצס
.4 16
.3698-8800
ע508נא 03
₪סת5 03
0% 03
1162גע 03
עטנת5 03
61801₪+? 03
מנתטססא-00652
6 42 3600265 18061
8 , ש1תטס6א-8%שטת365 6 36002685 28068
.םנתטס%6 18 116-12ק 0% 081606
.(9)5 16ק
.א 6נק
.(15)א 16ק
.9 סצס
. (3)א 16ק
9 שסצ
.+ 16
. (9)5 16ק
.א 16
. (9)5 16ק
7 325 -
₪ 1תנ66-8%מנות 365
15082א-א 03
4 03
םסת5-א 03
6 03
1165גע 03
עטנת5-א 03
61801₪צ-א 03
1%8ע5-₪8%טת65ת
עה8ספנ/-5 03
46 0
מסע1ם-1טט0 03
פע
1
פע
1
1
)1(
.ת560010 5602886-שת1עסט (13)
.א 216 58-מ 1תטס6א-+50 1
."א" 08106 מםנתטס6א-+50% 88
.א 216 שפ5-ת78%1 1
.'' 18 081606 ת8%1ץ 88
. (16)א 16ק תנתטססא
)88(
)45(
)46(
)47(
)48(
.ם1510ט1ת 606026סמק (89)
. [קה8עקהתהתק-ת1ה₪8 (50)
ע680ת3
."שם קוב נתונים
. םדתנוס
2-0
. םנתטס6א-8006%2 6
.שפ-1₪ת600א-+50 סס
.שפ-1₪תט6%א-+50 60 "8%" שטסא ₪6 46 ₪ש1נתט6%א-62
.₪שנתט6ס6א-+50 611>ת0 וס
נמ"
. םנתט66א-6%62
.'סוף הרצה
.15082 10 ע8ספ
'ם' =
ספשספם
. צָנות1ת105818-11601128-5 מ
.פ-ם1תט60א-502 סט 'א' 6שטסא ₪6 46 מנתטססא-62
.שפ-ת718%1 70
:א תסת71 0208602 18 צ86 85%020%6א%-6062ש
.'גבול שגוי' 219018 צַ%6 8116טתד
.אפ-ת718%1 ס6ס '' סטסא
תסץ1ם-1טט00 תהת1 16958 טססא ע8ק15/ 11סת0 18ע2א מע
.שנתטט6א-?50 02
. צַטת1תפ-1%8
. שפ-ת718%1 0 '
19082 15 צַ86 0%6ע6%2-85%0ש
ץ6א 116הַטתך
שפ-ת78%1 70 '' פטסא
.08 שעס%+עסק
ת
'א' = 806-
26160858 0%
- 326 -
" 15018
86 400606
0 006
גוסתך
",[" סטסא
6 368
1 שעס%מסס
טס% 01056
טסא
' צֶ15018כ
. תות 5600
.וס
1-א ס6טסא
4 15
₪םעס]עסק
6
עס?פסק
6 3680
. 06
'1' סטסא
סא 50826
ת8%1ך +1
0?מסס
ם5828-60סו
1' סטסא
0 686
81 19
א ?1
6
)51(
)52(
)53(
)5%(
)55(
)56(
)57(
)58(
)59(
)60(
)61(
)62(
)63(
)63(
)65(
)66(
)67(
)68(
)69(
)70(
)71(
)72(
)73(
)7%(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
)83(
)88(
)85(
)86(
)87(
'5' = 6סא-א 19 (88)
128502 מעס+עסק (89)
% טס 166תשסת (90)
)91( 86
"שגיאה: קוד שגוי לרשומה קיימת" צ15018כ (92)
. םנתנוס %6-8%טת365 215018 (93)
.8 (98)
'ז' = 6סא-א 19 (95)
ע0]פתפת מעס?עסק (96)
0% טופס 166עשסת (97)
)98( 6
"שגיאה: קוד שגוי לרשומה לא קיימת" צ219018 (99)
. מנתט6%א-₪86טת365 215018 (100)
.ע16פת8מ (101)
.ע1508א 10 ש1508א-א פטס (102)
.מסת5 10 ש6ת5-א פטסא (103)
.1 170 06ם8ת5-א 6טסא (108)
.עטנת5 10 עט1ת5-א סשטסא (105)
.₪נ18צ 10 61861₪ע-א פטסא (106)
.הפא (107)
6 6866 800652-1)88%0206 3680 (108)
.פ-1תט60א-5092 סס "א" פטסא 6תם 46 (109)
.שפ-1₪תט60א-+50 66ש8א 16ס1תאם (110)
.15082 66שהא סנסנחאם (111)
. תסע1ע-0001 66מבא 1%ס1תאם (112)
0208602 306 15082 6ת4 מנתטססא-502 6סא 19 (113)
מסץ1- [ש0 תפתד
.0% ,' ' (מסת5 ,' ' ,15082 צ19018ע (118)
הסבר:
שורה 13: סוג קובץ, המוגדר רק בגירסת קובול זו, הוא קוב מסוג
,זזנאת00ס5 מא11. כל רשומה בקובצ כזה נגמרת ב-אתט1טת 1808ת048
ו-פחמק מא121 כפי שגבנה בדרך כלל על-ידי מעבד תמלילים פשוט או
עורך (קובץ מסוג זה נקרא ?א18 בשפת פסקל). קובף כזה מאפשר העברת
נתונים בין קובול לתוכנות אחרות כמו /1 8458כ2, פסקל או אססגתגק.
בקוב סידרתי רגיל, כגון זה שבנינו בדוגמה 1, בתחילת כל רשומה
נמצא שדה בן 2 בתים המחזיק את אורך הרשומה. לפני כל רשומה בקוב
אינדקס ס'ידרתי קיימת קידומת של 3 בת*ם, כאשר 2 בתים מחזיקים את
אורך הרשומה ובית שלישי מחזיק דגל המסמן אם הרשומה נמחקה באופן
לוגי.
שורה 30: במקום לציין את שם הקוב כקבוע, רשמנו פה שם שדה
(אנאטעטא) המוגדר בשורה 88. בשורה 53 בתכנית אנו ממלאים שדה זה
בשם המדויק של קוב הנתונים. בדרך זו אנו לא חייבים לדעת את שם
קובצ הנתונים בזמן הידור התכנית, אלא רק בזמן הרצתה.
- 327 -
שורה 31: תכנית זו תאפשר כמה פעולות שונות, המתוארות כדלהלן:
בסיסי
א מ
הו ה םה
7 חי | 5 | פאר - | שה לת מלה, תש
סריקה
גבול עליון
כדי לאפשר פעולות אלו, בנינו שני סוגי רשומות עבור קוב
הפעולות. הרשומה הראשונה מתוארת בשורות 31-38 והיא תתאים למקרים
של הוספה, מחיקה ושינו'. רשומה מן הסוג השני מתוארת בשורות 39-
2 והיא מחזיקה את טווח הרשומות שרוצים לסרוק.
מאפיינים
נוספים
(גבול תחתון)
שורה 51: הפקודה מסגת1 צקגמת הוספה לתכנית לצורכי ניפוי. כדאי
להוציא אותה אחרי שהתכנית רצה. היא נמצאת כאן לצורך הדגמה בלבד.
₪סהתך צפגטת גורמת להדפסת השמות של כל הפיסקאות שהתכנית מבצעת
אותן ובכך היא מאפשרת לנו לעקוב אחרי ביצוע התכנית. "מכבים"
אופציה זו על-ידי כתיבת 468תך7 [מפתת. אחרי ביצוע הפקודה, התכנית
תפסיק להדפיס את שמות הפיסקאות שהיא מבצעת. אם רוצים שרשימת
הפיסקאות תודפס, ניתן להקיש על 1800א00 ו-תּאספזאק לפנ* הרצת
התכנית.
שורה 54: פתיחת 0801א45א-12מטסא כקובצ 10. העובדה ששיטת הגישה
היא דינמית (שורה 9) תאפשר לגשת לקוב% גם בצורה אקראית וגם
סידרתית.
שורה 70: אפשר לבקש סריקה לפ(ג* שמתחילים לקרוא את הרשומות. לשם
כך צריכים למקם את המצביע לרשומת הקובף אל הגבול התחתון שרשום
בשורת הנתונים בעזרת פקודת 51431 (שורה 172).
שורה 76: הפעלת הפיסקה שקוראת את הרשומה הבאה ומציגה חלק מן
הנתונים שלה במסך (שורות 113-114). הפקודה 58686 כשאבא צדמדטאת
גורמת להצגת שם השדה, סימן שוויון וערך השדה. פקודה זו מי*ועדת
לניפוי תכניות ולכן כדאי להוציא אותה מן התכנית אחרי שהיא רצה
בלי טעויות. צורתה הכללית היא:
106
[ע1ת₪8625-מסת5 א 1 >%4> [מט1] 1 ספוואו שזמזצאסם
מפגאתם
= 28 -
שורה 78: מבצעים פיסקה זו כדי להוסיף רשומה, למחוק או לערוך בה
שינוי כלשהו. תחילה קוראים מתוך הקובף. אם לא קיימת רשומה בעלת
מפתח שערכו שווה לתוכן השדה ע8ק815 (2116-508005 של 20),
המשמעות היא שרוצים להוסיף רשומה ומסתעפים לפיסקת ההוספה. כאשר
הרשומה קיימת, מבצעים מחיקה (שורה 86) או שינוי (שורה 90) לפ:
הלוגיקה של התכנית.
הרצנו תכנית זו בשלושה קבצי קלט. הראשון, 87כ.1א10גא, שימש
להכנסת (תונים לקובף. השני, 2.242א1₪0גא, שימש לעדכון טיפוס:
והשלישי כלל בקשות סריקה.
הידור והרצה
כדי להריץ תכנית ב- 0ק-15% שמים את תקליטון המהדר בכונן 8 ואת
הקוב שמכיל את התכנית בכונן 8. אם יש דיסק קשיהח אפשר לשים את
המהדר בדיסק הקשיה, אבל אז הייבים לכתוב לפני ההרצה: 0> א45510
כדי להודיע למהדר שיחפש ב-0, אפשר לעשות זאת גם בקובף פקודות
דגם.
בהרצת תכנית קיימים שלושה שלבים: הידור, קישור והרצה.
1. הידור: מקישים את המלה 00800, כמו שמופיע בתדפיס להלן (מלה
המסומנת בקו תחתון הוכנסה על-ידי המפעיל. שאר המלים הודפסו על-
ידי התכנית):
00 <ג (1
1162קמסס 0080 ע6סטקעס00 81תספע6ק אםך
2 ססם00 18% 186עעק0(00) 1.00 מסבפעסש
2 .00:00 816205096 6ת18עצסס6(0)
% ננ:[008.] 6ש8ת110? 6סעטספ (2
:ם :[1891.081] 6ש8ת110? 001666 (3
% :[57.שא] שת11501 6סעטס5 (4
הסבר: שורה 1 מופיעה, והמפעיל מקיש את שם התכנית שברצונו להדר.
את הסיומת חייבים להוסיף רק אם היא שונה מ-008. שורה 2 מופיעה
ומוסיפים :8. ברירת המחדל היא שהשם המלא של התכנית *היה:
71. בשורה. 3 רושמים 8:10517, והדבר אומר ששם קובף הפלט
המלא יהיה: 8:7₪51.1517 ולא לפי ברירת המחדל הרשומה בסוגריים. דף
הפלט יכלול את תדפיס התכנית עם שורות ממוספרות ורשימת טעויות,
אם ישנן כאלו. אם לא רוצים פלט כלל, ניתן להקיש תמצאם בלי להקיש
דבר בשורה 3. במקום לעבוד בדו-שיח, אפשר לרשום:
%,, 886ע-%006%52, ע₪8%0-06%2> 0080
פקודה זו תגרום להרצת ההידור ללא מעורבות המשתמש. המהדר בודק אם
כללת 3 קבצים (מקור, יעד, פלט), או אם כתבת נקודה פסיק, שאז הוא
מניח שאתה רוצה ברירת מחדל לכל מקרה.
- 329 -
דוגמאות:
אם נרשום: :8:7 00802
המהדר בונה את הקובף המהודר (יעד) 1₪91.0871:ם.
אם נרשום: , :2 עפסד:ם 00802
נקבל את הקובצ המהודר 8:1851.0871 ואת קובף הפלט: 051.1592ד:8 .
א0ס, :8 8:7 00800 או אהק,:2, 57םד:2 00800
קובצ כפלט יופיע על המסך (א00), או המדפסת (אתת), בהתאמה.
2. קישור: מקישים את המלה אא11 ועונים על שורות 1 ו-2 כמו
שמתואר. בשורות 3 ו-8 אפשר להקיש על ממעאם בלבד.
אא
עסאת1] פססטסמ00 81תספעסק אםך
2 סמסע60 184 6ס1עעסס0(0) 1.10 מסבפעפט
5% ::ן[081.] 080165 00160% (1
:ם :[טאם.91תך:4] 16גת תטת (2
:[קגא.טא] 116ק 1186 (3
:[.] 105ע8עס1ן (8
גם בקישור לא חייבים לעבוד בדו-שיח, אלא אפשר לכתוב:
, :2 אאז11
כאשר עובדים עם שגרות, המאפיין הראשון אחרי אא11 יהיה:
. . +010פ+ 1ת289-1%תת606, בהנחה שכל המודולים כבר מהודרים.
3. הרצה: ניתן לכתוב את שם התכנית בלי סיומת (או עם סיומת מאם,
אם רוצים לדייק). להרצת התכנית שהורצה קודם, כותבים:
5% <2ב
כאשר מריצים תכנית, צריכים לדאוג לכך שהקובף מאע.א00280 יהיה
בכונן שס נמצאת התכנית להרצה, או בכונן 4 אם התכנית להרצה נמצאת
בכונן אחר.
- 330 -
נספח ב
קובול במחשבי א /
בניית קובץ בעזרת מסן
נערוך תכנית אשר בונה מסך לקליטת נתונים, כל קבוצה של
נתונים,
או תכולת מסך, יוצרת רשומה אחת של הקובף. תכנית זו מנצלת הרחבות
מסוימות שחברת 2101141 הכניסה לגירסה של קובול עבור המחשב אג/.
הרחבות אלו משפרות את יכולת המשתמש לקלוט נתונים באמצעות המסך.
.ת2101510 ב%612168510ת180
.5-משטכ2 .18-מהעפסעק
......'..
.ת2101510 6תסשתסע1טת
.ת560010 ב18028610?ת0ס0
.1 . 0011062 500206-00
. 11 .ע6סט0ש001866-00
.ת560%:0 6ט60ט0-סטקת1
. %201ת116-00ע
. "08%. 85" 10 ם4591₪ 0%6ע00602-089%0א 961606
.ת1510ט1כ 858
.ת560%10 116ע
0%ע85%0/-6%2ט0א פע
18061 600268 26 6
. 85%020%/-₪8%ט0ת369 18 260026 2808
.88%020%/-8%מטת 369 01
.(5)א 16 פה8ספנא 02
. (15)א 216 םסת5 02
.9 סד 0% 02
,(3)א 216 1-ת1116ק 02
9 סד עטנת 5 02
.+ 210 61861₪? 02
.ת560%0 6ש8ע5602-שת1%עס₪
.2 0
. (15)א 16ק שסתפ-% 02
. (9)5 16 ע8תקפנא-% | 02
1 16 0% 022
.9 סצס עטנםפ-% 02
.+ 16 1861₪צ-% 02
- 331 -
...
)1(
)2(
)8(
)9(
)10(
)11(
)12(
)13(
)18(
)15(
)16(
)17(
)18(
)19(
)29(
)21(
)22(
)23(
)28(
)25(
)26(
)27(
)28(
)29(
)39(
)31(
)32(
)33(
5 78106 (25)א 216 | 8161%6ת0888-18%6
. "תכנית הקולטת נתוני פועלים"
. םנוץצ51-110088%
160 | 8ע6אע01-00-ע6סמטא 02
8 78116 (35)א% 16ק
. "מספר הפועלים שנתוניהם נקלטו שווה ל:"
."א" 78106 % 16ק
."צ" 1816
ש116נע 02
. 0068 נש
אפ- ₪0% 02
עסם 88 02
02 00086-2808-5% | 216 .א
."צ" 18106
4 88
. ת1ת568 1
02 815080-0061₪ | 216 999 078106 4.
.1 78106 9 16
.1 781066 (9)8 16ק
.0 08106 (9)8 16ק
2 02
1ת 02
12 02
1
1
1
1
.ת101510כ 226גו686ס2ק
. בתפהת
.ת1%181128%610ת1 שעס]עסק
0611 ש1תטססא-811%68% שפס+]ע6ק
.מטצ1פ שעס]עסק
076%2-/185%020%.
. מטת 5600
.ת10181128010תך
6טקט0 ם006
.89%020%-69₪₪8% 16181126תד
0 6ת21 26 8161%6ת10888-1860 15018
0 תמט01ס0
10 1
שתנאת211 בסצש
.ת50260 856ת
.1 תמט001 1 6םת11 26
" " צ15018כ
. 18500848 ₪ע0ס?עסק
0 תמט01ס0
1 מא
שת:אמ11ם בסנא
.50266 856ע
.1 תמט001 1 6ם21 26
. מגוצ1ס
.888%020%/-%006%2 010586
. 62-01-002%028סמטא 10 61₪ש15080-0א 6שטסא
90 6ת1 46 מטץ1פ-10088% צ15018ע
" " צ18קפנכ
. 850088 מע0ס]תסק
81 .
- 332 -
. 850898
.6 מסעץ 1ת2₪8 200626
סד 1000 468
)38(
)35(
)36(
)37(
)38(
)39(
)40(
)41(
)82(
)83(
)48(
)45(
)46(
)47(
)848(
)49(
)59(
)51(
)52(
)53(
)58(
)55(
)56(
)57(
)58(
)59(
)60(
)61(
)62(
)63(
)63(
)65(
)66(
)67(
)68(
)69(
)70(
מסגי 24000000 < 1ת8ש? 19
. 2881 מסעץ 21000000 62806ס5₪
1הםת < 2ת8ש2 11סת0 שעס+עסק
86 מסע 2ת8מ2 4060906
י .תע 0ס?עסק-6תם
. םנתטס סא-11%586א
.6₪ת5-211%8% שע0ס+עסק
שסע ש>סא 19
םנט15082-0/ 70 1 266
ע508נא-211%58% מע0ס+?ע6ק
0% מ 5 60
עונתפ-%11%8% םעס+עסק
61801₪+-%11058% םע0ס+עפק
. 86-85%020%םות65 1%6ע
. 0₪תפ-3211%58%6
.2 70 3 866
חסת7 20 < 6-12ת11 10
9 סל 3 6טסא
.ת60ע50 886ע₪ " " צ15018כ
2 שתד 6ב | "שם:" ע15018כע
5 תמו001
/יבבצכ ב
. "₪50<(1>" צ19018כ
מסתפ-א 460606
6ת1 מספק
% תפט001
04
בת
5 5126 60000ס06עק
.%פ-₪0 70 "צ" שטסא 6ת₪ 26
."₪50<(8>" צ15018כ
מסת7 ₪0 6סא 19
מס " " = 6סא שסתפ-א 19
עסת5 10 שפתפ-8 סטסא
16
2 מספץ 3 8606ע6סט5
.6₪תפ-211%8% 70 0ג)
.ע1508/-1158%א
48 0611 ע4+06 1656 ת₪1%6 מע0ס+?עסק
0פ-060006-28%8 60 "צ" 6טסא
9 פשתדם 26ב "מספר:" 18018
3 תמט01ס0
יבר
15082/-א 400006
(6-1ת1,] 6ם1.1 מסעץ
8 תשט01ס0
= 338 7
)71(
)72(
)73(
)7%(
)75(
)76(
)77(
)78(
)79(
)80(
)81(
)82(
)100(
)101(
)102(
)103(
)108(
)105(
)106(
)107(
)108(
)109(
)110(
)111(
)112(
)113(
)118(
)115(
)116(
)117(
)118(
)119(
6
5 5126 06060006מ5ק
ת10פעסטת0ס0 ₪16
4
תס61קססאם ת0 (120)
שפ-0006-28%68 ס1' "א" 6טסא (121)
6-6 (122)
.₪ע6210ק-6ח (123)
תסת1 0 = 6סא ע1508א-א 19 (128)
15082 10 ש8ס15א-א 6טסא (125)
86 (126)
.2ע1508/-1108%5א 70 00 (127)
.0 (,((128)
4 1בטת0 4+002 1686 ת0106 מעס+עסק (129)
0008-2808-50 10 "צ" סטסא (130)
"שעות:" צ18ק15ע (131)
2 ס6ת1/ 46
6 משט001
|
טסהתפ-8 400006 (132)
6-12ת11 6ם11 שסעץ
5 תמט01ס0
|
6 5126 220060666
ת10פעסטתס0 ת₪16
014
מסנס6ק6סאם ת0
8פ-0000-28%8 10 "א" 6טסא
00606 -6ח (133)
.₪ע0)ע6ק-6תת (138)
.8% 10 6סה8ת8-5 סטסא (135)
.עטנת811%68%5-5 (136)
4 0611 ע4260 168% ת₪1%6 שעס+ע6ק (137)
0פ-6008-28%8 10' "צ" שטסא (138)
"שיעור:" צַ15018ת (139)
6-1ת1] 6םת21 46
27 תשט001
|
עטנת5- 200606 (180)
1-2 6ת11 מספץ
1 תמט01ס0
תש
] 5126 0060666ע2ק
ת10פעסטת0ס0 ₪16
4
%פ-0008-2868 10 "א" 6שטסא ת0ס61ק6סאם תס
- 33 -
65 -6תע (181)
. ₪ע0?ת6ק6-2ת (182)
תסמ 0 = ססא עט1ם5-א 19 (183)
עטנת5 10 עט1ת5-א סטסא (188)
6 (185)
.עטנתפ-%11%8% 70 00 (146)
.ם61801צ-%11086 (147)
46 0611 249062 1686 ם₪10 שעס]עסק (188)
סע "צ" שטסא (189)
"מספר ילדים:" 218018 (150)
2 סשת1 46
9 תמט001
|
ם6[1861צ-א 4060000 (151)
כ6-1ת11 6ת11 שסעץ
5 תמט001
כ ו
2 5126 00660600עק
מס1פע6טתס6 תסנא
04
"8" 15 116ו698כ
0פ-0006-28%58 16 "א" 6טסא ב610ק606אם ת0
0-ו (152)
0 ?6-6חא (153)
.1 10 ש61861צ-% סטסא (158)
הסבר:
שורה 59: בשורה זו, וגם בשורות 65, 105, 118, 131, 139 ו-150
השתמשנו בצורה המורחבת של הפקודה צ8ק15כ2. המבנה הכלל: שלו
מופיע להלן :
ת5866 | צה]קפדת
8עטם5-ע8ק15ת
[[8טט8<] 2105] 8עטם5-ת6ת₪628 | הממאטא מאד1 87
[8טט28] 5טעק
8ותה-82 15
[[הטט58] 2105] 8בטשה8-ת6ת₪628 | הממאטא אא00ס 7ב
[8טט8א] 05ק
אס [00 פאם 20] מפהחם
פאז
ד
ספא תטפאט
ומ (ו:ן
סאדאאדם דדש
פמפתמעסת
אס1פתם טא 00 התזא
[6א1סאבטכ סא נד₪]
- 335 -
הסבר: פקודה זו מציגה שדה אחד או יותר במקומות מסוימים במסך,
לפי בקשת המתכנת. היא גם מאפשרת להציב תכונות נוספות עבור כל
שדה, כפי שיתואר להלן.
מתמוטא אאז 37 ציון של השורה שבה השדה *וצג. הח*יבים לבהור
אחת מן האפשרויות דלהלן:
1) 8תגות082-5ק₪15: השדה יוצג בשורה שמספרה נקוב.
2) [[הטט8א] | 2105] 8עטם8-ם0ת628ם: השדה *ופיע | בשורה
שמספרה שווה לערך המשת(ה 8עטםת5-ת06ת628ם. אם מוסיפים את
המלה 105ע, הוא יופיע בשורה שמספרה שווה לסכום של המשתנה
והקבוע. אם משמיטים את המשתנה 8טש%8 ערכו הוא 1. כלומר,
ברירת המחדל עבור טט8א היא 1.
3 [8טט8א] | 05/ק: השדה *וצג בשורה שמספרה שווה לסכום של
מספר השורה שם נמצא הסמן עכשיו ועוד ה8טט8א. גם פה, ברירת
המחדל עבור 8ַטט%8 שווה ל-1.
מממאטא אא0000% 217 ציון העמודה שבה יופיע השדה. האפשרויות
מקבילות לאלו הקיימות עבור תמפאטא אאד 11 81.
אם רק אחד מן ה-018405₪5 שהוזכרו מופיע, למשל
ה-014058 לקביעת שורת ההצגה של השדה, אז
עמודתו תיקבע לפי מיקומו הקודם של הסמן.
בדוגמה זו, השתמשנו בצורה הפשוטה ביותר לקביעת מיקומו של השדה
בשורות 59 (81016ת80688-18606) ו-65 (שטץ1פ-10888%). בשורות 60
ו-66 הצגנו רווח כדי לסלק את הסמן מקירבת ההודעה ולשים אותו
בראש המסך (שורה 1 עמודה 1). בשורות 105, 118, 131, 139 ו-150
קבענו את השורה של השדה המוצג בעזרת המשתנה 15-מא11. כל פעם
שרוצים להציג שורה חדשה של שדות, מוסיפים 3 למשתנה פ8-1א11
(טורה 101). כאשר ערכו של המשתנה כ1-מא11 עולה על 25 (מספר
מירבי של שורות במסך) תגרם טעות כי מנטים להציג שדה בשורה
שמספרה שווה לאותו ערך. לכן מחזירים את ערכו של המשתנה 15-אאך1
ל-3 כאשר הוא עולה על 20 (שורה 102).
ניתן היה להשמיט שורות 101 ,102 ו-103 אם כותבים במקום 116-186
(שורה 105) את המלים הנוספות: 3 2105 6-16ת11 (אבל אז יש צורך
לכתוב פגאשסא/הא1אתפז 557 לפני הרצת התכנית). במקרה כזה, אפילו
אס הסכום של 6-16ת11 ו-3 עולה על 25, המחשב יודע לעשות פעולת
מודולו (25 02א8) ולהחזיר את הסמן לראש המטך.
[=0 פאם 10] מפגגת
מאז/ א למחיקה של כל המסך לפני הצגת השדה במסך, כאשר
בוחרים באופציה א8₪םה50, בלי האופציה פאם.
כאשר מוסיפים פאע, המסך נמחק ממקומו הנוכח:
של הסמן עד סוף המסך. אם בוחרים באופציה
8א, השורה נמחקת כולה (כאשר אין כותבים
פאם), או ממקומו הנוכחי של הסמן עד לסוף המסך
(עם פאם) לפני הצגת השדה.
א צלצול לפני הצגת השדה.
- 336 -
סמאד טפאט
[ימט:ן
סאדאאדם זעדט
פמפתמעטת
א10פתמץא00 אנט
כל תו *ופיע עם קו נמשך מתחת*ו.
כל תו בשדה המוצג יהיה יותר עבה.
תווי השדה המוצג יהבהבו.
תווי השדה יהיו כהים על גבי רקע בהיר, ולא
להיפך, כמו תמיד.
שדות עם תווי עריכה, או סוגים המיועדים בדרך
כלל לייצוג פנימי במחשב, יוצגו על המסך בצורה
המתאימה לצורכי המשתמש, למשל, אם התמונה של
שדה מסוים היא: | 00% (59)(/9)3, ונכתוב
בתכנית "א510תמטא00 118א" השדה יופיע כך על
המסך: 16.46-. בלי הרחבה זו, היינו חייבים
להעביר את השדה לשדה עם תווי עריכה מתאימים.
הביטוי "א510ת/א00 אצ1א" גרם לכך שבמקום ץ
תופיע נקודה עשרונית, במקום 5 יופיע הסימן -,
ושאפסים מובילים לא *ופיעו כלל. כמובן, אם
כותב הפקודה כבר הכניס תווי עריכה, ה'ייצוג
יתאים למשמעות התווים האלה. אם הסוג של השדה
הוא | 0-1א060 או 00%0-2, המספר *וצג כך בצורה
מדעית: 1.68600008+01.
6אסאגטכה סא אנט הסמן ישאר במקומו, ולא יעבור לשורה הבאה.
כאשר מוסיפים 0284058 זה, השימוש הבא ב-
צג,ספזת יגרום לשדה להיות מוצג באותה שורה
כמו בשימוש הקודם. ה-01805₪ הזה אינו נחוא אם
מוסיפים אחד מן ה-0140585 דלהלן: ממתאטא טאד11
או תהממאסא חסת, כ* אחר* שימוש באחד מאלה,
הסמן תמיד נשאר במקומו.
שורה 107: בשורה זו, וכן בשורות 119, 132, 120, ו-151 השתמשנו
בצורה מורחבת של פקודת 800₪271. המבנה שלה מופיע להלן:
5866 4007
8עגות15082-5ם
[[8טט8א] 2105] העטת5-ת6ת₪628 הממאטא םאד אסאע
[8מט8<] 05עק
הגומה-82ק15ם
[[הטט8>] 2005] 068מ8-ת6ת₪628 הממאטא אאט601 אסאע
[8מט8=] 05/ע
אחספ [ת0 פאם 10] מפההם
פאז
,הספת הדזא
ספא ]הספאעט
= 337 =
0
סא1אאדעם אצזט
[תס6עס 5128] פמנסמידסמק
פמפתטשמת
א10פתתטא00 אדוו
0 סא אצנא
1
ת5806-שסת5 15 לתסהתטת
6טעסע-ת₪8%85 אד צשא 00ת7א60
56 אסדקמסאע אס
[ 00 - פא ] תש פאםט 37
רוב האופציות של הפקודה 800807 מקבילות לאלו של הפקודה 150184%כ,
שתוארה קודם. למשל, פסא1תמכאעט *גרום לקו תחתון. 8002 י*גרום
שהקלט יופיע באותיות בולטות, םת יגרום לצלצול לפני הכנסת שדה,
וכדומה. כעת נסביר את האופציות הנוספות:
א10תת 600 מדזטא | עבור שדות נומריים, 018058 זה מאפשר למפעיל
להכניס קלט המכיל: 1) רווהחים לפנ*, או אחר:
המספר.
2) נקודה עשרונית.
3) סימן עשרוני לפנ* או אחר* המספר.
אם לוחצים על אחד מן המקשים 738 או אתטעטת בלי להכניס נתוני*ם
כלל, השדה יקבל ערך 0 (אלא אם הוגדר ערך שהוא ברירת המחדל,
כמו שיתואר בהמשך, ואז השדה יקבל את ברירת המחדל כערך
התחלתי).
אפשר גם להשתמש ב-018058₪ זה עבור שדה אלפא-נומרי. במקרה כזה,
הנתונים יגיעו לשדה המקבל כשהם מיושרים לימין, אם השדה מוגדר
כך. אם המפעיל לחצ על אהשענטת או 748 בלי להכניס תו כלשהו,
השדה יתמלא ברווחים, או לפי ברירת מחדל אם הוגדרה כזו.
א0ס1 קסע אס פקודות המשפט נכנסות לתוקף כאשר מכניסים
נתונים לא נומריים לשדה נומרי, או כאשר
מכניסים יותר ספרות לצד ימין או שמאל של
נקודה עשרונית, מאשר התמונה מרשה. כל זה
בתנאי שכללנו גם | את | ה-02405₪: ו
א10פתתטאסס.
פקודות המשפט נכנסות לתוקף גם כאשר מקישים כקלט 1800-2א00.
- 338 -
פמט סתת
[ת60עס 5128] ₪ זה קובע הגבלה למספר התווים שאפשר
להכניס כקלט למחשב. כאשר מנסים להכניס *ותר
תווים, נשמע צלצול והסמן נשאר במקום הימני
ביותר שמותר להכניס בו נתוניסט, וכל *תר
התווים שמכניסים לא *ופיעו על המסך ולא
יקלטו. אם מנסים למחוק מספר תווים רב *ותר
מאלו שהוכנסו, נשמע שוב צלצול והסמן לא יתקדם
מעבר לשטח המיועד לשדה ההוא.
מספר התווים שמותר להכניס נקבע בשת* צורות:
1) לפי מספר התווים שהתמונה מרשה. למשל כשהתמונה | היא
59)4(9, גודלו של שדה הקלט יהיה 7. גם שומרים מקום
לסימן ונקודה עשרונית, | במידה | והמתכנת השתמש ב-
אסא ס.
2) לפי המספר המחליף את 0266 כאשר משתמשים באופציה של
הוספת המלה 517₪. במקרה זה, אפשר להוסיף או להקטין ממספר
התווים בתמונה. במקרה שמוסיפים, התווים המיותרים לא יהוו
חלק משדה הקלט, אבל המפעיל לא ירגיש בדבר.
כאשר משתמשים ב-סִמִלַ6מַצַ0הק, השדה מתמלא עם רווחים לפ(ני
שהמפעיל מקיש את הקלט. כתוצאה מעובדה זו, כאשר נבקש מכתמעטת
או מא ]תטעאט, יהחד עם כמצ0מד0ק, יופיע השטח המורשה או כשטח
בהיר (עם פמפתמע/מת) או עם קוה מתחתיו (עם פמא1תמסאט), גם
לפני שהמפעיל ממלא אותו.
0 סא זזש תווי הקלט לא יופיעו על המסך. אפשר להכניט
קודים המגבילים את הגישה לתכנית כלשהי.
ןוז טכ לקביעה של ברירת מחדל. ערכה של ברירת המחדל
יופיע מיד אחרי המלה 40/7תטכ2, אם בוחרים
באופציה 11066?81, או בשדה ב5860-מסת5, אם
בוחרים באופציה הה*א.
שורה 106: בטורה זו הצגנו קוד י*חודי למסוף מסוים (למשל, במסוף
של 1181א2, הקוד המקביל הוא מפג<₪90>). הקוד הופך את כיוון הזזת
הסמן ז"א ימין-שמאל. כאשר הסמן זז מימין לשמאל, השם המוקש יופיע
על המסך בסדר הנכון. בלי שינוי הכיוון, השם היה מופיע על המסך
בצורה הפוכה. שינוי הכיוון דרוש לקליטת טקסטים בעבר*ת. מוצע
לקורא הספר לברר את הקוד המתאים למסוף שלו לפני שהוא מנסה לקלוט
טקסט בעברית.
שורה 107: על פי מה שהוסבר קודם, המילים 15 5128 אינן נחוצות,
כי התמונה של א8חפ-% מוגדרת כ-(15)א. בדוגמה זו, הן משמשות
כתיעוד בלבד.
שורה 108: הקוד המוצג כתוצאה מביצוע השורה הזו מחזיר את כיוון
הסמן לשמאל-ימין כדי שנוכל לקלוט מספרים בהמשך התכנית. כמובן,
7 339 =
גם הקוד הזה מתאים רק למסוף מסוים, ועל הקורא לברר את הקוד
המתאים למסוף שלו (למשל, במסוף של 111א28 הקוד המקביל הוא
50%8ם>).
שורה (10: פקודה זו גורמת לביצוע חוזר של הפיטקה הזו אם המפעיל
הכניס רק רווחים עבור השם, או אם הקיש אתחצמת או 78, בל* להקיש
כל תו אחר (שגם כן מתפרש כאילו הוכנסו רווחים). כוונת הפקודה
היא לחייב את המפעיל להכניס שם חוקי.
שורה 115: בפיסקה זו, דואגים לכך שהמפעיל יקיש מספר זיהו* חוק'י,
ז"א מספר זיהוי שמכיל רק ספרות, אשר לפחות אחת מהן שונה מ-0.
הלולאה של שורה 99 ממשיכה להתבצע עד שהקלט הוא כולו מספרי, ז"א
מורכב מספרות בלבד. אבל הוא עדיין יכול להיות שווה ל-0, ולכן
מוודאים בשורה 105 שזה אינו המצב. אם 0 היה ערך חוקי, שורה 105
לא היתה נחוצה.
שורה 128: פיסקה זו מקבילה לפיסקה של קליטת מספר הזיהו*, אלא
שמספר השעות יכול להיות 0, ולכן אפשר להסתפק בפקודה את0עתמטק בלי
פקודת 1 נוספת.
שורה 136: פיסקה המקבילה במלואה לפיסקה של קליטת מספר הזיהו'י.
שורה 14[7: מספר הילדים, כמו מספר השעות, יכול להיות שווה ל-0.
אבל אנחנו רוצים לחייב את המפעיל להכניס 0 ממש, ולא רק ללחוצ על
אמעטחסת או מג1. ניתן לחייב אותו על-ידי הגדרת ערך "ג" כברירת
מחדל. הערך הזה א*נו ערך חוקי עבור המשתנה א4271/טצ-5 ולכן אם
המפעיל לא מקיש אף ערך שהוא, ברירת המחדל תכנס לתוקף ותגרום
לביצוע חוזר של הפקודה את0תעתתץ בשורה 137.
שורה 76: בפיסקה זו רוצים להביא לעיכוב של 10 שניות בין הצגת
הכותרת הראשית של התכנית והתחלת קליטת הנתונים.
שורה ]]: בשורה זו מקבלים ממערכת ההפעלה של המחשב את השעה
הנוכחית. פעולה זו דורשת שימוש במבנה נוסף של הפקודה 200₪07,
אשר מופיע להלן:
מדאכ
צאם
אממש-עס-צמכ אסתץ ב5866 40007
מא
הסבר: פקודה זו מאפשרת לקבל מידע במשתנה ת5866: התאריך, מספר
היום בשנה מאז הראשון בינואר, מספר היום בשבוע, או השעת
המדויקת. תיאור מדויק של המידע מופיע להלן:
מזאת מורכב משלושה זוגות של מספרים שמייצגים את
השנה בתוך המאה, החודש בשנה, והיום בחודש,
בהתאמה. התמונה המתארת אותו הוא: (9)6 6דַק.
= 20 =
צגפ מורכב משתי קבוצות של מספרים. בקבוצה הראשונה
נמצאת השנה בתוך המאה (שתי ספרות) ובקבוצה
השניה נמצא המספר הסידור: של היום בשנה.
התמונה המתארת את צג8כ2 הוא: (9)5 10ק.
אממו- שס- צגכ שדה בן סיפרה אחת שמייצג את מספר היום בשבוע,
החל מ-1 שמסמן *ום שני וכלה ב-7 שמסמן יום
ראשון.
מאזיד השעה המדויקת בשעון של 24 שעות. מורכב מ-84
זוגות של מספרי*ם. הזוג הראשון מ*'צג את השעה
(0 עד 23), הזוג השני מי*יצג את הדקה, הזוג
השלישי מייצג את השנ*ה, והזוג הרביע* מ*יצג
את מספר מאיות השניה.
למשל, 19150000 מ*יצג את השעה 7:15. התמונה
של מאז? הוא (9)8 10ק.
התמונה של 9866 חייבת להתאים לזו של האופציה שהמתכנת בוחר.
בשורה 69, 5806 מוחלף על *ד* 1[ַת8מ2, שתמונתו מופיעה בשורה 88.
תמונה זו זהה לזו שהוגדרה עבור ₪א1?.
שורה 70: אם מספר השניות בזמן הנוכחי (1ת2₪8) קטן מ-50, נוסיף
0 שניות לזמן ונבצע פקודת את0עתמק של שורה 80 עד שמספר השניות
של 1ת2₪8 יהיה גדול ממספר השניות בזמן הנוכח ועוד 10 שניות
ז"א, עד שיעברו 10 שניות.
שורה 82: אם מספר השניות בזמן הנוכח* (1מ2₪8) גדול מ-50, הוספת
90 שניות לזמן יתן מספר מעל ל-60. לכן מורידים 50 שניות, ואז
מבצעים פקודת א0עתמק של שורה 84 עד שמספר השניות של 1םת2₪8 יהיה
גדול ממספר השניות של הזמן הנוכחי ועוד 10, אבל גם דורשים שמספר
השניות יהיה פחות מ-50, כדי שהתנאי לא יהיה *תקיים מיד (שהר:
בהתחלה היו מעל ל-50 שניות, ו- 1ת2₪8 הפך להיות עכשיו מספר קטן
מ-10).
בניית תפריטים ראשיים
כאשר מכינים חבילת תוכנה שמורכבת מכמה תכְניות שונות, דואגים
להתחיל את הביצוע על-ידי הצגת תפריט בו רשומים השמות של כל
התכניות ה(מצאות בחבילה. המשתמש מציין את בחירתו באמצעות מקשי
החצים. כאשר הוא מגיע לתכנית הרצויה, הוא מקיש אתטעטת. התכנית
שלפנינו בונה תשדה כזה עבור חבילה המורכבת משלוש תכניות, אחת
מתאימה לאנשי מינהל, אחת למרצים ואחת לתלמידים.
16
1 18 78106 (2)א% 16ק
." <08>" 08106
. "051<8>" 08186
. "מ<051>" 8106
.ת1510ט1ת ב%612168%10ת166
.6פפט .16-םהעשסעס
.ת1510ט1כ2 6תסשתסענטתת
.ת560010 ת8610ע180?תס6
.1 .01106 086-00ענוספ
1 . סססטקע001665-00
.ם10פ1טנכת 808
.ת500%610 500288₪6-שת1אעס₪
88 ת0ט1ת6ת5-1%תת 700 01
ת85אטת6ת5-ת 8%85 01
88 6%
88 2-8
88 7-8
.ת1910ט1ת 6ע660ססעק
.781%
5 תשט001 4 6ם11 46 "תשדה" 15018
.ת60ע50 22856 6םת11ע66ת0 8016
1 55 תמט001 7 6ת11 46 "1. הנהלה" 219018
.1 תםט001 9 6ת1/ 46 "2. מרצים" צץ15018כ
1+ תמט001 11 6ת11 86 "3. תלמידים" צ15018כ
.5 תמט001 13 86ת11 46 "%8. יציאה" צץ15018ע
.4 תמט001 15 6םמ1/ 6ב "5. עזרה" 18018
"תן בהירתך בעזרת חצים ובסוף <08>" צ15018ע
36 ממט001 22 6ת1/ 2%
.8ע88תסט1תסתפ-1%תת0ס0י' סי 1 6טסא
0 11סם1 שעס+עסק
ת0%88ת510-ת8%85א ע6א 01ע6ת00 4666006
5 תמט001 24 6ם11 מסעק
8 16-0תת00 85אטת6ת5-ת88%85 866ט81₪טם
4 טעתץך 1
"מ<051>" מסתט
8 -10תת106 70 1 4866
5 ועתץ 2 "ב <051>" מסתט
8עהת0ט1תסתפ-16תת100 מסעת 1 866עססטפ
1-8 תתסס' 1866ו1בטע
. 1 תסת
"1. הנהלה" 215018
%8 ל משעט1ס0 7 6שת21 6ב
5 ממט001 9 6ם11 46 "2. מרצים" 15018
2 מסתעא
5 ממט001 7 6ם11 45 "1. הנהלה" 215018
"2. מרצים" צ15018ת
646 5 משט001 9 6ת121 6ב
3 ממט01ס0 11 6ת11 4% "3. תלמידים" צַ18018ת
3 תסמ
5 תפט601 9 6ת11 26 "2. מרצים" צ18018כת
"3. תלמידים" צַ18018תע
6 53 משמט601 11 שת21 2%
- 302 -
)37(
5 תמט001 13 6ת11 26 "4. יציאה" צ15018כ
8 מסתש (38)
3 תמט001 11 6ת1/ 86 "3. תלמידים" צ15018ע
"4. יציאה" צ15018ת
6 55 תמט001 13 6ם121 26.
6 תמט001 15 6ם11 4% "5. עזרה" 15018
5 מסתש (80)
5 תמט001 13 6םת11 26 "8. יציאה" 15018כע
"5. עזרה" 215018
46 576 ממט001 15 6ת11 26
6 --תת (81)
.₪ע0ס)ע6ק-6תם (82)
8 -15תת106 866ט1פטם (83)
8תם מעס?ססק 1 מסחש (88)
מ21ת8 ₪ע0+עסק 2 תסתשט (85)
181101 מע0ס+ע6ק 3 מסתש (86)
8 מס 0ס?ססק 4 מסתו (47)
מםסס+עסק 5 מסחש (88)
. 8101806ש-6חע (49)
.תטת 5500 (50)
. 3818ת18 (51)
. מ21תסה
781₪1618₪ .
.8 צְצ
.2
הסבר:
שורות [21-2: הצגת כותרת התשדה, 5 האופציות השונות והוראות
לשימוש במקשי חצים כדי לעזור בבחירת האופציה הרצויה ובמקש
אהעעעת כדי להזין את הבחירה. ההוראות מוצגות על רקע בהיר ובמצב
ההתחלתי, האופציה הראשונה גם כן מוצגת כך.
שורות 29-82: מבצעים לולאה שמסתיימת רק כאשר המשתנה-מ8%85א
תפהאנותסת5 מקבל ערך של " <%08>", דבר שקורה כאשר המפעיל מקיש
אהטעזטת. הקשה על מקשי החצים גורמת להצגת האופציה המתאימה לכ:וון
תנועת הסמן.
שורה 30: מבנה לא סטנדרטי זה של הפקודה 40081 מאפשר קליטה
וזיהוי של מקשים מיוחדים, ביניהם: א110סאשק, אתטצמת, 8
- 33 -
ומקשי חצים. את נתונגני ההקשה של המקש הזה מאחסנים בשדה מיוחד,
כמו שאפשר לראות מן המבנה הבא:
6סטעסע-₪8%85 אד עצמא 0תדא 00 - צלמססת
8ענגות82-5ק15ם
| [ [8טט%8] 2105] 8ענגות5-ת0ת628ם / התפושא מא1.1 אסאק |
[8טט8>] 05זק
הגוה-י8 קת
]081 5] 6286-8688 1 התמאטא 601 אסתקת |
[808א2] 05זק
א
71 פא + [פס סאא 10] מפתהק ]
[ השס זדנט ]
ן ₪586 אסדדקמסונם |
[ק 00 - פאם ] פאם 37
פקודה זו קולטת רק הקשה אחת של מקש מיוחד מן הסוג שתואר קודם.
אופציות הקשורות לקליטת נתונים רגילים, כמו כמא1תסכפאט ,05ם,
ואחרים אינם מתאימים פה, ולכן אינם מהזוים חלק מן הפקודה. אם
המתכנת רוצה לקלוט נתונים רגילים ולסיים סידרה כזאת עם מקש
מיוחד, ניתן להשתמש במבנה של 8400871 שהוצג בסעיף 5.2, ולנצל את
ה -01.4088:
₪886 א1 צ₪א 0070
הנתונים הרגילים יאוחסנו בשדה ב5866, ונתוני המקש המיוחד
יאוחסנו בשדה 86ת00ע₪6-ת₪8%85.
שורות 31-33: אם המפעיל מקיש על החף שפונה לצדדים, הרקע הבהיר
יעבור ממקומו הנוכחי לאופציה המופיעה מתחתיו. קוד 85011 להזזת
הח לצדדים הוא 051<8> ( <051> מסמן את הקוד 155. כדי להכניס
קוד זה, בעורך ₪01 מקישים 002, אחר כך בלוח המקשים על הספרות
שמרכיבות את ערכו ב-85011 - פה 155, עוד פעם על 6012, ובסוף על
המקש מספר 3 - 58(1א1 55₪018). כדי להעביר את הרקע הבה'יר
לשורה הבאה, יש להגדיל את ערכו של המשתנה 8ע8ת6ט10ת6ת16-9מתססף
ב-1. כמובן, אם ערכו של אותו משתנה כבר שווה ל-5, אין להוסיף 1
מכיוון שאין אופציה שישית, ולא רוצים להעביר את הרקע הבהיר
הלאה.
באופן מקביל, אם המפעיל מקיש על החף שפונה למעלה, הרקע הבהיר
יעבור ממקומו הנוכחי לאופציה המופיעה מעליו. הקוד ב-48011 עבור
החף שפונה למעלה הוא <051>. כדי להעביר את הרקע הבהיר לשורה
הקודמת, יש להקטין את ערכו של המשתנה 8ע8ת6ט1ת6ת16-5תת100 ב-1.
כמובן, אם ערכו של אותו משתנה כבר שווה ל-1, אין להוריד 1 בגלל
שאין אופציה שקודמת לראשונה.
- 3084 -
שורות 34-41: כאשר הערך החדש של בעהתסט1ַת6ת5-1%מת100 שווה ל-1
(למשל, כאשר באים מן האופציה השניה) רוצים להבהיר את הרקע של
האופציה הראשונה, ובאותו זמן לדאוג לכך שהרקע מסביב לאופציה
השניה ישוב להיות כהה. אלו תוצאותיה של פקודה (35). כאשר הערך
החדש של אותו משתנה הוא 2, סימן שערכו הקודם היה או 1 או 3.
לכן, בנוסף להבהרת האופציה השלישית, עלינו לדאוג שהאופציה
הראשונה (אם היתה בהירה קודם) או השלישית (אם היתה שם קודם)
יכובו. אלו תוצאותיה של שורה (36), כאשר השורות(37) עד (39)
מטפלות בהבהרת האופציות בצורה מקבילה. שורה (40), שמטפלת בקצה
התחתון של האופציות, (כאשר 8ע8תסטנתסת5-1%תת6ס? שווה ל-5)
מקבילה לשורה (35).
שורות 43-49: מגיעים לשורות אלו רק אחר* שהמפעיל מקיש אהטעסת.
הפקודה הנוכחית מעבירה את השליטה לתכנית (או פרק) התואמת את
בחירתג.
- 345 -
ביבליוגרפיה
0 ע9עפ₪11 .1 ,00800 פמתט1סטת51 ,.ת צַ16ת35
- 80611 1 פהמסאהטכ4י ,.5 0011686 6 .2 65ע8שבם
7 ,ב1118מ6בא
9 ,םמה111ם86א , 0אזאאהתססתק 85 00802 ,.0.₪ עססטת
פקמתט1סט51 פמ1ק1קא51 ,.כ2 ם00186 8 .2.2 ת86%60ע60א
0 ע₪1169 .1 ,00800 108020005א/ 05091ת16א אדצזשט
6 ,06000 5א8 כמתטזסטת51 ,1טהק 11סא 6 6א1א הסהעטא
9 ,4550018005 8 ב6ה8עטטא
5 א110האתסקא 1 ,.1.71 482₪162 6 .4.5 15אהסק11נתק
8 ,1111-ש6028א , (ת661610 8ם2) 00802 הסטסאהחד
,1 פמפסשסאגט ,1.7.0 ,ע10ם82א | 6 .4.5 8
2 ,.00 2008 60280-1111א
.1 , פתםזותססתק 00800 08ע 11 0080 05 ,.3.1 ע616ת58
0 ,₪116
, .0 שתנםת115סטק ₪686 ,80'5 מז הסק ,|.7.08 156ע6ספ5
12
9 ,תה111מ86א ,.[450ק אסתת 00800 4.1.0 611תעעך
,1 קפמת0טת5 פמסאהטפה ,.ת.ך 1תה08ת1 6 .1.4 בסעט08156
5 , ה%861118-611ש<פא
64 ,0050 פמתטצסטת51 פמתסאהטכה ,162עך7 תעטוס ₪61
3 ,.00 8ת1ג115סטק
קובול - תכנות מבני (2 תלקים) / המרכז לטכנולוגיה חינוכית.
11.
12.
בן-יעקב ברוך / קובול מבני למתקדמים / הוצאת אורט ישראל, 1985.
חברות המחשבים / 15הטתבח 0000.
= 36 בש
מילון מונחים
מילון המונחים הקצר מגיש לקורא את המונחים העיקריים שהוא נזקק להם
כאשר הוא לומד את שפת קובול.
אב, הורה
אופרטורים
אופרטורים אריתמטיים
איטרציה
אלמנט
ארגומנט
בוליאני
בחירה
ביטוי אריתמט:
ביטוי בוליאנ:
ביקורת תקינות
בית
בן ימני (במבנה עף)
בו שמאלי (במבנה עף)
בלוק
בקרה
ברירת מחדל
גישה ישירה
גלישה
דיוק כפול
דיסק
"הבא אחריןו"
"הקודם"
הידור
היקף
הסתעפות בלתי מותנית
הסתעפות מותנית
הצהרת תוית
השמה
התחל (תחילת התכנית, או קטע)
וקטור
זיכרון
זקיף
- 387 -
%מסעפק ,(עסתסהק
ב
8 66016 די
108010
%תסוס 1[
שתסמטפשי
00108
ת56160610
ת0265910א6 6%616מת16ת1
ת685910עקא0 ת800168
שת66%1ת6 ע16עפק
86
4 סתגשנת
4 ס16%
105%
1
ת0ס61קס 2628016
8 106060
1 טס
מ601510עק 16סטסכ
1%
0008502נו
66606989500עק
0 118610
ממ
שתנתסתהעס 61010081תס6ח0
שתנתסתהעס 81ת61610מ00
ת6661628610 1.8061
551%
תנשסם
760602
ץע 60
₪
חיפוש
חיפוש בינר:
חיפוש לינאר:
חישוב
חלון
טבלה
טבלת אמת
יחידות החסנה היקפיות
יחידות קלט/פלט
יחידת עיבוד מרכזית (יע"מ)
כותרת התכנית
כתובת
לא נכון (ארית' בוליאנית)
לולאות
מאגר
מבנה נתונים דינמ:*
מבנה נתונים סטט:
מבנה סדרת:*
מגה-בית (מיליון בתים)
מהדר
מחרו זת
מחשב
מטריצה
מיזוג
מלים שמורות
מלת מחשב
מלת מפתח
מספר ממש:
מערך
מערך ארוז
מערך דו-מימד:י
מערך הנתונים
מערך ממו::ן
מפתת
מצביע
מציין
מצע החסנה, החסן
משתנה
משתנה גלובל:
נכון (ארית' בוליאנית)
נקודה צפה
סגירה של קוב
סדר המיון
סדר יורד (של מ*ון)
16
ג50820 עעהתנם
ת80820 עפסת113
מ08101118510
שטססת דט
6
6 תסנתץך
8 5602886 81ע6תק1עסק
8 פמט 6ג060/סנוקתד
(%ת0) 1%6ם0 ₪ת000981סעק 81ע6ת006
- 2068 -
שת861סת מפעשסעק
8
6
בו
ש6?פטם
56206006 6808 16מהתעק
סעטססטעס8 6808 508610
6עטססטת55 %6181ת50000
6 עסו
00162
שתנעטס
0 06
8
שת1שטס
8 30862006
4 קמס
בש צ6א
עססמטת 3681
צפעע
שהעתה 66א6מק
צָהעעה 81ת510פת61₪6-סשץך
ץהעסף 868
ץֶהעעה 500066
צ6סא
עססתנ1סק
טס
8
6
010081 86
סופ
%תנסק שתנ1ס8ס1ץק
6 116
56 8שת0011801
עס 8₪ת61ת6509
סדר עולה (של מיון)
סוגי נתונים
סודר
סיבית
סיים (סוף קטע, או תכנית)
סיכוס
סימן וערך
סמן
סרט מגנטי
עדכון
עורך תמליל
עיבוד מקוון
עיבוד תמליל
עץ בינר:
עצם
עשרוני ארוז
פונקציה
פלט
פקודות
פקודות (חטיבת ה...)
פקודת א1 מקוננת
פקודת 1 משורשרת
פקודת דמה
פקודת הסתעפות
פרוצדורה
פתיחה של קובף
צומת
קבוע
קובצי
קובצ אב
קובצ אינדקס סדרת:
קובץ חיצו(נ:
קובץ סדרת:
קובצ פנימי
קובצ תמליל
קובצ. תנועות
קוד תווים במחשב
קוד תווים במחשב
קלט
רווח (תו ...)
רמה
רשומה
רשומה באורך משתנה
רשימה
662עס שת61ת4500
ץע
21
(211) 61816 עעהתנת
- 6
ץיזה טס
₪816 6ת8 תשדס
עספפטס
סספיך
שת
עס601% 768%
שת069591סע 6ת11ם0
שת591סססעק %6א76
6 עתהתנם
0%
1 666א80ק
תסצ+6סתטץ
06
ד
מ860010 6ת508%₪6
ע] 65666א
קך 66ת81ת0
5686605 עמשנות
ת8%6200%10ת1 שתצתסתפעת
6
מפסס 116ק
סוסא
006
6
6 18560
6 6181ת36000 66א66ח1
6 3ַַתע602א
6 500006181
6 1תעסטת1
6 ש6>א76
6 תס1ס580ת8עך
01
6
%טסתד
%תפום
11
|
78218016 6
1%
שגרה
שדה תוית
שורש
שלם (מספר שלם)
שם גלובל:
שפת סף (אסמבלר)
שפת (תיכנות) עילית
תו
תוו* קוד
תויות מקרה
תוית
תכנית
תור
תור - "אחרון נכנס ראשון *וצא"
תור - "ראשון נכנס ראשון *וצא"
תיכון
תכנות
תכנית קוראת
תנאי מורכב
תנאי פשוט
תקליטון
תרשים היררכ*
תרשים זרימה
תת-גלישה
תת-תחום
- 350 -
6מ1סנוסינסטפ
4 שש
ס>ססת
-601תד
ספת 010081
5901062
1118 16061 186
088000
0508060 6
08855 8
11
מהעאסמק
106
(0ע11) 0₪6 5פענ1ת ם1 1886
(0ק1ע2) 006 8%6ע1ע ם1 8%עצת
בס
שת1מנהעפסיק
מהעפסעס ₪ת08111
ת81%10ת60 א16%קתס0
מ61%:0ת0ס6 16קמנפ
6
%תעפת ע61עהעסג
%סףתס שס1ע
100?עסת
6שתעסטס
קובול 85 מבני - למחשבים אישיים, מחשבי א// ומחשבים מרכזיים
מציג את שפת קובול בגירסתה המחודשת משנת 1985 - שפת 85 602801. גירסה זו
הפכה את שפת קובול לשפה מובנית וגס הוסיפה מספר פקודות שימושיות ורבות עוצמה.
הספר מכוון אל המשתמשים במחשבים השונים של יבמ (5/370, 5/390, 5/400) ובמח-
שבים אחרים שבהם מופעלת שפת קובול, למשתמשים במחשבי אש של חברת דיגיטל
ולמשתמשים במחשבים אישיים מסוג 6 א8! ותואמים.
הספר תואס את תכנית הלימודים שפורסמה בשנת 1990 עבור כתות !"א ו-!'ב במגמה
לטכנולוגיות המידע ואת דרישות תכנית הלימודים של מה"ט (המכון להכשרה טכנולוגית)
עבור המבחן בקובול לקבלת תואר הנדסאי.
הספר מתאים לתלמידים במכללות ובאוניברסיטאות שבהם לומדים את שפת קובול
ולתוכניתנים אשר מפתחים יישומים בשפת קובול.
המחבר, פרופ' אבא אנגלברג, הינו בעל תואר דוקטור בחקר ביצועים מאוניברסיטת ניודיורק
(שצא) ולימד בפוליטכניקוס של ניו"יורק. עוסק בהוראת מקצועות המחשב בביה"ס הגבוה לטכנול-
וגיה בירושלים וניהל את המחלקה למחשבים במשך שנים אחדות.
פרןפ' אנגלברג פרסם מאמרים בכתבי עת מקצועיים בנושאים של חקר ביצועים ומחשבים וספר
בסטטיסטיקה. הספר "פסקל - שפה לתכנות מבני", אשר יצא לאור ע"י "הוד-עמי" מקובל כספר
לימוד בכל מוסדות התינוך בארצ.