המדריך השלם לשפת C – מהדורה שישית

503, 16 עמודים : איורים ; 25 ס"מ + 1 תקליטור. – ISBN 965-361-128-3

OCR (הסבר)
משה ליכטמן עמית רש בוו ור" זי לשפת = לי המדריך השלם לשפת 6 מהדורה שישית יש להתעלם מכל מה שקשור לתקליטור מצורף קבצי המקור נמצאים באתר הוד-עמי |ו.60. ווחבּ-סח.עששעש בקטגוריה "קבצי תרגול לספרים" יש לבחור ב- 59159 כדי להוריד קובץ כ0ו59159.2 מוקדש באהבה לנורית, יעל ומשפחותינו ולזכרו של אבי, יונה ליכטמן ז"ל עורך ראשי: יצחק עמיהוד עריכה מקצועית לעדכון המהדורה: אבי בו עריכה לשונית ועיצוב: שרה עמיהוד עיצוב עטיפה: סטודיו מצגר שמות מסחריים שמות המוצריס והשירותיס המוזכריס בספר הינס שמות מסחרייס רשומיס של החברות שלהם. הוצאת הוד-עמי עשתה כמיטב יכולתה למסור מידע אודות השמות המסחרייס המוזכריס בספר זה ולציין את שמות החברות, המוצריס והשירותים. שמות מסחריים רשומיס (5א%78060087 7601556760) המוזכרים בספר צוינו בהתאמה. ++6/6 סטיוטד 0ח3!ז0ם - מוצר של חברת סחה8ווסם 5 -15, 5אוסוסחו/ - מוצרים של חברת 41670508 הודעה ספר זה מיועד לתת מידע אודות מוצרים שונים. נעשו מאמצים רבים לגרום לכך שהספר יהיה שלם ואמין ככל שניתן, אך אין משתמעת מכך כל אחריות שהיא. המידע ניתן ''כמות שהוא'' ("5ו פגּ"). הוצאת הוד-עמי אינה אחראית כלפי יחיד או ארגון עבור כל אובדן או נזק אשר ייגרם, אם ייגרם, מהמידע שבספר זה, או מהתקליטור שמצורף לו. לשם שטף הקריאה כתוב ספר זה בלשון זכר בלבד. ספר זה מיועד לגברים ונשים כאחד ואין בכוונתנו להפלות או לפגוע בציבור המשתמשים/ות. טלפון: 09-9564716 פקס: 09-9571582 דואר אלקטרוני: |ו.60.והְההּ-00סח 06+חו םי ם ם ₪ אתר באינטרנט: |60.1.ווחבּ-סה. שעשצו/ / :קה המדריך השלם לשפת .6 מהדורה שישית עמית רש משה ליכטמן 6 0+ ₪106 %6ס!כן וח 60 סחד 36 6 .0 6% ץצ 5 +וורות ההּוחה6ו.! 6ה5סוא תווחה .1 :זסזו0= )0( כל הזכויות שמורות הוצאת הוד-עמי לספרי מחשבים בע'ימ ת.ד. 6108 הרצליה 46160 טלפון: 09-9564716 פקס: 09-9571582 אין להעתיק או לשדר בכל אמצעי שהוא ספר זה או קטעים ממנו בשום צורה ובשום אמצעי אלקטרוני או מכני, לרבות צילום והקלטה, אמצעי אחסון והפצת מידע, ללא אישור בכתב מאת ההוצאה, אלא לשם ציטוט קטעים קצרים בציון שם המקור. הודפס בישראל מהדורה 6 - 2000, 2001 0 תח || זואה-פסו 8ץו|62 ,6108 .0.5.ק 1 ,2000 , 15851 מסת'"ב 965-361-128-3 158% תוכן עניינים מקוצר הקדכה..,י999ופווו'וו'וויויי'וי'וי'י'וויווויויווווווויוייויויויווויויויייית 21 הנחיות לקורא הה,ה,הההההההההההההההה םהה הה םה ה ה ההההה ה ה הההם ה ה ההההה םהה האוא 23 מבוא לתכנות בשפת 6 ההה,ההההההההההההה ה ה הההההה ה ה ההההה ה[ ה הההה םהה הוה 29 פרק 1 פרק 2 פרק 3 פרק 4 פרק 5 פרק 6 פרק 7 פרק 8 פרק 9 פרק 10 פרק 11 פרק 12 אבני הבנייך של ה שה 7 משפט ההצבה ומבנה הת(כנית +.55465655655099999999999 650 קלט ופלט באמצעות פונקציות ספריה........7701566666666 משפטי בקרה בשפת 0 515.446555665655099999999999099 87 1/8 מערכים (מ0הר(7(ת :1.1164.4.55.555569095999959999999999995 129 ו :078 00000000 1 אפיון משתנים וטווח ההכרה...5.65555655650090990990. 183 707 0000006 1 --- ו ל תוכן העניינים | 5 פרק 13 איגודים ההםהההההההההההההה התה םה ה הההה םהה ה ה ההה ה ה[ ההההה ה[ ה ההיא 207 פרק 14 נושאים מתקדמים ההה,הההההההההההההההההההה םהה[ ההה םהה וא 207 פרק 15 רקורסיה הה,ה,הה,ההההההההההההה ה ה ההההה ה ה הההההה ה הההההה| םהה ה וו 21 פרק 16 קלט/פלט וקבצים הה,,ההההההההההההההההההה ה ה הההההה| םהה ההות 221 פרק 17 פסיקות ועבודה עם 5 ההההההההההההההההההההההההההה:הו: 25 פרק 88| משימות ה,,הההההההההההההההההה ה ה הההההה ה ה הההה ה ה[ הה חאה ה ההא 255 נספח א! מבנת ה שב::::י::.:ווווו:ווווווווווווווו::ייי.ייגווווו:: 207 נספח ב' נהלים לכתיבת תוכנית ב-6 ה'הוהוהההההה.ההההההוההההווווווא 24 נספח גי פונקציות העכבר .הההההההההההההההההההההההההההההההוההההה,ה,:ה,, 17 נספח ד' תקציר פקודות ופונקציות (₪61676066 א6ו0)..... 453 נספח ה' התקליטור המצורף וסביבת העבודה 6+ו161.......... 469 אינדקט עברי הה,ה,ה,ההההההההההההההההה ה הההה הההההה ה ה ההההם ה ה ההה םהה[ םהה וא 1 אינדקט 0 5 6 המדריך השלם לשפת 6 תוכן העניינים הקדכה..,999,פווו'וו'וויו'יי'וי'ויייויווויויויויווויוייויויויויווויויייית 21 הנחיות לקורא הה,ה,הההההההההההההההההה ה ה הה ה ה ההההםה ה ההההם ה ה הההה|ה ה[ םהה ההיא 23 מבנה הספר ב הערות כלליות ל תוכניות, תרגיליס ומשימות והתקליטור המצורף ב מבוא לתכנות בשפת 6 ההה,הההההההההההה ה ההההההה ה הההההה | ה ההההה ה[ ה האוא 29 טבילת האש 7 מושגיס בסיסייס 0 כיצד נכתוב תוכנית בשפת 6 ל הסבר בסיסי של פעולות קלט/פלט 7 הפונקציה אחוזם (פלט) 0 הפונקציה 508 (פלט) 1 הפקודה 6!וחעע 0 תנאיס מורכביס 2 סימניס מוסכמים.. משפט זסז 0 תהליך ביצוע זסז ... פונקציות 1 תכונות ל סוגיס של פונקציות קלט/פלט של תוויס ו משתנים בוליאנייס ב תוכן העניינים 7 פרק 1 אבני הבניין של השפה.:::::::,ווווווווווווויייייייייי.:.: 47 טיפוסים של משתניס ...47.11 הגדרה משנית של טיפוסיס בלב 0 מנגנון ההגדרה של טיפוסי משתניס ו הגדרת משתניס 7 שיטות מתן שמות משתניס 1 קבועיס ב קבוע מטיפוס מספרי 5 קבוע מטיפוס תו 000 סוס מש טול ס ומעט לבט סנס פוקש 0 בש שופ שמת 54/35 קבוע מטיפוס מחרוזת ו טיפוס וחטחס ...56 אופרטוריס 5 אופרטוריס אריתמטייס ל 57 היררכיה של פעולות אריתמטיות 7 אופרטוריס לוגייס ב הערכת ביטוי לוגי 0 מילים שמורות ...61 הערות 1 תרגיליס ...62 פרק 2 משפט ההצבה ומבנה התוכנית ההההההההההההההההההההההה:ה:: 65 מבנה המשפטים ומבנה כללי של תוכנית 0 משפט הצבה ל הסבה בכוח 7 הגדלה והקטנה עצמית של משתניס 1-7 משפט הצבה מקוצר 7 תרגיליס ו ל 7 פרק 3 קלט ופלט באמצעות פונקציות ספריה..::;.::::::::..::. 77 קליטת תו מהמקלדת 6 הקרנת תו בודד על המסך .784 פלט לפי תבנית 7 תווי בקרה של הפונקציה ()שחוזס ...1 81 רוחב שדה הפלט 8 רוחב השדה (או) 0 דיוק השדה (ס) יי יוגשיי...5.. 87 קלט לפי תבנית ב 5 תרגיליס ...4 05 8 המדריך השלם לשפת 6 פרק 4 משפטי בקרה בשפת 6 ההוה,ההההההההההההההההההה אה ה ההיא 07 משפט התנאי - =ז 0 87 1-5[ 88 משפטי )ו מיוחדים | לולאות 7 משפט = וזח/ 0 משפט = תהשצ-0ס 0 משפט 08 5 קינוןו משפטי זסז 0 משפטי 88546 ,=טאזדא 60 ,600 0 משפט 80-46 לפ משפט =שא1 דא 60 7 ל משפט 6010 100 משפט 64 ד51 1 הרחבה של משפט 55|ם..ז] .104 דוגמאות נבחרות 1 א. לוח הכפל ו 1 ב חישוב אינטגרל מסויס 100 תרגיליס 2 10 פרק 5 פונקציות הה,ה,הההההההההההההההה הההההה ה ה הההההה ה[ ה הההה םהה ה הוה 11 הגדרה של פונקציה ו ערך מוחזר 0 דוגמאות לפונקציות ב פונקציית כפל 7 פונקציית חילוק יי פונקציית שארית 2 פונקציית כפל - (6!גווח - ו פונקציית חילוק - (00ע01 -. פונקציית שארית - ()סחוחז 0 חזרה לפונקציית הכפל 0 ערכים מוחזריס וטיפוסיהם 0 פונקציות ספריה 7 תרגיליס 7 פרק 6 מערכים ומחרוזות ההההההההההההההההההההההההה|הההה ה ה ה ההות 129 הגדרת מערך ואתחולו 1 מהו מערך! 1 אתחול של מערך חד-מימדי 1 דוגמאות למערכיס חד-מימדייס 1 תוכן העניינים 9 כיצד נגדיר מחרוות? 138 פונקציות ספריה לטיפול במחרוזות 1 הפונקציה (0ח507!6 10 הפונקציה (00וח506 0 שוע.. 147 הפונקציה (50768%0 1 השימוש ב-0%ח60 1 מערכים רב-מימדיים 0 1 מיון וחיפוש במערכים 16 מדוע צריך חיפוש! 146 מיון בועות 1 כיצד יתבצע מיון זה! 17 מיון מחרוזות בעזרת מערך אינדקסים 1 חיפוש בינארי בשיטת ייאריה במדבריי 1 אתחול מערכיס בערכיס אקראייס בג 156 כיצד נבצע אתחול אקראי? 1 כיצד יתקבלו המספריס האקראיים! 160 תרגיליס 160 פרק 7 עיצוב תוכנית ה,ה,הההההההההההה הההההה ה ה הההההה ה[ ההההה| ה ה ההיא 15 הגדרת דרישות 16 עיצוב יאוו ל ילואו :166-000 עיצוב התוכנית 1 עיצוב מסכים 1660 טכניקות עיצוב 1 טכניקת 'יחוסס-קסדיי - יימעלה-מטת'י .166 טכניקת ''פ0-וחסשספ'י - יימטה-מעלתה'"י 168 סיכוס טכניקות עיצוב 1 בחירת הכליס וקידוד מתאיס 1/0 בדיקת המערכת 1 תיעוד 0 פרק 8 יבצירת פרויקט ה,,ההההההההההה ההההההה ה ה ההההה ה ה הההה םהה ה ההא 13 מהי פונקציית ספריה! 17 יצירת תוכנית ממספר קובצי מקור 7[ מהו פרויקט! ...175.4 כיצד נבנה פרויקט 1 תוכנית דוגמה לפרויקט 17 0 המדריך השלם לשפת 6 פרק 9 אפיון משתנים וטווח ההכרה:::::'ג::.:::ו:::יגו::::ו:ג:.: 13 אפיון משתניס וטווח הכרה ...180.4 משתניס אוטומטייס 1 משתנים כלליים (גלובליים) 1 משתניס סטטייס 1 משתני אוגר 1 אתחול משתניס ...10 פרק 10 הגדרות קדם-מעבד ההםההההההההההה ה ה ההההה ה ה ההההה םהה האוא 15 הכללת קבציס 19 עיבוד והחלפה של הגדרות מאקרו 1 הידור מותנה 1 פרק 11 מצביעים הה,ה,ה,ההההההההההההההה הההההה ה ה הההההה ה ההההה םהה ה ההא 203 מצביעים וכתובות ויכרון 2 מצביעים ומערכיס :בל ...209 אריתמטיקה של מצביעיס 211 מצביעים וערכי פונקציות 2 מצביעיס למחרוזות ושימושיס בפונקציות 2 פונקציה למדידת אורך של מחרוזת 21 פונקציה להעתקת מחרוזת ...219 פונקציה להשוואת מחרוזות 2 פונקציה לצירוף מחרוזות 2 מערכיס של מצביעיס 0 מצביעיס למצביעיס 2 מצביעיס לפונקציות || תרגיליס 2 פרק 12 מבנים ההה,ההההההההההההההההההה ה ה ההההה ה ה[ ההההה ה ה ההה םהה[ םהה ההא 213 תיאור והגדרה של מבניס 2 אתחול מבניס 2 מצביעיס למבניס 2 מצביעים למבנים כערכיסם לפונקציות 23 תכנון ראשוני, הגדרת מטרות התוכנית - ל פונקציות שירות בסיסיות 2 תוכנית לבדיקת פונקציות השירות 2 מערכיס של מבניס 2 פונקציה לאיתור מוצר .2452 אתחול מערך של מבניס 2 תוכן העניינים 11 חבילת תוכנה לניהול בית כל-בו ב עדכון מחיר של מוצר 1 עדכון כמות המלאי 0 עדכון כמות שהתקבלה 0 בדיקת חוקיות של תו ייסוג פעולה'"י. מבניס בתוך מבנים - דוגמת יישוס 0 תוכנית לרישוס נוכחות וחישובי שכר 9 מ ב מבנה יייוס עבודה" - יי תכנון ראשוני - תיאור כללי של המערכת 0 תיאור של הפונקציות 0 פונקציות השירות של התוכנית - מבניס המתייחסיס לעצמס - רשימה מקושרת מש ב 5 רשימה מקושרת 0 אלפון טלפוניסם - תרגול ו הוספת מבנה 0 איתור מקוס ההוספה 0 הוספת פרטיס ל הגדרת טיפוס חדש בתצורה מורכבת 0 רשימה מקושרת דו-כיוונית [// ו תרגיליס 0 פרק 13 איגודים ההםהההההההההההההה ה םהה ה ה הההההה ה ה הההה ה ה[ הההה םהה ה ההא 207 הגדרה של איגוד 0 שיבוצ איגוד בתוך מבנה ב דוגמה לשימוש באיגוד 2 תכנון הפונקציות ל תרגיליס ב פרק 14 נושאים מתקדמים ההההההההההההההההההההההה ה הההה םהה ה וא 207 תוכניות עס פרמטריס 0 מצביעיס לכתובת המסך 7 כיצד מחולק המסך 0 חיפוש ומיון בעזרת פונקציות ספריה 0 מיון מהיר ב חיפוש בינארי 7 פונקציה בעלת מספר משתנה של פרמטריס הקצאת זיכרון דינמית 7 ()512606 ב הפונקציה (3|!060ח ב הפונקציה 08|!06 0 הפונקציה 1166 ה 2 המדריך השלם לשפת 6 עבודה בסיביות 2 פעולות הזוה בסיביות 20 תרגילים ]|| פרק 15 רקורסיה הההה,הההההההההההההההה הההההה ה ה הההההה ה[ ההההה|ה| ה ה ה ההא 21 הפעלה של פונקציה רקורסיבית 55 ב 5 266 5 0 מנגנון הרקורסיה ילאו לר .215 ערך מוחזר מפונקציה רקורסיבית 0 עקרונות תכנון של פונקציות רקורסיביות 2 בעיות ופתרונן ברקורסיה 2 עצים בינאריים 1 מגדלי האנוי 7 תרגיליס בבל ב ל 3 פרק 16 קלט/פלט וקבצים ההההההההההההההההההההההה ה ההההההה| םהה ההות 2211 ארגון הנתוניס בזיכרון משני 3 שיטות גישה לקבציס 7 פונקציות קלט/פלט עס מאגר 3 פתיחה וסגירה של קבציס 6 קריאה וכתיבה של תוויס בודדיס 7 קובצי תמליל םש ב םשש 50 בב םשש מ 2 5 שי 5 וש שש 2 מסוף המחשב כקוב> סטנדרטי 2 קלט/פלט עס פורמט 2 גישה אקראית לקבצים עס מאגר 3 פונקציות קלט/פלט ללא מאגר 2 פתיחה וסגירה של קבציס ל פונקציות לקריאה וכתיבה 2 גישה אקראית לקובצ ללא מאגר 28 קבציס ללא מאגר ומסוף המחשב 2 ניתוב מחודש של קלט/פלט סטנדרטל (ח60176600ז) 2 מבנה קובצ ₪05 1 תרגיליס 0 פרק 17 פסיקות ועבודה עם 5 ההההההההההההההההההההההההההה:הו: 255 הפונקציה ()860ח! 2 הספריה ח.05ום 7 1 פרק 18| משימות ההםהההההההההההההה ה םהה ה ה הההההה ה ה הההם ה ה[ הההה| ה ה ה ההיא 55 תוכן העניינים 13 פרק 11 0 פרק 12 0 פרק 13 ַ[ֶ[ֶ||| 0 פרק 15 0 פרק 16 0 נספח א! מבנהת המחשב.:....:::::וווווווווווווווווווווייייייייווו.: 207 שפת תכנות והידור 2 הגדרות בסיסיות 2 יחידת העיבוד המרכזית - יעיימ - 0ק6 555 5 ב 5-5 400 המסכס - ]4006 - 0 האוגרים הכלליים - ₪60150015 6פ5סכזק |8ז6ח6 00 אוגר דגליס 0 אוגר מצב - ז0ז₪6015 6006 חסםוחס6 ו אוגר הפקודה - ז0ל₪6015 ח500600ח1 0 מונה הפקודות - ז%6חט60 הוחפזטסזק 02 בקרה - |סשחס6 0 פסיקות (פ6קטזזס%ח1) 7 השלם מורכב מחלקיו - היעיימ 0 מערך הזציכרון ב וש םש כ ל ל 10 אוגר כתובת זיכרון - ז₪6015%6 2007655 ץזסוח6!₪ 406 סוגי ויכרון 1 אפיק הנתוניס והעולס החיצון 0 יחידות קלט/פלט - זטססטס/זטסחז ...208 גישה למרחב הקלט/פלט --- 7 שיטות לייצוג נתוניס בשפת 6 ...410 ייבוג דבימלי (עשרוני) 7 ייבצוג בינארי 1 הפיכת ייצוג עשרוני לייצוג בינארי 112 ייצוג מספריס בינארייס שליליים 1 שיטת משלים-2 12 תכונות של מספרים בינארייס 1 ייצוג הקסדצימלי ואוקטלי 1 חיבור מספריס .416 קוד ייצוג תוויס 1 תקן 45011 - 1066760806 ה0סו8וז0?ח1 ז0ס1 6006 5680870 הבּסוסוח - ו תקן 586016 - 6006 1567608006 |8וו66 60060 ץזבּחום 060חססאם 1 טבלת קוד 45011 0 4 המדריך השלם לשפת 6 נספח ב' נהלים לכתיבת תוכנית ב-6 הווווההוווהההההוווהההווווווות 4 מטרה 42 גופן הכתיבה והבחתנה בין סוגי אותיות 7 סוגי קבציס ושמות קבציס ל קובצי קוד (500706) םש ו 2 קובצי כותרת (ז68006ח) - קובצי 6סט|סחו פרטייס 7 קובצי כותרת (ז6806ח) - קובצי 6!006חו לשימוש הכלל 0 שמות מזהיס (5ז086ח06) 42 משתניס מקומייס 7 משתנים גלובלייס 2 מאקרו - הגדרות 406006 1 פונקציות מקומיות - 5%9806 2 פונקציות גלובליות 420 איבריס ב-60ט-50 או חסוחט 2 איבריס ב-וחטחס6 8 הוחת הקוד - 0 ריווח בין פקודות ...470 פקודות בתוכנית 2 6חוזח 600 ,00%0 0 אהסזם 42 ח6ו/5 5 0 0 7 זסז ל לולאות זס] ,6!וחעש ,6!וחצצ..60 ...429 קינוו פקודות בקרה - ]1 ,656 ,זס? ,6|וחעו ,6!וחאו..00 2111111165 430 הגדרת משתניס 20 הגדרת קבועיס ו[[ֶ[|[|| 0 הגדרות מאקרו - 0606 0 1 כתיבת ביטוייס 1 כתיבת פונקציות 2 הגדרת פונקציות .1 ערך המוחזר מפונקציה ל 0 ב ב העברת פרמטריס לפונקציה .0 32 תיעוד קובצ קוד 1 תיעוד פונקציה 0 תיעוד של קטע קוד ואג ליעיו אופא אוצוואריל.י.. 435 שימוש במשאביס 0 ו ב 0 כ שו 26 הידור ל א 0 0 תוכן העניינים 15 נספח גי פונקציות העכבר הה,ה,הההההההההההההה ה ה ההההה ה הההההה ה םהה ההא 37 המסך הווירטואלי של העכבר 7 קלוט את סטטוס העכבר: ()5 5% 0056 י'ווווווווווווווווווווווווווווווויווויווו: הדלק את סמן העכבר: ()חס זספזט6 6/סוח 0 כבה את סמן העכבר: ()01 זס5זט6 6פטסח 0 קרא את המיקוס והסטטוס של העכבר: ()6פטסוח 680ז 0 קרא את לחצן העכבר: ()655 קרא את שחרור לחצן העכבר 6פטסוח 0 : ()6]6856] 056 ב קבע תחוס אנכי לתנועת העכבר: ()6פחזעש 56טסוח 0 קבע תחוס אופקי לתנועת העכבר: ()6ח8זח 56סח - 0 קבע את מיקוס העכבר: ()56טס 56% 7 קבע סמן טקסט: (% זספזטס . 1-7 6 קבע סמן גרפיקה: ()9 זס5זט6 6פטסוח שומ 55 -ש שי 6 פיפ 2 מי םיט 4 59/5 פיפ 5-ל אפ ופ ספור את תנועות העכבר: ()5ז6זחט0ס6 6פטסוח ל נספח ד' תקציר פקודות ופונקציות (6066ז₪616 א6וש))..... 453 הגדרות כלליות : טיפוסים, משתנים, קבועים, מצביעים, מערכים /-/ 0 אופרטור, ביטוי, מבנה, איגוד... משפטים 0 פונקציות | פונקציות ספריה 0 קדס מעבד 0 נספח ה' התקליטור המצורף וסביבת העבודה %6ו1761.......... 469 התיקיות הרלוונטיות לספר 8 הפעלת התקליטור 0 קטלוג ספריס - ו קוד המקור 0 תוכנת שו ו6ד 0 התקנת התוכנה 0 הפעלת התוכנה 1 6 המדריך השלם לשפת 6 אינדקט עברי הה,ה,ה,,הההההההההההההההה ה ה םהה ה הההההה ה ה ההההה ה ה ההההה ה[ םהה ההיא 1 אינדקט 0-7 5 תוכן העניינים 17 קוכא יק, ₪6 / פיוכ[יוא. 9ז35ו 5/0292 <עוכ[- 3//5ו-20 86ו101, א 2//כ9כיס 0 . ]לייס 630 5כ9/ כין 4 שכ['2. ן639/ 5107/02 /כי] כיעוכ['י. 2. 0923 253 (/72 אכק 0 שוכ 202 /ו3:ע אק 14 92029. "פסכָכִיִ 9/609[609" 5[/6 ככ 2/699[60 /], //), 02ו2 2220 09 מו(ק3יו 210 ( 0192 [)7010 ) ((639/ 2 0ו570, 93202 101876 6/5 2630 2סככ'כ 000 /פיק, 03 /כעו2 :₪ 26 כ2'00/ 00000 222 ו 6% 43/2 90/0 ככוכןי2, 0/0פי א 0/71/00 כק 69/6( /יקו 2 2 202270. 8 המדריך השלם לשפת 6 הקדמה שפת 6 פותחה בראשית שנות ה-70 על ידי דניס ריציי (6ח6ו₪ .א פוחחסס) ממעבדות וו₪6 שבארהייב. שמה ניתן לה עקב היותה "יצאצאיי ישיר של שפת התכנות 8, שנכתבה בשנת 1970 על ידי קן תומפסון (חספקוחסח ד ח6א) עבור מחשב 7-קסס. לשפת 6 קשר הדוק עס מערכת ההפעלה אזאש, שעבורה פותחה השפה לראשונה. ואמנס, מערכת ההפעלה א1א ותוכנות העזר שלה נכתבו רובן בשפת 6. במקורה נועדה שפת 6 לפיתוח מערכות הפעלה ומהדריס אחרים, אולס במשך הומן היא נמצאה מתאימה לכתיבת תוכניות בתחומיס רביס אחרים, הן בעיבוד נתוניס והן במערכות הנדסיות ויישומי בקרה וזמן-אמת. שפת 6 רכשה לעצמה אוהדים רביס תוך מספר שניס מועט, וכיוס היא אחת השפות הנפוצות ברוב מערכות המחשב הקיימות. שפת 6 הינה שפה קלה יחסית ללימוד ונוחה לתכנות. השפה מאפשרת פקודות בקרה מובנות ונוחות לשימוש, ביטוייס מתומצתיס ושימוש באופרטורים רביס בכמה רמות הירארכיה. אחד המאפיינים הבולטיס של שפת 6 הוא הצמצוס שלה. השפה מכילה מעט פקודות, מספר קטן של טיפוסי משתניס ואינה כוללת פקודות קלט/פלט. תכונות אלו, הנראות במבט ראשון כחיסרון, הן אשר מקנות לשפה יתרונות רבים. בוכותן, המהדר של השפה קטן ופשוט, תוצאות ההידור לפקודות בסיסיות יעיל ביותר, כושר הניידות של השפה בין מערכות מחשב שונות ומערכות הפעלה רב, וניתן ללמוד אותה במהירות. את החסר בשפה משלימות ספריות המערכת הצמודות למהדר, אשר עליהן נרחיב את הדיבור במהלך הספר. הן מיועדות לספק שירותי קלט/פלט, טיפול במבני נתוניס, ניהול הזיכרון ועוד. בתחילה הוגדרה שפת 6 באופן לא רשמי על ידי יוצריה במעבדות ||86, ולמעשה היתה מיועדת לשימוש פנימי בלבד. לאחר מספר שנים, כאשר וכתה לפופולריות רבה, היא זכתה להכרה ולהגדרת תקן על ידי ₪451 (00:6 17050 0870ח509 |ההסטבא הה6הסחג). אגב כך גס הוכנסו בה מספר הרחבות לעומת תצורתה המקורית. כיוס, רוב המהדריס הקיימיס לשפה מותאמים לתקן זה בדרגת תאימות גבוהה. על-כן, ניתן להעביר תוכנית הכתובה ב-6 ממערכת מחשב אחת לאחרת, כמעט ללא שינויים. שפת 6 מופעלת בתחנות עבודה ומיני-מחשבים של יצרניס שוניס בפיקוחן של גרסאות שונות של אזאש ומערכות הפעלה אחרות המגדירות עצמן כ-אאנ (אזאשא, אזה, אזאפצ ועוד). שפת 6 גם מופעלת במחשבים מרכזיים שוניסם ובמערכות הפעלה שאינן ממשפחת א1אש, כדוגמת מערכת 55// של יבמ. הקדמה 19 מהדרי 6 מופעליס במחשבים אישיים תואמי יבמ תחת מערכות ההפעלה פוספחוצ 5 ו-18)שא. הפופולריות הרבה של שפת 6 ושל מחשבי 18-06 ותואמיהס תרמה לכך שכיום קיימיסם בשוק עשרות מהדרי 6 שוניס למחשביס אישיים. המהדריס הבולטיס בשוק הס אלה של 67050%וו ושל סחפ|זסם ועליהם מבוסס ספר זה, ובעיקר על מהדר ++6/6 06ח8!ז80 הנמצא בשימוש ברוב בתי התוכנה בארצ. בתחילה, היו לשפת 6 אוהדיס ומשתמשיס רביס במוסדות להשכלה גבוהה בלבד, בהס השתמשו במערכת ההפעלה א0. אחר-כך הצטרפו למעגל המשתמשים בשפה מהנדסים ואנשי מדע אחריס בתחומים שונים ובעיקר מתחומי האלקטרוניקה, הבקרה ומערכות זמן אמת. בתי תוכנה גילו את היתרונות הרביםס של השימוש ב-6 ואימצו אותה כשפת תכנות עיקרית ליישומים שונים. התפוצה הרבה של המחשב האישי ותחנות העבודה האישיות והימצאותם של מהדרי 6 רביס למחשביס אלה תרמה להרחבת מעגל המשתמשים בשפה רבת עוצמה זו. בעשור האחרון המשיכה שפת 6 להתפתח בכיוון של תכנות מונחה עצמים 001660 0פחסוזס) לאחר מאמצ שהוביל מדען בשס ביורן סטרוסטרופ ממעבדות 4181 (חברת הטלפוניס האמריקאית המכילה את מעבדות ||86). הגירסה של שפת 6 שפיתח סטרוסטרופ קיבלה את השס ++6. הכוונה מאחורי השם שנבחר היא שפת 6 שקודמה לשלב הבא. פשר הבחירה בצירוף ++ יובן במהלך קריאת הספר, כאשר האופרטור ++ בשפת 6 יוסבר. הפופולריות של שפת ++6 קיבלה דחיפה חזאקה כאשר חברת ₪167050% אימצה אותה כשפת הפיתוח המרכוית של מערכת ההפעלה פשסטחו/ ושל יישומיס הנכתבים עבור 5וססחו/. קייס ויכוח בעולס בין אנשי מחשבים לגבי היתרונות והחסרונות של השימוש בשפת ++6 לעומת שפת 6 המקורית, עבור סוגי יישומיס שונים. כיוס מקובל לחשוב שיש יתרון ברור לשימוש ב- ++6 עבור יישומי פאוססחו/ ואינטרנט ואילו שפת 6 עדיפה ביישומי ומן אמת ומערכות משובצות מחשב. אולס הגבולות אינס חדים ובשניס האחרונות רואיס נטיה גוברת לפיתוח בשת ++6, מכיון ששפה זו מבוססת על שפת 6 ולמעשה מהווה הרתבה שלה, על ידי תוספת של כליס התומכים בגישה מונחית עצמיםס. מומלצ מאוד לאנשי תוכנה המתכנניס ללמוד ++6, להתחיל בלימוד שפת 6. שליטה טובה בשפת 6, המהווה את הבסיס לשפת ++6, תאפשר מעבר קל ונוח יותר ללימוד ++6 בהמשך. ספר זה יצא לאור לראשונה בשנת 1988 ומאז וכה לחמש מהדורות עדכון ולאלפי תלמידים מרוציס בכל רחבי הארצ. הוא גס נקבע כספר לימוד במוסדות חינוך רביס. לפניך המהדורה השישית המורחבת, אשר מבוססת על נסיונס הרב והמקיף של המחברים, העורכיס ושל מוריס רביס אשר הואילו לתרוס מנסיונס בעבודה עס ספר זה. לכולס, התודה. 0 המדריך השלם לשפת 6 הספר מיועד לכל המשתמשים הקיימים והצפויים, במטרה לתת להם כלי עזר ללימוד השפה ולשיפור רמת המיומנות בהפעלתה. יופיה של השפה ועוצמת שירותיה למשתמש הינס אתגר אינטלקטואלי, אשר ראוי להתמודד איתו. תמורתו - תכנות יעיל ואלגנטי בשפת 6. הקדמה 21 הנחיות לקורא ספר זה מכוון ללימוד מקיף של שפת 6, אשר מתאים לקורא בעברית, לדרך החשיבה שלו ולצורת עבודתו. במהלך הלימוד מודגשת העבודה עס טקסטים בעברית, אשר כידוע, שונה מאוד משפה לטינית ולכן מעוררת קשייס בשילובה בשפת תכנות. הספר מיועד לתלמידי תיכון, סטודנטים, חובבי מחשב ותכנות ולמהנדסים המעונייניס ללמוד שפת תכנות, אשר תשרת אותס בעבודתס. למתחילים בתכנות, אנו ממליציס לקרוא בעיון את פרק המבוא, כדי שתכנות בכלל ושפת 6 לא יהיו זריס לו. בספר כלולים דוגמאות תכנות רבות, תרשימים, הסברים מפורטים ותרגילים בכל פרק (כפי הצורך). הס מכווניס להדגיש את כל התכונות והאפשרויות של השפה ואת טכניקות התכנות האפשריות והמקובלות בה. פרק 18, משימות, מציג בפני הקורא אתגרי תכנות בדרגות קושי שונות, המותאמות לכל אחד מפרקי הספר. מומל לנסות ולפתור אותס תחילה, לפני שבוחניס את הפתרון. דוגמאות התכנות המובאות בספר, הפתרונות לתרגילים (לא כולם!) ופתרונות המשימות הורצו במהדר 1166 ++6/6 סטזטד 0ח8018 (נמסר באדיבות ברק שירותי תוכנה). התוכניות, פתרונות התרגילים והמשימות ניתניס בתקליטור המצורף (ראה להלן). ניתן ללמוד את השפה ולפתור את התרגילים גם באמצעות מהדרים אחרים הקיימיס בשוק, ואשר עומדיס לרשות הקורא. מבנה הספר הספר מכיל 18 פרקים, חמישה נספחים ואינדקס כפול, בעברית ובאנגלית. מבוא לתכנות בשפת 6 ייטבילת אשיי. סקירת מושגי תכנות בסיסיים לטובת מתכנתיס מתחילים, והדרכה לקריאת תוכנית בשפת 6. בסיוס הלימוד הקורא יוכל 'ילקרוא'יי תוכנית פשוטה בשפת 6 והיא לא תהיה זרה לו. פרק 1 | תיאור אבני הבניין של השפה: המשתניסם, הקבועיס והאופרטוריסם והפעולות שניתן לבצע בעזרתס. פרק 2 הצגת משפטי התכנות ומבנה תוכנית בשפת 6. תיאור משפט ההצבה המאפשר לשנות ערכי-משתניס. פרק 3 | הסבר תמציתי על אפשרויות פעולות קלט/פלט באמצעות פונקציות ספריה סטנדרטיות. בפרק 16 ניתן הסבר מקיף בנושא קלט/פלט. הסבר ראשוני זה הנחיות לקורא ‏ 23 פוק 4 פרק 5 פרק 6 פרק 7 פרק 8 פרק 9 פרק 10 פרק 11 פרק 12 פרק 13 פרק 14 פרק 15 פרק 16 פרק 17 מכוון לאפשר ביצוע פעולות קלט/פלט בסיסיות בדוגמאות ובתרגילים שבפרקים הבאים. משפטי הבקרה השוניס בשפת 6. באמצעות משפטיס אלה ניתן להשפיע על מהלך התוכנית : לבצע התניות, לולאות והסתעפויות. תיאור הפונקציה, הגדרתה, השימוש בה והדרכים להעביר אליה פרמטרים ולקבל תוצאות. ניתנות דוגמאות לפונקציות שונות, השימוש בהן והסבר על הספריה הסטנדרטית. מבני מערכים שוניס ומחרוזות. ניתן הסבר על אופן ההגדרה של מערכיס ומחרוזות, אתחולס ודרכי השימוש בהס. בפרק זה גס הסבר על שיטות מיון שונות. פרק חשוב זה מדריך את הלומד לעצב את התוכנית בדרך נכונה שתקל עליו את התחזוקה בעתיד. על הקניית הרגלי תכנות טוביס ראה גס נספח ב'. לאחר כתיבת תוכניות פשוטות מגיעים לשלב בו בוניסם תוכנית שלמה ממספר קובצי מקור ופונקציות ספריה - זוהי בניית ייפרויקטיי. טווח ההכרה של משתניס בפונקציות ובקטעי תכנות שוניס הינו אחד מהנושאיס החשוביס בתכנות. בפרק זה מוסבר אפיון המשתניס ואתחולס. תיאור משפטי הבקרה למהדר, המאפשרים ביצוע של הידור מותנה. מציג את המצביעים, המהוויס ציר מרכזי בעוצמתה של שפת 6. מוסבריס בהרחבה מטרת השימוש במצביעים ואופן הגדרתס, שימושים שוניס במצביעיס ודרכים לפתור בעיות תכנות בפונקציות ובמערכים. הלומד יכיר את הדרכים ליישוס מבני-נתוניס מורכביס. הפרק דן באופן הגדרת המבנה, אתחולו וצורת השימוש בו, וגס מציג שימושיס בסוגי מבניס שוניס. האיגוד הוא מבנה נתוניס משלים. פרק גה מתעכב על שימוש נפוץ באיגוד, כאשר הוא משולב בתוך מבנה. תיאור של מספר שימושים מתקדמיסם בשפת 6: מצביעים למסך, השלמות בנושאי חיפוש ומיון, הקצאת ויכרון ועבודה בסיביות. רקורסיה היא טכניקת תכנות בעלת עוצמה רבה, אשר נתמכת היטב בשפת 6. הפרק מציג שיטות לתכנון פונקציות רקורסיביות ועומד על היתרונות והאפשרויות הרבות הגלומות בהן. תיאור מפורט של פונקציות קלט/פלט ובעיקר - פונקציות של ספריות המערכת שנועדו לשימוש בקבצים. הפרק מסביר טכניקות תכנות שונות, עם מאגד ובלעדיו ועוסק גם בניתוב מחדש. שפת 6 מאפשרת עבודה ברמת החומרה שמשמעותה, בין השאר, גישה לפסיקות המערכת ועיבודה ברמת ה-8105. בנושאיס אלה דן הפרק. 4 המדריך השלם לשפת 6 פרק 18 נספח א! נספח בי נספח ג' נספח די נספח הי אינדקס בפרק זה רוכזו משימות התכנות, בחלוקה לפי פרקי הספר (פרט לפרקים הראשונים). בכל משימה מוגדרת הבעיה שיש לפתור, או התוכנית לביצוע, והיא מלווה בדברי הסבר ולעיתיסם המלצה לדרך הפתרון. רוב המשימות פתורות ומוצגות כתוכניות מוכנות בתקליטור המצורף לספר. בנספח זה מוצג תיאור כללי של מבנה המחשב. מוסברים היחידות הפנימיות במעבד ועקרונות פעולתם, מבלי להיכנס להסברים מפורטים המצריכים ידע באלקטרוניקה. הקורא יוכל למצוא בנספתח זה הסבר מהותי למושגיס בסיסייס במבנה המחשב כגון: מעבד, זיכרון, אוגריס, אפיק, פסיקות ועוד. ניתן הסבר על שיטות ייצוג נתוניס ואריתמטיקה בבסיס בינארי ובבסיס הקסדצימלי, וגס על תקני 5611. נספח זה מיועד לרענן מושגיס מסוימים במבנה המחשב, אשר התייחסנו אליהס במהלך הלימוד של השפה ולטובת אלה שמתכנתים ברמת החומרה. כתיבת תוכנית נחשבה בעבר אומנות ויש עדיין הסבוריס כך. אולס עס זאת, אפשר להקנות לתכנות הרגלי עבודה נכוניס כדי שהתוכנית לא תישאר נחלתו של הכותב אותה בלבד, אלא תוכל להיות קריאה ומובנת לו בעתיד, וגסם לאחריס שעשויים להיות מעורביס בתחוזוקה שלה במועד אחר. התיעוד הוא אחד מאבני הנגף החמוריסם בתתזוקת תוכנה, ונספתח זה מיועד לתרוס לשיפור. העכבר הינו אחד מהתקני המחשב החיוניים. שליטה בו וניצול יכולתו הינס דרישת קדס בתוכניות רבות. קבוצת הפונקציות בנספח זה מכסה את רוב הפעולות הדרושות. הקורא מקבל בתקציר ה רשימה מרוכזת של ההגדרות והפקודות בשפת 6. יש בו גם תיאור קצר של פונקציות הספריה החשובות והפקודות המיוחדות של קדם המעבד (0665507ז0 6ז), בהן משתמשיס במהלך הלימוד בספר. הסבר מפורט על תוכן התקליטור ועל סביבת העבודה 161(0%6. אל תפעיל את התקליטור בטרס קראת בעיון את ההוראות. כך תחסוך מעצמך עוגמת נפש וטרחה מיותרת בעת שיבושיס שעלולים להיות. האינדקס מוצג בשני מיוניס: עברית ואנגלית, כדי להקל על הלומד והמעיין בספר. הנחיות לקורא 25 הערות כלליות במהלך הספר נקטנו במספר כללים כדי לפשט הסברים ודוגמאות : א. ברוב תוכניות הדוגמה קבענו ''מספרי שורות'י לשורות הקוד, כדי שניתן יהיה להתייחס לשורה מסוימת או לקבוצת שורות בהסבר הניתן בהמשך. מספור זה אינו קייס בתוכנית המעשית וגס אסור לכתוב אותו, כי אינו חלק מהשפה. ב בהגדרה פורמלית של פקודות ומשפטי בקרה השתמשנו בסימניס < > כדי לתחוס מרכיב מסויס בפקודה. תוכן הסימניס מסביר את המשמעות של אותו מרכיב. ג. = בחלק מהדוגמאות נאלצנו לפצל שורה מסוימת בגלל מגבלת רוחב הדף. פיצול וה אינו חלק מהשפה ואינו הכרחי בתוכנית מעשית. אדרבא, רצוי לכתוב את הפקודה בשורה רצופה. עס זאת, אנו ממליצים לכתוב שורות קוד קצרות, כדי להקל עלינו את הכתיבה, ההבנה והשליטה בתוכנית. תוכניות, תרגילים ומשימות והתקליטור המצורף התרגילים שבסוף פרקי הלימוד מייצגיס קשת רחבה של בעיות, ולפתרונם יש להשתמש במשפטים ובטכניקות שנלמדו באותו פרק. אין לנו ספק, שפתרון תרגיליס אלה ישמש נדבך נוסף של ניסיוו הנרכש בשפת 6 שאפשר יהיה לנצל אותו לאחר מכן גם בעבודה מעשית. במהלך הלימוד יש הפנייה למשימות מתקדמות המפורטות בפרק 18. במשימות אלו מוגדרות בעיות שפתרונן דורש כתיבת תוכנית מחשב מורכבת יותר מזו שנדרשת בתרגיליס השוטפים. לעיתיסם ניתן גס הסבר מפורט עבור הלומד, הכולל רקע והצעות לשיטת הפתרון. הדגשנו את השימוש בשפה העברית, כדי להדריך את הקורא לקראת עבודה מעשית. אנו ממליציס להתמודד עס משימות אלו במהלך לימוד הספר, שכן הדרך הטובה ביותר ללמוד שפת תכנות, היא באמצעות תרגול התכנות וההרצה במחשב. לרוב התרגילים והמשימות הכנו פתרונות, המצוייסם בתקליטור המצורף, כדי לסייע ללומד ולחלצ אותו אס נתקל בקושי כלשהו. אנו ממליציס בפניך הקורא, לנסות ולהתמודד עס הבעיה בטרם תעיין בפתרון המצורף. בסיוס תוכל להריצ את הפתרון המוצע, להשוות אותו עס שלך ולראות היבט נוסף לפתרון של בעיה נתונה. יש משימות המסתמכות על התוצאות של משימות קודמות. במקרה כוה תוכל להיעזר בפתרונות המצורפים, באס לא הצלחת לפתור משימה בשלמותה. 6 המדריך השלם לשפת 6 הסבר מפורט להתקנת התקליטור תמצא בנספת ה', בקובץ 065 שבספריית השורש בתקליטוו. יש לקרוא אותם בעיון לפני כל פעולה, בדי לא לגרום נזק. בתקליטור נמצא מהדר התרגול 6ו61ד (06ו1 ++6/6 סטזטוד סחאוזסם) (הוראות התקנה והפעלה בנספת ה' ובקובצ 660106.006 ד שבתקליטור בספריה 66ו|6)6ז50/88), את רוב התוכניות וקטעי התכנות המופיעים בספר, פתרונות לתרגילים שבכל פרק (לא לכולס), פתרונות לחלק מהמשימות הנתונות בפרק 18 ומספר קובצי נתוניס הנחוציס להרצת כמה מן התוכניות. שים לב: קטעי התכנות משובציס בתוך תוכנית ראשית, כדי שיהיה ניתן להריץ אותס במחשב. הקורא יוכל לבצע שינוייס כדי לבחון דרכיס נוספות לתכנות או הרצה. שים לב: בתקליטור לא כלולות כל התוכניות ואין פתרונות לכל התרגיליםס או לכל המשימות, אלא כפי שמצאנו לנכון להציג לקורא. התוכניות שבתקליטור הורצו במהדר 66₪ו61ד (0ו1 ++6/6 ססזטד סח8|זסם) שנמצא בתקליטור. אפשר, וגס רצוי להריצ אותס במהדר מלא של השפה. ראוי להזכיר שלפעמים יהיה צורך לעשות מספר שינויים בתוכנית או בפקודות קדם-המהדר (כמו למשל הפקודה 06ט61חו), כדי לאפשר הרצה ללא שגיאות. הנחיות לקורא 27 מבוא לתכנות בשפת 6 טבילת האש לפני שנתחיל בלימוד שפת 6, נסביר מושגים, נסקור בקצרה את מרכיביה ונציג מספר דוגמאות פשוטות. בפרקים הבאיס נדון בהרחבה בכל נושא מאלה המפורטים כאן ובנושאיס רביס אחריס. התכנות בשפת 6 כולל שימוש רב בפונקציות ובמודולריות גבוהה. שפת 6 משמשת היוס בכל תחומי התכנות בענף המחשבים. ב-6 אין טיפול ישיר בקלט/פלט, קובצי גרפיקה או כל תחום אחר. השימוש נעשה בעזרת פונקציות ספריה. פונקציית ספריה - קטע תוכנית, שמישהו כתב עבורנו לטיפול בנושאיס אלה. בשפת 6 ניתן לטפל במיגוון סוגי נתונים. מספר שלס הוא משתנה מסוג ז606סחו. משתנה הוא תא בזיכרון, או מספר תאיס, בהתאס לסוג משתנה. לכל סוג נדרש מספר תאיס שונה, לכל משתנה ניתן שס על-פי בחירתנו. משתנה, על-פי שמו, פירושו שהערך אשר נמצא בו (בתא הציכרון) יכול להשתנות. הדבר תלוי בתוכניתן בלבד, והשינוי מתבצע על ידי השמת ערך או תוצאות חישוב למשתנה. ערך של כל משתנה יכול להיות בטווח מספריס מסוים. משתנה ז606שח1 נמצא בטווח 32,767 עד 32,768-. מבוא לתכנות בשפת 6 | 29 מושגים בסיסיים .1 מהדר (ז6!וקוח0ס6) שפת מכונה (6חוח36 וח 6 ה)) משפט ( חר 5%8%) בלוק (06%ום) משתנה (806וז8/) קלט טטסח1) פלט (זטוסזטס) אתחול (חסו03]28:חו) סיפריה (עְזבּזסון) תוכנית המתרגמת תוכנית מקור משפת תכנות כלשהי (שפת 6 לדוגמה) אל שפת המכונה המתאימה למחשב. שפה אשר המחשב מבין ורק הוא (למעשה, סוג או משפחת המחשביס). לכל משפחת מחשביס שפת מכונה משלה. פקודה בשפת התכנות. קבוצת פקודות המתבצעת כיחידה לוגית אחת. תווית המייצגת ערך לא קבוע אשר נמצא בזיכרון. ערך וה עשוי להשתנות במהלך התוכנית. תהליך הזנת נתוניס למחשב לשם עיבוד. תהליך הצגת הנתוניס המתקבליס לאחר ביצוע הקלט. הצבת ערך התחלתי במשתנה, לפני תחילת השימוש בו בתוכנית. אוסף תוכניות ופונקציות המאוחסנות במחשב ועומדות לרשותן של תוכניות, אשר נכתוב בשפת 6. כיצד נכתוב תוכנית בשפת 6 ראשית, עלינו לדעת מה רוציס מאיתנו. ואת אומרת, לקרוא את הדרישה ולהבינה, לפרק דרישה זו לתת-דרישות, ולענות על כל תת-דרישה בנפרד. דרישה לדוגמה: קלוט שני מספרים, חשב והדפס את הסכומים. תת-דרישה > ביצוע פעולות קלט - לצורך זה נשתמש בפונקציות ספריה מתאימות. פונקציות הספריה המטפלות בקלט/פלט יושבות בספריית 0ו560. לשס כך נשתמש בפונקציה 3% לקלט ובפונקציה אחוזט לפלט. > יש להגדיר תאי ויכרון כדי לאחסן את מספרי הקלט. נחליט על שמות לתאי זיכרון אלה. השמות הס 3 ו-פ. וההגדרה היא : שיס לב/ 7 ספסם1 נקודה- פסיק (06 הוא תו מוסכס המציין סיום משפט קוד. 0 המדריך השלם לשפת 6 . 0 . 0 . 0 . 0 . 0 / -/ > יש להגדיר תא זיכרון נוסף לצורך אחסנת תוצאות החיבור בין שני המספרים. נחליט ששמו של תא הזיכרון הוא וחטפ ונוסיף אותו להגדרה הקודמת. ;תטפ ,0 ,8 %ם1 לאחר שהכנו את הרקע, יש לעבור לחלק הביצועי. תתילה עלינו לקלוט שני משתניס, וההגדרה היא: ; (68 ,"%6")+ת508 ; (80 ,"%0")+ת508 פעולת החישוב מבוטאת בשורת הקוד הבאה: מה שנותר הוא להציג את התוצאה, וזו פעולת הפלט. ; (תמ 50‏ ,"65)"%8תנ1עס התוכנית הבאה נותנת מענה לדרישה: קלוט שני מספרים, חשב והדפס את סכומס. /* קובץ תקליטור: 6020001.6 */ הכרזה על ספריות בשימוש על מנת להשתמש בפונקציות מתוך ספריות אלו */ הספריה 568316 מטפלת בפעולות קלט/פלט 7 פונקציות קלט (1ת568) פלט (+6ם 1עס) נמצאות בספריה זו - <ם.556010> 66ט610מ1+ / *מ בת הפונקציה הראשית של התוכנית , פונקציה זו חייבת להימצא בכל תוכנית 6 */ (ס1נסט) מנאת 1ס ז /* הכרזה על משתנים פרטיים של הפונקציה מ1את */ 19 ₪ שב /* החלק הביצועי של התוכנית ₪ /* אין אפשרות להכריז על משתנים נוספים אחרי תחילת החלק הביצועי ‏ */ /* הצג משפט זה על המסך (פלט) */ ; (": הקש מספר ראשון") 65מנפס /* בקש ערכים למשתנה 8 (קלט) */ 6 757 505 /* הצג משפט זה על המסך (פלט) */ "8 ההשו מופופור ו" "') םות /* בקש ערכים למשתנה ₪ (קלט) */ 5 7567 555 = / = 6 = 58 חבר את ערכם של 8 ו- ₪ והצב את התוצאה במשתנה תטפ */ הצג את תוצאת החישוב על המסך */ ;(ס ,8, תטפ5 ,"הסכום של 56 ו- 58 הוא %8")+6ת1עס ] מבוא לתכנות בשפת 6 31 תוצאה 4 : הקש מספר ראשון 6 : הקש מספר שני הסכום של 6 ו-4 הוא 10 הסבר בסיסי של פעולות קלט/פלט הפונקציה 4חוזם (פלט) > הפונקציה מאפשרת פלט על-פי תבנית של מלל וערכים של תאים בציכרון. > הפונקציה תשב בפלט את הערכיס בכל מקום שיסומן ''%0'י במחרוזת הפלט. דוגמה: ; (כ+8 ,2 ,8 ,"ת%0 18 %6 0ם8 56 01 תטפ 6ם61)"7תנ1עס נניח ש-8 ו-5 קיבלו את הערכים 4 ו-6 בהתאמה. אז יודפס : 0 18 6 6ת8 4 0% תטפ 6םך7 שים לב/ הסימון א במחרוזת הוא סימון מיוחד הגורס לירידת שורה במסך. הפונקציה 5681 (קלט) > הפונקציה מאפשרת קלט על-פי תבנית של תאים בציכרון. טיפ? לא ניתן להדפיס הודעות למשתמש באמצעות /000א, אלא רק באמצעות [חיוק. . > > הפונקציה תקלוט מספרים לפי מספר הפעמים שבו נמצא הצירוף %06 במחרוזת תבנית הקלט. שיס לב/ הפונקצית ]560% משנה תאי זיכרון שאינם שלה. כדי לאפשר זאת, יש להוסיף את התו "שי לפני שם המשתנה. תרגילים 1 קלוט שלושה מספרים והדפס את מכפלתם. 2 קלוט מספר והדפס את הריבוע שלו. 2 המדריך השלם לשפת 6 תנאים משפט זו משמש אותנו להגדיר בתוכנית תנאי ביצוע. דוגמת תחביר א' (תנאי) +1 משפט 16% משפט שיס לב/ / > משפט 0ח0וח690) הוא ביטוי שורת קוד). *> משפט 656 אינו חובה. > ככ עוד התנאי ''אמתיי (6ט₪), יבוצע המשפט (ביטוי) - אחרת, כלומר '*שקד'י 856/) יבוצע המשפט שלאחר 6/56. > תנאי יאמתיי הוא כאשר ערך תנאי שונה מ-0. דוגמת תחביר ב' בלוק שיס לב/ 9 > בלוק הוא ביטוי מורכב (סדרה של שורות קוד). > כאשר רוצים להתייחס לסדרה של שורות קוד, יש לסמן סדרה זו בין סוגריים מסולסלים (/ ]), אחרת יתבצע רק המשפט הראשון שלאחר התנאי, בהנחה שהתנאי אמת. דוגמה 6700002.6 קלוט שני מספריס ובדוק אס הראשון גדול יותר מהשני, או אס שניהס שוויס, והצג הודעה מתאימה. מבוא לתכנות בשפת 6 33 /* קובץ תקליטור: 60002.6 */ "ו <ם.5%6010> 61066מ1+ (ס1נסט) מ1את 16ס7 | ₪2 שת הקלד מספר ראשון") 65ם נצס ; (68 ,"56")פתה50 ;("מ : הקלד מספר שני ‏ ")%5םנ1עס 80( ;‏ ,"5)"%54תהספ למור כ ה ; (( "תהמספר הראשון גדול יותר") +6ם 1נעס 1-6 ב ה ; ("םהמספר השני גדול יותר") %62מ1צס 16 ; (( "םהמספרים שווים") 61מ1עס תוצאות הרצה אפשריות תרגיל 3 קלוט שלושה מספריס והדפס את הגדול מביניהס. 4 המדריך השלם לשפת 6 : הקלד מספר ראשון 5 : הקלד מספר שני 8 המספר השני גדול יותר : הקלד מספר ראשון 8 : הקלד מספר שני 4 המספר הראשון גדול יותר : הקלד מספר ראשון 5 : הקלד מספר שני 5 המספרים שווים לולאות הפקודה 6!וח/ש מבנה תחבירי א (תנאי) 6 משפט מבנה תחבירי ב' (תנאי) 6 | בלוק שים לב/ > כל עוד התשובה לתנאי היא כן (אמת) - הלולאה תמשיך להתבצע. 4 . 1. | >%> יש לדאוג לכך שגם תהייה יציאה מהלולאה. זאת אומרת, לדאוג שתוצאת תנאי הלולאה תהיה שקד. אחת הדרכים לעשות זאת היא עס מונה לולאה. הגדרת מונה לולאה ואיפוסו: 1=02 6ם1 כל עוד מונה הלולאה קטן מ-10 (10 > 1) 116תש | הדפס את ערכו של מונה הלולאה ;(3 ,"61)"%6ת1עס קדם את המונה ב-1 ;1=1+1 כאשר מונה הלולאה שווה ל-10, אנו מסיימיס את הלולאה. דוגמה 6450003.6 הדפס 10 פעמיס את המללה יישלוס"י. /* קובץ תקליטור: 60003.6 */ <ת.5%010> 61066ת1+ (ס1סט) מנ1את 1סט ָ /* הכרזה על משתנה - מונה לולאה */ ורוה /* איפוס מונה הלולאה - = 4 /* בל עוד התנאי נכון (אמת) הלולאה תתבצע */ (10 > 1) 16נתשט ָ מבוא לתכנות בשפת 6 | 35 ו /* קידום מונה הלולאה */ ₪ = 4 /* כאשר מונה הלולאה יגיע ל- 10 הלולאה תסתיים */ תוצאת הריצה של התוכנית שלום שלום שלום שלום שלום שלום שלום שלום שלום שלום תרגילים 4 קלוט 5 מספרים והדפס את סכומס. 5 הדפס את סכוס המספרים מ-1 ועד 10. תנאים מורכבים תנאי מורכב נבנה מתנאיס פשוטים יותר. הפעולות המרכיבות תנאים מורכבים הן: 'יוגם", 'יאויי, ''לאיי. סימנים מוסכמים 6 - וגם דוגמת תחביר: (תנאי2 88 תנאי1) +11 משפט שיס לב/ משפט ]ן יתבצע רק כאשר תנאי 1 יהיה אמת וגם תנאי 2 יהיה אמת. 6 המדריך השלם לשפת 6 | - או דוגמת תחביר: (תנאי2 || תנאי1) 15 משפט שיס לב/ משפט ]ן יתבצע רק כאשר תנאי 1 יהיה אמת או תנאי 2 יהיה אמת. דוגמת תחביר: ((תנאי) !) 15 משפט שיס לב/ משפט וז יתבצע רק כאשר התנאי יהיה שקר. המשפט שקר (אינו נכון) מקביל למשפט לא מתקיים. דוגמה 6750004.6 קלוט מספריס חיובים וסכם אותם. יש לקלוט לכל היותר 5 מספרים, או עד שייקלט מספר שלילי. הדפס את סכוס המספרים. /* קובץ תקליטור: 60004.6 */ <ת.5%010> 66ט1ס6ת1+ (ס16סט) מ1את ב1סט | /* הגדרת משתנים ואתחולם /*‏ ;0 = סטסם1 ,0 = 1 ,0 = תטפ 6ם1 (0 =< 6טסם1 86 5 > 1) 16נ1תט לק וש כ 67 565 (0 =< סטסם1) 15 ;%טסםג + תט5 = תטפ > 1% = 1 ] 8 6672 = 50 ) פנסוווב שסן ו מבוא לתכנות בשפת 6 17 תוצאות הרצה אפשריות 1 2 3 1 4 פַ 5 = ופ 3 4 3 2 =1 10 = תטפ תרגיל 6. קלוט מספרים חיובייס או שלילייס ומצא את המקסימלי מביניהס. יש לקלוט עד שייקלט המספר 0 או 5 מספרים לכל היותר. משפט וס לולאת זס? נועדה ללולאות עס מונה בקרה. דוגמת תחביר א' (פקודת קידום ;תנאי המשך ;אתחול) 10% משפט דוגמת תחביר ב' (פקודת קידום ;תנאי המשך ;אתחול) 10% ( בלוק | שים לב/ [ אתחול - מתבצע פעם אחת בלבד בכניסה ל-:זס]. תנאי המשך - לולאת זט תתבצע כל עוד תנאי ההמשך מתקיים. פקודת קידום - נועדה לקידום מונה הלולאה. 8 המדריך השלם לשפת 6 תהליך ביצוע זס1 3 1 9 (פקודת קידום ;תנאי המשך ;אתחול) 105 משפט/בלוק 2 שים לב/ תחילה יבוצע האתחול (0), לאחר מכן תתבצע בדיקת נכונותו של ( התנאי (1). סדרת הפקודות משפט/בלוק (2) תתבצע לאחר שווידאנו 7 שהתנאי אמת, ולבסוף יקודם מונה הלולאה (3). התהליך חוזר על עצמו כ 2) (3)) כל עוד התנאי מתקיים. ניתן להשוות לולאה וו עס לולאת 6!וחאו ומונה. 1=02 (1>10) 116תט | משפט/בלוק ; 1=1+1 דוגמה 6720005.6 הדפס 10 פעמיס את המללה יישלוסי'י. /* קובץ תקליטור: 60005.6 */ <ת.5%010> 61066ת1+ (16סט) מנ1את ב1סט | וו (1 % 4 = 4 107 > % 07 = 1) 8שש ; ("משלום") +6ת1צס תוצאות הרצת התוכנית תרגיל 7 כתוב תוכנית המדפיסה את לוח הכפל. מבוא לתכנות בשפת 6 19 פונקציות פונקציה היא היחידה הבסיסית המרכיבה תוכנית ב-6. היא למעשה תוכנית קטנה הממלאת משימה מוגדרת אחת. הגדרה של פונקציה (רשימת פרמטרים) שם הפונקציה סוג הערך המוחזר זָ גוף הפונקציה ו שם הפונקציה שס הפונקציה יכול להיות מורכב מתוויס גדולים או קטניס ומקו תחתון יי" להפרדה בין מיליס. שס הפונקציה צריך להיות בעל משמעות אשר תרמוז על מהות הפונקציה. למשל פונקציה המחברת בין שני משתניס, שמה צריך להיות, למשל 0, 8ז6םוחטח 300, או 5זססותט00. רשימת פרמטרים רשימת המשתנים, אשר מועבריס לפונקציה (משוכפלים בויכרון כעותקים), ונועדו לצורכי חישוב פנימייס של הפונקציה. גוף הפונקציה שורות קוד אשר מהוות את יחידת הביצוע של הפונקציה. סיוג הערך המוחזר תוצאת הביצוע של הפונקציה, כמו למשל, פונקציה אשר מחזירה תוצאת חיבור בין שני מספריס מסוג שלם. כאשר תוצאת החיבור היא מספר מסוג שלם (זה איננו חוק, אלא החלטה של התוכניתן או הדרישה), ואת אומרת שהערך המוחזר הוא מסוג שלס. תכונות 220 כל פונקציה יכולה לקבל פרמטרים מהפונקציה שקראה לה ולהחציר ערך. כל פונקציה יכולה לקרוא לפונקציות אחרות. לפונקציה יש משתנים מקומייס שהס פרטייס לה. ואת אומרת - רק היא יכולה לשנות את ערכס. משתנים מקומיים קיימים כל עוד הפונקציה קיימת (למשך ומן פעולת הפונקציה). עס סיוס הפונקציה משתחררים תאי הזיכרון של המשתנים המקומייםס והס פנוייס לצרכים אחרים. הפונקציה חו8וח היא הפונקציה הראשית בתוכניות בשפת 6 וחייבת להימצא בכל תוכנית. פונקציה זו נקראת על ידי מערכת ההפעלה ואליה היא מחזירה ערך (אין חובה להחציר ערך מהפונקציה הראשית). עיקרון התכנות בשפת 6 מבוסס על רמה היררכית של פונקציות, כאשר כל פונקציה עונה לתת-בעיה בסיסית יותר. המדריך השלם לשפת 6 סוגים של פונקציות פונקציה קולטת מקבלת נתוניס מן המשתמש. דוגמה (10סט)86% ב1סט ( 7 סם1 88( ;‏ ,"5)"%0ם508 תרשיס 1 פונקציה מקבלת הפרמטריסם מועברים לפונקציה בעת הפעלתה. דוגמה: (ע %ת1 ,8 %ם1) 8866 ב1סע ן ; (ע+8 ,"%8") 65תנ1נעס (ע %ם1 ,8 %ם1) 866 ְ 3 ו-= משוכפלים בזיכרון תרשיס 2 פונקציה מדפיסה פונקציה המבצעת פלט. מבוא לתכנות בשפת 6 41 דוגמה: (16סט) עסמתטת 6םנ1עס בנ1סט ( ;חטם %ם1 2 = תות ; (תסטם ,"%8") 65תנ1בעס (108סט) ע6ססממטם סתנ1עס ְ ; () עססמחטם סתנ1נעק תדשיס 3 פונקציה מחזירה מחזירה ערך לפונקציה שהפעילה באמצעות הפקודה חזטשססז. דוגמה: (10סט) 78106 תעט66ע2 16סע ( ;ס ,8 6ם1 ; (מ+8) מע660ץ (108סט) 7816 תעט66ע | ; 6501%ע2 6ם1 (מ+8) מעט26% תרשים 4 2 המדריך השלם לשפת 6 דוגמה 6720006.6 כתוב פונקציה המקבלת מספר חיובי שלסם, ומחוירה את סכוס המספרים מ-1 ועד לאותו מספר. /* קובץ תקליטור: 60006.6 */ <ת.5%010> 66ט1ס6ת1+ /* הכרזה על הפונקציה */ ; (מטםת %6םת1)חתטם 60 806 6ם1 (ס1נסט) מנ1נאת 1ס | /+ המשתנה שעד אליו נחשב את כל המספרים */ ;חטם 1% /+ המשתנה שיקבל את התוצאה */ 1 ;(" : הקש מספר")65תנ1עס ; (תטםת6 ,"%3")%ת508 /* קריאה לפונקציה (הפעלת הפונקציה) ‏ */ ; (תגות)תות 60 866 = 016ו68ע2 ;(26501% ,"%6 = תוצאה ת")%1ת1צס */ ערך מוחזר: ערך מסוג 6686%םת1 שם הפונקציה: | תטםת 60 806 פרמטר מועבר: חטםת מסוג : %6מ1 7 /* הגדרת הפונקציה */ (תטת %6ת1)תטת 60 806 6ת1 /* משתנה מקומי אשר יאחסן את תוצאת החישוב */ תות משתנה אשר משמש אותנו כמונה מספרים עד למספר תטם */ 5 / ;0 = תטפ (1 4% 1 = 12 קחש 45 5 07 = 1) 62ק = 5 = 08 תטפ הוא הערך המוחזר ומאוחסן במשתנה 26881%‏ */ ; (תט5) ת2ט66ע = / דוגמת הרצה 4 : הקש מספר 0 = תוצאה מבוא לתכנות בשפת 6 43 תרגילים 8 כתוב פונקציה בשם אא8וח המקבלת שני מספריס ומחזירה את הערך המקסימלי מביניהס. 9 כתוב פונקציה בשס 96ח₪18 הקולטת מספר ומדפיסה משולש כוכביות בגודל המספר. לדוגמה: למספר 4. א א <* תחילה עלינו לכתוב פונקציה בשס 6חו| 5091 המקבלת מספר ומדפיסה שורת כוכביס באורך המספר. על הפונקציה 180916 להשתמש בפונקציה 6חו| זה50. קלט/פלט של תווים תאי ויכרון מסוג +חו משמשיס ב-6 לאחסון מספרים שלמים. תא ויכרון מסוג ז608 משמש לאחסון מספרים קטנים (127 + 128-), ובדרך-כלל משמש לאחסון קוד 56111 של תווים (ראה נספח טבלת 45611). יש פונקציות ספריה המיועדות לטיפול בקלט/פלט של תווים : ;( )זג 6פטק מקבלת כפרמטר קוד של תו ומדפיסה אותו על המסך. ;( )ז3ח₪6%6 מחזירה קוד של תו שנקלט מקובצ הקלט של התוכנית. כאשר קוב הקלט מסתיים, תחזיר הפונקציה 1-. קובץ קלט התוכנית ממתינה להקלדת תוויס על המסך. סדרת התוויס לאחר ההקלדה נקראת קוב קלט. סיום קלט סיוס הקלט יתבצע עד להקשת 6= או 2+!6. הערה לפונקציה () 860008 יש שני חלקים. חלק אחד מאפשר קליטת תוויס ואגירתם; החלק השני מאפשר למשוך את התווים החוצה בעזרת לולאה, כדי להציג אותס. דוגמה: ; 062 6ם1 ;() 0600282 = 0 (1- = !ם60) 16נ1תשט | ;() 4660282 = ם0 יש לציין שאנו יכוליס לקבוע כל תו רצוני לציון סיוס קובצ הקלט. לדוגמה: ; 062 6ם1 ; ('ת'=! (()82ת88650 = ם6)) 116םח ; (1 + ם0) עא8םססוס 4 המדריך השלם לשפת 6 במצב ה נקליד סדרת תוויס עד להקשת ז6שח5 (למעבר שורה). שים לב/ * שורת הקוד ;(1 + 60) זפחספטק תציג את התו הבא על המסך. זאת 7 ( אומרת, אס הקלדנו 8 , יוצג 9 על המסך. ב > קוד 45011 של 8 הוא 97 כאשר נוסיף לו 1, התו שמייצג 98 הוא 2 (ראה טבלת 4501). דוגמה 6000007.6 כתוב תוכנית הסופרת את מספר השורות בקוב הקלט. /* קובץ תקליטור: 600007.6 */ <ת.5%010> 66ט610ת1+ (16סט) מנ1את ב1סע ָ /+ משתנה הסופר את השורות בקובץ הקלטף */ 2 סם1 /* משתנה אשר מקבל את התווים בקובץ הקלט בזה אחר זה* / ו 5 /*+ משתנה המייצג את קוד סוף הקובץ המתקבל אוטומטית* / = = ₪908 ₪5 7 = 68ם11 9 (*פ 8 ₪916 ₪ 601 ₪5 6 511 השפ ₪ שסוחו) רסוחו פוסן (601 =! ( ()282ם8660 = ם0 )) 16נ1תט /* קרא תווים עד שמתקבל תו סוף הקובץ */ /* ספור את השורות */ 2 + 68ת11 = 68ת11 ('ם' == םס) 11 ; (68מ11 ,"מ%6 : 18 1116 עטסץ םמ1 68מת11 0% עסמחטםת 6ת7") 1>תוצס ו תוצאות הרצת התוכנית :1 סם 1+2ע082 מס 6ע₪ 1116 מטסץ ע6סםתת בטה 5 << 2 :18 5116 עטסץ ם1 68ם11 05 עססמתטם 6מך ניתן לקלוט ולהציג תוויס גס בעזרת פונקציית הספריה אשר למדנו. לדוגמה: ; ם60 עהתס קלט ;( ם06+ ,"5)"%60ם508 פלט ; (םס ,"61)"%0>תנעס תרגילים 0. כתוב פונקציה בשס זמקטס+ המקבלת קוד של תו ואס הוא אות אנגלית קטנה, הפונקציה תחזיר את הקוד של האות האנגלית הגדולה המתאימה, אחרת - הפונקציה תתחזיר את הערך שנלקח כפרמטר. (רמז: ההפרש בין אות אנגלית קטנה לאות אנגלית גדולה בטבלת 45611 הוא 32). מבוא לתכנות בשפת 6 15 1. כתוב תוכנית המדפיסה את קוב הקלט שלה מוסב לאותיות גדולות. רמז: ()ח6%6 | פונקציה הקולטת תו. ( )060606 | פונקציה הקולטת תו ומציגה אותו על המסך. דוגמה: משתנים בוליאניים תוצאת ביטוי תנאי בשפת 6 הוא מספר המיוצג על ידי הערך אפס כאשר הוא שקר, וכל ערך השונה מ-0 כאשר הוא אמת. אופרטורים בוליאניים הם: 8 וגס 1 או י היפוך (''לא'י). בעורתס ניתן לקבל תשובה מספרית (אמת או שקר, 6ט₪ או 38/56 בהתאמה) לגבי ערכס של ביטויים. דוגמה: */ %/ */ 7 / / תוצאה 5 יקבל את הערך אמת 6 יקבל את הערך שקר אם 6 בעל הערך אמת הדפס "6שגעץ" אחרת הדפס "8156ק" /* /* /* /* /* /* (ס) 5 ; ("6גו5)"72תנמס 1-6 ("186ה8ע")65>תנ1מס בסיוס הרצת קטע התוכנית יודפס '8156='', מפני ש-6 קיבל את ערכו ההפוך של הערך פ, שהוא ערך אמת. כלומר, 6 יהיה בעל ערך שקר. תרגילים 2. כתוב פונקציה בשס ז6סקט15 המקבלת קוד של תו, ואס הוא אות אנגלית גדולה, היא מחזירה אמת. 3. כתוב פונקציה בשם זסצוסו5! המקבלת קוד של תו, ואס היא אות אנגלית קטנה, היא מחזירה אמת. 6 המדריך השלם לשפת 6 אבני הבניין של השפה בכל שפה, ושפת מחשב בכלל זה, דרושות אבני בניין כדי להרכיב את הביטוייס והמשפטיס שלה, ובמקרה שלנו - את תוכנית המחשב. בפרק זה נכיר את הקבוצות העיקריות המהוות בסיס לשפת מחשב בכלל, ולשפת 6 בפרט: המשתנים (מטיפוסים שוניס), הקבועיס והפעולות (אופרטוריס) האפשריות ביניהס. טיפוסים של משתנים טיפוס (6סץ1) של משתנה או קבוע נקבע על פי ההגדרה של המתכנת. גס לפונקציות אשר נכיר בהמשך, נקבע טיפוס על פי הטיפוס של הערך המוחזר מהן. המהדר קובע טיפוס לביטויים האריתמטייס המופיעים בתוכנית, על פי סדרת חוקיס המופעליס על האיברים בכל ביטוי. בהמשך נדון בחוקיס אלה. בטבלה הבאה מוצגיס הטיפוסים המוכריסם בשפת 6 והגודל של כל משתנה מאותו טיפוס. גדליסם אלה אופיינייס לרוב המהדריס. שיס לב/ גודל כל טיפוס צוין ביחידות של בתים (בית הינו תא זיכרון בן 8 סיביות). טיפוס הגדרה גודל תחום תו זו בית 177 8- שלס +חו 2 בתיס 207 8- ממשי 0% 4 בתיס 8 8 ממשי כפול 6 8 בתיס 18% 18 ריק (לא מוגדר) 60 לא מוגדר לא מוגדר פרק 1: אבני הבניין של השפה 47 שיס לב/ בתוכניות ‏ 6 שלמים משמשים בתחישובים אריתמטיים, בלולאות, - באינדקסים, במערכים ולמטרות מוספות. תווים משמשים בעבודה עם מחדוזות (3פחזזו5), לקלט של נתוניס מהמשתמש (במקלדת) ועוד. כאשר בתוכנית נכללים חישובים מתמטייס במספריס ממשיים - משתמשים בטיפוסיס 103% ו-6!פטס6. ההבדל ביניהם, פרט לגודלס, הוא ברמת הדיוק. מספר ממשי מורכב משלושה חלקים: מנטיסה (0₪558ח13), מעריך טחפחסקאם) וסימן. ערכו של המספר הממשי מחושב לפי המכפלה: מעריך*2 * מנטיסה * סימן. בטיפוס 6!פט0ס0, הערך המקסימלי של המנטיסה ושל המעריך גדול מאשר בטיפוס %, ולכן דיוקו וטווח המספריסם שהוא מייצג רב יותר. במרבית היישומיס משתמשים בטיפוס :808. לדוגמה, במחשב מסוג 18-06 הטיפוס 08% הוא בן 4 בתיס וטיפוס 6!טטס0 כפול ממנו, בן 8 בתים. שיסם לב/ = א. תחום המספרים מטיפוס שלם הוא: 32,767 <-- 32,768-. טעות נפוצה נובעת מהתעלמות מעובדה זו, והצבת ביטוי שערכו חורג מתחוס זה לתוך משתנה שלם. > ב. בשפת 6 לא קיים טיפוס לוגי בוליאני (ח00/08פ). זהו טיפוס המקבל שני ערכיס בלבד: אמת - שטזד ושקר - 6פו3]. לכן נהוג בשפת 6, שכל ביטוי שערכו שונה מאפס הוא אמת ורק ביטוי שערכו אפס הוא שקר. דוגמה לביטוייס שערכס אמת : 22 (15-6) דוגמה לביטוייס שערכס שקר: 0 (5=5) הגדרה משנית של טיפוסים כדי להשלים את המנגנון, המוגבל מעט, של הגדרת הטיפוסים, קיים בשפת 6 מנגנון להגדרה משלימה (5ז₪6ו100), המהווה הרחבה לארבעת הטיפוסים שהכרנו. הגדרות אלו מיועדות למספריס שלמים בלבד. 8 המדריך השלם לשפת 6 הגדרה תחום +סח5 7 + = 8- טסו 7 7+ + - 8, 1497 2- %חו 60חףופחט 5 = 0 זז 60ח8ופחט 25 2 0 שחס! 60חףופח 75 + 0 מנגנון ההגדרה של טיפוסי משתנים מנגנון ההגדרה של טיפוסי משתניסם בשפת 6 מאפשר לנו להגדיר טיפוס חדש באמצעות שילוב של טיפוסים קיימים. מנגנון ההגדרה נקרא /666פצד. ההגדרה מתבצעת באופן הבא: ;66צ ע8ם0 66תש1פתט 66661 6 הוא טיפוס חדש שהגדרנו (שס שאנו בחרנו) מסוג 608 60ח8ופחט, אשר גודלו 8 סיביות. ; 668צ00סח6 %6ת1 66תש1פתט +66סקץ6 6 האוא טיפוס חדש שהגדרנו (שס שאנו בחרנו) מסוג +חו 60ח4ופחט, אשר גודלו 16 סיביות. שיס לב/ [ רצוי מאוד ששס הטיפוס החדש יעיד על אופיו. 7 | = פעולת ההגדרה נקראת - חסוטוחו/06 6כץ* בּזבּם. התוכנית הבאה ממחישה את פעולת מנגנון ההגדרה: <ת(.5%010> 61006ם1+ <ת.0ס1תסס> 61006ם1+ /* הגדר טיפוס נתונים חד₪ - ם1%10ם1+66% 6קץ% 6868 */ ;ס6פצס ע8םת0 606ם106פתט 6061סץ6 (ס1סט) תנ1את 18סע ז / *בעזרת הטיפוס החדש אנו מגדירים משתנים חדשים* / 2 סע /*נקה את המסך* / ;()01280% /*קלוט תן*/ ; ()86502 = םס /*הדפס תו* / ; (ם6 ,"0ס%")65>תנ1מס ו פרק 1: אבני הבניין של השפה 49 א. כפי שציינו קודס, תחוס המספרים בטיפוס שלסם אינו קבוע, ותלוי בסוג המהדר והמחשב בו משתמשים. כאשר דרוש יישוס שבו הייצוג של מספר שלם הוא בדיוק שני בתים, רצוי להשתמש בטיפוס +וסח5. טיפוס וה מוכר על ידי כל המהדרים וגודלו קבוע. ב כאשר הביטוייס בקטע תוכנית מסויס הס חיוביים בלבד, וברצונך לבצע חישוביס במספרים גדולים, ניתן להשתמש בטיפוסיס חסרי סימן (60ח519ח). במקרה וה התחוס החיובי של הטיפוס גדל פי שניים. ג. = ביישומי זמן-אמת (סוחוד |68) ו/או כאשר הזיכרון הנתון לרשותך הוא מוגבל - מומלצ להשתמש עבור מספריס קטניס (למשל עבור מוניס) בטיפוס 60חףופחט זח6. במקרה כזה נדרש עבור המשתנה בית בודד, לתחוס המספריס מ-0 עד 255. הגדרת משתנים הגדרת המשתנים בשפת 6 נעשית בצורה הבאה: ;.. ,<משתנה שני> ,<משתנה ראשון> <טיפוס המשתנה> יש לדאוג לרווח של תו אחד לפחות בין טיפוס המשתנה לרשימת המשתנים. אנו ממליציסם לעצב את המבנה של התוכנית, כדי שתהיה קריאה יותר, ולהשתמש לשם כך בטבלר (טבולטור). לדוגמה, הגדרות של משתנים: משתנה מטיפוס שלס / 1 1% משתנה מטיפוס תו / מס 82 משתנה שלס גדול, עס סימן . תטם 016 10% משתנים ממשיים רגיליס ; 6-2 די 6% שס המשתנה חייב להתחיל באות, דהיינו: 4-2 או 8-2. ניתן להתחיל שס משתנה בקו תתתון " " (5606ז06ה0), אך מומלצ לא לעשות זאת, שכן מרבית המהדרים משתמשיס בתו זה עבור המשתניס הפנימייס שלהס. שאר התווים בשס המשתנה יכולים להיות אותיות, מספריס או קו תחתון. אין להשתמש בתו רווח ' ' (וחה!ט) בתוך שס משתנה. כדי ליצור הפרדה בין מיליס בשס, יש להשתמש בקו תחתון. דוגמה למשתנים חוקיים : 2 268016 51086 ;%מטסס ,עססחטת %6ם1 דוגמה למשתנים לא חוקיים: (מתחיל בספרה) ; פתגות3 2 1% (תו רווח בשס המשתנה) ;7 60 שצפתס (סימן מינוס בשס המשתנה) ;תטם-11%+ 1% 0 המדריך השלם לשפת 6 בהגדרת המשתנים רצוי לציין מספר נקודות חשובות: א. מומלץ להשתמש בשמות משמעותיים כדי שהתוכנית תהיה קריאה ומובנת. יש לכך חשיבות בעיקר בתוכנית ארוכה ומורכבת, כאשר חוזרים לעיין בה לאחר זמן. מתוך ההגדרות הבאות לא ניתן לדעת דבר על מהותס ותפקידםס של המשתנים: 6 ; [, שחו 686; ההגדרות הבאות מייחסות למשתנה %חט60 שימוש כמונה, למשתנה וחטפ - שימוש כסכוס של כמה מספרים, ולמשתנה %6ץ₪ >טסחו, מטיפוס תו, כמקבל קלט ממקור כלשהו. ; והט5 הטסש שחו ; 07% 6טסחו 6 שפת 6 מבחינה בין אותיות קטנות לאותיות גדולות, ולכן ההגדרה הבאה ; +60 %ה600 , דא600 שחו מתייחסת לשלושה משתנים שונים. ניתן לכתוב שס משתנה במספר תוויס כלשהו, אך המהדר מתייחס לכמות מוגבלת של תווים. במרבית המהדרים יוכרו שישה עד שמונה התוויס הראשוניס. יש ללמוד את תכונותיו של המהדר, כדי למנוע אי הבנות כדוגמת המקרה הבא : ; 500605 , החטח 0%ח50006 687 במקרה וּה, כאשר המהדר מתייחס רק לששת התווים הראשונים, שס המשתנה הראשון שיקלוט המהדר יהיה ח50406 (שיס לב, שישה תוויס בלבד). על המשתנה השני תופיע הודעת שגיאה בזמן ההידור: "060060 ץ|פטסוע6זס' שמשמעותה 'יהוגדר קודס'י, היות וגם הוא מתחיל בשש האותיות ח50006. שיטות מתן שמות משתנים למתן שמות משתנים חשיבות רבה להבנת הקוד אחרי ומן מה, או על ידי אנשים אחרים. + שמות קצרים למשתנים : יעיל בכתיבה, אך קשה להבנה. % שמות ארוכים למשתנים : יכול להועיל להבנה, אך מסרבל את הכתיבה. מספר שיטות כתיבה נהוגות כיוס : אי השיטה ההונגרית שיטה המקובלת לאחרונה, המתאימה לסביבת פיתוח הדורשת מספר רב של סוגי משתנים (025/2) ,5אוססחו/)). השיטה מבוססת על העיקרון של תחילית קצרה לשס פרק 1: אבני הבניין של השפה 51 משתנה, כדי להצביע על הטיפוס שלו. אחרי התחילית, נרשס שס המשתנה באות גדולה. לדוגמה: הסבר שם המשתנה מצביע לקובא פלט סי מערך תוויס 5236 תו ו אינדקס לולאה קסס | מקובל להשתמש בתחיליות הבאות : 6צ גהּ+ם או . (0חוא שח 0%) ץהזזה ,63178006 8!6חו5 .5 + 600% 60 .זססחוסק 5 11= וס זסחוסק הסססחט- כ . (0/6ח8ח 0616ח46) 6וסחברן .אחז חא ז6לחו פחסו .ז6סחוסק 3706! זס זב וביבון ו זסשחוסק ||8ח5 זס זהסא . (0ַחו5 סַחהסההוותזסד וטאז) פַחוז5 56112 .(לחו 60ח8ופחט) סזס/ שיטה זו הונהגה בחברת ‏ ₪16070504, ומאז היא משמשת כתקן מקובל בכתיבה למערכת ההפעלה פוססחוצ וגם בתכנות ++6 בחברת סחהוזסם. > בשיטה זו נהוג לתת שמות קבועים עס תחילית המעידה על טיפוס הקבוע ושאר האותיות גדולות. %> שמות פונקציות בנויות משילוב אותיות גדולות וקטנות על פי הכלל של אות ראשונה גדולה בכל מילה. > במקרה של משתנים זמניים בפונקציות קצרות, ניתן להתעלם מהנוהל, או רצוי יותר להשתמש בשס משתנה המורכב מתחילית בלבד. 2 המדריך השלם לשפת 6 ב. השיטה השמרנית אין זו שיטה אחת מגובשת, אלא אוסף סגנונות שהתפתחו בשינוייס קליס במספר רב של מוסדות. השיטה גורסת : > שמות משתניס באותיות קטנות בלבד עס הפרדה של מקף תחתון בין מילה למילה. > שמות קבועים עס אותיות גדולות בלבד. > שמות משתנים גלובלייס בשילוב אותיות גדולות וקטנות. > שמות פונקציות באותיות קטנות בלבד, מופרדות בקו תחתון בין מילה למילה. > יש הגורסיס כי גם לפונקציות יש לתת שמות המורכבים מאותיות גדולות וקטנות. > במקרה של ריבוי משתניס גלובלייס בפרויקטים גדוליס, יש הנוהגיס לכלול בשס המשתנה את שס המודול בו הוא מוגדר. יש אף ארגוניס המוצאים לנכון לגבש נוהל משלהס לקביעת שמות לקובצי מקור. במסגרת מערכת הפעלה 025 אין הדבר רלוונטי, מכיוו ששמות קבציס מוגבליס למדי (8 תווים). שיטה נוספת הנהוגה בחברת נובל: שמות משתנים מתחילים תמיד באותיות קטנות ואחר כך יש מעבר לשילוב אותיות גדולות קטנות. קבועים ראינו קודס שמשתניסם מוגדריס על ידי שס וטיפוס. בתוכנית 6 אפשר להגדיר קבועים (5%00%5ח00) מסוגיס שוניס : קבוע מטיפוס מספרי המהדר מייחס לכל קבוע טיפוס (06/) הנקבע על ידי ערכו. קבוע שלם חו) נמצא בתחוס 32,768- עד 32,768. מספרים שלמיס החורגיס מתחוס זה ייחשבו כטיפוס פַחס!. מסיבה זו המספרים 102, 17-, 88 הינם קבועים מטיפוס 6חו בעוד שהמספר 39,718- הינו קבוע מטיפוס פַחסו. ניתן להגדיר קבוע קטן יותר כטיפוס פַחס! על ידי הוספת התו "|" לדוגמה: 181, 771-. קבוע שלם הקסדצימלי ניתן לציין קבוע הקסדצימלי (בסיס 16) עייי הקדמת הקבוע בא0- (אפס והאות הקטנה א). לדוגמה: 55א0, 3786א0, 730=א0. קבוע שלם אוקטלי כל קבוע שלס בעל הקידומת 0 (אפס) יחשב לקבוע אוקטלי (בסיס 8). לדוגמה: 037, 051, 072. פרק 1: אבני הבניין של השפה 53 קבוע ממשי (631) ייחשב תמיד כ-6פט80. קבועיס כאלה ניתן לייצג במבנה עשרוני (דצימלי) רגיל, כגון: 12.37, 15.1- או :יצוג אקספוננציאלי (זהח זס=-ם) דהיינו: 15-5, 325-12. מבנה אקספוננציאלי יוצג בצורה הבאה: <חזקה עשרונית> ₪ <כופ?> מכאן המספר 15-5 פירושו *-1*10 והמספר 325-12 הוא 32*10712. קבוע מטיפוס תו קבוע מטיפוס *תו'' (זהח6) מוגדר בקוד מוסכסם בינלאומי מסוג 85011, או מסוג %. קוד 45611 (86ה8ה5076ה1 הססהוזסזה1 00060 ז0ס) 55800370 הב6ווסוחה) הוא כינוי להגדרה בינלאומית של קודיס לתוויס. ההגדרה קובעת שכל תו מיוצג על ידי בית בודד (8 סיביות), על פי ערכו המספרי. לפיכך ניתן להגדיר בקוד זה עד 256 תוויס שונים (קודים 0 עד 255). קוד 85611 מייחס לתווים הנומריים 'י0יי עד ייפיי את הקודיס המספרייס 57-48 ולתו :גי למשל, את הקוד המספרי 65. בנספת לספר תמצא את רשימת התוויס וקוד 45011 שלהם. קוד 850611 מקובל במחשבים אישיים שוניס, במחשבי דיגיטל ובמחשביסם המותאמים לעבודה ביוניקס. הגדרה אחרת של תוויס נקראת קוד ₪856516 (|6608 60060 שזהּחו8 060ח06אם 6 %67608086ח1). הגדרה זו מקובלת במחשבי יבמ בארכיטקטורת 370/390 ומחשביס אחרים של יבמ. בשפת 6, קבוע מטיפוס תו נרשס כתו בודד, מוקף בגרשים בודדים. לדוגמה: 'אי מגדיר את התו ה והמהדר מייחס לקבוע וה את ערך קוד 845611 (או 586016 בהתאס לסוג המחשב ומערכת ההפעלה) של התו. לדוגמה, ערכו של הקבוע /'8י במערכת הפועלת בקוד 45611 הוא 66, מכיון שוהו ערך 45011 של התו 8. היתרון לשימוש בקבוע יפי הוא בכך, שהוא יקבל ערך נכון גס אס נעביר את התוכנית למחשב הפועל בקוד אחר מקוד 1. דבר זה לא היה מתקיים, אילו כתבנו ישירות את הערך 66. דוגמה לשימוש אפשרי: עשרת התוויס המייצגיס את הספרות 9-0 הס בעלי קוד 45611 רציף. אס ברצוננו לקבל את הערך המספרי המתאים לכל תו כזה, נוכל לכתוב: ;חטת 6ם1 7 מאת0ס ;'0' - 6 = חגוםת כאשר במשתנה 6 מטיפוס ייתוי' נמצא אחד מהתווים ''9-0'י, נקבל ב-וחטח ערך מספרי מתאיס בתחום 9-0. שיס לב כיצד ניתן להשתמש בקבוע ייתויי בתרגיל חיסור. בשפת 6 יש מספר קבועים מיוחדים מטיפוס ייתויי, אשר מופיעים בצמוד לתו ?יי (ח886%5|85 - לוכסן הפוך), כדי להבדילס מתווי 45011 רגיליסם. כאשר המהדר נתקל בצמד התוויס <תו> (כלומר, לוכסן הפוך ומשמאלו תו מיוחד) - הוא מפענח אותס כתווי בקרה. התוויס המיוחדים הינס: ח, ז, פ, %, +,' ו-. על משמעותם נעמוד להלן. 4 המדריך השלם לשפת 6 א. 'ח' - שורה חדשה - 6חו|שסא (קוד 05011 10): תו זה יוחלף על ידי המהדר בתו הבקרה 'פחוושפזיי שקוד 5011 שלו הוא 10. בפקודת הדפסה יגרוס תו ה למעבר הסמן (זספזט6) לתחילת שורה חדשה. "' - חזור לתחילת שורה - חז₪6 63171886 (קוד 5611 13): בפקודת הדפסה, תו זה ימקס את הסמן בתחילת השורה בה הוא נמצא. ש' - טבלר (טבולטור) - פד (קוד 5011 9): בפקודת הדפסה תו זה יגרוס ליצירת מרווח, בגבול אינטגרלי של 8 מהמקוס בו נמצא הסמן. המסך, או דף ההדפסה, מחולקיס באופן לוגי לעמודות בנות 8 מקומות כל אחת, החל מצד שמאל. הטור הראשון בתחילת כל עמודה הינו: ...5 ,+ ניתן לשנות את גודל המרווח באופציות המהדר. לדוגמה, אס הסמן נמצא במקוס 12 במסך, תגרוס פקודת ההדפסה עס התו '' לתזוזת הסמן למקוס 17. 'פ' חזור תו אחד - 886650866 (קוד 5611 8): תו זה יגרוס לנסיגה של הסמן תו אחד לאחור. "' דף חדש - ₪660 החזס= (קוד 45611 12, במדפסת בלבד): בפקודת הדפסה, תו זה יגרוסם לקידוס דף שלס במדפסת, או לניקוי המסך. לתוויס ייגרשיי (') ויילוכסן הפוךיי (() יש משמעות מיוחדת ולכן, כדי להגדיר אותס כקבוע, יש להשתמש ב- נוסף. למשל: קבוע התו יוגדר על ידי \. קבוע התו ' יוגדר על ידי . 'חחח' - כדי להגדיר תו, באמצעות ערכו המספרי, משתמשיס בהגדרה הכוללת את תו ח88665|35 והערך האוקטלי של התו: חחח - הן הספרות האוקטליות המייצגות את ערך 45011 של התו. לדוגמה, התו אי שערכו המספרי 65 וערכו האוקטלי 101, מיוצג על ידי הצירוף ''101'י. חחא - הגדרה של תו באמצעות ערכו ההקסדצימלי חח. לדוגמה, 30א מגדיר תו שערכו ההקסדצימלי 30. התו שערך 45611 שלו 0 (אפס) הינו תו |וטא המשמש בין השאר, כתו המסייס מחרוזות. קבוע מטיפוס מחרוזת מחרוזת היא אוסף של תוויס אלפא-נומריים כלשהס המהווה יחידה אחת. קבוע מחרווזת יוגדר על ידי ציון של גרשים ('*) משני צדדיו. לדוגמה: "!ס 6ת1םתע1682 תה ך" פרק 1: אבני הבניין של השפה 55 בניגוד לקבועיס הקודמים, מוגדר עבור תווי המחרוזת מקוס בזיכרון, וערך הקבוע הוא הכתובת של אותו מקוס. באותה כתובת נמצא את ערכי 45611 של התוויס המרכיביס את המחרוזת ובסופם - את תו 011א שהוזכר קודסם. את תו 1ועשא מוסיף המהדר עבורנו בסיוס כל קבוע מחרוזת. ניתן לשלב בתוך המחרוזות תוויס מיוחדים (המופיעים בצמוד ל-), או ערך אוקטלי של קוד 45061 (של תו רצוי), גם-כן בצמוד ל-. לדוגמה: המחרוזת "פ6חו! 2 06600165 ח פַחו50 פוחדיי, מוכלת ב-2 שורות הדפסה נפרדות, כפי שהיא מעידה על עצמה, כי משובצץ בה התו המיוחד ח - שפירושו: שורה חדשה. המחרוזת הזו: "036374041424344454647 :826 016168 6ם7" מייצגת למעשה את התווים האלה: "0123456789 :826 310168 6םמך" תווי הספרות 9-0 מיוצגיס במחרוזאת המקורית על ידי קוד 45611 שלהם, בבסיס אוקטלי. דוגמה: אס המחרוזת ''סט8'' נמצאת בכתובת 6000, תמונת הזיכרון תהיה: התו ערך וו4506 כתובת 'הי 57 000 'מ' 08 01 סי 59 2 3 0 '' טיפוס והחטחס טיפוס וחטחס מיועד להגדרת קבוצת קבועיס מסוג זחו. ערך ברירת המחדל של הקבוע הראשון הוא 0. המבנה: ;[... , [<6ו081>=] <שתהת %6ת5%8ת00>+ תטתס סוחהּח 5%570%ה60 שס הקבוע. 6טוהצ ערך מסוג ז600שחו. דוגמאות: ; (צתספפפטע ,צתכאסא ,1=צתכאט5+ תטתס 7( ,4=8 ,60 ,₪ ,8=3+ תגטתס כך נציג את ערכי וחטחס: ; (צהפפפטץ ,צתפאסא ,צהפאס8 ,"ם/ %8 ,%6 ,61)"%8תומס הפלט: 5 6 המדריך השלם לשפת 6 ;(6 ,8 ,0 ,0 ,8 ,"ם/ %8 ,%0 ,%0 ,%8 ,65)"%0>תנ1עצס הפלט: 9 ,9 ,5 ,4 ,3 | שים לב/ ] | כאשר לקבוע מסוים חסר ערך, ערכו הקודם יהיה: הערך הקודם +1. /ץ- אופרטורים עד כה הכרנו את הטיפוסים הקיימיס בשפת 6, משתניס וקבועים, תחומים ושיטות ייצוג. אלה הס אבני הבנייןו של השפה. עתה עלינו ללמוד כיצד להשתמש בהס לשס ביצוע פעולות עיבוד שונות. במשפט בשפת 6 מבחיניס בשתי קבוצות שונות: קבוצת אופרנדים (או נפעלים), שכוללת את המשתניס והקבועים, וקבוצת אופרטורים (או מפעילים), שכוללת את סימני הפעולה בין האופרנדיס. בסעיף זה נדון במפעיליס שבשפה ובקבוצות המשניות המחלקות אותם: אופרטוריס אריתמטיים, אופרטורים לוגייס ואופרטורים לוגייס בסיביות. אופרטורים אריתמטיים שפת 6 מאפשרת חמש פעולות אריתמטיות בסיסיות: חיבור + חיסור 5 כפל . חילוק / שארית (מודולו) % האופרטוריס האלה הס אופרטורים בינאריים, דהיינו, מימין ומשמאל לסימן הפעולה ישנס אופרנדים. לדוגמה: 3 % מתטם, צ/א, 5 + 8 ניתן להשתמש באופרטור החיסור כאופרטור אונרי, המופיע משמאל לאופרנד, ואז יהיה משמעות שלילת ערך האופרנד. לדוגמה: 6 * ב- פרק 1: אבני הבניין של השפה 57 היררכיה של פעולות אריתמטיות הביטוי האריתמטי הוא ביטוי הכולל בתוכו אופרטוריס אריתמטייס ואופרנדים. סדר הביצוע של הפעולות תלוי במוסכמות של קדימות, אשר קבועות בשפה. הטבלה הבאה מתארת את סדרי הקדימויות בהערכת ערכו של ביטוי בשפת 6. קדימות | אופרטור 1 0 2 - יחידני 3 6 * 4 7 + 5 = שים לב/ לסוגריים יש רמת קדימות גבוהה ביותר ולכן, ניתן באמצעות סוגריים לשנות את סדר הקדימות של שאר האופרטורים. נציג מספר דוגמאות כדי להמחיש את המשמעות של חוקי הקדימות: א. 0 ,/+בּ בביטוי זה, סימן החילוק קודם לסימני החיבור והחיסור. לכן תחושב תחילה המנה 9/4 ורק אחר כך תבוצענה פעולות החיבור והתחיסור. מכיון שביטוי אריתמטי מוערך משמאל לימין, תבוצע פעולת החיבור לפני פעולת החיסור. 0 (5 + ב) בביטוי וה הסוגרייסם הס בעלי העדיפות הגבוהה ביותר, ולכן יחושב תחילה הסכוס פ+8. פעולת החילוק היא השנייה בסדר העדיפות ולכן הסכוס 5 +8 יחולק בערך המשתנה 6, ולבסוף תבוצע פעולת החיסור. אנו ממליציס להשתמש בסוגריים בכל מקוס שבו הערכת הביטוי אינה חד-משמעית, או כאשר הביטוי מורכב ומכיל פעולות רבות. זסעשס! / 10 + זססקט - 6 / וחטח * ₪6 + פ נכתוב ביטוי וה שנית, והפעס - נשתמש בסוגרייס וניווכח שהוא מובן יותר: (זסאוס! / 10) + זססקט - (6 / (חחטח * 0)) + פ בביטוי וה יחושבו תחילה הביטוייס שבסוגרייס, ולכן המכפלה וחטח*8 תחושב תחילה, אחר כך תבוצע החלוקה ב-6 ותחושב המנה זסצוס! /10, ולבסוף תבוצענה פעולות החיבור והחיסור. 8 המדריך השלם לשפת 6 אופרטורים לוגיים סוג אחר של ביטוייס הקיימים בשפה מכיל אופרטורים לוגיים (90015ז6ק0 |63ו0 )). ביטוייס אלה כולליס פעולות המבוצעות בין משתניס או קבועיס, אשר תוצאתן היא הערך ''אמת'י או יישקרי' (6ט₪ או 18/86 בהתאמה). ביטוי לוגי מכיל מספרים או משתניס מקושריס ביניהס באמצעות המפעללים הלוגיים. על עיקרון וה מבוססיס משפטי התנאי הקיימיםס בשפה. ניתן, כפי שנראה בהמשך, לקשר בין מספר ביטוייםס לוגייס (בדומה לפעולות אריתמטיות) כדי ליצור ביטוי לוגי מורכב. גם תוצאתו של ביטוי כזה היא ייאמתיי או יישקריי. נזכיר כאן, שבשפת 6 כל מספר שונה מ-0 הוא בעל ערך לוגי ייאמת'י, ורק המספר 0 הוא י'שקריי. האופרטוריס הלוגייס ומשמעותס מוצגיס בטבלה הבאה: אופרטור הסבר קטן מ- גדול מ- שווה ל- קטן או שווה ל- גדול או שווה ל- לא שווה ל- (שונה מ-) דוגמאות: א. "8 גדול או שווה ל-'': 5 =< 4 תוצאת ביטוי זה תהיה ייאמתיי (ערך מספרי שונה מ-0), אם 8 גדול או שווח ל-. ב. "א שווה ל-ץיי: ו תוצאת ביטוי וה תהיה ייאמתיי אס א שווה ל-ץ, ויישקריי (ערך מספרי 0) - אס א אינו שווה ל-ץ. כפי שהזכרנו קודס, ניתן לקשר בין כמה ביטויים לוגיים כדי ליצור ביטוי לוגי מורכב. פעולת הקישור נעשית באמצעות אופרטוריס המפורטיס בטבלה הבאה: הסבר אופרטור היפוך טסח) וגס (0ח8) ו/או (זס) פרק 1: אבני הבניין של השפה 59 אופרטור ההיפוך קודס בעדיפותו על האופרטוריס האחריםס המשמשים לקישור (למעשה גם האופרטורים הלוגייס קודמיס לאופרטורי הקישור). א. הביטוי - יילא (א שווה ל-ץ)*: (ץצ == א)! הביטוי יהיה אמת, אם א שונה בערכו מ-ץ. ביטוי ה מקביל לביטוי הלוגי ץ =! א. ב. "א שווה ל-ץ וגם 8 גדול או שווה ל-9"*: ספ =< 8 88 ץ == א כדי שהביטוי יהיה ברור יותר, מומלצ להשתמש בסוגריים : (ע =< 8) 68 (ץ == א) ביטוי ה יהיה אמת, רק אס ערכו של א שווה לערכו של ץ וגם ערכו של 8 גדול או שווה לערכו של ם. ג. | כדי להקדים בביטוי פעולה לוגית אחת לאחרת, נשתמש בסוגרייס בדומה לדרך שבה נוהגיס בפעולות אריתמטיות. לדוגמה, (0 =! 0) 66 ((8 == ס) || (8 =< 0)) במקרה זה, יוערך תחילה הביטוי שבסוגרייס : 6 גדול או שווה ל-5 או פ שווה ל-8'י, ואחר כך יוערך הביטוי ייוגם 6 אינו שווה אפסיי. תוצאת הביטוי שלהלן תהיה זהה לתוצאה של הביטוי הקודם: 0 88 ((8 == מ) || (8 =< 6)) הוהות קיימת, מכיוןו שבשפת 6 כל ביטוי שערכו שונה מאפס הוא אמת! הערכת ביטוי לוגי הערכה של ביטוי לוגי נעשית משמאל לימין, בדומה להערכה של ביטוי אריתמטי. הערכת הביטוי נעשית בשיטה של 'מעגל קצר'י טוטשזוס6 א+סח5) כלומר, ההערכה ממשיכה עד שערכו של הביטוי נקבע בוודאות. בביטוי שמכיל רק פעולות ''יאויי () - די בגורס בודד שיהיה אמת, כדי שהביטוי כולו יהיה אמת. בביטוי שמכיל רק פעולות יוגם" (88) - די בגורס יישקריי אחד כדי שהביטוי כולו יהיה שקר. לדוגמה, נתון הביטוי (0 == 6) || (ס => 8) בביטוי וה אין צורך לבדוק את השוויון של 6 ל-6, אס מצאנו כי 8 קטן או שווה ל-פ, מכיון שערכו של הביטוי כבר נקבע כ-6טש. בביטוי הבא, (3 =< שט) 88 (06 =! 1) 66 (ץ > א) אם א גדול או שווה ל-ץ, הערכת הביטוי תיפסק ושאר ההשוואות לא תבוצענה, כי ברור שהערך של כל הביטוי יהיה שקר. לעובדה וו חשיבות רבה במיוחד כפי שנראה בהמשך, כאשר נשלב בביטויים לוגייס גס פעולות אריתמטיות. לדוגמה: (3 < (ס + ץ = א)) 886 (ס => ה) 0 המדריך השלם לשפת 6 במקרה כזה, אם 8 גדול מ-5 לא תבוצע פעולת החישוב וההשמה למשתנה א, מכיון שאין במקרה וה צורך להעריך את שארית הביטוי. מהלך התוכנית עלול להשתבש אס בהמשך התוכנית הסתמכנו על ערכו של א. אפשר לפתור בעיה זו, אס נהפוך את סדר הארגומנטים : (ק => 8) 88 (3 < (ס + ץ = א)) אולס, לא תמיד קייס פתרון כזה. לדוגמה: (5 == (מ = 8)) 68 (10 > (3 + ץ = א)) עד עתה למדנו ששפת 6 יכולה לטפל בסוגיס שוניסם של נתונים: תווים (פ5ז0ז860זב60) ומספרים מסוגיס שונים, כמו, מספרים שלמים, עשרוניים רגיליס וארוכים. עתה נתבונן בסוגי הייצוג השוניס של נתוניס מנקודת מבט של החומרה. מילים שמורות להשלמת חדיון במרכיביס של שפת 6 מובאת להלן רשימה של ''המילים השמורות'י (05ז0) ₪6507/60) של השפה. השימוש במיליס אלו מוגבל להגדרות ולבנייה של תוכניות, ולא ניתן להשתמש בהן בשמות של משתנים וקבועיס: מסנמו 12001 1 מ662א0 65% ססגוהּ תג 110 10% 8% 60 0% 6 שסטע56 0 505 6 טס 0-6 שפתסס בס16שפ מעטססץ 00 6 שהםס תגותס 1 5% 15 צץעסם6 | 6גום61ת00 86 טי סט 8 הערות הערות (5)חסוחחוס6) נועדו להסביר ולציין קטעיס או משפטיס בתוכנית. פעמים רבות, חשיבות הערות אינה נופלת מהמשפטים של התוכנית והן עוזרות להבין ולבדוק אותה. כאשר יש לכתוב הערות בגוף התוכנית, תוחמים אותן בסימנים 'י/*יי ו-'י*/יי מימין ומשמאל בהתאמה. הערה בשפה יכולה להיכתב בכמה שורות ולהכיל כל תו אפשרי. רק כאשר ייתקל המהדר בצירוף הסימנים י/*יי הוא יסיים את ההערה וימשיך בתהליך ההידור. המהדר אינו מתייחס כלל לתוויס שבגוף ההערה. דוגמאות: /* 10008 116םתח-640 ע50 פע6סםתטסס */ ; סמגסס,תטם ‏ סת1 6מוקת1 880986 50 8218016 */ ;עם0ס ע8ם0 /* 008268ץ%6 | 1:08 /*פ1םת6 */ /* 16קת8א6 תה8 18 */ פרק 1: אבני הבניין של השפה 61 בומן בדיקת תוכניות ניתן לכלול קטעיס שלמיס בהערה, כדי להקטין זמנית את נפח התוכנית ולטפל רק בקטעיס שבהס מתכווניס לאתר את מקור השגיאה. דוגמה לכך תינתן בהמשך. שים לב/ במהדרים של בורלנד החל מגירסה 3.1 ניתן לסמן שורת הערה בסימון ש. כל התווים החל מסימון זה ועד סוף השורה ייחשבו כהערה. הערה זו אינה יכולה לגלוש מהשורה שבה היא התחילה אל שורה נוספת תרגילים תשובות בתקליטור: קבציס 6161-61612חו!86)9701ו6:)61 1 סווג את המספריס והקבועיס הבאים לפי הטיפוסים בשפת 6: עדא 2021 17 5 5 17 0 ,-77.56213 15= 20000 1111 0 1-5 2 75000- 025 2 לפניך שמות של משתניס. סמן את השמות החוקיים. 01 ת61ס תטם1- %מגוסס חגום 7 1 שס0ם85| סתטס 60 0% ץע מגוסס ! 6חטסםפ תטם1 1 גתשט +1? 1תגום סמט סס (₪ם10051 3 לפניך רשימה של משתנים. כתוב הגדרות מתאימות עבורם: א. מונה לולאה. ב מונה פעימות מונה לטלפון. ג. | יתרה בחשבון בנק. ד. | מספר שלס בתחוס 52000:0-. ה. מספר שלס בתחוס 32000 :32000-. ו | אות מיון במדריך טלפונים. ז. | מספר טלפון. ח. ספרה במספר. ט. משתנה בוליאני (אמת או שקר). 2 המדריך השלם לשפת 6 8 9 מהס קבועי התו המיוחדים לשפת 6 כיצד תגדיר את קבועי התו גרש () וקו נטוי (/)1 האס קייס הבדל בין הקבוע 57 והקבוע ייפיי (בהתחשב בעובדה שערך 5011 של הספרה 9 הוא 57). הסבר. השלס את הטבלה הבאה: ערך הקסדצימלי ערך דצימלי קב 15 7 2001 כיצד תייבג את הביטוייס הבאיס בעזארת האופרטוריס שבשפה: (מפ3 + 78)* 52 פד + 86 (? * צ) + 3+ א 0 *- *- 50 6+ ?* צ* א 5 הפוך את המשפטיס הבאיס לביטוייס המתמטיים המתאימים: 7*50/3*8/5+2*6 + 8*6 7/2+5*8/א 8 +*3+א- (5*8) + (2/ץ)/א 8+6*(צ/7*א-3) 0. כתוב את הביטוייס הלוגייס המתאימיס למשפטיס הבאים: א. 8 גדול מ-8. ב 5 קטן או שווה ל-8 (מצא שני ביטוייס שיתאימו למשפט וה). ג. = 6 שווה ל-פ, וגם פ קטן מ-8. ד. | א שונה מ-ץ, או ץ קטן או שווהח ל-2. ה. א קטן מ- (8*5). ו ז שונה מ-0 וגם [? קטן או שווה ל-ץ או ץ גדול מ-א]. 1. מהו הערך הלוגי של הביטוייס הבאיס: א. (8 < ץ) 66 (ץ < א) בּ; (8 =! ץ) || (ץ == א) פרק 1: אבני הבניין של השפה 63 כאשר: 7 = א, כ = ץ, 9 = 2, 25 = שח ד. (((ם > ס) || (ע < ם)) 68 (ם > ס)) == ם כאשר: 9 = ת, 12 = ם, 13 = ס, 0 = ע 2. חזור לתרגיל 11 (סעיפים גי, די) וציין, באיוה מקוס תיפסק הערכת הביטוי בומן הריצה. מצב זה חל כאשר ערכו של הביטוי נקבע באופן מוחלט לפני שמגיעים לסופו. 4 המדריך השלם לשפת 6 משפט ההצבה ומבנה התוכנית תוכנית מחשב בשפת 6, בדומה לתוכנית בשפות תכנות אחרות, מורכבת מאוסף של משפטים (065ח5%966) של השפה. בכל שפה נקבעת חוקיות המשפטים על פי חוקי דקדוק וחוקי תחביר. כך גם בשפות מחשב ובכללן - בשפת 6. בסעיפיס הבאיס נעסוק בכללי התחביר (אפזחץ5) של משפטיםס בשפת 6, ובמקביל יוסברו תכונותיהס ואופן השימוש בהם. מבנה המשפטים ומבנה כללי של תוכנית משפט בשפת 6 מגדיר פעילות חישובית או לוגית שיש לבצע במחשב. בדרך כלל הוא מכיל מילת מפתח שמורה (זסאוץ6א), המגדירה את סוג המשפט, ביטוי אחד או יותר וסימני פיסוק מיוחדים. כל משפט חייב להסתיים ב-'י;'י (נקודה-פסיק). משפט אחד יכול להיכתב במספר שורות ללא סימון מיוחד בסיומה של כל שורה, בתנאי שבסופו יופיע הסימן *'י;'י. המשפטים מופיעיס ברצף, זה אחר זה, ללא מספור שורות, והסדר שלהם נקבע על פי מיקומס בתוכנית. בדוגמאות בספר זה צוינו מספרי שורות רק כדי שאפשר יהיה להתייחס למשפטי התוכנית בעת ההסבר. לשס כתיבת תוכנית משתמשיס בעורך תמללל (זסזו0ם 16%1) או במעבד תמליל (חזסש זז שמפיק גס טקסט 45611 ללא סימני עריכה של המעבד). בעזרתם מכינים קובץ תוכנית המכיל את המשפטים המרכיבים אותה. בדרך כלל משתמשים בעורך התמליל של ערכת הפיתות. שיסם לב/ אין להשתמש במעבד תמלילים, מכיון שהוא מפיק גם קודים מיותרים, שאינסם דרושים כאן. פרק 2: משפט ההצבה ומבנה התוכנית | 65 שיס לב/ אין מגבלה למספר הרווחים המופיעים בין המרכיבים השומים של המשפט : ביטויים, משתנים, מילות מפתח וסימני פיסוק. רצף רווחים כזה יזוהה על ידי המהדר כרווח יחיד, אך ניתן לנצל עובדה זו בשעת כתיבת התוכנית לסידור השורות, כדי שיקל עלינו לקרוא אותה אחר כך. מספר משפטים פשוטים יכולים להיות מקובציס כיחידה לוגית אחת - בלוק, הנקראת משפט מורכב (זח6ח5%36 א6|סח 60). תוכנית מחשב מורכבת בדרך כלל ממספר יחידות לוגיות, או תת-תוכניות. תת-תוכניות אלו יכולות, במקריס מסוימים, להכיל משפט או משפט מורכב בודד, ובמקריס אחרים - עשרות משפטים כאלה. בשפות תכנות שונות אפשר להגדיר תת-תוכניות מסוגיס שוניס, בעלות תכונות ואפיוניסם שוניס: פרוצדורה (6זט660סזץ), פונקציה (חסטסחט=), שיגרה (סחסטסח או 6חסטסזפט5) ועוד. בהמשך נשתמש במושג פונקציה בלבד, כדי לתאר ולציין תת-תוכניות בשפת 6. לכל פונקציה קיים שס מזהה, בדומה לשס משתנה, והוא חייב להיות יחידני באותה תוכנית. שם פונקציה רושמים בדרך זו: () <שם הפונקציה> למשל: (20צְא. הסוגרייסם מסמניס למהדר שהשם הוא שם של פונקציה ולא שס משתנה. כל תוכנית חייבת להכיל פונקציה אחת בעלת השס השמור: ()חוהּוח. פונקציה זו מופעלת אוטומטית כאשר מריציס את התוכנית. שיטה זו מאפשרת להכיל את כל התוכנית בפונקציה (0חוהח, או לקרוא מתוך (0חוּחח לפונקציות נוספות. המשפטים המרכיבים פונקציה מתוחמיסם בזוג סוגריים מסולסלים (יי[/י ן-י+/) המקבילים לצירוף 0ח6-חו68פ בשפת פסקל או א/1ם. לפניך תיאור סכימטי של תוכנית 6 בסיסית : (ס1נסט) ת1את ב1סע ו ; משפט ; משפט ;()1 סתט1 ; משפט (1)0010 סםט5 16סעט | ; משפט ; משפט 6 המדריך השלם לשפת 6 10 6חט היא פונקציה, אשר מופעלת מתוך הפונקציה ()חוּוח. שיס לב לכך שהגדרתה נעשית בנפרד, מחוץ לפונקציה הקוראת. כמו כן, שיס לב לסוגרייס 'י()י' הצמודים לכל שס פונקציה (במקרה זה - ()חוהוח ו-()1 6חט)). משפט הצבה תפקיד משפט ההצבה לקבוע ערך למשתנה. התבנית הכללית של משפט הצבה : ; <ביטוי> = <משתנה> המשתנה חייב להיות מוגדר לפני משפט ההצבה. סימן השוויון ''=' מפורש כאופרטור הצבה, ולא כשוויון אריתמטי. הפקודה מבוצעת מימין לשמאל: תחילה מחושב הערך של הביטוי, התוצאה מתורגמת לטיפוס של המשתנה שמשמאל לסימן השוויון, ואחר כך היא מוצבת לתוכו. דוגמה: ;ק תטם ‏ %ם1 ; 0 עהתס ; 3 + םס = תטםת תחילה יחושב הביטוי 3 + ח6 ויישמר בתוך אזור זמני בזיכרון והתוצאה שהיא מטיפוס ייתו'י (זהּח6),. תּמַר לטיפוס יישלם'י טחו), אשר יוצב לתוך המשתנה חטח. לדוגמה, הפקודה: ; ותטם = םס תמיר את ערך המשתנה ושח לטיפוס תו ותציב ערך וה במשתנה ח6. ההמרה ממספר שלס לתו (שגודלו בזיכרון קטן מגודל הטיפוס יישלס'י) יתבצע כך, שערכו של הביטוי לא ישתנה, בתנאי שאינו עולה בערכו על הערך המקסימלי של תו (255). ההמרה של טיפוס הביטוי נעשה לפי הטיפוס של המשתנה המקבל את תוצאת ההצבה. נציג את החוקיס לכך בטבלה 2.1. משפט ההצבה עצמו נחשב מבחינה תחבירית, כביטוי שערכו הוא הערך שהוצב למשתנה שמשמאל לסימן השוויון. מסיבה זו ניתן לכתוב משפט הצבה מורחב, בו הביטוי מימין לסימן "=" הינו משפט הצבה. בדרך זו ניתן לבצע ייהצבה מרובה" למספר משתנים. דוגמה: יפי 4 המשתנה ( קיבל את ערך הביטוי א*5 שערכו 35. המשתנה | יקבל את תוצאת הביטוי (א * 5 = ), שגס ערכו הוא 35. פרק 2: משפט ההצבה ומבנה התוכנית | 67 טבלה 2.1: כללי הסבה לפעולות עס משתניס מעורבים אופן התרגום טיפוס הביטוי | טיפוס המשתנה המחושב המקבל ערך הביטוי, מודולו 256, התייחסות 6 +חו ל-6זץס ערך הביטוי, מודולו 256, תוך קיצוצ של טס 0 זו השבר העשרוני ערך וּהה 6 +חו ערך הביטוי, מודולו 32,768 תוך קיצוצ של 6טטסזהסו +חו השבר העשרוני ערך והה, שבר עשרוני = 0 +חוזח6 ויו חצי של הספרות המשמעותיות (קיצוצ 6 יי מנטיסה) ערך והה, שבר עשרוני = 0 %חו 6 6 ערך והה 1% 6 תרגיל לחזרה לסיוס הדיון בסעיף ה נציג תוכנית פשוטה המיישמת את הנושאים שלמדנו. התוכנית מחשבת משכורת נטו של העובד בהתחשב במס שעליו לשלם. התוכנית בנויה משתי פונקציות : פונקציה (0חו9חח (ההכרחית) ופונקציה (0א8? 686. אין צורך בשלב וה להבין במדויק את מהלך התוכנית, אלא יש להתרשס מהמבנה שלה: הדרך בה רשומיס משפטי ההצבה, החלוקה לפונקציות והדרך שבה נכתביס המשפטים. נתון תלוש משכורת המכיל את הנתוניס הבאים : 5זוסת עה זטסת אפז 5 עה זפסץ 533 ()אםף 68|6 ץק אפז משתנה מטיפוס שלס המכיל את מספר שעות העבודה החודשיות. משתנה מטיפוס ממשי המכיל את השכר לשעת עבודה. משתנה מטיפוס תו המכיל את אחוז המס על התשלום עבור שעות עבודה. בחרנו בטיפוס ייתויי, מכיון שטוותח התו (127+, 127-) מספק לצורכי הייצוג של האחוצים (100-0). משתנה מטיפוס תו המכיל ותק העובד. התשלום עבור שנת ותק, משתנה זה הוא מטיפוס ממשי. על התשלוס עבור שנות ותק אין משלמיס מס. משתנה מטיפוס שלם המכיל את הערך השלם של המשכורת. זו פונקציה המחשבת את ערך המס על המשכורת. משתנה מטיפוס שלס המכיל את ערך המס המחושב. 8 המדריך השלם לשפת 6 העדה! המספריסם שבסוגריים, אשר נכתבו משמאל למשפטי השפה, נרשמו לצורך הסבר בלבד, ואין הס דרושים בכתיבה סדירה של תוכניות בשפת 6. להלן התוכנית : ו קובץ תקליטור: 60200201.6 *****/ <ת.5%6010> 610066םת1+ ; (10סט)א68 0810 16סט (1) קפ 6 2 הטפ פוב (2) ל הפפ ₪ ₪ 2150 (630 ;688 ,פעהסץ כַהתס (4) (ס1סט) מנאת ב1סט (5) (6) 75 = 626 (7) = קפ פשפ (8) 57 = ₪60 (9) ;()א68% 0816 (10) 57 = 6808 (11) = שפפן 5892 (12) ב כ כ כב כו מ כב כ ו (13) ;להק 58% ; (צ58181,"ם%6 : המשכורת נטו") +6ת1עס (14) ] (יכ.1) (ס1סט) א68% 6810 סנסט ‏ (16) | (17) 0 *צעהּס פגוסם*פפטסם = צ8ס 68% (18) ] (19) בתוכנית זו מוצגיס מספר נושאים חדשים, כגון פונקציות וטווחי הכרה, אותס נסביר בהמשך. למרות זאת, ניתן להבין את מהלכה ואת הפעולות העיקריות שבה. > במשפט 1 מתבצעת הכרזה של הפונקציה אפ 086. > במשפטים 4-2 מוגדרים משתני התוכנית. נתנו להס שמות משמעותיים כדי להקל על הבנת התוכנית והקצנו לכל אחד מהס את הטיפוס המתאים לו ביותר. והו כלל ראשון וחשוב בתכנות נכון ומסודר. > בשורות 15-5 אנו מגדיריס את הפונקציה הראשית - ()חופוח. פרק 2: משפט ההצבה ומבנה התוכנית | 69 בתחילתה (שורות 9-7) אנו מציביס את הערכיס למשתניס המשתתפים בשלב החישוב הראשון. בדרך כלל שלב ההצבה נעשה לאחר קליטת הערכיס בפעולות קלט/פלט, אך אותן טרס למדנו. בשורה 10 מבוצעת קריאה לפונקציה ()א%8 68|6 כדי שתחשב את המס שעל העובד לשלס. כעת נותר לנו לחשב את התוספת עבור הוותק ולהציב את התוצאה הסופית במשתנה יימשכורת'י (עְז68|3) (שורות 13-11). שיס לב, שתוצאת הביטוי הימני בשורה 13 היא מטיפוס ממשי 6080) ובפעולת ההצבה מבוצעת המרה לטיפוס שלם, לפי החוקיס שלמדנו. הסבה בכוח פעולת הסבה בכוח היא המרת טיפוס של משתנה באופן זמני בזיכרון, כדי לערוך חישוב מסוים כשאיננו רוצים להוסיף משתנה נוסף, או כדי להמיר בין טיפוסים ולהימנע באופן מודע מאיבוד ערכו האמיתי של המשתנה. לדוגמה: הפונקציה (א)+50 המבצעת פעולת חישוב שורש ריבועי. לפי הגדרת הפונקציה, א חייב להיות משתנה מטיפוס 6פט00. בהנחה ש-א מוגדר כ-חו לצורך פעולות חישוביות אחרות ואיננו רוציס להגדיר משתנה נוסף מטיפוס 6פטס0, אנו מבצעים את הפעולה הבאה: 2 ע,א 6ם1 ; 8=א ; (8 (000016)) 268501%=5025 בפעולה זו אנו מאלציס את א להפוך לטיפוס 6|פט60 באופן זמני בזיכרון. פעולה זו נקראת 8חו6350. התבנית : <ביטוי> (<שם הטיפוס>) דוגמאות: עתס (6ם1) (7+א) (8םס1) (ב * ע%ם6(0ם1)) (5108%) פעולת 68508 היא למעשה אופרטור יחידני ותכונותיה, ובכללן חוקי הקדימות, דומות לאופרטוריס כגון*יי ו-''ש'י. בתוכניות שנכתוב בהמשך נשתמש ב-685000 במקריס הבאיס: א. כאשר משתמשים בביטוי, או ערך המוחזר מפונקציה בהצבה למשתנה מטיפוס אחר. ב כאשר קוראים לפונקציות עם ערכים מטיפוסים שוניסם מההגדרה. 0 המדריך השלם לשפת 6 ג. | כאשר מעונייניס להבטיח שהמהדר אכן יבצע המרה מסוימת (גס אס עקרונית עליו לעשות ואת). פעולה זו נועדה לתמוך בתאימות התוכנית לגבי מהדריס שוניס, אשר חלק מהס אינס כוללים אפשרות זו. הגדלה והקטנה עצמית של משתנים בשפת 6 יש דרך נוספת להציב ערכיס למשתנים. בדרך זו אין שימוש מפורש במשפט ההצבה. שיטה וו נקראת הגדלה והקטנה עצמלת (0ח06076006/ח6וח6זסחו סטגוה), והיא מהווה למעשה שיטת כתיבה מקוצרת של ביטויים נפוצים. דוגמה: 2 16 ; 1 + 1 = 1 ; 1 -- 1 = 1 ביטוייס אלה מיועדיס להגדיל או להקטין ערך של משתנה ביחידה אחת. הכתיבה המקוצרת תהיה, בהתאמה: ; ++1 ניתן להשתמש בכתיבה המקוצרת למשתנה מכל טיפוס כלשהו. השילוב של ביטוייס אלה בביטוייס מורכביס מאפשר גמישות ויעילות בתכנות. דוגמה פשוטה לכך נראה בפעולות ההצבה הבאות : ; [ ,1 %ם3 (1) )2( 1 5? )3( 4 = ++1 + 3 ; בשורה (3) שילבנו הגדלה עצמית בפקודת הצבה. לאחר ביצועה ערכו של | יהיה 6 ושל [ יהיה 9. ההגדלה וההקטנה העצמית מופיעות בשתי צורות: קדם הגדלה/הקטנה (0ח06076006/+חה6וח6זסחו 6זק) 4-ה-, .41 הגדלה/הקטנה מאוחרת (זה0667676 /+ח6רח6זסחו 05%ק) ==1 ,1177 | שים לב/ ]| בשתי דרכים אלו הערך הסופי של ו יהיה זהה אבל ערך הביטוי לא יהיה 41/, שווה בשני השימושים השונים. הנה ההסדר: בהגדלה מאוחדת יחושב הביטוי המורכב באמצעות הערך הקודס של המשתנה ואחר כך תתבצע ההגדלה. תהליך קדם הגדלה מבצע את ההגדלה תחילה, ורק לאחר מכן יחושב הביטוי המורכב על פי ערכו החדש של המשתנה. כך גם לגבי הקטנה עצמית. פרק 2: משפט ההצבה ומבנה התוכנית ‏ 71 הדוגמה הבאה ממחישה את השימוש בדרך כתיבה זו: = ;7 (++1 * 7) בשורת ההצבה (2), המספר 7 הוכפל ב-5 (ערך | לפני ההגדלה) ולכן, ערכו של ז יהיה 38 וערכו של | יהיה 6. ; 5 = 1 (3) (ב4+ * 7) + 3 = ₪ (4) בשורת ההצבה (4), המספר 7 הוכפל ב-6 (ערך 1 אחרי ההגדלה) ולכן, ערכו של ז יהיה 5 וערכו של | יהיה גם כאן 6. משפט הצבה מקוצר במקריס רבים נמצא בתוכנית משפט, המכיל את אותו המשתנה משני עברי סימן ההצבה. למשל, נתון משפט בעל המבנה הבא : ; <ביטוי> <פעולה> <משתנה 1> = <משתנה 1> שפת 6 מאפשרת תחביר מקוצר למשפט בעל מבנה כזה: ; <ביטוי> =<פעולה> <משתנה 1> המשפטיס: ; 7 + א = א ? (7 + 8) * 1 = 1 ; (2 שם0 || 01א0%) 8 1 שםס = 1 מתס שקוליס למשפטים: ; ץ =+ א ₪ =* 1 ; 2 עם6ס || 01א0% =6 1 מתס העדה? כאשר קוראים תוכניות בשפת 6 צריך לשים לב לכתיבה מקוצרת. למשל, למשפט ההצבה ץ =+ א יש משמעות שונה בתכלית מזו שיש למשפט ההצבה ץ = א. המתכנת המתחיל עלול להתקשות בהבנת תוכניות הכתובות בסגנון מקוצר, ורצוי לקחת זאת בחשבון. 2 המדריך השלם לשפת 6 שים לב/ משפטי הצבה מסוג זה ; צ+ =א ? = -א% אינם כתיבה מקוצרת, אלא משפטי הצבה רגילים. המשפט הראשון מציב ל-א את ערכו של ץע והמשפט השני מציב ל-א את הערך ההפוך של ע. תרגילים תשובות בתקליטור: קבציס 6261-6269 חו!ו870זספז!ס):6 הערה: שימו לב למשפטי ההצבה. בחלק ממשפטי ההצבה מעורבים משתנים מסוג זחו, 1% ו-87ח6. את התוצאות במקרה בו מעורבים יותר מסוג משתנה אחד, אי אפשר לחזות. אנו ממליציס לכס להריץ את התרגיליס ולראות מה התוצאה שמתקבלת. 1 לפניך משפטי הצבה. צייו את המשפטים השגויים: א. / ב. ה. 5 2 עבור כל אחד מהמשפטים הבאיס (התייחס לטיפוסי המשתנים): א. אעהתסת 8 18 18ם6 */ צְ*5+א = ח 32 + 3.14 / ע =: א כתוב, מה יהיה ערכו של משתנה ההצבה ;ץ ,א %ם1 ; ק צ8םס 2 = ץ ;'ִ' ;ק + ץ = א סי 1 ;ץ %ם1 ;ס ,א עַַַם0 2 = ץ ;'ה' = םס ;ק + ץ = א ;ץ ,א 6ם1 11086 2 2 = ץ > א ;ץ * א = 1 פרק 2: משפט ההצבה ומבנה התוכנית | 73 24 ד. ;ץ ,א %ם1 2 11086 72 ">" 5 ;13000 = א 72 * א = ץ ה. ;ץ ,א 6ם1 ;עםס עת0ס 2 1108 ;(א == עם0) = 116 ךר ; ₪01 16סטסםף ;חתטם 5 11086 401 = 2 2 = תגטם + ; חטם 5 * ₪01ִ-- = 1סםס . ; ₪01 16סטסםף ;חתטוםת 5 11086 + מגת‎ = 0.56; 001 -=- 52 ;תסטום 5 =- 001 מה יהיה ערך משתני ההצבה בגמר פעולות החישוב הבאות. כתוב את הערכיס של כל המשתניס בביטוי. א. 12 סת1 ג. ;חתטום 5 11086 ;ס6סץ ע8ם0 72 = 6ס6צץ0ס ;6סץ++ = חמטם 5 ד. שיס לב שהתוצאות תלויות במהדר. הת 0 = 62 ה. שיס לב שהתוצאות תלויות במהדר. הת ?= 6 ₪ בדומה לדוגמאות שבפרק וּה, כתוב קטע תוכנית המחשבת את העלות של השקיית גינה פרטית במשך שנה. המדריך השלם לשפת 6 נתון : + שטח הגינה: 1000-200 מייר (מספר ממשי). > מחיר מטר מעוקב מים: 0.8 - 4.5 שקל. + צריכת מים למייר למחזור השקיה: 0.2 - 0.3 מייק. > מחזור השקיה מבוצע כל שלושח ימים. בחר במשתנים מתאימים וכתוב משפטי הצבה עבור הנתוניס הבאים: % 325 מטר > מחיר למייק: 2.5 ש'יח > צריכת מים: 0.22 מייק צרף לתוכנית הערות הסבר. כתוב קטע תוכנית המחשבת ומציבה למשתנה %ח06ז6 א8ז את אחוז המס הכולל המוטל על משכורת של 3600 שקל, אם ידועיס שיעורי המס השולי הבאים : עד 600 שקל - 0% 0 ששקלקל - 10% 0 שקל - 20% 0 שקל - 30% 0 שקל - 40% 0 שסקל - 50% 0 שסקל - 55% 0 שקל - 60% הקפד לבחור טיפוסיס מתאימיס ושמות משמעותייס למשתנים. כתוב קטע תוכנית במספר מינימלי של משפטים, כדי לחשב היקף ושטח של מעגלים שרדיוסם: 4, 5, 6. תוצאות החישוביס יוצבו למשתניס: 3 1ַה6זה, 3 0%71ח6! בהתאמה. דמז? השתמש במנגנון הקטנה/הגדלה עצמית. נתונה הפונקציה (96600 המחזירה תו. כתוב תוכנית הקולטת שלושה תוויס ומציבה למשתנה מתאים את המנה: תו שני * תו ראשון תו שלישי פרק 2: משפט ההצבה ומבנה התוכנית | 75 שיס לב/ הקריאה לפונקציה 060000 נעשית כך : ;%1ת0 עַהםת0 ; ()66602 = 1עם0 8 מה יהיו הערכים של א ו-ץ בתוכנית הבאה? () מנאת | ;ך ,3 ,א 186 ;ת ,ס צהַםס ;ץ 11086 12 = ך 1 ; 'מס' = ס /* שססת 8 18 18םך7 /*‏ (15א0 8 ס) = ת . *- 9 מה יהיה ערכם של 2, ם ו-6 בתוכנית הבאה! 6 המדריך השלם לשפת 6 פרק 3 קלט ופלט באמצעות פונקציות ספריה תוכניות המחשב מקיימות קשר במידה קטנה או גדולה עס העולם החיצון, כדי לקבל נתוניס לעיבוד וכדי להציג את התוצאות עבור המשתמש. פעולות קלט/פלט, או +ווכק+ט0 /+ש0ח1 (1/0) מבוצעות באמצעי קלט/פלט רבים ושונים, שניתן לחבר למחשב. בהמשך נתייחס לפעולות הבסיסיות: קליטת תוויס מהמקלדת (0זהסטץ6א) והצגת תוצאות על המסך (ְ0|3פוכ). שפת 6 אינה מכילה פקודות קלט/פלט. שירותיסם אלה מסופקיס באמצעות פונקציות ייחודיות מוכנות מראש, הנמצאות בספריה הסטנדרטית של מהדר 6 ואשר חלקן כתובות בשפות אחרות, כמו אסמבלר למשל (לצורך יעילות). ספריית המערכת מכילה, בנוסף לפונקציות 0ע/, עוד פונקציות רבות אחרות. במערכות מחשב ובמהדריסם שוניס מופיעה ספריה זו תחת שמות שונים. עליך לבדוק כיצד הספריה נקראת וכיצד להשתמש בפונקציות אלו בסביבת העבודה שלך במחשב (05ת, פטוססחו/, %א(ו). נציין רק, שרוב המהדריס משתדלים לעמוד בתקן מקובל, ועל פיו נציג גס אנו את הפונקציות הבאות. ברוב המהדריס הספריה הסטנדרטית נקראת 556]8, קיצור של עזפזטו | 080ח508. תוכנית 6 המשתמשת בפונקציות 0 מהספריה, חייבת להכיל בתחילתה את השורה הבאה: <ת. 56410> 646ט1סת1א% טיפ/ כאן נציין רק, שהקובץ .50/0 עזפזפוו ]קוטס זטקחו 0ז09ת59) מכיל הגדרות הנחוצות לשימוש בפונקציות 20 משפט 6סטוסחוא 'ימודיעיי למהדר להתייחס להגדרות אלו בתהליך ההידור. פרק 3: קלט ופלט באמצעות פונקציות ספריה ‏ 77 קליטת תו מהמקלדת הפונקציה הבסיסית לקליטת תו בודד מהמקלדת נקראת ()46800. כאשר היא מופעלת, היא ממתינה להקשה של תו כלשהו במקלדת, מקבלת ומעבירה אותו לתוכנית. התו מתקבל באופן מיידי ואין צורך בהקשה על מקש זסזחם. השימוש בפונקציה בתוך תוכנית נעשה באמצעות הצבה לתוך משתנה מטיפוס זבּח6. בדוגמה הבאה פונקציית הקלט ()966 תמתין להקשת תו במקלדת וערך 5011 שלו יוצב למשתנה ח6. <ת.585%6010> 01066ם1 <ת.10ם0ס> 01066ם1 הקרנת תו בודד על המסך הפונקציה המשלימה לקליטת תו מיועדת להציג תו בודד על המסך, וכינויה ()ח6זשש. התו יופיע במקוס בו נמצא באותו רגע הסמן (זספזטש), אשר יתקדס במקוס אחד ימינה בשורת המסך (כתיבה באנגלית). תצוגת התו תהיה כאשר נרשוס בתוך הסוגרייסם את התו הרצוי ונפעיל את הפונקציה. התו יכול להיות קבוע מטיפוס תו, או שהוא יכול להימצא בתוך משתנה מטיפוס תו. ניתן להשתמש גס במשתנה מטיפוס אחר, בתנאי שהערך המצוי בו הוא בין 0 ל-255. בדוגמה הבאה, התוכנית קולטת תו מהמשתמש, מציגה אותו על המסך ואחריו את הת 'י!". 0 קובץ תקליטור: 00301.6 ***>**/ <ת.56010> 101066 <ת.10םת0ס> 1010066 6 (ס1סט) מנאת 1סט | ; ()86%502 = ם0 )| תושסוטוסן ל) הוששפוסן ) אס הקשת על מקש הנושא את הספרה 1 יופיע הפלט הבא, ובסיוס יחיה הסמן מימין לסימן הקריאה: !1 8 המדריך השלם לשפת 6 כדי לגרוס לסמן לדלג אוטומטית לשורה חדשה, אפשר יילהציגיי את התו המיוחד המציין שורה חדשה (סחו|אוסח) - ח. הפקודה המתאימה תיראה כך: ; ('ם')םספסטסם באמצעות הכלים האלה ניתן לכתוב תוכנית 6 פשוטה, המציגה במסך את התווים המוקשיס במקלדת. נקרא לתוכנית בשס 6600.6, כי היא מזכירה תופעת ייהדיי. ו קובץ תקליטור: 00302.6 *****/ <ם.56010> 61066ת1+ <ת. 10ם0ס> 618066ת1+ (16סט) מנ1את 1סע | 5 ( 8 005 / *לולאה אינסופית* / ָ ; ()2ם0660 = 0 ל (66) וטוטופן ] הפקודה 0+ בתוכנית זו גורמת לצמד המשפטים שאחריה, בין הסוגריים המסולסלים, להתבצע בלולאה אינסופית. את מבנה משפט זס? והשימוש בו נלמד בפרק הבא. שים לב/ 1. *ש פונקציית ספריה נוספת הקולטת ומציגה בעצמה את התו על המסך, ושמה : ()9616031. 2 לצורך ביצוע תהליך הפוך (דחיפת תו חזרה לאזור הקלט) נועדה הפונקציה (0/0ו6פחט. תהליך זה מאפשר לקרוא שוב לתו על ידי הפונקציה (961000. פלט לפי תבנית שירותי הפונקציה ()ח6טס אינס מספיקיס בדרך כלל, כאשר מדובר בפלט מורכב יותר. דרוש טיפול מיוחד בפלט המכיל מלל מעורב עם ערכיס מספריים מתוך משתנים. לצורך זה קיימת הפונקציה ()פחווק המטפלת בהפקת פלט לפי תבנית (60החזס= +טמטס). פרק 3: קלט ופלט באמצעות פונקציות ספריה 79 התבנית הכללית של קריאה לפונקציה ()שחוזק : ; (...<ביטוי> ,<ביטוי> ,<מחרחת בקרה>) 65ת1עק <ביטוי> קבוע, משתנה או ביטוי מורכב. מספר הביטוייס אינו מוגבל. <מחרוזּת בקרה> מחרוזת תוויס המכילה בתוכה תווי בקרה, שתפקידס לפענח את רשימת הביטוייס. הפונקציה ()שחוזס מתרגמת את ערכי הביטוייס לפי סדר, על פי תווי הבקרה, ומציבה את התוצאות במקום תווי הבקרה. את המחרוות הסופית, המורכבת מהתווים המקוריים של המחרוזת והערכיס המשובצים בה, מציגה הפונקציה ()שחוזס על המסך. קטע מהתוכנית הבאה מדגים שילוב של ערכים בפקודת הדפסה: ; 2חטת ,1חתטת %ם1 ; 10 = 1[חטת ; 105 = 2חטת ,2תסת ,1תטת ,"%0 18 %6 בםת8 %0 01 תגט5 6םם6")+6תנ1עס ; (2ותטטם+ [חגות 5 1895 105 בם8 10 0% תטפ 6ם6 בדוגמה זו ניתן להבחין בכך שצירוף התוויס %6 מהווה בקרה, שהוחלף בערך של משתנה שלם. ההחלפה נעשתה לפי סדר המשתנים ברשימת הביטויים. על המסך יופיע המשפט הבא : נקודות לציון? א. מחרוזת הבקרה מוגדרת בתוך זוג גרשיס שאינם מופיעים בפלט. ב מספר תווי הבקרה זהה למספר הביטויים. ג. | מחרוזת הבקרה וסדרת הביטויים מופרדיס באמצעות פסיקים. ד. כל תו במחרוזת הבקרה, שאינו תו בקרה (בעל קידומת %) יוצג במחרוזת הסופית כמו שהוא. ה. כדי להציג את התווים %, 'י, ', , צריך להקדימס בתו , כלומר : %, ', , \. 0 המדריך השלם לשפת 6 תווי בקרה של הפונקציה ()זוחוזס בטבלה 3.1 ניתנת רשימה חלקית של תווי הבקרה המותריס במחרוזת הבקרה של (0חוזק. טבלה 3.1: תווי בקרה של () תוצאות הפענוח של הביטוי ייצוג עשרוני של שלס תו בודד בעל קוד 45611 של ערך הביטוי מחרוזת תוויס. כל התוויס במחרוזת יוצגו עד לתו א (0 5611) ייבוג הקסדצימלי (בסיס 16) ייבוג עשרוני ללא סימן (שלס) ייצוג אוקטאלי (בסיס 8) ייצוג עשרוני הכולל נקודה עשרונית ושבר (חוקי עבור משתניס/קבועיס מטיפוס 6!טט08%/00) ייבוג עשרוני, כולל נקודה עשרונית וחאקה של 10 הצמודה למספר מימין עס קידומת = (1.245-5) העדה! ]ות תו בקרה 1 6 "0 %6 5 51% 1 האס %% סופת גו% 01 ס% %+ 1% סשתסתססאס 6 נדגיש, כי הטבלה הזו מכילה את תווי הבקרה הנפוצים והמקובלים ביותר. לכל מהדר מאפשריס פעולות נוספות להצגת לדוגמה, נתונה תוכנית: יש תווי בקרת מספים, אשר הפלט. 0 קובץ תקליטור: 00303.6 ל 7" ₪ תפ <ת.56610> 66ט610ת1+ > ו ה ע 6א5781 ת"=[5]22 מַַַםס (ס1נסט) תנאת ב1סט = ₪0 = = ך 7 = ₪ פרק 3: קלט ופלט באמצעות פונקציות ספריה ‏ 81 ( 5 97 = הלפ 21 96 = 6601 3 ) ספותו נסוסן 7 6 6 "6 16 6666 ₪961 567 5 ₪65 ₪ ש) פופותו נמוסן ל( 7 וס ץק( ה = 5 5 = 51600 ₪ 60 ) ףוסומו נסופן 7( 3100 כ ס) 06 65 2 1 םי 6 = ₪6 1 ו ל( כ ₪69 16 ₪ ₪ ₪ ₪ ) פסוהו נפופן 7 (787 כ"₪ 6% 6 65 ₪ 5 וש ) חן 5 0 010-599 = 8ב ₪ )51066 = )) פוסוות סוס ) נציג את הפלט לאחר ביצוע פקודות צחוזס שונות: א. ;(1 ,1 ,"תא% - 8א6ת 1 ,%6 - 8601081 1)"1>ת1עס הפלט: 90 - האסם 1 ,155 - 8601081 1 ב. ; (ם0 ,ת6 ,"ת%6 18 0006 88011 ,%0 : פת681ת60 םמס")1>ת1עס הפלט: 7 18 0006 88011 ,8 :פתנ1א5תסס םס ג. ;(5 ,"ת+%55%+")61ת1עס הפלט: 6% א1 פפאזפפכ 6אךתדם ת + ד. ;(2 ,1 ,"ת%6 - סתסתסקא6 ,%1 - 11086 61)"2600182תנעס הפלט: 1ָ,:ָ:ָָָ 0-2ת6ת00א6, 22.142857- | 11086 ע18גו260 הערה בכל הדוגמאות לעיל, הפלט מופיע על המסך ברצף, ללא דילוג לשורה חדשה. כדי לעבור לשורה חדשה צריך לכלול את התו "ח" בפקודה שחחחם. באמצעות פקודה אחוזס בודדת ניתן להציג על המסך מספר משפטים, אשר כל אחד מהס מתחיל בשורה חדשה: ;(8 ,1=255 ,"םת %9 5םת581ת00 2 6ם11 ם %6 = תטפ 1 6ם11")+>תנגעצס הפלט: 5 = תטפ 1 6מם11 6 א1 פפא1עאטפת 6₪א 5791‏ תב פם1הפסתסס 2 6ם11 תוצאה שונה נקבל כאשר נקרא פעמיים לפונקציה ()שחוזם, מבלי להשתמש בסימן יישורה חדשה'' בפקודת שחוזס הראשונה. למשל: ;(1 ,"50 18 1 05 6ט81ט 6ם65)"7םת1צס ;('8' ,"ת א% 18 0 01 תטפ 6םם6 הִתה")11ת1עס הפלט: 1 189 0 0% תטפ 6ם6 6ם8 155 15 1 05 6ט1הט סםתך 2 המדריך השלם לשפת 6 נקודות לציון/ = א. ממתן לפענח את אותו ביטויעמשתנה באמצעות תווי בקרה שונים, וכך לשנות את צורת הפלט. ב <ביטןל> יכול להיות קבוע, משתנה, או פעולה אריתמטית כלשהי. בהמשך נראה ש- <ביטוי> יכול להיות גם קריאה לפונקציה. ג. | כל תווי הבקרה מתחילים בסימן %. ד תווי הבקרה במחרוזת הבקרה, תופסים בדרך כלל 2 מקומות בלבד. לכן, לאחר שיבוץ הביטויים, מחרוזת הפלט תהיה בדרך כלל ארוכה יותר. שיס לב/ מיתן לשבור שורת /קשחחק על ידי התו '' במידה והמחרוזת ארוכה מדי. דוגמת: ;(1 ,"%6 18 : 01 6ט810ט 6ם11)"7תנ1צס רוחב שדה הפלט בנוסף לתווי הבקרה הבסיסייס שהוצגו בסעיף הקודם, יש מספר תוויס אופציונליים נוספיס, המאפשריס שליטה טובה יותר על צורת הפלט. לשס כך צריך להשתמש במציין רוחב שדה הפלט. מציין וה הינו מספר עשרוני המופיע בין סימן ''%י (אחוז) לבין תו הבקרה וצורתו הכללית היא: ק.ש כאשר, ש מגדיר את רוחב השדה (חססוצ)), ו-ם מגדיר את דיוק השדה (ח661500זק), למשל: %70, %8.31. אופן הפענוח של המציין תלוי בסוג תו הבקרה, כפי שתראה להלן. רוחב השדה (ש) עבור תווי הבקרה ס, ש, א, 6, 6 תופיע התוצאה לפחות ברוחב או. אס יש פחות תוויס מאשר השדה יכול להכיל - יתוספו רווחיסם משמאל. אס יש יותר תוויס - הס יופיעו במלואם, ויגלשו מרוחב השדה שו (שים לב למצב זה6). עבור תווי הבקרה 6, + יופיע המספר העשרוני (כולל השבר והנקודה העשרונית) לפחות ברוחב א. אס יש פחות תוויס - יתוספו רווחיסם משמאל. אס יש יותר תוויס - הס יופיעו במלואם, ויגלשו מהרוחב או. פרק 3: קלט ופלט באמצעות פונקציות ספריה 83 עבור תו הבקרה 5 תופיע המחרוזת לפחות ברוחב או. גם כאן, כבמקריס קודמים, יתוספו רווחיס משמאל, או שתהיה גלישה, בהתאס לאורך המחרוזת בפועל לעומת רוחב השדה הנתון שו. העדה? יש מהדריסם שמאפשריסם למלא אפסים מובילים (26/05 0ח/1690) במקום רווחים. דיוק השדה (ס) עבור תווי הבקרה 6, + מציין ק את מספר הספרות שיש להציג לאחר הנקודה העשרונית. עבור תו הבקרה 5 מציין םק את המספר המקסימלי של תווים שיש להציג. דוגמאות: א. התוכנית (תו בקרה 0 ומצייו א): ; 155 = 1 ;(ב ,1 ,1 ,"םת <%56₪> <%20>‏ >%1086< = 1") %1>תנ1עס הפלט המתקבל: < 155> <>‏ >155 < > 1 ב. התוכנית (תו בקרה + ומציינים ס.צו): ; 1 11086 ; 103.4732 = 1 ;(,1,+1,+,"םת> <%5.01 <%8.41>‏ >%10.2%< = +") +6םנצס הפלט המתקבל: <103.4732> << 3%‏ >103.47 < > 1 ג. | התוכנית (תו בקרה 5 ומציינים ש ו-ק.שו): ; ("סת621פ6-5" ,"סת1ע60-55" ,"ת+ %%5.35%‏ %105%+") 61>תנ1עס + 0-85ת1ת6%‎ -% 6-5% הפלט המתקבל: 4 המדריך השלם לשפת 6 קלט לפי תבנית בדומה לפונקציה (0שחוזק המטפלת בפלט לפי תבנית, יש פונקציית ספריה מקבילה המטפלת בקלט לפי תבנית. פונקציה זו נקראת ()50801. הצורה הכללית של קריאה לפונקציה 40ח508: ; (....<כתובת משתנה> ,<כתובת משתנה> ,<מחרחת בקרה>)+ם508 <מחרוזת בקרה> מחרוזת של תוויס בדומה למחרוזת הבקרה שבפונקציה ()אחוזס. <כתובת משתנה> | הגדרת תא הזיכרון שאליו יוכנס ערך הקלט המתאים. בשלב וה לא נסביר את משמעות המושג ''כתובת משתנה'י. הסבר מלא לכך יינתן בפרק 11 העוסק במצביעים. איך פועלת הפונקציה! הפונקציה ()6ח568 סורקת את מחרוזת הבקרה, וקולטת ערכים לתוך משתנים. הפונקציה מבצעת את ההמרות המתאימות מתווי הקלט לטיפוסים המוגדריס במחרוות הבקרה. ההפרדה בין ערכי הקלט נעשית באמצעות רווחים. תרגילים תשובות בתקליטור: קבציס 6361-6366 חו!ו870ז6פז!ס):6 1 כתוב תוכנית שתקבל כקלט מספר בן שלוש ספרות המייצג שטח מעגל, והדפס את הרדיוס שלו. הנחיה/ קלוט את הספרות זו אחר זו וחשב את הערך שלהן, על ידי כפל ב-10. השתמש במספר מינימלי של משתנים. הדפס את התוצאה בעזרת הפונקציה /₪)חזט. 2 כתוב משפט, אשר ידפיס את המספר 123.572 בשדה שרוחבו הכולל 6 תוויסם עס שתי ספרות עשרוניות. 3 כתוב קטע תוכנית שתקלוט תו ותדפיס את המשפט הבא במבנה המתואר להלן: ס6ט1אט סתץך <ערך 50611ת> 18 <ת> 05 .1 שת 18 15ם₪ תה דמז/ הקוד הגורסם למעבר לשורה חדשה הוא בן שני תווים, שערך 456011 שלהסם 04א0. פרק 3: קלט ופלט באמצעות פונקציות ספריה 85 6 איך יוצג פלט ההדפסה של המשפט הבא! 1 ,"!ם 50 %5.36 פסת1מק 086םת%8ת56 18םך61)"7ת1עס ; (0%08 איך יוצג פלט ההדפסה של המשפט הבא! ,"סת11 1%58%ע" ,"םת %0 ,%58 ת.2 ,%58 מ.1")+6ת1צק ; ('?' ,"סת11 הםתסם560" שכתב את תוכנית 5 שכתבת בפרק 2, כדי שתקלוט את גובה המשכורת (ארבע ספרות) ותדפיס את אחוז המס הכולל. המדריך השלם לשפת 6 פרק 4 משפטי בקרה בשפת 6 בדומה לשפות מחשב אחרות, מציעה שפת 6 מיגוון של משפטי בקרה כדי לאפשר כתיבת תוכנית יעילה, חסכונית וברורה. משפטי הבקרה נגזריס מאופיים של קטעי התוכנית השונים: קטעי תוכנית אחדיס יבוצעו רק כאשר יתקיימו תנאים מסוימים, ואחריס יבוצעו פעס אחר פעם כל עוד מתקיימיס תנאיס מסוימים. בפרק וה נלמד להכיר את משפטי הבקרה הבסיסייס בשפת 6, נבחן דוגמאות לכל אחד מהם ונכיר כליס חשוביס לכתיבת תוכניות יעילות וקריאות. משפט התנאי - -| מדוע נחוצ משפט = ! נניח שברצונך לבצע מספר פעולות - אם ורק אם מתקיימיס תנאים מסוימים. לדוגמה, ברצונך לחלק את המספר 10000 במשתנה א, אך אינך יודע את ערכו ואינך רוצה מסיבות מובנות לעשות ואת, אם ערכו יהיה 0. במיליס אחרות: אס א אינו שווה ל-0 בצע א/10000. את המקרה הכללי ניתן לתאר בתרשיס הבא : בצע <הצהרה> תרשיס 4.1:/ פרק 4: משפטי בקרה בשפת 6 | 87 התחביר של משפט =1: ; <הצהרה> ‏ (<תנאי>) 1% נחזור לדוגמה הקודמת: ;א %ם1 ; 6501%ע2 11086 (0=!א) +1 ; 10000/8 = 268016 ניתן לראות, שההצהרה נכתבה בשורה נפרדת. התחביר אינו מחייב זאת, אולס אס ברצונך לשפר את קריאות התוכנית, אנו ממליצים על דרך כתיבה זו. כפי שראינו קודס, <תנאי> יכול להיות גס ביטוי מורכב. כדי ש- <הצהרה> תכלול קבוצה של משפטים (זהו ייבלוקיי), נשתמש בסוגרייס מסולסלים כדי להקיף אותם. לדוגמה, טי אי תד ;0 = 268016 11086 (0 == 2686016 686 0 =! א) 15 ; א / 10000 = 6801%ע2 ;ץצ 1+ א ל == 1 סדרת המשפטים, שבין הסוגרייס המסולסליס תתבצע אם ורק אם, ערכו של א שונה מ-0, וגם ערך +/650ז שווה ל-0. כל סדרת משפטיס בשפת 6 שנמצאים בין סוגרייס מסולסליס, נחשביס למשפט הצהרה מורכב. מכאן אפשר להסיק, שבתיאור התחבירי של משפט )ו הבא ; <הצהרה> ‏ (<תנאי>) 4% הכוונה ב-<הצהרה> למשפט בודד, או למשפט מורכב (דחיינו, סדרת משפטים מתוחמים בסוגריים מסולסלים). כלל אה מתקיים בכל משפטי הבקרה שנלמד בהמשך. 5 ]. -ן משפט הבקרה 6.6566 מאפשר בחירה בין שני קטעי תוכנית שונים, בהתאם לערכו של תנאי מסוים. 8 המדריך השלם לשפת 6 התרשיס המתאיסם למבנה זה: בצע בצע <הצהרה 1> <הצהרה 2> תרשים 4.2: 656 .56 התחביר של משפט 11..6]56: ; <הצהרה 2> 6186 <הצהרה >1‏ (<תנאי>) 15 נניח, על פי הדוגמה הקודמת, שברצוננו להתריע כאשר המשתנה א קיבל ערך 0, ולכן לא בוצעה חלוקה. קטע התוכנית המתאים יהיה: (0 =! א) +1 ; א / 10000 = 269016 16 ; ("מת !! מם1810ט01 תמע0ס+?6ס פסתת0.08 600818 א")11תנ1צס שים לב לצודת הכתיבה/ ההצהרות 'מוזזותיי ימינה והמילים 5666 נמצאות זו מעל זו. צורת / כתיבה זו מוחה מאוד כאשר תכתוב תוכנית שלמה, מכיון שהיא מאפשרת לזהות את הקשרים שבין הקטעים השונים, ולאיזת / *שייכתיי כל מילת 6/56. עם זאת, לשפת 6 כל זאת לא איכפת/ ור כאן המקום לציין שבשפת 6 מתקיים הכלל הבא: ₪ 2 כל 656 יישייך'י לאו האחרון שאינו י*סגוריי על ידי מילת 6/56, ושאיו נמצא בתוך סוגרייסם מסולסלים. הסתכל בדוגמה הבאה: (0 == 6ף26801) 15 (0 =! א) 15 ; א / 10000 = 268016 156 ("מ ... ת02ס+לסק 0%םתםת08 .0 60608158 א")61>ת1צס פרק 4: משפטי בקרה בשפת 6 | 89 משפט זה דומה במובנו למשפט המורכב שראינו קודם, אך הוא הושג על ידי שרשור, או קינון (0ח650ח) של שני משפטי ). ניתן גס לראות ש-6!56 מתייחס לתנאי השני. אס נקבל תוצאה - 650|5ז - שונה מ-0, לא נבדוק ולא נדע אס הוא שונה מ-0. אס ברצונך לוודא ש-6|56 יתייחס ל-11 מסוים, השתמש בסוגרייסם מסולסלים, כדי לתחום את משפט זו הרצוי. דוגמה: ; א / 10000 = 268016 ] 56 ; (" ם 0ע26% ססת 18 61)"268016ת1צק כאן המקוס להזהיר מפני טעות נפוצה הנגרמת כתוצאה ממשאלת לב. הקטע הבא יובן על ידי המהדר בצורה שונה מכוונתו המקורית של הכותב: (0== 26501%6) +15 (0 =! א) 15 | ; א / 10000 = 268016 56 ; (" ם 0ע26% פססת 18 61)"268016ת1צק 6 במקרה זה יישייך'י ל- השני, למרות שהוא כתוב מתחת לראשון, בהתאס לכלל שהוסבר למעלה (כזכור, לשפת 6 לא חשובה צורת הכתיבה/עיצוב של הפקודות, אלא התוכן שלהן). בעזרת מנגנון 6/56- ניתן לתכנת מבנה ''רב אפשרויות'' (66וסח6 עְ8/-א). בכל שלב נבדוק קיום של תנאי מסויס, ובעזרת 8|56 נאפשר את המשך הבדיקות אס התנאי אינו מתקיים. לדוגמה, נציג קטע תוכנית הבודק אס תו מסויס הוא אות גדולה, אות קטנה, מספר, או סימן אחר. 0 קובץ תקליטור: 0200401.6 *****/ <ת.5%6010> 161066 <ת.10תסס> 101066 65 (ס1נסט) מנ1את 1סע 0 = 08₪602)(; ( ל א 6 06 ל 8 ל 0 מה ו 1 1 5 ו וה וסן ( שש ו ה הסה םש סי "ו 1505 56 ) ו טסוו פמסן 0 המדריך השלם לשפת 6 (%*9' -=> 6 86 07" =5 6₪) 48 5156 ; ("מ עסכמטם ") 65םנ1טס 6 ; ("ת 02828066% ע6םתסס ")61ת1עס / ניתן לראות, שכאן חרגנו מכללי הכתיבה הקודמיס כדי להדגיש את אופיו המיוחד של הקטע. כלומר, לא כתבנו כל 6!56 תחת + המתאים לו. חריגה זו נהוגה רק במקרה מיוחד זה. משפטי 1ו מיוחדים למדנו עד כה שכאשר ערכו של ביטוי התנאי (במסגרת ז) שונה מ-0, הוא נחשב ייאמת'י (6טזד). אס כך, אזי המשפט הבא יהיה אמת, כל עוד המשתנה חטח שונה מאפס, לדוגמה, 8=תטת 1% במקוס כל יימשתנהיי הרשוס בסוגריים של משפט התנאי, אפשר לכתוב משפט אחד, או ייבלוק" - קבוצה של משפטים. (תטום)+1 | משפט/בלוק לכן, אין צורך לשאול (0=!ותטח)ו מכיון שמנגנוו השפה בודק זאת בעצמו. כיצד אם כן, נבצע את משפט )ו, אס ברצוננו לבצעו רק כאשר התנאי הוא 0. ;0=חטת %ם1 (מטם!) +1 משפט/בלוק השאלה הנשאלת עתה היא האס לא שונה מ-0 פרושו: לא, התנאי לא שונה מ-0, הוא שווה ל- 0 ולכן יתבצע משפט זו. ניתן לבצע משפט השמה במסגרת תנאי ]ו, למרות אזהרת המהדר, היימביןיי כשיש סימן שוויוו אחד בלבד ווהי פעולת השמה ולא פעולת בדיקת שוויון בתוך תנאי. ;0=0 ,8=3 %6ם1 (ק=8) +1 תוצאת משפט זו היא יישקריי (8956)). שיס לב/ לא מקובל להשתמש בביטוי תנאי מסוג זה. -4 פרק 4: משפטי בקרה בשפת 6 91 לולאות כוחו של מחשב וכוחה של שפת תכנות באים לידי ביטוי במספר תחומיס עיקרייס. אחד מהס הן לולאות (10005). הלולאה מאפשרת לבצע פעולה נשנית מספר פעמים רב, תוך שמירת היכולת לבקר ולנתח נתוניס במהלך הביצוע. ככל שתמיכת שפת התכנות בלולאות רבה יותר - נוכל ביתר קלות לנצל את יתרונות הלולאה בבניית תוכניות יעילות יותר, המתבססות על קטעיס שחוזרים על עצמסם. כפי שנראה, מאפשרת שפת 6 משפטי בקרה נוחים וקומפקטיים, העוניס למיגוון צרכיס. בחלק מהמקריס ניתן לפתור אותה בעיה בעזרת משפטי בקרה אחדים, אולס במרביתס קיימת העדפה למשפט מסוים - המתאים והיעיל ביותר עבור אותו מקרה. שפת 6 תומכת בשלושה סוגיס שוניס של משפטי לולאה. משפט = !חצ בהקדמה לפרק גה הזכרנו את משפטי הבקרה העיקריים. מבנה משפט שווח/ מתאים למקרה יכל עוד מתקיים התנאי - בצע...". תחביר המשפט: ; <הצהרה> (<תנאי>) 16גםתט התרשיס: בצע <הצהרה> תרשים 4.3;: תרשיס 6 כפי שניתן לראות, התנאי נבדק לפני כל ביצוע של <הצהרה>. מתי נשתמש במשפט זהז כאשר ברצוננו להבטיח ש- <הצהרה> תתבצע רק כל עוד <תנאי> מתקיים. במצביס מסוימים ייתכן ש- <הצהרה> לא תתבצע כלל: ך (0 =! 1) 16נ1תשט ; (1 ," ת %6 = 1 ")תנצס בדוגמה זו, משפט נ)שחוזס לא יבוצע כלל. 2 המדריך השלם לשפת 6 דוגמה: נניח שברצוננו לכתוב את הפונקציה !ח (ח עצרת) עבור 7 = ח. ; 0600%סעס ,ם 6ם1 ; 1 = ססטססעמק = ם (7 => ם) 16נ1תשט ; ם * ססגמוססעק = ססטססעס ; 1 + ם = םת ]) בקטע זה ביצענו 7 פעולות כפל, וספרנו באמצעות המשתנה ח את מספר הפעמים של ביצוע הלולאה. לכן, אנו מכניס את ח בשס יימשתנה בקרת הלולאהי". הערת? כאן המקוס להזהיר מפני טעות נפוצה בבניית לולאות, במיוחד באלו המכילות קטע תוכנית ארוך : קל לשכוח ייפרט פעוטיי, כמו עדכון של משתנה בקרת הלולאה. אם לא נבקר כראוי את מהלך ביצוע הלולאה, היא תתבצע עד אינסוף. בדוגמה הקודמת, הסרת המשפט 1+ וז = ח תגרום לתוצאה כזאת. לסיום, נשתמש בייקיצורי דרך'" שמאפשרת שפת 6 כדי לצמצם את מספר הפקודות בתוכנית שלמעלה. כך נפיק תוכנית קריאה יותר וגם נשלטת יותר על ידנו, מכיון שתהיינה בה פחות פקודות. 0 קובץ תקליטור: 0₪00402.6 *****/ <ת.5%810> 1066סת1א ; 6=1סטסעס ,0=ם 6ם1 (ס1סט) מנ1את 1סט ן (7=> מת++) 16נ1םתט = ופ כ ( ופ ו%6 36 (71) 7 65 66866" ) סוה ונופ שאלה/ האס ניתן לכתוב קטע תוכנית זו בדרך שונה? חשוב על +ח6חחסוסחו ז5סק/סז. פרק 4: משפטי בקרה בשפת 6 33 משפט = ווחע-0פ במקרים מסוימים יש לבצע את <הצהרה> במשפט הבקרה לפחות פעם אחת. כלומר, ראשית נבצע את <הצהרה> ורק בסופה נבדוק את <תנאי> ונחליט אם לבצעה שוב. זהו המצב בלולאות 6!וש-60, שבה <תנאי> נבדק בסוף המשפט, ורק אס הוא מתקייס, תתבצע הלולאה פעם נוספת. תחביר המשפט: ; (<תנאי>) | 16נ1גם" <הצהרה> 60 בצע <הצהרה> תרשיס 4.4: תרשיס 00-06 את קטע התוכנית שבדוגמה הקודמת נוכל לכתוב כך: / אא*א*אא קובץ תקליטור: 600403.6 *****/ <(.5%6010> 61006ת1א 66 8 מו (ס10סט) תנאת ב1סט | ; 1 = ססגוססעק = םת 0 ₪ = שוסטוסוסמוסן ; (7=> מ++) ש1ותשט ופ 6 - 426 | (73) 7 ₪5 6₪ן ספ ) פנסום ובפמסן דוגמה נוספת: ; ץ6א שהםס 0 ()46602 = ץ%6 72, ('צ' == צָ6א%) 15 ;-... ('ק' == צשְ6א) 11 6156 2 ('ת' == צ6א) 11 6156 ] ; ('ש' =! שְ6א) 16נ1תחט 4 המדריך השלם לשפת 6 משפט 035; משפט הבקרה הנפוצ והנוח ביותר בשפת 6 הוא לולאת זס1. לולאת זס1 מכילה באורח קומפקטי ובשורה אחת את שלושת השלבים הבסיסיים של פעולות הלולאה, אשר עוסקיס במשתנה בקרת הלולאה: אתחול, בדיקה של <תנאי> להמשך ביצוע, וקידוס (או שינוי) של המשתנה. בהמשך הלימוד נכיר שימושים ויישומיס רביס המנצליס לולאה חשובה זו. כעת נסתפק בהיכרות בסיסית ובמספר דוגמאות שיאפשרו לנו להעריך את אפשרויותיה. תחביר המשפט: (<ביטוי 53> ; <ביטוי 2> ; <ביטוי!>) מס5 ; <הצהרה> התרשיס: בצע <ביטוי 1> בצע בצע <הצהרה> <ביטוי 3> תרשים 4.5: תרשים וס מהתרשים ניתן לראות, שלמעשה כל לולאת וס ניתנת להמרה בלולאת 6!וחאו. לפני לולאת 8!וחשו מתבצע <ביטוי 1>, אתייכ מתבצעת ההצהרה, ולבסוף מתבצע <ביטוי 3>. נתבונן בקטע התוכנית הבא: (03א6 ; 02א6 ; 01א6) 102 ן ; 61תת56 ; 62תת56 עייו בקטע התוכנית הבא: ; 0%01 (2ק68) 16נ1םח | ; 61תת56 ; 62תת56 ; 0%03 פרק 4: משפטי בקרה בשפת 6 | 95 העדה? קטע זה שקול לקטע הקודם 50!). כיצד נתכנת את החישוב של !7 ; 1 = 0%ג60סעק ,1 %6ם1 (ב4+ ; 7 =>1 ; 1=1) מ0ס+ 7 =* ססטבסעס נעיין בשלושת הביטוייס של משפט זסז: בביטוי הראשון אתחלנו את משתנה בקרת הלולאה; בביטוי השני השווינו אותו לערך הגבול 7; ובביטוי השלישי קידמנו את ו. אפילו בדוגמה פשוטה זו ניתן לראות את היתרון בקומפקטיות והקריאות של הלולאה. ניתן לצמצס את הקטע הקודם עוד יותר: ; 0000%סעס ,1 6ם1 1058 )1 > 1, 20006 = 1 ; 1 >> 7 ; 22000056 *= 1++( ; הכרנו כאן שני גורמיס חדשיס: א. האופרטור ",יי (פסיק) - מאפשר לבצע מספר פעולות עוקבות ולהישאר במסגרת של <ביטוי 1>. למעשה, אין הגבלה על מספר הפסיקים (המגבלה היא נוחות העבודה בלבד) וניתן לבצע מספר רב של פעולות במסגרת האתחול של המשתניס. כאן המקוס להדגיש, שהשימוש באופרטור פסיק ('י,יי) אינו מוגבל ללולאת זסז בלבד, אלא זהו שימוש מקובל במשפטים שונים. ב ההצהרה הריקה - במקרה זה, כל הפעולות הדרושות מתבצעות במסגרת שלושת הביטויים שמופיעים במשפט זסו), ולכן אין צורך ב<הצהרה>. נדגיש עס זאת, שחובה לכתוב 'י;'' (נקודה-פסיק), המסיים את המשפט. השימוש בהגדלה מאוחרת (זחסוח6זסחו 005%) נועד לאפשר קידוס של משתנה הלולאה בתוך פעולת הכפל, מבלי לפגוע בסדר הנכון של הביצוע; דהיינו, ביצוע המכפלה ורק אחר כך הגדלת המונה. שאלה? מה היה ייקורתיי לו הקטע נכתב כך : 6 המדריך השלם לשפת 6 7 קובץ תקליטור: 0200404.6 ו <ת.5%610> 61006ת1א 2 שוב (ס10סט) מפנאת בנ1סט ן סד = ₪ו6 )סופ 72 =5 ₪ ק 6=1 = )| 605 ( 65 6 56 (71) 7 ₪5 65 ) סובופ שיס לב/ גמישותה של לולאת זסו עלולה לגרור אותמו ליניצוק יתר/י של אפשרויותיה, עד כדי כך שהיא לא תהיה קריאה. בדוגמה הקודמת, גרמה הכנסת פעולת הכפל ל- <ביטוי 3> לקושי בקריאות ובהבנת הקטע. אנו ממליצים להשתמש בלולאה זו בתשומת לב דבה ולהימנע מלכלול בתוך הביטויים משפטים שאין להסם קשר ישיר עם משתנה בקרת הלולאה. נקודת ציון? ראוי לציין יישוסם חשוב ועקרוני בלולאת זסז - הביטוי הריק קש זהוח5). כל אחד משלושת הביטויים של משפט זסו יכול להיות ביטוי ריק. לדוגמה, אס <ביטוי 1> ריק, לא תתבצע פעולת האתחול. =.1 סח (ב4+ ; 100=> 1 ;) ע0ס1 ; (1 ," ם %6 : 18 1 עס מטסתתט ")61ת1צס אס <ביטוי 3> ריק, לא תתבצע פעולת העדכון במסגרת הביטויים האלה. אין זה מונע שהעדכון יתבצע בשלב אחר, אך אס לא דאגת לכך, תתקבל במרבית המקרים לולאה אינסופית. בדוגמה הבאה ניתן לראות שפעולת הקידוס נעשתה במסגרת <הצהרה>. ;1 סתך (32 100 5כ> 4 2 1 = 1) 508 ; (++1 ," ם %6 : 18 1 עס מטתתט מטחץ")+>ת1עס מקרה מיוחד הוא, כאשר <ביטוי 2> ריק. כתוצאה נקבל לולאה אינסופית, מכיון שתנאי העצירה אינו קייס. פרק 4: משפטי בקרה בשפת 6 7 נכתוב עתה תוכנית, הקולטת תוויס מן המקלדת ומציגה אותס על המסך. לדוגמה: וו קובץ תקליטור: 0₪00405.6 *****/ <ת.5%6010> 161066 <ת.10מתסס> 1610866 (ס1סט) מ1את ב1סט 8 ו ; ()08₪602 = 0 ה ל (6) פושוטופ מכיון ש<ביטוי 2> חסר, נקבל לולאה אינסופית. כדי להפסיקה עלינו להקיש 6+!|שס. קינון משפטי זס1 ניתן לקנן 650ח) מספר רמות של משפטי זס), וו בתוך זו, כמו בדוגמה הבאה: ( ב ש2) 0 משפט/בלוק) ( ב סה | משפט/בלוק ] משפט/בלוק... ] הדבר דומה לסיבוב מחוגי השעון. משפט זסז העליון מייצג את השעות, והתחתון - את הדקות. לדוגמה, להצגת מהלך יום, שבו 24 שעות, 60 דקות בשעה נכתוב את התוכנית הבאה: 2 6ם1 1- מייצג את מחוג השעות (++1 ,1>24 ;10:)1=0 ך- מייצג את מחוג הדקות (++ך ;1>660 ;10:)=0 שיס לב/ לא מקובל לקנן יותר מאשר שלוש רמות (הסיבה היא אנושית ולא +מחשבית"). 8 המדריך השלם לשפת 6 משפטי 0ד60, שעאודא60, 4-ה עד כה למדנו כיצד להשתמש בלולאות השונות. אך כאשר נכנסנו כבר לגוף הלולאה - האס יינגזריי עלינו להישאר בה ולבצעה עד שתנאי העצירה יתקיים: שפת 6 מאפשרת לבצע חלק מגוף הלולאה, או לצאת ממנה גם כאשר תנאי הסיום לא התמלא עדיין. קיימיס לצורך ה שלושה משפטים, אשר נלמד להלן. משפט == חם השימוש במשפט זה הוא הנפו ביותר, ומשמעותו - הפסק. כאשר במהלך ביצוע התוכנית נגיע למשפט 68%זפ, הוא יגרום ליציאה מתוך משפט הבקרה שבו הוא נמצא ולהפסקת הלולאה. טווח ההשפעה שלו הוא משפט הבקרה האחרון, אשר בתוכו הוא נמצא. כאשר בתוכנית יש מספר משפטי בקרה זה בתוך זה, יגרום משפט 68%זס ליציאה ממשפט הבקרה שבו הוא נמצא, אל המשפט המכיל אותו (פרט למשפטי 6).. ללדוגמה, המספר 1 כתנאי של לולאת 6ווחא גורס לכך, שזו תהיה לולאה אינסופית, כי ערכו של 1 תמיד 6טזד. רק משפט 686זפ יוכל לחלצ אותנו מלולאה כזו. ו קובץ תקליטור: 60₪00406.6 *****/ <ת.5%6010> 1061066 <ת.10תסס> 101066 (ס1נסט) מנ1נאת 16ס7 ב (1) 116תש ;()06602 = 0 ( = 0 ה ;268% ] ; ("םיציאה מלולאה אינסופית בעזרת פקודת אתמתם")11תנ1צס מומלא להימנע ממשפט 686ז0, ולצאת מלולאה בצורה מסודרת. משפטי הבקרה המושפעים ממשפט א68זם הינס : 6!וחאו, 6!והש-00, זס+ ו-ח6וצ5. משפט שטאודאס6 לא תמיד נרצה לצאת מהלולאה. לפעמיס נחליט, שבתנאיס מסוימיס נבצע רק חלק ממנה. המשפט ₪6ח1חס6 גורס להפסקת הביצוע של <הצהרה> במקום בו הוא מופיע, ודילוג לתחילת הלולאה לביצוע מהלך נוסף. השימוש במשפט 6טחטחסס נדיר, ולרוב גס מיותר, אבל לפעמים הוא נחוצ. נדגיס שתי דרכים לתכנת לולאה עס המשפט 6טחח0ס6 ובלעדיו. פרק 4: משפטי בקרה בשפת 6 | 99 ((14> א)!) +1 (14 > א) +1 ו ; סגות %1תסס משפט 600 לאלה שמכירים שפות מכונה כמו אסמבלי, או את שפת 84516, לא ייראה משפט וה יוצא דופן, כי הוא מקביל בתפקודו למשפטי טונ ו-6010 בהתאמה. אולס בשפה מבנית ועילית כמו שפת 6, או פסקל, והו משפט שפרט להסבר אודותיו - הס מלהזכירו! משתמשיס ב-8000 כאשר צריך לדלג למקוס מסויס בתוכנית, שמציינים אותו תחילה בתווית (|1806). במקוס שבו רוציס לדלג אל קטע התוכנית המתחיל בתווית זו, יש לכתוב: ;<תווית> 6060 לדוגמה: כ קובץ תקליטור: 0200407.6 *****/ <ת.5%6010> 161066 606 1006 (ס1נסט) מנ1נאת 1סע ו (1) 116תט ; ()תם0660 = 0 ה וז שו 666 ] ; ("םלכאן לא נגיע לעולם !!!")%1ת1עס : פסזאזש ; ("םיציאה מלולאה אינסופית בעזרת הפקודה %2)"6070מתנ1עס / התווית עצמה יכולה להימצא לפני או אחרי משפט 90%0 שמפנה אליה. יש להצמיד לימין התווית סימן נקודתיים (י':'י). שים לב שהמילה ‏ 'יח15א1יי נכתבה כך לשס הבלטה בלבד; ניתן לבחור תווית כלשהי! מהדריס רביס מגביליס את טווחי הדילוג של משפט 8000. על ידי תכנון נכון של מבנה התוכנית והפונקציות השונות תמצא שברוב המקריס אין צורך להשתמש במשפט זה. 0 המדריך השלם לשפת 6 משפט ח6דו/פ בסעיף קודם ראינו כיצד ניתן לממש מבנה רב-אפשרויות בעורת משפט הבקרה המשולב 155=-=1. במקריס שבהם ניתן לשייך כל אפשרות למספר שלם, מציעה שפת 6 משפט בקרה נוח ומצומצם יותר. נניח שברצוננו לבצע פעולות שונות כתלות בקלט מסדרת המשפטים שבתוכנית הבאה. במנגנון ..1! או 11..6156 חיינו מתכנתים ואת כך: / אאא א קובץ תקליטור: 6200408.6 א א <ת.85%610> 06ט610ת1א (ס1נסט) מ1את 1סט ן = פופ כ שו פוסב ; שסא שהםתס ; ("ת:78ץ%6 6מ1חטס1011 6ם6 05 6םס 68585עק 168856ע61)"2תנעס ; ("מ.תץ1+תס6 8 אטספ7107121-5 ס6פַ₪58-צ")%1תנ1עס ( ו - טפש שההומ00ו 65 שו ובופן--ו )ןס 65 ו ; ("מ.6ט1הט סתנ1נעק 8 אשפ-תת7107 סם 6ט1הט סמטסס בַ6ת-ת") ופ שו 5 5 60 כ 0 ו פופו ןסו 6 (;;) 105 | ; ()86%602 = ץ%6 = = היה ן 61 ₪ = ; ("מ628860 א50-ת07ע") 61מ1עס ] ('כת' == שץ6א) 11 6156 ו 1 ו ם-י 5 ונפ ('ג2' == שץ6א) 11 6156 ו == הח וטו ו 1 6 1 סו ו ופ ] ('ע' == ץ6א) 1% 6156 | 1 ₪ = ; ("ת6תמ1%1א6 ,688560 אשפ5-תתלסץ")+>תנ1עס ו / פרק 4: משפטי בקרה בשפת 6 101 לפני שנתכנת דוגמה זו בעזרת מנגנון ח%6ו/ש5, נציג את כללי התחביר שלו: . 0 . 0 . 0 . 0 (<ביטוי>) בג88₪1%60 | <קבו(> 0856 ; <משפ0ט> ; 68%עע <קב|ן(> 0856 ; <משפ9ט> ; 68%עע 6 : 0116ו%6+8 ; <משפ9ט> בתוך <ביטוי> מוגדר משתנה הבקרה שלפיו יתבצע הפיצול. כל אחת ממילות 6356 מלווה בערך קבוע של אותו משתנה בקרה. המשפט א68%פ משמש לסיום קטע הפיצול, ובלעדיו תתבצע גס שארית התוכנית המופיעה אחרי הקטע המתאים. רק אם אנו רוציס למזג קטעים עוקבים, נוותר על משפט וּה. פעולת מיזוג קטעים עוקביס נקראת גלישה. המילה 661801% וקטע התוכנית שאחריה הס בגדר אפשרות (כלומר, אינס חובה). כאשר הס כתובים, יתבצע קטע התוכנית אס ערך המשתנה אינו תואס אף לא אחת מהאפשרויות. שיס לב שהמילה 0618016 אינה חייבת להופיע בסוף משפט ח6וו5, אלא יכולה להופיע בכל מקוס בייתוכויי. תקן הכתיבה של משפט חססטווו5 מחייב התייחסות לברירת המחדל 0080|0). נחזור לדוגמה הקודמת : ו קובץ תקליטור: 60200409.6 *****/ <ת.56010> 161066 <ת.10תסס> 101066 (ס1נסט) מ1את 16ס 1 שת פוב ;ץסא עבםתס ; ("ת:78ץ%6 6םת1חטס1011 6םת6 05 6םס 68558עק 16856ע")61תנעס ; ("מ.תץ1+תס6 8 אספ7107121-5 6פַ58מ-צ")%1תנ1עס ; ("ת.א0פ1-5ת707 01 6ט81₪ט סמפפעטס 6מנעצק-ק")55ם1עס ; ("מ.6ט1הט סתנעק 6 אס0פ5-ת707 60 6ט81ט סמטסס בסת-ת")+>תוטס 12 ( וו 58 ₪ ה וס הפי ו סוד 5 המדריך השלם לשפת 6 (;;) 105 (()ת86%50 = צץ6א%) ב160ש5 ו :'צ' 0886 ₪7 = מש 6581ס ; ("ת628800 א50%-תעסע")+>מ1עס ;268% 8 ל 6 ₪ 51 ה ו6 ₪ 6 -תוסעי סו בת ;268% :'ת' 0886 = הט ספוטו 5 1 6 ₪ 6 - תוס" ) פופו בח 268%; 8 ול 6 = שש 551 ; ("תמ6%1%1 ,658960 אטשפ5-תתעסץ")61םת1נצס ו ; ("65)"061801%ת1עק :6618016 העדה! ראוי להזכיר שוב את חשיבות משפט אהּסזט, כי בלעדיו יתבצעו קטעי תוכנית שאינך מעוניין בהם: כאשר הערך של משתנה הבקרה שווה לקבוע שליד המילה 6856, יתבצעו כל המשפטים שאחריו, זה אחר זה עד סיוס משפט הבקרה. אפשר להפסיק רק באמצעות הוראת 8%סזפ. משפט 708% משמש לייציאתיי מתוך משפט בקרה כלשהו, ופעולתו כאן דומה. את קטע התוכנית הקודם ניתן לקצר, על ידי שימוש סלקטיבי במשפט 686זפ. ו קובץ תקליטור: 6004010.6 *>****/ <ת.5%6010> 01066ם1 <ת.10םמסס> 01066ם1 (סנ1נסט) מנאת 1נסט ו פופו ק = ו שותוב ;ץ6א עהבםתס ; ("ת:78ץ%6 6םת1שטס1011 6םת6 05 6םס 68585עק 16856ע")61םתנעס ; ("ת.תץ1%+תס6 6 אספ5-ת107 ספַה2מע-צ")51ם1טס פרק 4: משפטי בקרה בשפת 6 103 ל( ו ופמט 65 ןופק וט שוחו בפן לי )) ו וו סוס ; ("מ.6ט1הט סתנ1עק 6 אס0פ-ת707 ₪0 6ט81ט סמטסס בסת-ת")+>תוצס ; ("מ.1%א6 6 תע%1תסס ,107-508 ספַהלמע-ם")51ם1עס (28) 5008 | (()ת66%50 = צץ%6) ם160ש5 ן ו = המש 1 ; ("מ688606 אטשפ5-תב72סץ%1)"1מתנ1נצעס ;68%ע2ס :'ת' 0886 50 == הט םשו ₪ לו ופ 6 5 סו וס ו הפ ;268% ול = שש 1 ; ("תמ1%1א6% ,658960 אספ5-ת2ע7סץ1)"7>םנ1נצס ; מ%ו66ע / כפי שניתן לראות, שינינו את סדר המשפטיס והסרנו את אחד ממשפטי א8סזם. כך אנו מנצליס את העובדה שאותו משפט הדפסה מתבצע עבור שני ערכי משתנה הבקרה (/י ו-יק). הרחבה של משפט 55₪ |ם. .תו בשפת 6 קייס מבנה מי*וחד המאפשר לשלב את הפונקציונליות של משפט 656..+! בתוך ביטוי, או כחלק ממנו. משפט וה מאפשר בחירה בין שני ביטוייס על פי ערכו של תנאי מסוים. עס זאת, בניגוד למשפט 1..656, ניתן לשלבו בתוך משפט הצבה, או בתוך ביטוי לוגי. משפט וזה נקרא "משפט הצבה מותנה'' טחסו(חף]55 |החסטוטחס6), או ביטוי מותנה (חסו655זקאם |החסטוחס6). התחביר של המשפט: ; (<ביטוי 2>) : (<ביטוי 1>) ? (<תנאי>) במשפט זה יבוצע <ביטוי 1> אס התנאי מתקיים; <ביטוי 2> יבוצע אם התנאי אינו מתקיים. שים לב, שבניגוד למשפט 6..6566, לא ניתן לבצע קטעי תוכנית בכל אחת מהאפשרויות, אלא רק ביטוי בודד. 4 המדריך השלם לשפת 6 דוגמאות: ; 0 : א / 10000 ? (0 =! א) = 6801%6ע2 ; (0 : 100 ? (0 =! א) ,"םת/%0 = 18טפפת")+6>תנ1עק דוגמת תכנות: ]| אאא אא קובץ תקליטור: 6. 0011 א*א*צ***/ <ת.5%810> 66ט610םת1? (ס1נסט) מנ1את 1ס ו ות 6 7 לב פה ל ל שב תד הל "שש סו שב - כ ( 66 ו 56 1 6 ולי ) פנ סוחו וב סוס + 18 מסססהַעהת6 דוגמאות נבחרות א. לוח הכפל הדוגמה הבאה מציגה את העוצמה והאפשרויות של משפט ז0!. בעזרת שני משפטיס ניתן להדפיס לוח-כפל מ-1 עד 10 (או טווח מספריס אחר כלשהו. שים לב לשינוי הכותרת): ו קובץ תקליטור: 0004012.6 אה*%א*) <ת.55810> 61066ת1א (ס1סט) מנאת נ1סט 52 דוה /* 68002ם 68016 */ וו 606-160 = 6 165-ו פופו ו 5 ו ה | ו ?("פן 26 | 9 | ₪ | ל | 6 | 5 | 4 | 58 [-28 | 2 |אפל) 8 פרק 4: משפטי בקרה בשפת 6 | 105 /* תהעשסעס */ (עצ+ 2 5-10 74 11) 682 7( <% | |766)) פנ שו ונ פוסן ([חפ ק 10 => ₪ 2 )=1‏ 568 0 בי 2 | 7656 פנפותו פופן ( וו פד ןוסוס ] ב. חישוב אינטגרל מסוים ערך האינטגרל המסויס עבור פונקציה כלשהי, הוא השטח שמתחת לאותה פונקציה בין נקודות הקצה. בתרשים 4.6 - והו השטח המקווקו. א 8 4 תרשיס 4.6: חישוב אינטגרק לפניך תוכנית פשוטה שתאפשר לך למצוא ערך של כל אינטגרל בכל דרגת דיוק רצויה, על ידי שינוי הפרמטריסם והפונקציה המחושבת. בדוגמה נתייחס לפונקציה: 5 +.%+ 5א ונחשב אינטגרל בגבולות : 5 עד 2.55, כאשר 0.01 = 6% / א אאא קובץ תקליטור: 62004013.6 *****/ <ת.5%6010> 8161066 (ס1נסט) מנאת 16ס ן 5 51 ו מה 1 במ 1 16 51605 /]* ת%10ה17[הופרתה */ ]> הש ₪ שצמ4 79 0.258 = 10 16 = 1אש ₪ 15 1561 הוספחו */ 240 = 13045 ג /* 0.01=א0 /*‏ ;0.01 = א 646168 2 = 265016 (13006 עס > פשש 6% רוט 6 המדריך השלם לשפת 6 61 (כ-ד1ש 65 19 9 5 = 0 ₪510 = תש 5 518 כ 5 15 1 562 5 ₪ ו ) ו וח סופ / כדי לחשב אינטגרל באזור אחר, עליך לשנות את הגבולות >וחו! וח, אחו! סו, וכדי לשנות את דרגת הדיוק עליך לשנות את א 06|08. תרגילים תשובות בתקליטור: 6461-64617\ת!!ו0ז9ז6ו!6:)6 1 מה יהיו ערכי המשתניס א ו-ז בסיוס התוכנית הבאה: ;--ע = א (6> א) 15 7 = םש ] ;((5< א--) 88 (30=! ע)) 116נבח ] מה יהיו ערכי המשתניס ח ו-ק בסיוס התוכנית הבאה: () מנאת ן ;ת %ם1 ;סק 11086 (ת-- ;ת ;30 = םת ,1.05 = ס) ש0ס1 =* ס ;(0-20 ,"%5 15 ק 0% 106א8ט 6םץל")+6םתנ1עס ] פרק 4: משפטי בקרה בשפת 6 | 107 - 4 .5 108 מה יהיה הפלט של התוכנית הבאה? () מבאת 7% סתפ (ב++ ;10 >1 ;0 = 1) עס" (ר%+ ;7.5.10 ;1 = ך )7‏ 1090 ;(1++ * ך ,"65)"%6>ת1עס מה יהיה הפלט של התוכנית הבאה, עבור הקלט: , 3, א, 6, 5 () מבאת ן ק' ' > 881606 608% ; 1 = חתטת 6ם1 ('6' =! 8561606) 16נ1תט (()ת0660 = 56160%) ם160ח5 | ( 5 < חטם ) +1 'ע' 08886 ; '4' = 561606 ; 268% ; 6 = תגוםת 'א' 0886 ; ( תטם , "%8") 65םתנ1נעס ; 86160% =+ חטם : '0' 0856 ; ( תטם , "%3") 65םנ1עס ; 268% ] ] האס התוכנית הבאה תסתייס! הסבר. () מנאת ן ;חתטם ,1 %6ם1 %2 עמאַם0 2 1108 2 = 116 ; 6- = חטת (ב-- ;5- < 1 ;1=5) 108 , ;1 =+ חתטת (0 < ++1) 116תשט 1% * תטם =+ 1 ] המדריך השלם לשפת 6 .10 .1 .2 .3 כתוב תוכנית הקולטת מספר בן 2 ספרות (בעזרת (0ח9600) ומדפיסה את העצרת שלו (!ח). כתוב תוכנית המדפיסה את שבעת האיברים הראשוניס בסדרת פיבונצ'י המתחילה במספר 3. צכור, כי בסדרת פיבונצ'י: 1-ח8 + ח9 = 1+ח9. לדוגמה: "על 3 2 2 כתוב תוכנית הבודקת אס מספר כלשהו בעל שתי ספרות הוא ראשוני. הבדיקה תיעשה על ידי חלוקת המספר ח בכל המספריס שקטנים ממנו, כדי לראות אס כל החלוקות הסתיימו בשארית. הדפס הודעות מתאימות. הדפס טבלה שתכיל עבור כל מספר מ-0 עד 10 את החזקות הריבועיות והמשולשות שלו. עליך לערוך את הפלט כפי שמוצג בטבלה הבאה: 5 תוויס 4 תוויס כתוב תוכנית המוצאת את השלם הגדול ביותר שריבועו קטן מ-35678. התייחס למגבלות הטיפוס זחו. כתוב תוכנית יעילה בזמן ובכמות המשתנים. הדפס את תוצאת התוכנית בליווי הודעה מתאימה. כתוב פקודת )ו פשוטה, בעלת תנאי יחיד, שתהיה שקולה לפקודה המוצגת כאן: (0 > א) 1% | (2- 6-ץ). 15 ;ץ + א = ת ] 1-6 (1 == א) 15 ;ץ + א = ת בהתייחס לשאלה 10, כתוב תוכנית המחשבת פתרון מקורב של משוואה ריבועית 0 = 6 + 8 + 2א, אשר מקדמיה הם א, 8 ו-6. הדפס את השורשים שקיבלת, בהנחה שהפתרונות ממשיים. כתוב תוכנית המדפיסה 4 מספריס שלמיס בסדר יורד. פרק 4: משפטי בקרה בשפת 6 109 4. כתוב תוכנית הקולטת תו מהמקלדת ומסווגת אותו לאחת הקבוצות הבאות: א. אותיות גדולות ב אותיות קטנות ג. | ספרות ד. סימנים אחריס הדפס עבור כל תו קלט את הסיווג שלו. 5. מה יתבצע בתוכנית הבאה! (ב4+ ;100 > 1 ;0 = ו 6 (5 10 46 ;סטתנסתסס (20 < 1) ;268% 15 ] שבשאלה 15 כדי להימנע מהפקודות 6טחטחס6 קיימיס 4 מספרים קטנים מ-500 בעלי תכונה מיוחדת. אס לוקתים כל ספרה במספר, מעליס אותה בחזקת שלוש ומחבריס את התוצאות, הסכוס יהיה שווה 135 + 53 + 332 = 3 מצא לפחות עוד מספר אחד כזה. עשה זאת באמצעות תוכנית מחשב מתאימה. 6. כיצד תשכתב את התוכנית ו-68%ז? 7. למספר המקורי. לדוגמה: = משימות: ₪ ה ל 9 > , תרגילים 3-1. ₪ 0 המדריך השלם לשפת 6 פרק 5 פונקציות שפת 6 מאפשרת הגדרה נוחה של פונקציות. השימוש בפונקציות מאפשר חלוקה של משימת תכנות גדולה למספר משימות קטנות ועצמאיות. בכך משיגים שתהליך הפיתוח והכתיבה של תוכנית מחשב גדולה יהיה פשוט יותר והדרגתי. כל פונקציה מתכנתיס ובודקים כיחידה עצמאית, ורק לאחר שמשוכנעים שהיא פועלת כראוי, משלביס אותה בתוכנית הכללית. אס לדוגמה, יש לכתוב תוכנית המבצעת הדמייה למחשבון כיס, ואחת הפעולות המבוצעות במחשבון היא העלאה בריבוע, נכתוב, למשל, פונקציה בשם (6זהּ540, שתקבל נתון אחד ותחזיר את תוצאת הריבוע שלו. את הפונקציה הזו ניתן לבדוק בנפרד, כדי לוודא שאכן היא מפיקה את התוצאה הנכונה, מבלי שיהיה צורך לבדוק את התוכנית כולה. רק אחר כך נכלול אותה יחד עס פונקציות אחרות שבדקנו קודס, כדי להרכיב יחד את התוכנית הכוללת. פיתוח הפונקציות יכול להיעשות על ידי מתכנת בודד, או על ידי מספר מתכנתים. ניתן לכלול בתוך תוכנית חדשה פונקציות שנכתבו ונבדקו עבור תוכניות קודמות וביצעו תפקידיס מוגדריס החוזריס על עצמס בתוכניות שונות (כמו לדוגמה חישוב סכוס של סדרת מספרים, או הדפסת כותרת של דוח), וכך נחסוך ומן וטעויות, והעיקר - לא יינמציא את הגלגל מחדשיי. פונקציות קלט/פלט של ספריית המערכת מהוות דוגמה לאפשרות זו, כי הן נכתבו מראש על ידי מתכנת אחר, וניתנות לשימוש הכל. ניתן לפנות לפונקציה מסוימת ממקומות שוניס בתוכנית ולהימנע מן הצורך לשלב את קטע התכנות המגדיר אותה בכל אותם מקומות, וכך ניתן לחסוך ביינפתיי התוכנית. פעמיס רבות התהליך הוא הפוך: במהלך הכתיבה של התוכנית קורה, שקטע תכנות מסויס חוזר על עצמו פעמים אחדות. במרבית הפעמים מומלצ להפוך קטע וה לפונקציה, ולפנות אליה מכל המקומות בתוכנית, כפי הצורך. המשתניס המוגדריס בתוך הפונקציה הס משתנים פרטיים שלה, אשר מוכרים אך ורק בתוכה. לפיכך, יכולים להיות בתוכנית פונקציות אחרות, שקיימים בהן משתנים בעלי שמות והים. בהמשך נלמד על דרכים לעקוף הפרדה זו, כדי לשתף משתנים בין הפונקציות. נציין רק, ששיתוף משתנים חייב להיות יווס במפורש על ידי המתכנת. פרק 5: פונקציות ‏ 111 עצמאות הפונקציות והפרדת המשתנים הן שתי תכונות חשובות לקיוס גמישות השימוש במנגנון הפונקציות, והיכולת להרכיב תוכנית מקטעים שנכתבו על ידי מתכנתים שונים, מבלי שייגרמו שיבושיס כתוצאח מכך. הקישור בין הפונקציה לתוכנית הקוראת לה מתבצע באמצעות סדרת ערכיס הנקראיס בשס הכללי - ארגומנטים, או פרמטרים פורמליים. הערכים המועברים מן התוכנית הקוראת אל הפונקציה בשלב הקריאה לה קרוייס פרמטרים אקטואליים (|6008 5זסזוחהּזהק). הפונקציה מתבצעת ומחזירה בסיומה ערך בודד הקרוי ערך מותזר (8|06/ 60חזונזסח), אשר מהווה את תוצאת הביצוע. לנושא זה נחזור בהמשך. הפנייה אל הפונקציה גורמת להפסקה זמנית במהלך ביצוע התוכנית הקוראת; הבקרה מועברת לפונקציה; ורק לאחר שהפונקציה מסתיימת מוחזרת הבקרה לתוכנית הקוראת, אשר ממשיכה את הביצוע מנקודת ההפסקה. פונקציה אחת יכולה לקרוא לפונקציה נוספת, וכך ליצור שרשרת של קריאות לפונקציות. בכל קריאה כזו מועברת הבקרה לפונקציה הנקראת ומוחזרת בסיומה לפונקציה הקוראת. בתרשים 5.1 ניתן תיאור סכימטי של קריאה לפונקציות בשתי רמות עומק: תדשים 5.1: מהלך הקריאה לפונקציה - קינון קריאות 2 המדריך השלם לשפת 6 הגדרה של פונקציה כל פונקציה מזוהה בתוכנית בשם *יחודי. אורך השס והחוקים החלים עליו זהים לחוקיס החליס על שמות משתנים. הצורה הכללית של הגדרת פונקציה: (<820>טיפוס. . . <8262>טיפוס, <וֶשַעה>טיפוס) <שתהת מתסנססמו?> ָ <גוף הפונקציה> <6וחבּח הסופ6הט+> שס הפונקציה. <3707>...<וָפַז3> רשימה של שמות משתנים המהווים ערכיםס (פרמטריסם) לפונקציה. ערכים אלה קרוייס פרמטרים פורמליים (ו|הוחזס- 5זסוחהזהץ), אשר נשמריס בזיכרון כמשתנים זמניים. הזכרנו קודם, שהתוכנית הקוראת מספקת לפונקציה סדרת ערכים, אשר נקראיס 'פרמטרים אקטואליים'י. סדרת הערכיס האלה מועתקת לתוך הפרמטרים הפורמליים (המשתנים חִפָז4... וָפָז) על פי סדר הופעתם. המשתנים הפורמליים (שתפקידם ייייצוגייי בלבד) מקבלים את ערך הפרמטרים האקטואליים בזמן ריצת התוכנית, ואלה הס הערכים התחלתיים שלהם בעת הקריאה הנוכחית לפונקציה. הערכיס שהתוכנית הקוראת מעבירה לפונקציה יכולים להיות קבועים, משתנים או ביטויים. לאחר העתקת ערכס למשתניס הפורמלייס ניתק הקשר ביניהם, ועיקרון העצמאות של הפונקציה נשמר. שיטת קישור זו, בין התוכנית הקוראת לבין הפונקציה, הינה ''העברה לפי ערך'' (6טו8/ עפ |ו63), אשר הינה התקן בשפת 6. היא נקראת כך, מכיון שמועבוים רק העוכים של הפרמטוים האקטואליים - ולא הכתובת שלהם. הפרמטרים הפורמליים יכולים להיות מטיפוסים שונים, והגדרתם נחשבת חלק מהגדרת הפונקציה. בקריאה לפונקציה עליך להקפיד על מספר פרטים חשובים: א. מספר הפרמטרים האקטואליים צריך להיות והה למספר הפרמטריס הפורמליים. ב אם טיפוס פרמטר פורמלי אינו זהה לטיפוס של הפרמטר האקטואלי המתאים, יבצע מהדר 6 המרה מטיפוס לטיפוס, על פי החוקיס הנהוגיס במשפט ההצבה. ג. | סדר הפרמטריס בקריאה לפונקציה צריך להיות והה לסדר שהוגדר בה. | שים לב/ | מרבית המהדרים הקיימים אינם בודקים אחד או יותר מהפרטים האלה, / שו וטעות בקריאה לפונקציה תתגלה רק בזמן ביצוע התוכנית. ד כאשר פונקציה אינה מקבלת ערך כלשהו, משתמשים בטיפוס הריק (טוסצ) כדי לציין עובדה זו. לדוגמה: (ס1נסט) ת1באת 6ת1 ָ ו פרק 5: פונקציות 113 ערך מוחזר בסיום ביצוע הפונקציה ניתן להעביר לתוכנית הקוראת ערך בודד, המהווה את תוצאת הביצוע של הפונקציה. לערך זה קוראיס ערך מוחזר (6ט|8/ 60חזט6ח). המשפט '(<ערך>)חוטססז'י נועד להחזיר ערך מהפונקציה, כאשר <ערך> יכול להיות קבוע, משתנה, או ביטוי. המשפט חיוטפפיז גורס גם לסיוס מהלך ביצוע הפונקציה וחזרה לתוכנית הקוראת, עס הערך המוחזר. משפט חזטש6ז אינו חייב להיות המשפט האחרון בפונקציה, ואינו חייב להיות היחיד. ניתן לייצאת'י מהפונקציה ממספר מקומות (למשל, במשפט חסוזוווף), אך רצוי שתהיה יציאה אחת בלבד. משפט חיוטפסז 'יריקי' (;חזנש6ז), ללא פרמטר כלשהו, יגרוס לחזרה לתוכנית הקוראת ללא ערך מותזר. אפשר גס לכתוב פונקציות ללא משפט חזזש6ז. במקרה גה תתבצע חזרה בלתי מפורשת, לאחר ביצוע הפקודה האחרונה בפונקציה. כאשר המהדר מגיע לסיוס הפונקציה, הוא יכניס משפט חזרה בתוכנית המתורגמת שהוא מפיק, למרות שמשפט זה אינו נמצא במקור. העדה! קיימים מקריס שבהסם מציינים פרמטר של ערך מוחזר מפונקציה, בשעה שהיא אינה מחזירה ערך כזה. המהדר אינו מודיע על טעות, אך בזמן ריצבת התוכנית יתכנו שיבושים, שכן הערך המוחזר אינו מוגדר. במהדרים מודרניים הפועלים לפי תקן 4/051, יש על כך הודעת מהדר! דוגמאות לפונקציות נביג מספר דוגמאות לתכנות פונקציות באמצעות שעשוע ביימחשבונ'י. נניח שקנינו מחשב, ש יייודעיי לחבר ווגות של מספריס בלבד, ולחשב את הערך השלילי של מספר נתון. באמצעות מנגנון הפונקציות של שפת 6 נוכל לשפר את יכולת המחשב ולאפשר לו לבצע פעולות מתמטיות נוספות: כפל, חילוק וחזקות. לתכנות הפעולות החסרות במחשב נגדיר פונקציות, פרמטרים פורמליים וערכים מוחזריס כנדרש. פונקציית כפל שס: וגרח פרמטרים פורמליים : ₪ נכפל זוה כופל ערך מוחזר: ץוח * ₪6 | זכור שפעולת הכפל לא קיימת במחשבון שלנו 4 המדריך השלם לשפת 6 פונקציית חילוק שס: פרמטרים פורמליים : ערך מוחזר: פונקציית שארית שס: פרמטרים פורמליים : ערך מותזר: 60 מחולק מחלק הערך השלם של החילוק ז6 / 60 מחולק מחלק השארית מפעולת החילוק ז0 / 00 שים לב לנקודות הבאות/ ( א. תכנון הפונקציות נעשה ללא פירוט אופן התכנות שלהן. ההגדרות | -| כוללות רק את "הקליפה החיצוניתיי, הכוללת: שם פונקציה, פרמטריס וערך מוחזר. ב כל פונקציה הינה עצמאית וניתנת לתכנות בכל דרך רצויה. התנאי המחייב היחיד הוא החזרת ערך. ג. | למרות זהות השמות של הפרמטרים הפורמליים בפונקציות 000 ו-()סחחחזז, המשתניס בכל אחת מהן אינם קשורים ביניהם. דרך תכנון זו דומה מאוד לתכנון של פרויקטיס גדולים. באמצעותה ניתן לפשט את תהליך הפיתוח, לקבל ייתמונהיי כוללת, ורק אחר כך להתרכז בביצוע בפועל. פונקציית כפל - ()ז!ח / א אאא מתוך קובץ תקליטור: 006 ו (עת %ם1 ,שת %6ם1) 16גות (1) | (2) ; 768 ווה (3) (=-2 7 5 72 265=9) 0 (4) ;ס + 269 = 268 (5) ; (268) םעו26% (6) ] (7) פרק 5: פונקציות 115 הסבר: א. שורה 1: הגדרה של שם הפונקציה, רשימת הפרמטרים הפורמלייס שלה וטיפוסיהס. 6 ו-זוח הס פרמטרים פורמליים מטיפוס שלם. שורה 3: הגדרה של משתנה עזר 65ז, לצורך חישוב התוצאה. זהו ''משתנה פנימייי של הפונקציה, אשר מוכר אך ורק בתוכה. אס קיים משתנה בעל שסם והה בפונקציה אחרת - לא יחיה ביניהם כל קשר. שורות 5-4: חישוב של תוצאת הכפל באמצעות לולאת זס), שבתוכה מבוצעת פעולת חיבור. בחרנו בלולאה זו כדי לאתחל את המשתנה 65ז בערך 0, ולעדכן את מונה הלולאה, שהוא גס תנאי העצירה שלה. הלולאה מתבצעת כל עוד זוז (הכופל) שונה מ-0 (בפרקיס הקודמים הסברנו מדוע א וגם 0 = ! א הס תנאיס זהים בשפת 6). בכל מהלך של הלולאה מופחת 1 ממונה הלולאה זז ותוצאת החיבור מוגדלת ב-06 (הנכפל). שורה 6: בסיוס הביצוע של הלולאה, כאשר 0=?ח, המשתנה 68ז מכיל את התוצאה. ערך זה מוחזר לתוכנית הקוראת באמצעות הפקודה חזטסטז. תוצאת הפונקציה תהיה נכונה לכל ערך התחלתי של זוח, אשר גדול או שווה אפס. ערך שלילי יגרוס לתוצאה שגויה (בהמשך נראה כיצד אפשר לפתור בעיה זו). לפניך פונקציה המבצעת פעולה זהה, אשר תוכנתה בדרך שונה, ומנצלת אפשרויות נוספות של השפה: (עת %תמ1,בת 6ם16)1גות ן ; 268 %ם1 (; --עת ; 26₪8=0) 10% ; שת =+ 268 ; (265) תעגו6%ץ שים לב לשינויים בלולאה/ א. בדיקת תנאי הסיום שולבה בהקטנת מונה הלולאה. ב הגדלת 65 בערך הנכפל נעשית על ידי משפט הצבה בכתיבה מקוצרת. פונקציית חילוק - ()0ע₪1 / א אאא מתוך קובץ תקליטור: 05016 *****/ ( מ (1) ן (2) ל 6 (3) 6 המדריך השלם לשפת 6 ( 3 7 (660:1) => קש 7 1=ש₪0) 60ח ((ו << (שם כ 600) סו ופה פד ; (1-צץע6) םעגו26% 0 ן6 4 הסבר: א. החלוקה מתבצעת על ידי ייניחושיי התוצאה ובדיקה בפעולת כפל. כדי לנסות את כל הניחושיס האפשריים, בנינו לולאה המגדילה בכל פעס את ערך הניחוש ב-1. ב בפונקציה זו ניצלנו את פונקציית הכפל המחזירה תוצאות כפל של שני מספרים. משפט זו בשורה 5 בודק את הערך המוחזר כנגד התוצאה הרצויה. ג. = אם משפט התנאי מתקיים, הרי שהצלחנו ליינחש'י את המנה (לאחר הפחתת אחד, עקב אופי התנאי). נזכיר רק, שהערך המוחזר הוא הערך השלם של החלוקה. ד שים לב לשימוש בפונקציה (₪16ח (שכבר הגדרנו) בגוף הפונקציה החדשה (00עו6. פונקציית שארית - ()סחוחז ו מתוך קובץ תקליטור: 60501.6 ככ ה | 8 ( 65 > 605 ₪6)) 516 שו 1 ופ = | 66) וסוטו ול 35 60 9% הסבר: א. פונקציית השארית מדגימה היטב את אחד המאפייניס החשוביס בשפת 6. הפונקציה (ולמעשה, הערך המוחזר על ידה) זהה לביטוי, משתנה או קבוע. כתוצאה מכך, ניתן להשתמש בה בכל מקוס בו מותר להשתמש בביטוי או במשתנה, כפי שמוצג בשורה 3. לדוגמה, הפרמטר האקטואלי הנמסר לפונקציה (₪!טחח כנכפל, הוא למעשה התוצאה המוחזרת של הפונקציה (60שו8. מנגנון וה מאפשר להעביר ערכים בין פונקציות ללא צורך בשמירתם במשתנים. ב. | מכיון שהפונקציה ()0ש91 מחזירה את המנה השלמה של פעולת החילוק (00/0), הרי שמכפלתה ב-ז0 תיתן תוצאה קטנה, או שווה ל-00. ההפרש בין המספר המקורי והמכפלה מהווה את שארית החילוק, והוא מוחזר כערך בפקודה חזטשסז. גם פעולת החיסור מדגימה היטב את היכולת לחסר ערך מוחזר של פונקציה, כאילו היה ביטוי, או משתנה. ן שים לב/ הפונקציה עלמעשה, הערך המוחזר על ידה) זהה לביטוי, משתנה או קבוע. כתוצאה מכך, ניתן להשתמש בפונקציה בכל מקום בו מותר - להשתמש בביטוי או במשתנה. פרק 5: פונקציות 117 בתרשיס 5.2 ניתן תיאור סכימטי של מהלך הביצוע לאחר הקריאה לפונקציה ()0חחחז, כאשר המחולק שווה 10 והמחלק שווה 3. ; (3 , 10) סמחתת 0 = 344 *- 3-> = עה ((3, (0)10,3ע1%)641טת-10) םשגו26%+ 4 = צְע62 / 0 < (1%)3,4גטת (1-עץצ>)מתעטססע | 1 ((1%)3,3גות-10) ם2ו26% 9 (268) מעגו66ע ב 9 (10-9) םשגו26% 1 -> תרשים 5.2: מהלך ביצוע של פונקציה עתה בידינו מספר פונקציות ייעודיות כדי לבצע פעולות חישוב במספרים שלמים, ללא שימוש בפקודות כפל וחילוק של המחשב. בתוכנית הבאה נדגיס מספר שימושיס בפונקציות אלו. ,ור מתוך קובץ תקליטור: 805016 **%***/ <ם.5%6010> 7101006 (ס1נסט) מנאת 1ס ן 7 5 97 2 5 שחו = = (9 8 א | ל ₪ 60 ו ו כ א וש |766) ףוסו ובסו 5672 ₪2 52 הר וה הר ה 50 5 00 ₪ 6/0 6 = 56 7 06 רסנפס / לאחר הרצת התוכנית נקבל את הפלט הבא : 0 = 20 * 3 20 / 3 = 6 2 / 3 8 המדריך השלם לשפת 6 חזרה לפונקציית הכפל נחזור לבעיה שהתעוררה בפונקציית הכפל, כאשר ערכו של הכופל זוח בומן הקריאה, הוא שלילי. כוכור, סיוס הלולאה בפונקציה (6!₪ח מותנה בקיוס התנאי --זוח השקול לתנאי 0=!זח. נשתדל לפתור את הבעיה מבלי לפגוע בהגדרה הראשונית של הפונקציה, וכדי שלא נצטרך לשנות את הפונקציות בהן קראנו לפונקציה (שוטח. דרישה זו חשובה ביותר כאשר עוסקיס בתוכניות גדולות ומורכבות. אי עמידה בדרישה גו עלולה לגרוס לשינוייס גדוליס והפסדי ּמן משמעותיים. לפנינו רק דוגמה, אולס במציאות אנו עומדים מדי פעס בפני הצורך לתקן ולעדכן פונקציות שונות שנכתבו. העדה חשובה! הדרישה לשמור על עקביות ואחידות של תנאי ה'כניסה?/ ות*יציאה הינה בעלת משמעות חשובה. נעתיק את הפונקציה (%/₪ח לפונקציית העזר (0)!טוח. היא תשרת את הפונקציה (6!חח, כאשר זו גדול או שווה ל-0 בלבד. הבדיקה שאכן 0=<זוח תהיה באחריות הפונקציה החדשה שנכתוב. לפניך שתי הפונקציות המקיימות את הדרישה לפעול הן במספרים חיובייס והן במספרים שליליים. / אא אא מתוך קובץ תקליטור: 00502.6 א רה | ; 265 ו ( ו 0 ₪60 = 68ע ה ( 8 ₪00 שח ₪ 1) שת (1) )2( | ה ות (3) )4( 6 01 006 5 ( (8 )5( 6 ( (אש₪= ₪ ₪₪1=) 5 (6) (7) פרק 5: פונקציות 119 הסבר: א. הפונקציה (%!₪ח החדשה בודקת בשורה 3 את ערך הכופל זוח. אס הוא חיובי, מופעלת הפונקציה ₪10 (שהיא פונקציה (%!וח הקודמת) והתוצאה שלה מוחזרת על ידי ()|טוח. אס הכופל הוא שלילי, מתבצעת שורה 6 והפונקציה ₪10 מופעלת כאשר זחז מופיע עס סימן שלילי (ההופך את ערכו לחיובי). תוצאת !חח מוחזרת בסימן שלילי, ועל ידי כך קיבלנו את התוצאה הרצויה. שיס לב, שבפונקציה החדשה (16גוח אין צורך במשתנה העזר 65ז, מכיון שמשימת החישוב מוטלת כעת על הפונקציה (!טוח. הפונקציה (שוטוח משמשת כמתווכת בין הפונקציה שקראה לה (ובה רוצים לכפול מספרים חיוביים ושליליים), לבין הפונקציה 0|וח המחייבת קבלת כופל חיובי. הפונקציות הקוראות ל-(0!טח אינן ‏ "יודעות'" על השינוי שחל בה. עבורן, הפונקציה ממשיכה לקבל שני ערכים (כופל ונכפל) ומחזירה את המכפלה שלהס. ההבדל הוא כמובן, בהסרת המגבלה של מספרים חיוביים, אשר הייתה במקרה הראשון. שיס לב לעובדה, שאין קשר בין הכופל וח בפונקציה (%וטח לבין הכופל ]וח בפונקציה 0)!|טוח. כפי שציינו קודסם, בשפת 6 מועבריס הפרמטרים ילפי ערך'י. כאשר (!₪ח מופעלת עס הפרמטר (וח-), הפרמטר הפורמלי שלה זזוח מקבל את הערך הדרוש ובוה מסתיים הקשר בין שתי הפונקציות. הקשר מתחדש כדי לקבל את הערך המותחזר. זווח ו-00 הס משתניס שוניס ועצמאיים, אשר מוכריס רק בפונקציה שבה הוצהרו. בתרשים 5.3 מוצגת דוגמת מכפלה של מספר שלילי. (3-,16)15גוע 5 = בת 8 3- = עת 0 > את ((15,3) 1גות-) ם2עט26% --> 45- --- 4 268 = 5 (268) םשגו26% כ .1-20 תרשיםס 5.3: מכפלה של מספר שלילי 0 המדריך השלם לשפת 6 ערכים מוחזרים וטיפוסיהם עד עתה עסקנו בפונקציות המחזירות ערכים מטיפוס שלס טח), ועל כן הן נקראות פונקציות מטיפוס שלם. כאשר מגדירים פונקציה חדשה ולא מציינים דבר (כלומר, איזה ערך יוחזר), היא תוכר כפונקציה מטיפוס שלם, שכן ווהי ברירת המחדל 0|ט6)8ס חסטק0) בשפת 6. אפשר להגדיר פונקציה מטיפוס אחר, לדוגמה שהיא תחזיר ערך מסוג 08%, ז8ח6 או 408!6, אך לשס כך יש להשתמש במשפט הגדרה, כמפורט להלן: <הגדרת טיפוסי הערכים>) <שם הפונקציה> <טיפוס הפונקציה> (<רשימת ערכים פורמליים> <הגדרת משתנים פנימיים> <גוף הפונקציה> העדה? הטיפוס של הפונקציה הינו למעשה הטיפוס של הערך המוחזר שלה. יש בכך היגיון רב, מכיון שערך זה ישובץ אחר כך במקום שבו הופיעה הקריאה לפונקציה. כאשר פונקציה או תוכנית קוראיס לפונקציה מטיפוס שלם, עליהס להכריז על טיפוס הפונקציה. למרות שהטיפוס השלם הוא ברירת מחדל עבור פונקציות, יש צורך להכריו על פונקציות כאלו. ההכרוה על שימוש בפונקציה נראית כך: ; () <שם הפונקציה> <טיפוס הפונקציה> צמד הסוגריים הריקים מימין מציינים למהדר שזוהי הכרוה על טיפוס של פונקציה, ולא הכרוה על משתנה נוסף. דוגמה נרחיב את היכולת של ייהמחשב המחבריי שבנינו קודם, ונאפשר לו לכפול מספריס ממשיים (6080) במספריס שלמים טחו). לשם כך נגדיר את הפונקציה הבאה: ל מתוך קובץ תקליטור: 00503.6 8 <ת.5%6810> 61066ת1א ה בת (1) | (2) 7 1108 (3) פרק 5: פונקציות ‏ 121 )4( ₪68 )056-020 2 6=- 7 ( ל == 55 (5) ; (268) םש1ו26% (6) ] (7) הסבר: א. הפונקציה (6!טח+ מוגדרת בשורה 1 כטיפוס 808%. בשורה 6 מותזר הערך 65ז, שהוא משתנה מטיפוס ז8סו. ב נוכיר שוב, שלמרות זהות השמות זח של הכופלים בפונקציות (6|טח ו-(פוטחז), אין כל קשר ביניהם, וכל אחד מהם מוכר בפונקציה בה הוגדר בלבד. ג. = המגבלה המוכרת על ערך הכופל (0 =< זוז) קיימת גס כאן, ועלינו לנקוט בצעדיס דומיס לאלה שהשתמשנו בהס קודם עבור הפונקציה (שוטוח. ד כדי להשתמש בפונקציה (160ח1 יש להכריז עליה בהתאס בתוכנית הקוראת. לפניך דוגמה של תוכנית הקוראת ל-(50/טח1: ו מתוך קובץ תקליטור: 00503.6 ב (סנסט) מנאת 1סט ן וה קש 52 16 ה 16 = 7; 2 6 ה ונפ סו ו = ו ה 8 קש 2 ו 1 6 הסמ ₪ ₪ 66 ₪ 8 6 6 / לאחר הרצת התוכנית יתקבל הפלט הבא : 6 1595 3 286105 בס1ש 012016 8 01 086םת166תט00ת12ס 6םתך7 בדוגמאות הקודמות השתמשנו במילים ייהגדרה'' ו'יהכרזה"' להגדרת טיפוס של פונקציה ולהכרזת טיפוס של פונקציה. יש הבדל משמעותי בין המילים האלו והוא קייס גס לגבי משתנים, כפי שנפרט בהמשך. הגדרת טיפוס הפונקציה הגדרת טיפוס הפונקציה היא חלק מהגדרות הפונקציה כולה, ומשמשת בתהליך יצירתה של פונקציה חדשה. 2 ההמדריך השלם לשפת 6 ההכרזה על טיפוס הפונקציה ההכרזה יימודיעהיי למהדר, שפונקציה מסוימת מחזירה ערך מטיפוס כלשהו. בהתאם להכרזה זו המהדר יודע כיצד להתייחס לקריאה לפונקציה זו ולערכים המוחזרים ממנה. הערה אם לא מגדירים טיפוס לפונקציה, ברירת המחדל של 6 היא הטיפוס זחו. נקודת ציון? הצורך במנגנון ההכרזה נמובע מעצמאותן של הפונקציות. למעשה, אין צורך שפונקציה הקוראת לפונקציה כלשהי תימצא באותו קובץ מקור. הקשר היחיד בין הפונקציות מתבצע באמצעות מנגנון ההכרזות. יש פונקציות שאינןו מחזירות ערך. מטרת פונקציות אלו היא לבצע פעילות מסוימת ואיו משמעות לערך מוחזר. הטיפוס של פונקציות אלו מוגדר לכן כ-6וס. כלומר, ללא ערך מוחזר. דוגמה: (ע %ת1 ,8 %6ם1)טת1םת6%ת50 60 ב1סט ָ ו פונקציות ספריה מהדר ++6/6 8080 כמו גס מהדרי 6 אחרים, מספק מערכת פונקציות ספריה חזקה במיוחד אשר השקעה בלימוד שלהן כדאית. אין צורך להמציא את הגלגל מחדש, וכך ניתן לחסוך זמן יקר. בסביבת העבודה 3.1 0ח8!ז80 יש 38 ספריות ובהן כ-800 פונקציות העוסקות בנושאים שוניס ומגווניס כגון טיפול בקלט/פלט, מחרווות, מסך, קבצים ועוד. אשר עוזרים מאוד במלאכת התכנות. בגרסאות מתקדמות יותר - נוספו פונקציות בנושאים שוניס. יתרון בולט בשימוש בפונקציות הוא אפשרות השימוש החטר. ניתן להשתמש בפונקציה שוב ושוב על פי הצורך, הן גם אמינות למדי, כי נבדקו והופעלו על ידי מתכנתים רביס טרס שהוכנסו לספריה. הפונקציות השונות מרוכזות על פי תפקידיהס השונים, ניתן לראות בקובצי הכותר - 5 68060 (כל הקבציס המסתיימים ב-8.*) את הכרזות הפונקציות השונות, הגדרות טיפוס הפונקציה, פרמטריס נדרשים, הגדרות מקרו, קבועיס שוניס ועוד. שיס לב/ מיתן לראות וללמוד את קוד המקור של הפונקציות שכתוב ב- 6, ולעיתים שר בשילוב עם //455000, כפי שנמצא במערכת הפיתוח. פרק 5: פונקציות 123 שיס לב/ כדי להשתמש בפונקציות מספריה מסוימת, צריך לכלול את הספריה הזו .י. בתוכנית. נעשה זאת בעזרת הפקודה הבאה, שנכתוב בראש התוכנית עשויות להחיות מספר פקודות כאלה): <םת. שם הספריה> 6₪6ם610םת4+1 לדוגמ : <ת.5%010> 610066ם1+ <ת.81106> 61066ת1+ תרגילים תשובות בתקליטור: קבציסם 6561-6569ח!!6:)61186)8701 1. מהו פלט ההדפסה של התוכנית הבאה: ;1 ,ל ,א 188 2 = א 72 = ץצ (ב4+ ;3 > 1 ;0 = 1) 08ס+ ;(ץ ,א) 01םט1 = א ;(ץ ,א ,"ם/ %6 ,%0 : ץ 6ם8 א 0% 65ט1הט")61ת1צק (ץצ ,א) 1סתגת ;ץ ,א %ם1 ן ;2 =* א ;א =+ ץ ;(ץ ,א ,"ם/ %4 ,%50: ץ,א<- -61םתט61)"1ת1עס ; (צ*א) מע6%0ע2 4 המדריך השלם לשפת 6 2 הכן טבלה המתארת את טווחי ההכרה של המשתניס בתוכנית הבאה (אין תשובה בתקליטור). 7 ,1א 6ם1 1 11086 /* תהעססעק 6ם6 */ (ס1נסט) מ1נאת 1סע ן 2 08 568610 7 עשת 7 1.1 2 סת1 8ם10 (ץצ,א) 61תג ;א שם1 ?ץע תס () 62תגו ;א 6ם1 7 11086 33 מה הוא פלט ההדפסה של התוכנית הבאה: 2 11086 (11 108%+)62םג5 6ם1 ן ; ( 0:1 ?(51>0.5)) תעט66ץ (11% 1108%) 1סתט1 11086 ?בת = יה (1) 116תט ;ק (1%6+)602ם50 = 1 ; (8562%)116 = 116 ] ק (516) תע60ס6ץ? ] פרק 5: פונקציות 125 () מבאת ָ 37 מתג ; 51% 11086 ( 4+1+ ; 14 >-1 ; 11.15 = 116 , 12 = 1 ) ש0ס+ ל 15 76 .)-‏ 61 ,מ ה -י-")י61ת1עס ; (+ ,"ם %1-1") %1מ1עס ] 4 כתוב תוכנית המדפיסה פירמידת מספרים עבור ספרות נתונות. לדוגמה, פירמידת המספריס עבור הספרה 5 היא: 1 11 11 11 1 151 1 יש להגדיר פונקציה (60חו! %חוזס, המקבלת 2 ערכים: מספר השורה (השורה העליונה היא מספר 1) וערך נוסף, שיוגדר על ידך. הפונקציה תדפיס שורת מספרים בסדר עולה ויורד, כך שהמספר המרכזי יהיה מספר השורה. עליך לדאוג גם לסידור השורות זו מעל זו. שלב בתוכנית את הפונקציה (חו 06% הקולטת ערך שלם. 5 שנה את התוכנית שבשאלה 4, כך שכאשר תבקש להדפיס מספר הגדול מ-9, היא תפסיק, ולא תדפיס את השורה כולה. כתוב את הפונקציה (60ח1 96%. 6. נוסחת הקירוב לחישוב *6 חיא : כתוב תוכנית המחשבת את הקירוב ל-6% עבור אוג מספריס ממשייס א, 6₪05. הקירוב יחושב בעזרת הטור האלגברי המוצג למעלה. האיבר האחרון שיחושב בסכוס יקייס את היחס: וא 8 > -- !םת התוכנית תדפיס את הנתוניס הבאיס: א, 605, ואת *6 כפי שיחושב על ידה ואת מספר האיבריס בטור שיחושב. 6 המדריך השלם לשפת 6 התכונה הבאה ידועה כנכונה עבור מספריס שלמיס בתחוס 1 עד 100: מכל מספר א ניתן לפרוש סדרה ...2 וא כמפורט להלן: א = וא אם ,א זוגי 2 א = גא אם א אי זוגי 1 אם בא זוגי 2 = 41גא אם .א אי זוגי 1 3 האיבר האחרון בסדרה יהיה המספר 1. לדוגמה: 1ן)" 11,34,17,52,26,13,400 ,,,,11 יש לכתוב תוכנית, אשר תבצע את הפעולות הבאות : א. תקרא נתון, שהוא מספר שלם. ב תבדוק אס הנתון הינו בתחוס 100-1 (ותדפיס הודעת שגיאה אס לא בתחוס). ג. = תדפיס את הסידרה שנפרשה מהמספר. ד. | תדפיס את האיבר הגדול ביותר בסדרה שנפרשה. הר את התוכנית עם הנתוניס הבאים: 10, 5-, 99, 102, 0. הערה: שיס לב שהשורה הראשונה בתוכנית 6567 צריכה להיות ;חזטח ,0=א שחו כתוב תוכנית שתקבל מספרים שלמים ותדפיס אותם. לידם היא תשרטט קו, שיורכב מהתו שערך 45611 שלו הוא 233 (חזס) ואורכו יחסי לערך המספר. את הקו תשרטט פונקציה שתקבל כערך את המספר (אורכו של הקו יהיה יחסי למספר הנתון). בראש התדפיס יופיע קו עס שנתות. התוכנית תעצור כאשר יתקבל המספר 0 (אפס). דוגמה: ל .שר שי א שה על הר כתוב פונקציה (ח ,ח165)0קס6 המדפיסה את התו זח6 מספר פעמיס (ח). השתמש בפונקציה זו בתוכנית המדפיסה משולש שווה שוקייס המורכב מתו כלשהו שנקלט. התוכנית תקלוט גם את מספר התוויםס שירכיבו את בסיס המשולש, תבדוק שאורך הבסיס יהיה מספר אי-זוגי ותדפיס הודעת שגיאה, אס תקבל מספר אחר. לדוגמה, עבור הקלט 8 ו-5 נקבל: ה ג ה ת ה ג ג ה בת פרק 5: פונקציות 127 0. יש לכתוב תוכנית שתחשב את הערך של הביטויים הלוגיים הנתוניס בקלט. (איו תשובה בתקליטור). הקלט יהיה למשל, כבדוגמה הבאה: ;(11 > 6) 68 (2 =< 5)- ;(2 < 0) || (11 == 11) התוכנית תקלוט את הביטויים, תדפיס ביטוי מתורגם ואת ערכו הלוגי: אמת (6טח) או שקר (8156]). המפתח לביטויי היחס : עאת 66 8 לדוגמה, עבור הביטוי הראשון נקבל את הפלט הבא : כאת (6>11) < (11 17 6) ;7 < [פ1תץ ₪1 הגדר את הפונקציות הבאות: 1. ()0א6 96% - קולטת ביטוי לוגי, מדפיסה את תרגומו ומחזירה את ערכו הלוגי. 2 (650] %חוזס - מקבלת ערך לוגי ומדפיסה ₪6 או 18/56 בהתאס. 3 000 96% - קולטת את הפעולה הלוגית, מדפיסה את התרגוס ומחזירה ערך שישמש לחישוב התוצאה הסופית. פונקציה וו תשמש גס להפסקת הקלט. 3" משימות: -, תרגילים 4 - 5. 8 המדריך השלם לשפת 6 מערכים ומחרוזות עד כה הכרנו והשתמשנו במשתניס ובקבועיס בדידיס. כדי להשתמש בערכו של משתנה היינו חייביס לפנות אליו בשמו המפורש. מאופיו של המחשב והמהירות בה מתבצעות הפעולות השונות ב-600, נגזרת היכולת לבצע סריקה מהירה על פני אזורי ויכרון גדוליס ולהתייחס לערכיהס של משתנים רבים בו-זמנית. נניח לדוגמה, שבאזור חיוג מסויס יש אלפיים מנויי טלפון וברצוננו לבדוק אס מספר טלפון מסוים שייך לאזור ה. לשסם כך עלינו לבצע בתוכנית השוואה כנגד אלפייס משתנים שוניס. התוכנית המתקבלת במקרה זה לא היתה שימושית בגלל גודלה וחוסר הגמישות שלה. אס נוסיף עוד עשרת אלפים מנוייס חדשים, או משתנים, ניווכח שאין זה פתרון נכון. השימוש בטכניקה של מערכים (פעְפזזה) מאפשר לבצע את המשימה בדרך יעילה, פשוטה וקצרה מבחינת התכנות. עושיס ואת בעזרת הגדרה של רצף משתנים, הקרוייס איברים (0ח6!606) ובעזרת לולאת תכנות פשוטה היימעבירהיי אותנו על פניהס בעת ביצוע העיבוד. ניתן לראות את המערך כטבלה המכילה עמודה אחת בלבד, או שורה אחת של משתנים, ועל-כן נכנה אותה מערך חד-מימד*ל (6600/). כאשר טבלה זו תכיל עמודות נוספות נקבל מערך דו-מימדי, וכך גם ניתן ליצור מערך רב-מימדי (טוטח הזזה הסופח6וחו0). מחרוזת (פַהו5₪) כוללת רצף של תווים, בדומה למערך חד-מימדי הכולל משתנים. לעיתים מקובל לכנות גס מערך חד-מימדי בשם ץאזזה. בפרק וה נכיר מערך חד-מימדי, מחרוזת ומערכים רב-מימדיים ונלמד כיצד לאתחל מערכים אלה. גס נכיר חלק מהפונקציות הסטנדרטיות הכלולות בספריית המערכת המטפלות במחרוזות. הגדרת מערך ואתחולו כאשר עוסקים בהגדרת מערך, עלינו להפריד בין שני מקרים: המערך הסופי והמערך חסר המימדים. בניגוד לשפות עיליות אחרות, מאפשרת שפת 6 להגדיר מערך ללא מימדיס ולהקצות עבורו מקוס בזיכרון, על-פי מספר ערכי האתחול שלו. הגדרת מערך: ; [<מספר איברים>] <שם מערך> <טיפוס> פרק 6: מערכים ומחרוזות 129 או: ; [<ערכי אתחול>+ = <שם מערך> <טיפוס> להלן מספר הגדרות קבילות למערכים: ;[10]ץהעעת סםת1 6עסם5 ;[95 ,7 ,5 ,1100 = []7ץ8228 %6ם1 מהו מערך? זיכרוו המחשב הוא סדרתי במבנהו. ויכרון מחשב בגודל של 256,000 בתים הוא למעשה סדרה רצופה בת 256,000 איבריס בני בית אחד. בתוך סדרה זו ניתן להגדיר סדרה רציפה קטנה יותר. המערך (שְפזזה) הינו רצף של משתנים, שגודלס נקבע לפי הטיפוס שלהסם. ניקח לדוגמה מערך בשם עְגּזזגּ שוח בן 10 איברים, אשר נגדיר אותו כך: ;[10]ץ3228 צֶת 6ת1 בפועל נקבל בזיכרון רצף של 10 משתנים מטיפוס שלס, אשר כל אחד מהם הוא בן 2 בתיס, וביחד יידרשו למערך 20 בתים. אס תחילת המערך היא בכתובת 3000, נקבל את תמונת הזיכרון הבאה: 1 000 003 שני 302 5 04 07 06 וו הווה 7 6 9 8 שס המערך עְפּזזהּ ץח הוא קבוע, וערכו (כתובתו) בדוגמה זו - 3000 (ערך זה תמיד יהיה כתובתו של האיבר הראשון במערך). מיקומו של המערך וערכו של שס המערך נקבעיס בומן תהליך ההידור. העובדה שאיברי המערך נמצאיס בזיכרון ברציפות, מאפשרת פנייה נוחה באמצעות אינדקס (א06ח1). איברי המערך זו הס : [9]ץצ4228 צת . [1] צ8228 צעת ,[0]ץ8228 צת שיס לב/ הפנייה לאיברים היא *%מבסיס אפסי, כלומר האינדקס של האיבר / הראשון הוא 0. טעות נפוצה היא לציין את האיבר הראשון בסימן הסידורי 1. כאשר פונים לאיבר מסוים במערך מתורגמת פנייה זו על ידי המהדר למספר פעולות קצרות ויעילות שתפקידן להגיע לכתובת המתאימה בזיכרון. הבסיס לפעולות אלו היא כתובת תחילת המערך, וגודל כל איבר בו. 0 המדריך השלם לשפת 6 פנייה ל-[4]ץ8778 שוח תתורגס על ידי המהדר לביטוי מהצורה הבאה (שיס לב שוהו האיבר החמישי במערך): (גודל הטיפוסם %ת1) * 4 + (כתובת עסמה עֶַת) לפי הדוגמה הקודמת תהיה הכתובת של האיבר החמישי: 8 = 2 * 4 + 3000 הקצאת המקוס באיכרון נעשית על פי טיפוס המערך ומימדיו. בשפת 6 מוכריס טיפוסי המערכיס כטיפוסי המשתנים. לדוגמה: ;[22] 1666628 מַהַת0 ;[818]100ט 660281םת1 11086 ; [15]ץ8228 16ס 4016 במקרה של המערך 606675!, יוקצו 22 בתים בזיכרון, מכיון שגודל הטיפוס תו הוא בית אחד בלבד. בהנחה שגודל הטיפוס 0096 הוא 8 בתים, יהיה המערך שפזזה פוט בן 120 בתים. אתחול של מערך חד-מימדי כדי לאתחל מערך ניתן להשתמש בלולאה או בהצבה מרוכזת. אתחולו של המערך []ץזזהּ שוח בערך אפס יכול להתבצע על ידי התוכנית הבאה: (ס1סט) תג1נאת 16ס ו 2 ,[10]ץ58ע צֶת 6ת1 (ב4+ ; 10 10>6 ;0 = 1) עש0ס+ 12 צץ8228 עת מערך זה אפשר לאתחל בדרך שונה: (ס1סט) תנ1את 16סע | 0202 )] [10]ץ3228 צֶת 6ת1 את המערך 5ז606! נאתחל באופן הבא : (ס1נסט) מנאת 1סע ן [16%%6628]26 ע8ת0 ו ₪ ט 6 4 4 4 . בהנחה שהמערך 5ז6%6! נמצא בזיכרון בכתובת 4000 מתקבלת תמונת הזיכרון הבאה: 4000 4001 4002 4003... 5 1010 הר ך ך ך [ך ] ן 76 6 ] ה 4011 4012. ... 4020 4021. 1026 הערכיס שבתאיס הס ערכי 5611 של האותיות פיי עד ''2יי. פרק 6: מערכים ומחרוזות ‏ 131 דוגמאות למערכים חד-מימדיים הזכרנו קודס את הבעיה של אחסנה וטיפול באלפיים מספרי טלפון השייכים לאזור חיוג מסוים. נניח, שעלינו לאפשר את ביצוע הפעולות הבאות: הכנסת מספר חדש וחיפוש האס קייס. לשס כך נגדיר שתי פונקציות : א. שס: ()%ז56ח1 פרמטר: וחטח מטיפוס פחסו. ערך מוחזר: אין ב. שסם: (6%15%0 פרמטר: וחטח מטיפוס פחסו. ערך מוחזר: 11 אס המספר קייס מטיפוס תו 0- אחרת 0 עתה נכתוב את התוכנית. תחילה נגדיר את המערך, אחר-כך את הפונקציות (0זז56חו ו-(15%0א6, ולבסוף נכתוב את התוכנית הראשית ((0חופחח. בתוכנית זו נחפש מספר מבוקש ונציין אם קייס, או לא. לסיכוס נצייןו את מספר האיבריס הקיימיס בפועל במערך. 7 קובץ תקליטור: 60200601.6 ב <ם.5%010> 66ט610מ1+ ; [7]2000ץ8228 6תסםתקש ‏ 1058 (1) ;0=סת6עעטס ‏ ס6סםב (2) (מתטם 86םת10) 562%ת1 ב1סט (3) )4( ָ (2000>%ם6ע0022) 1% (5) תמש = ||תרקרש תובש ]| שו | ומוס (6) )7( |56 ל( | >וב10 ₪ם )ופ סוס = 1522 טס םשהש 0 וט סובופ (8) )9( ] (תטם 86ם15%)10א6 89ם6 "| (10) )11( ₪ | הח (12) = |[ 1 || שו בופופ 5 ( םהופר 15 2 (1=0 )| ו (13) 1 ; (%ת6ע1>0022) םמעט260 (14) )15( ₪ 2 ההמדריך השלם לשפת 6 , (ס1נסט) פנ1נאת 1סע (16) )17( | ;241051=תטם 0 שם10 (18) 3 רב כ ות (19) 33050 6 ד (20) 210051 ב (21) מ ב ית (22) ( (תטם ק)18%6א6%) 15 (23) (תטם ס,"ם1565אס 48 עססתטם 6שמסםס 6םעל")65תנ1נעס (28) )25( 0-6 % 0068 %16 עפסתטםת סמסםסק 6םע")65תנ1נעס (26) ; (תטם ס,"ם15%65א6 8 פע6סתטםת 6תסםתס 0% ש6מגוסתת")65ת1עס (27) 68 7 וו )28( ] הסבר: א. בשורות 2-1 הגדרנו מערך גלובלי []/9זז8 6חסחק שתכולתו המקסימלית אלפיים מספרי טלפון. הגדרנו גם משתנה זח6זזו6 המורה את מספר התא הפנוי הבא במערך זה. הפונקציה (56%0ח1 בודקת את הערך הנוכחי של מספר התא הפנוי (שורה 65. אס ערך זה קטן מאלפיים, ניתן להכניס את המספר טח ולקדס את ערכו של המשתנה. אחרת, תודפס הודעת אזהרה וערכו של וחטח יאבד. בפונקציה (6%15% השתמשנו בקיצוריס שלמדנו כבר. בשורה 13 מבוצעת לולאת זס?), שתנאי עצירתה הוא שילוב של התנאיס טחשזזט6 > 1) וגס אי-שוויון של המספר הנוכתי והמספר הרצוי. האינדקס הזמני 1 מקודס בפעולת +ח6וח6ז6ח[ 6זק בתוך לולאת זס). הביטוי המוחזר בשורה 14 הוא למעשה ביטוי בוליאני. אס לא הגענו למקוס התא החופשי, התנאי (וחטח =! [1]ץ8זז8 6חסחכ) לא מתקיים, כי האינדקס 1 עדיין קטן מהגבול +ח6זזטס. כלומר, מתקיים ההיפך: חתטת == [1]ץ878 6חסחם, והערך המוחזר (6ט) אכן מתאיס למקרה. שיס לב לפשטות וליעילות הפונקציות ()+ז6פחו ו-(15%0א6. בעזרת משפט בודד אפשר לבצע סריקה מהירה על פני אוסף גדול מאוד של ערכיס הנמצאיס במערך אחד. תוצאת הריצה של התוכנית חו8וח תהיה: 8 2410511 עססמתטת 6תסםס 6םך 4 18 פמ6מתגות סמסםס 05 שגוסחת פרק 6: מערכים ומחרוזות 133 למערכת שיצרנו יש חיסרון בולט. כדי לתת תשובה לשאלת (1%0א6 עלינו לסרוק את כל המערך. זהו תהליך שגוזל ומן רב כאשר כמות המספרים גדולה. האס ניתן לקצר תהליך זה! נמיין תחילה את המערך הקיים []ץא8זז8 6חסחק, כדי שנוכל לאתר את מספר הטלפון המבוקש בהסתמך על עובדה זו. לדוגמה, המערך הלא ממוין מכיל שלושה מספרי טלפון: 2 = [8228]0 6תסםמס 8 = [1]צ8228 6תסםמס 1 = [8228]2 6תסםתס לאחר המיון נקבל במערך הממוין את הערך הקטן ביותר באיבר הראשון ואת הערך הגבוה ביותר באיבר האחרון. 8 = [82287]0 6תסתק 1 = [1]צ8228 6תסםתס 2 = [8228]2 6תסםמס כעת אנו רוציס לבדוק האס המספר 235065 קיים במערך. נפנה למערך הממוין ונראה שהאיבר הראשון מכיל את המספר 226878. הו מספר קטן מהמבוקש, ולכן נמשיך בחיפוש. האיבר הבא מכיל את המספר 241051, שהוא גדול מהמבוקש ולכן אין טעם להמשיך בחיפוש. תשובת (6%055 במקרה זה תהיה 8566. ניתן לראות, שעבור מערך שגודלו אלפי איברים, מנגנון חיפוש זה יעיל בהרבה מהמנגנון הקודם, אם כי גם אותו ניתן לשפר. נדגיס כעת שיטת מיון פשוטה ונרחיב אחר-כך את התוכנית, כדי שתכניס מספר חדש ותחפש מספר מבוקש. ו קובץ תקליטור: 6200602.6 ו <ת.5%6010> 610066ם%1 ; [7]2000ץ8228 6תסםתקש 8ם0ס1 (1) 02=%ם6עעטס ‏ סם1 (2) (ס1סט) 6ע50% בנ1בסט (3) (4) ;קתפ 108 659 7 0 | של (6) ה (7) ((++ ; 6מפעעטס>ך ;1+1=ך,[7]1ץ8228 6םסםס=קת56) 102 (8) (ק0ת7][[>56ץ3228 6תסםס) 15 (9) | | ו פופ | 1 || ופ המופ (10) ;קת56=[[] ץ8228 6תסמס (11) ; [1]ץ8228 6תסםס=קת66 (12) ] (13) ] (14) 4 המדריך השלם לשפת 6 ב הר סוטמ (15) )16( ₪ ((2/000(0 םהו 2טו6))]- פב (17) ו (18) מש = | רש תוומו (19) )20( 555 )21( 1 )22( 0-56 ל "וו ₪פו1!6 6 פן ₪6 = >ושפהטו 0065ב םה" 050 םוטו וס (23) ₪ (24) (תטםת 8ם10) 18%6א 6‏ ע8ם6 | (25) | (26) 77 ₪ (27) ; (תום>[1] ץצ8228 6מסםק) 68 (6ם220ט1>0) ;1=0) 105 (28) 5 קר == | 5 || ונפו ₪ מוסומופן)) הופנטו וו (29) ] (30) (10נסט)תנ1את ספנבסט ‏ (31) (32) 20 1 (33) ה (34) ו רכיה (35) 5/0255 ) פד (36) ; (%6)241051ע8562םת1 (37) ות (38) ( (תטם ק)18%6א6%) 15 (39) ; (תחטםת סש,"םת18%65א6% %10 עסכתטם סתסמס 6םל")65מ1מס (40) 56 (41) % 0068 %16 עפסתטםת סמסםס 6םע")65תנ1נעס (42) ; (תטם ס,"ם15%5א6 ; (פףמסעעטס,"מ%06 18 פסתסמק +0 עפסמתטא")%1ם1צס (43) ה ו (44) ( |[ 5 ]| ₪ סופ 7 75116 סוב פופ (45) ] (46) פרק 6: מערכים ומחרוזות 135 הסבר: א. . בשיטת המיון המוצגת בשורות 14-3 דואגיס בכל שלב ושלב, שבתחילתו של תת-המערך יהיה האיבר הקטן ביותר מבין הנותרים. תת-מערך הוא המערך המתחיל באיבר 1 ומסתיים באיבר )ח6זזטש. מכיוו שערכו ההתחלתי של 1 הוא אפס - מתבצעת סריקה על פני כל המערך. בכל סיוס שלב, האיבר הראשון הוא הקטן ביותר בחלק המערך עליו מבוצעת הסריקה. אס נתקליס באיבר קטן יותר מהאיבר שבתחילת תת-המערך (התנאי הבוליאני בשורה 9 מתקייס) תתבצענה השורות 12-10 ובמסגרתן יוחלפו שני האיבריס באמצעות המשתנה סוח6). שתי לולאות זס) (בשורות 7 ו-8) מאפשרות סריקה מהירה ויעילה על פני תת-מערכים שאורכם הולך וקטן עד לסיוס המיון. דיון נוסף בנושא המיון והסבריס מפורטיס לשיטות המיון תמצא לאחר הסבר זה, בתרגיליס שבסוף הפרק ובנספח המשימות. לפונקציה (6%0פ5חו נוספה הקריאה לפונקצית המיון (שורה 20). כאשר עוסקיס במערך גדול, ווהי ירידה ניכרת ביעילות תהליך ההכנסה של מספר נוסף, מכיון שתהליך המיון מסובך וארוך. אנו מניחיס כאן, שפעולות החיפוש (15%א6 רבות פי כמה מפעולות הכנסה, ומשוס כך גדלה היעילות הכוללת של המערכת שבנינו. בשורה 28 ניתן להבחין שתנאי העצירה בפונקציה (15%א6 השתנה וכעת נצא מלולאת זס!, כאשר המספר שבדקנו גדול או שווה למספר המבוקש. כזכור, כאשר המערך אינו ממוין, יש לסרוק עד קצה המערך כדי להחליט שאכן המספר אינו קיים. הביטוי הבוליאני בשורה 29 השתנה בהתאםס לתנאיס שעלינו לבדוק. בתרשיס 6.1 מוצגת דוגמה של הפעלת (507% כאשר המערך [8778 שחסחס מכיל שלושה איברים: 8 = [7]0ץ8228 6תסםס 2 = [1][ץ8228 6מסםס 6 = [2]ץ8228 6תסתס התהליך המוצג בתרשים ינו מהלך מיון במחשב, אשר בסיומו יכיל המערך [)ץ8זזה 6חסחק את האיברים : 2, 6 ו-8 כשהם ממוינים בסדר עולה. האיבר זח6זזט6 מכיל את הערך 3. 6 המדריך השלם לשפת 6 4* 60002‏ 2=קת66 ל , 73 12 43 23 0 . 16 66 צּ 62 צּ 16 + 2= 8 * 6 = כ 6 ₪ *ן 8 *- 3 12 43 23 צ צ 16 66 צּ %08> צּ 6גוע 6 ש 8228,]1[=6 6תסמקש 8 82287 6תסםמסש 6=ת6> | > [0]ץ8228 6תסםס =[1]ץ8228 6תסםתס 62 ו 1 = 1 13 תרשיס 6.1: מיון שלושה איברים במערך טא 00 ₪ טא סס 5 34 א 5 35 א פרק 6: מערכים ומחרוזות 137 מחרוזות המחרוזת (8חו5) הינה מערך חד-מימדי של תוויס (איברים מטיפוס זפּח6). כלל מקובל בשפת 6 הוא, שמחרוזת מסתיימת באיבר שערכו אפס (ווטא). השימוש במחרוזות בשפת 6 מקובל מאוד, וחלק ניכר מפעולות קלט/פלט של תוכנית נעשה באמצעותן. בסעיף זה נדון במשפחה של מחרוזות, אשר מוגדרות באמצעות מערכים בעלי מימד סופי. כלומר, שידוע לנו מראש מספר האיבריס שלהן. נכיר חלק מפונקציות הספריה הסטנדרטיות של שפת 6 העוסקות במחרוזות ונשתמש בהן בתוכניות. מטרתנו להגיע לבסוף לפונקציות היעילות והמצומצמות ביותר שמאפשרים הכלים שבידינו. כיצד נגדיר מחרוזת? ; [מספר תווים] <שם> ש8ת6 תחילה עלינו לדעת מהו האורך המקסימלי הדרוש לנו, למשל: ;[0]20ם8521 ,[6]20ם0ס 58608 מַַת0 בדוגמה זו הגדרנו שתי מחרוזות, שכל אחת מהן מכילה עד 20 תוויס. האורך שלהן בפועל ייקבע על ידי האתחול או ההצבה. מכיון שכאן לא בוצע אתחול, אורך המחרוזות האלו אינו מוגדר. אס ההגדרה הזו גלובלית, אורכן המעשי הוא אפס, שכן אתחול מערך גלובלי הוא אפס בכל האיברים, וכפי שציינו, 'יאפסיי מסייס מחרוזת. נגדיר מחרוזת נוספת ונאתחל אותה על ידי הצבה של ערכים כלשהםס: ;"0ם1ע56 8 ת8 1" = [58]30ת עַַַםס יש נציין מספר עובדות/ 5 "| - > ניתן לאתחל מערך תוויס בצורה שונה מאתחול מערך רגיק. > את המחרוזת הזו אפשר לאתחל גם באופן הבא 9פי מציין תו רוות): 9-07 907 יקי 77 117 = [30] 8פ - שבח --‏ שס * ה-0 המסיים מחרוזת, אימו מופיע בצורה מפורשת בשיטת האתחול הראשונה, מכיון שהמהדר דואג לסיימה באפס. > מיתן לאתחל מחרוזת ללא ציון גודלה. גודלה ייקבע על פי אורכה בפועק. ; "סםת1ע8][="5%פת ע8ם0 כיצד ניתן לאתחל את המחרוזות הקודמות: 6חס א5 ו-99ח50! לפניך קטע תוכנית המעתיק את ערך המחרוזת פַפוח לשתיהן : 2י שת .כ1) (1++ ;[6]1פת ;0 = 1) 08ס+ (2) 2 = [6]1ם1ע856 = [6]1םס 805 (3) 2 = [06]1ם8%21 = [6]1ם0ס 562 (4) 8 המדריך השלם לשפת 6 הסבר: א. ב. ג. ההעתקה מבוצעת איבר אחר איבר עד שמגיעיס ל-0 המסיים. מכיוו שהערך המסיים הוא אפס, הרי שהביטוי [59]1וח יקבל ערך שקר 8156)) כאשר 1 יגיע אליו. בשורה (4) אנו דואגיס לסייסם את 6חס 57 ו-פַחו5 גס כן ב-0. פונקציה כללית המשמשת להעתקת מחרוזת אחת לאחרת נקראת 5060/0. לדוגמה: ו מתוך קובץ תקליטור: 6000603.6 ו <ת.5%6010> 610066ם%1 )1( 8%ם0 ,[] 682066 מהּתס) צץססעספ‎ 500206][( )2( ָ )3( שת‎ 5% )4( 560 )1=0 2 65 || = 5604266 ]1 | 2 5-1( )5( ] הסבר:‎ א. בשורה 1 מוגדריס הפרמטריםס הפורמלייםס 06ז500 ו-66פָז9?. הגדרנו אותס‎ כמערכים חסרי מימד ולמעשה הכרזנו עליהס כמערכים. המהדר יתייחס להצהרה גו במהלך תרגוס הפונקציה, מתוך הנחה שהמערכיםס עצמס (האקטואליים) וגודלס, מוגדריס כמערכים בתוכנית הקוראת. יכולת הכרזה וזו היא שמקנה לפונקציה את תכונת הכלליות. בדומה לקטע התוכנית הקודס מבוצעת ההעתקה איבר אחר איבר. לביטוי ההצבה שבמשפט זס) יש ערך, כפי שלמדנו בפרק העוסק במבנה התוכנית. ערך וה הוא ערך האיבר [6]1סזטס5. כאשר נגיע לתו !וח נעצור, כיון שאו ערך הביטוי יחיה שקר. שיס לב, שבשיטה זו ה-|ח מועתק קודס ל-%91960 ומסיים אותו - ורק לאחר מכן משוערך התנאי הגורס לסיוס לולאת זס). פונקציות ספריה לטיפול במחרוזות כעת נכיר מספר פונקציות מחרוזות שימושיות נוספות הנכללות בספריה הסטנדרטית של שפת 6, ובהמשך נציג אותן בליווי דוגמאות. ("5%)ה6!ז5% | מקבלת מחרוזת 5 ומחוירה ערך שלם, המציין את אורך המחרוות על-פי המקוס של התו המסיים אותה. פרק 6: מערכים ומחרוזות 139 (5%7610)5%71,5%72 | מקבלת שתי מחרוזות 571 ו-502 ומשווה ביניהן באופן לקסיקוגרפי. היא מחזירה: > ערך שלילי אס 501 קטנה מ-572. %> אפס אם 501 שווה ל-572. > ערך חיובי אס 541 גדולה מ-502 (5+768%)5%1,5472 | מקבלת שתי מחרוזות 51 ו-5₪2 ומצרפת את 52 לסופה של 1 (5)ץ60ז5% העתקת המחרוזת 5 למחרוזת 6, אותה הכרנו בדוגמה הקודמת. הפונקציה ()ח6!ז)5 / אאא מתוך קובץ תקליטור: 00603.6 א | ו (1) | (2) | שמת (3) ו (4) המ הפ בסה (5) ] (6) הסבר: א. הפונקציה (0ח516 עוברת באופן סדרתי על איברי המחרוזת ומגדילה תוך כדי כך את ערך המונה ו. ב העצירה מתבצעת כאשר מגיעים לערך 0 (₪9156) שהוא ה-0 המסיים (ווטח). דוגמה: ;"0ם1ע56 8 ת8 1" = [58]40ת עַַַםס ; ((050) ם16ע5%2 ,"ת%6 18 56 01 מ68ם16 6םע7")+6>תנ1צק 3 18 588 05 בם086ם16 6םמך הפלט הוא: 0 המדריך השלם לשפת 6 הפונקציה ()קוחסז+5 / א אאא מתוך קובץ תקליטור: 00603.6ם60 **+***/ ב ה ה כ (1) | (2) ?17| שת1 (3) 6 [1]1ע85% 68 [8%22]1 == [8%21]1 ; 1=0) 108 (4) ( 7 ( |[ 4 | = | 5 || 1 55 וטו 6 (65 ] (6) הסבר: א. השוואה לקסיקוגרפית היא השוואה של ערכי התוויס במחרוזות לפי סדר ה-אייב. בייצוג 85011 - ההשוואה בין התו יי לבין התו ישי היא למעשה השוואה בין הערך 65 לבין הערך 67 המייצגיס את התוויסם בהתאמה. ב. | אס המחרוזות אינן שוות, התנאי הראשון בשורה 4 לא יתקיים ולולאת זס! תיפסק. ג. | אם אחת המחרוזות קצרה מהשנייה, תיפסק לולאת זס) בעקבות התנאיס הנוספיס. הלולאה תיפסק מאותה סיבה גס כאשר המחרוזות והות ונגיע בשתיהן ל-||טוח המסיים. ד בשורה 5 מוחזר ההפרש בין התוויס של שתי המחרוזות במקוס בו נעצרה לולאת ה-ז6. במקרה של שוויון, מגיעים בשתיהן ל-!|₪ח המסיים ולכן, התוצאה המוחורת תהיה 0 (כלומר שוויון). בדוק בעצמך את נכונות התוצאה במקריס האחרים עד שתשתכנע, שאכן הפונקציה פועלת כהלכה. דוגמאות הרצה: המחרוזות : ,"18 6ה" ,"תה 1" ,"מ%0 <= %8/ %98 6ע8%קת1)"00>תו1ועס ;(("15 שת" ,"תה 1") סתסע5% התוצאה: 1 <= 18 86 / כ ת8 1 6ש8קחסס המחרוזות : ; ("%'ם60 1" ,"תה 1")קתס562 התוצאה: 3 <= 6'ם60 1 / כ ת8 1 6עאקתסס פרק 6: מערכים ומחרוזות ‏ 141 המחרוצות : ; (8ם8621 , 58ת) קתס562 התוצאה: בהנחה שהמערך []8חו5₪ מכיל עותק מדויק של []59ח. 0 <= 0ם1ע58% 8 ח8 1 / 8ם1ע56 תה 1 000826 8 הפונקציה ()+5)/689 / + *%+% קובץ תקליטור: 00603.6 ו ( ]| ו 6 ; | || פופ 65 66 (1) ְ (2) 12 שתג (3) ( ו (4) ו (5) / (7) הסבר: א. בשורה 4 עובריס באופן סדרתי על פני המחרוזת הראשונה במטרה להגיע לסופה. ב בשורה 5 מועתק תוכן המחרוזת 52, איבר אחר איבר, החל מסופה של 501 ואילך. ג. = כדי שהפעלת הפונקציה 56860 לא תגרוס לפגיעה בערכי זיכרון או משתנים, יש לדאוג לכך שהמערך 591 יהיה גדול דיו, כדי להכיל את המחרוזת המשולבת. דוגמה: ;("!!! סטם ת8 1 חסם ," ,טפת) 562086 ; (טפת,"ם %8 : ()585%208% 01 26801%")+6םתנ1צק !|!! סחף ת8 1 חסם ,06םת1ע56 8 תה 1 : ()08%ע5%2 01 2690116 השימוש ב-+6075 כאשר מגדירים מערך ואין כל כוונה לשנות את תוכנו, אפשר להגדירו כ-50ח60, כך שלא נוכל לשנותו גם אס נרצה, כי המהדר לא יאפשר לנו לעשות זאת. נשכתב את הפונקציה 5600 שראינו בפיסקה קודמת, ונגדיר את מערכי המחרוזות כ-600%. הפונקציה אינה אמורה לשנות את ערכס של מערכי המחרוזות, ולכן הגדרת 0% היא אבטחה נוספת שלא נשנה מערכים אלה בלי לשים לב. 2 ההמדריך השלם לשפת 6 ([]8%622 8%9ם0 ספתסס ,[]8621 8%2ם0 ספתסס) קתסע56 ָ 12 3% (1+4 ;[8%22]1 68 [8%21]1 66 [8%22]1 == [8%21]1 ;1=0) ע0ס5 ;([8%22]1 - [5%21]1) תמעו6%ת מערכים רב-מימדיים עד כה דנו במערכים חד-מימדיים. כדי לייצג טבלאות, מטריצות או מבניס מורכביס דרושה גם אפשרות להגדיר ולהשתמש במערכים בעלי יותר ממימד אחד. שפת 6 מאפשרת הגדרת מערכיס כאלה, ללא כל הגבלה על מספר המימדים. אתחול וניצול של מערכים רב-מימדיים הינן פעולות מורכבות יותר מאשר במערכים חד-מימדיים ועל-כן דורשות תשומת לב רבה יותר מצד המשתמש. כדי להימנע מטעויות ולפשט פעולות אלו, נביא להלן מספר כללים בסיסייסם חשוביס. בהגדרת מערך חד-מימדי, יש לציין את המספר המקסימלי של האיברים במערך. הגדרת מערך רב-מימדי נעשית, באופן אנלוגי, על ידי ציון הגודל המקסימלי של כל מימד. טבלה למשל, הינה מערך דו-מימדי שיש בו שורות ועמודות ומגדיריס אותה באמצעות שני פרמטרים, הראשון עבור השורות, והשני - עבור העמודות. לדוגמה, נגדיר טבלה של שלמיס בעלת 10 שורות, אשר בכל אחת מהן 4 עמודות : ;[68016]10[]4 6ם1 קוביה הינה דוגמה למערך תלת-מימדי, אשר אפשר להציג אותה כערימת שכבות דו-מימדיות המונחות זו על גבי זו, כאשר המימד השלישי מציין את הגובה. נגדיר עתה מערך רב-מימדי, אשר אפשר לראותו כמקבף של טבלאות הצמודות זו לזו. ייעובייי שכבת הטבלאות הדו-מימדיות יוצר את המימד השלישי. בדוגמה זו, ייהטבלהיי היא בת 5 שורות ו-100 עמודות ובת 8 שכבות. ;[100[]5] [68]8םת1 05 אסס 6ת1 כדי להדפיס את האיבר שנמצא בעמודה 28, בשורה 3 שבטבלה השנייה, נרשום: ;([68]1[]27[]2ם1 0% אסס ,"ם65)"%6םת1צס / זכור! / האיבר הראשון במערך מסומן ב-0 (אפס/. ברוב המקרים אין צורך במימדים נוספים, אף כי שפת 6 מאפשרת זאת. הטיפול בגופים כאלה אנלוגי לטיפול במערכים עד 3 מימדים. נציג למשל, את מהלך הטיפול של שפת 6 במערך רב-מימדי: פרק 6: מערכים ומחרוזות 143 א. המימד החשוב ביותר הוא המימד האחרון, שהוא הימני ביותר. כאשר מגדיריס מערך דו-מימדי כדוגמת ;[68016]10[]4 %ם1 שומר המהדר 40 מקומות עוקבים בזיכרון עבור המספרים השלמיס ומצביע עליהס באמצעות הקבוע 58!6. החלוקה הפנימית שעל פיה תבוצענה פעולות האתחול ומציאת ערך כלשהו של איבר במערך נקבעת על פי המימד השני, 4. באופן דמיוני ניתן לחלק את השורה הארוכה של 40 מקומות בזיכרון ל-10 קבוצות קטנות ועוקבות בנות 4 איבריס כל אחת. הסכימה הבאה מתארת את המקרה הזה בהנחה שערך 19016 הוא 8000. 8 8076 8074 8072 1006 4 8002 8000 19 38 7 6 3 2 1 0 קבוצה עשירית קבוצה ראשונה [9] 68016 [0] 680168 ב. אתחול המערך הרב-מימדי יתבצע בהתאס לחלוקה לקבוצות. כל תת-קבוצה תאותחל בנפרד בתוך סוגריים מסולסלים, כפי שמוצג בדוגמה הבאה: ]‏ = [6816]10[]4 6ם1 ,[1,2,3,4) ,[15,6,7,8 )33,34,35,36[, )37,38,39,40[, 1] אם לא נציין אחת מתת-הקבוצות לא יאותחלו איברי אותה קבוצה. מאופי המבנה של המערך נגזרת עובדה נוספת - אפשר לאתחל מערך גם בדרך זו. ;[68216]10[]4[=)1,2,3,4,5,6...37,38,39,40 שם1 דוגמה נוספת לאתחול איברי מערך רב-מימדי: ) = [₪8216]10[]4 6םמ1 ,[1,2) ,ן3,4) [19,20) מו פעולה זו תאתחל רק את הזוג הראשון בכל תת-קבוצה. נציג עתה שתי דוגמאות לשימוש במערכיס דו-מימדייסם לאתחול של לוח-הכפל והדפסת כפולה מתוכו. 4 המדריך השלם לשפת 6 א. ב. אתחול מהיר של מערך דו-מימדי, עבור לוח הכפל: הפונקציה (6וחו. הדפסה של מכפלה על פי לוח הכפל: הפונקציה 0ץוק₪וטחח. 1 קובץ תקליטור: 0200604.6 ו <ת.5%810> 61066ת1א ו 101 | ₪6 - ה ה ן 9 52 ו (ג%5 2 610 2 1=0) 608 ([פץ 7 71610 82 0=) 568 "5 = [4] [2 | 568 ( ו שחו כ 1 סונוב )51ב סו וב תתה ן (2<=10תטם || 1<=10תטם) +1 ו 16 6 ₪6 = 0002 ) סובופ 8 ((1=) 1 ] 0-6 ; ( [ 2תגום] [ נתטם ] 50182 ) םעגו6%: / (ס1נסט) מנאת 1ס ו רות הוה 1 ₪ 1-=2ה=₪1) ₪8 7 55258 קש ₪ ופות ומ )ו סו בפהשן ; (2מ6 ,621 ,"1)"%6%6םת508 ,"מ%0 = %6 * %6 :1%טפ6תת")51ת1עס 2 ( ( 2 1 ןסו וו 2 1 פרק 6: מערכים ומחרוזות 145 מיון וחיפוש במערכים מיון (זס5) היא פעולה של סידור איברים במערך על פי מפתח (שְ6א). מפתח יכול להיות סדר א-ב של שמות כמו בספר טלפונים, או מספרי תעודת והות של תלמידים, למשל. מיון לפי תאריך או חתך בין תאריכים, כדי לבדוק את מצב חשבון הבנק ביוס מסויס או בחודש מסוים. מפתח יכול להיות כל ערך שהוא. לדוגמה, א-ב, תאריך, תעודת זהות, מספר קטלוגי, סכוס כסף, גודל של קוב ועוד. מכאן אנו למדיס שמיון הינו תהליך נחוץ ביותר: מה שנקרא י'לעשות סדר בבלגן"". 1 שיס לב/ / ניתן למיין טבלה על פי מספר מפתחות. לדוגמה, מיון מחלקות בחברה לפי מפתח מספרי מחלקות, ומיון שמות העובדים על פי מפתת א-ב או תעודת זהות בכל מחלקה ומחלקה. -. מדוע צריך חיפוש? נניח שיש לנו ספר טלפונים ממוחשב המכיל אלפי מנויים ואנו רוציס למצוא שס המתחיל באות 'בי. קודמת לאות יבי היא האות 'אי. בהנחה שיש לנו 1,000 מנוייס באות 'א'י נצטרך לדפדף (לעבור) על כל המנוייס באות 'יא' ולהמשיך לדפדף באות 'בי כדי למצוא את שס המנוי שלנו. דבר זה מייגע, גוזל המון ומן ומיותר. מנגנוו חיפוש אשר ניתן לתכנת ולמצוא שס בלחיצת כפתור לפי מפתח א-ב. למשל, כאשר נקיש את האות יבי, בחלון קלט, מנגנוו החיפוש יביא אותנו למנוי הראשון אשר שמו או שס משפחתו מתחיל באות יבי. חסכנו בכך דפדוף על גבי 1,000 שמות מנוייס המתחיליס באות 'אי. כאשר נקיש בחלון הקלט את שמו המלא של המנוי נקבל באופן מיידי את פרטיו או את פרטי כל המנוייס העוניס לשס דומה. ומן הדפדוף יתקרב ל-0, וזמן החיפוש תלוי ביעילות התוכנית. מדוגמה זו ניתן ללמוד שמנגנון חיפוש הינו חלק חיוני ביותר בכל מערכת. עתה נבחן כמה שיטות למיון וחיפוש. מיון בועות מטרת מיון בועות היא לסדר את המספריס הנתוניס במערך חד-מימדי באופן שבו נוכל לקרוא אותו מהספרה הקטנה ביותר עד לספרה הגדולה ביותר או ההיפך - מהספרה הגדולה ביותר עד לספרה הקטנה ביותר. 6 המדריך השלם לשפת 6 כיצד יתבצע מיון זה? עובריס בלולאה על המערך ומשוויס בין שני מספריס עוקביס. כאשר הראשון גדול מהשני מחליפיס ביניהם. מכאן, שהמספר הקטן עלה שלב אחד למעלה, והגדול ירד שלב אחד למטה. בסוף הסיבוב הראשון נמצא בתא האחרון במערך את המספר הגדול ביותר במערך ונמצא גס שכלל המספרים הקטניס עלו בשלב אחד למעלה. האס המערך כבר ממוין! עדיין לא. לכן יידרש עוד סיבוב, אך הפעם נגיע אל התא האחד לפני האחרון מפני שבתא האחרון נמצא כבר המספר הגדול ביותר, בסיבוב הבא אחריו נגיע עד לתא האחרון פחות 2, מפני שבתא שלפני אחרון נמצא המספר שלפני הגדול ביותר. מכאן נובע, שמספר הסיבוביס יהיה כמספר התאיס במערך. ניתן לקצר את מספר הסיבוביס, אס נבדוק בכל סיבוב אס אכן החלפנו תא. אם לא החלפנו תא, קרוב לוודאי שהמערך כבר ממוין ואין צורך בסיבובי החלפה נוספים. נקודת ציון/ ניתן לראות, שהמספרים הקטנים הולכים (צפיםיי כלפי מעלה בדומה לבועות במים. מכאן נובע שם שיטת המיון הזו, ''מיון בועות'י. בתוכנית הבאה נלמד כיצד למיין מערך בשיטת מיון בועות. ו קובץ תקליטור : 00605.6 ל <ת.585%6010> 010066ם1 <ת.10ם0סס> 01066ם1 10 אשת 6ם6651 2( 6 ;| ] 06 שוחנ ) 5055 6 ( | || שו שווו) שופ םונפ |פנפט */ (10סט) מ1את %6ם1 | 5; ( 8 80 70 00 60 10 92 602 52 50 1 = [אםם] 0 סור 61 66 6 ( ; ("םמיון מערך בשיטת מיון בועות") ?+%מ1נצס ; ("מהמערך לפני מיון") +%םנעס (( 5155 רוש סמו וב פנוסן /* תהליך המיון בשיטת "מיון בועות" */ חר 0 אפ 6 | 7 ₪ = 6 5086 פרק 6: מערכים ומחרוזות 147 */ סריקת המערך עד לתא אחד לפני אחרון. מכיון, שבסוף הסיבוב הראשון בתא האחרון "ישב" המספר הגדול ביותר בסיבוב הבא אנו נסרוק את המערך עד לתא שני לפני התא אשר בו מאוחסן המספר הגדול ביותר. כיון שאנו בודקים מספרים בזוגות, יש לסרוק את המערך תמיד תא אחד פחות התא האחרון הרצני. ( 2 (1 ₪ [7) = %א₪ 6 ₪ 7 ₪ = 652 ₪68 2(8 60600980 ( [1 + 1|עשא <> [0022]2 4 5ב ; ("םהמערך אחרי מיון") +%ם1נצס ( 5 ו רפוו פס ; ("ץ6א צטם8 6588ק")+6ת1עס ; () 9660 ; (0) םמ2ו26% ו /* תהליך החלפת המספרים במערך */ = ;[1] עע8 = סתם 3 8 || ו = | ]0 = [1 >< 2| קה ב /* הדפסה סדרתית של המערך */ ות קל קה ופ 9 7 ₪ = 61 ₪ 2( |[ ]| שופ 6 = |[ ]| 6 ו סור סופן תוצאות ריצת התוכנית: מיון מערך בשיטת מיון בועות המערך לפני מיון 3 = [2]0ע8 ו ת) ₪ 0 3 8% 8% 8% 8% 8 המדריך השלם לשפת 6 6 = [5]פע8 8 = [2]6ע8 7 = [5]7ע8 2 = [8220]8 4 = [82%]9 המערך אחרי מיון 0 = [2]0ע82 1 = [1]צע8 2 = [2]2ע82 3 = [2]3ע8 4 = [4]%ע82 5 = [5]ת82 6 = [6]פע8 7 = [5]7ע8 8 = [2]8ע82 9 = [9]עע8 | שים לב/ / בשיטת מיון זו אין צורך להגדיר מערך נוסף, אלא תא עזר להחלפה בין תאי מערך. פעולה זו חוסכת מקום רב בזיכרון. מיון בועות של מחרוזות נעשה באותה שיטה, אלא שכאן השוואה בין שני אלמנטיס במערך נעשית על ידי פונקציית הספריה 56 המחזירה : (ערך קטן מ-0) | 0>+- תוחזר מילה ב' < מילה א' | בסדר לקסיקוגרפי (א-ב) 0 + תוחזר מילה ב' = מילה אי 0<+ תוחזר מילה בי > מילה אי החלפה בין שני אלמנטים (הפונקציה 580) תתבצע בעזרת פונקציית הספריה ץ50760. מיון מחרוזות בעזרת מערך אינדקסים בתהליך מיון זה דרושה טבלה נוספת, טבלת אינדקסים, אשר אורכה כמספר השורות בטבלת המחרוזות. טבלה זו מכילה לפני המיון את האינדקסיס של טבלת המחרוזות - כלומר, החל מ-0 ועד למספר השורות בסדר רצ (לדוגמה, אס יש 5 שורות האינדקסים יהיו: 0, 1, 2, 3, 64). שיטת המיון היא יימיון בועות'י, אך כאן ההבדל הוא שהאינדקסים של טבלת המחרוזות נמצאיס בטבלת אינדקסים נפרדת, והם מצביעים על סדר המוון. ההשוואות בין המחרוזות מתבצעות על פי האינדקסיס שבטבלת האינדקסים. דוגמה טבלת האינדקסים ;[2,3,4, 108 6ם1 טבלת המחרוזות ;[5] 565 שהםת0 פרק 6: מערכים ומחרוזות 149 הפניה לטבלת המחרוזות תהיה: ;ק [[0]א18] 568 תא [0]א0ו מכיל את המספר 0 ולכן נתייחס למחרוזת הראשונה בטבלה ז50. נקודת ציון/ -מר המיון מתבצע אך ורק בשימוי סדר המספרים בטבלת האינדקסים אסו ועל פי סדר זה יוצגו המחרוזות. העדרה? כיון שאיננו משניס דבר בטבלת המחרוזות, ניתן להגדירה כקבוע : [8%%]5 ע8םת0ס 005856 לפנינו תוכנית דוגמה המדגימה מיון מחרוזות בעזרת מערך אינדקסיס. יו קובץ תקליטור: 0₪00606.6 ב <ת.5%010> 61806םת%1 <ם.10תסס> 61066מ1+ <ת.6ת1ע56> 61066ם1; 5 אס0ת 6ת%0011 2 ( שו - | ]65 )605 6 ( | | 05 פופו כ |[ | 0 ]| פופ 5 סובופ פס 2 ₪ 2 2 ₪ = ₪ ₪ 0 ₪ ₪ 8 ₪ (10סט) תנאת 1% | /* כיוון שאיננו מתכוונים לשנות את מערך המחרחות נגדירו כמערך, מחרחות קבוע */ ] = [30] [אסת] 89628 0282 0056 ,"11נהת-₪ 66מ65סם1 צת" 7 11 6 סו השפ סל ופוס ₪ ₪ 5060 שש ₪ שפף ₪ הל ;ו מערך המכיל אינדקס של מילה במערך, אשר צריכה לבוא* / /* במקום האינדקס [אינדקס]55%655 כשמערך המילים ממוין 8 ₪ 92 ₪22 12 ₪0 4 = | 165 פופ 352 ₪ 0 המדריך השלם לשפת 6 (( 6 65 6 ; ("םמיון מחרוזות בעזרת מערך אינדקסים") %1מ1עס ; ("מהמערך לפני מיון") +%ם נצס ו /* תהליך המיון בשיטת "מיון בועות" */ (4+5 ₪002 > ₪ 08 = 612 שש ן (שפך 1 ל 2) = 9 6 ך ₪07 = 67 95ב יש לשים לב שהאינדקסים במערך הם ערכי מערך* / /* האינדקסים ומערך המחרוזות נשאר ללא שינוי (6 < (111 9 ]1265 ₪26 ; | |[ 165 || 5656 60069 ה ;(4 ,א16) 58 ] ; ("םהמערך אחרי מיון") +%םנצס 0 (1066 ) פופווב פופ סוומווב פנסן ; ("ץ6א צטם8 2688ק")65ת1עס ; () 9660 ; (0) ם2ו26% ([ ₪ - | | 6 6חו) 59 66 /* תהליך החלפת האינדקסים המצביעים על מילה במערך 585628 */ ות ;[7]א10 = סתס 9 > []6% = 71| 165 = [1 > []|4168 ( [ | 0 פופו |[ 90| [ ]| פופ 5 05 [סוב סו פופטנ ופ 6 /* הדפסת המערך על פי האינדקסים המצביעים על אינדקס מילה | */ ל 5 (19 7 6 בק 60 = 61 ₪08 |[ 3 | 6 | 98 2 56 = |6 | 7506 ףוסו הטפ תוצאות ריצת התוכנית: מיון מחרחות בעזרת מערך אינדקסים המערך לפני מיון 1 6₪0ם662מם1 צת = [556258]0 1. מם6601810ם6ם 00068 = [55628]1 % תב 0068 [55%28]2 פרק 6: מערכים ומחרוזות ‏ 151 ם 18 סהאםתשט = [3] 55628 6 מסע1 סשם עס ע68%ץ 8 ם1 = [58]4ע5562 המערך אחרי מיון % תת 0008 = [55628]0 1. מם6601810ם6ם 0008 = [55628]1 6 תמסע1 סשם עס ע68%ץ 8 ם1 = [8]2ע5562 1 -6םע66ם1 צת = [3] 55628 םת 18 %האתשט = [8]4ע5562 צסא צםת8 6858-כ שים לב/ חסרונות שיטת המיון הם: א. תופסת מקוס בזיכרון עבור טבלת האינדקסים. ב מאוד לא נוחה כשרוצים להוסיף מילים חדשות, שכן יש לעדכן שתי טבלאות גס בתוספת מחרוזות ואינדקסים, גסם במיון מחודש וגם בתוספת זיכרון. חיפוש בינארי בשיטת "אריה במדבר" נקודת ציון? החיפוש הבסיסי ביותר הוא יחיפוש לינאדייי בהנחה שהמערך ממוין, מתחילים באיבר הראשון במערך ומתקדמים סדרתית לאיבר הבא, עד שנתקלים באיבר הרצוי. אס מגיעים לאיבר שערכו גדול מערך האיבר שמחפשים, פירושו של דבר שהאיבר הרצוי אינו נמצא. שיטה יעילה יותר לחיפוש איבר במערך היא שיטת החיפוש הבינארי. לפני שימוש בשיטה זו יש לדאוג למיון המערך. אפשר לערוך הקבלה של חיפוש זה לחיפוש מילה במילון ועל פי הקבלה זו נלמד את עקרון החיפוש הבינארי. לפנינו מילון ונתבקשנו למצוא את הפירוש למילה ייעשיריי. תחילה ננסה לפתוח את המילון באמצע - אס פתחנו במקרה בדף הנכון, נחפש את המילה ונסיים. נניח שפתחנו באות 'יחיי, אנו יודעים ש-ייעיי (ייעשיריי - המילה המבוקשת) גדולה מ-ייחיי, ולכן אין כל סיכוי שנמצא את המילה עשיר בחצי הימני של המילון. בכך חסכנו 50% מזמן החיפוש בשיטת הייחיפוש הלינארייי, כי איננו צריכיס לעבור ולבדוק את כל המילים בחצי הראשון של המילון. אנו יודעים כעת שהמילה ייעשיריי נמצאת בחצי השמאלי של המילון, ולכן נפתח את החצי השמאלי באמצע. אס פתחנו בדף הנכון, נחפש את המילה ונסיים. אס שוב לא מצאנו, נבדוק שוב. נניח, שפתחנו באות יפיי, ולכן אנו יודעיס שהמילה ייעשיריי, נמצאת הפעס בחלקו הימני של המילון. ושוב נחלק חלק זה לחצי, עד שנמצא את המילה המבוקשת. 2 המדריך השלם לשפת 6 שים לב/ אין אמ מחלקים בכל פעם מחדש את כל המילון לחצי, אלא בפעם השנייה מחלקים את חצי המילון הימני או השמאלי לחצי. כך, שאמ ברבע, ואם נדרש, נחלק רבע זה בחצי וכך הלאה. 5 נקודת ציון? 3 :₪ <מ שיטת חיפוש זו נקראת גס ''אדיה במדבר'י. דוגמה נחפש את המספר 10 במערך הבא : 1 ,13 ,10 ,9 ,8 ,7 ,6 21 13 10 9 8 7 6 %> נחלק את המערך לחצי. %> האס ל הוא המספר המבוקשז לא. > 10<9, לכן, נעבור לחלק חימני. 21 13 10 1 > נחלק את החלק הימני לחצי. > האס 13 הוא המספר המבוקשןז לא. > 10>13, לכן, נעבור לחלק השמאלי. 10 החלק | האס 10 הוא המספר המבוקשו כן. השמאלי לפנינו תוכנית דוגמה המדגימה חיפוש בשיטת ייאריה במדבריי, חיפוש בינארי. 7 קובץ תקליטור: 0200607.6 ל <ם. 55010> 61066מ1] 66 65 תו 0 את 6םמ0611 1= פאטסש 1סא 6 1+ 6 ( |[ | 6 שו ) 56 סל ; (ב 6ם1 ,[]ץ28ע8 סת1) ק8טפ פנסט ;([][ץ8228 סם1)ץ8תל8 65>ת1מס בנסט ה פרק 6: מערכים ומחרוזות 153 (16סט) מ1את %ם1 ָ קפ 10 12 862 92 67 70 22-82 2 92 1 = | אפ ]| פה שוחו /* האיבר אותו אנו רוצים למצוא */ ;7 = עהט %ם1 ה ; ("תהמערך לפני מיון") ; (צ8228) ץ8228 61>תנ1עס /* תחילה יש למיין את המערך */ ו ; ("םהמערך אחרי מיון") +%םנצס ו ו סו וב פנסן /* בצע חיפוש */ ו וש )| 6 שפונ = קת ו ; ("האיבר לא נמצא במערך פ") ?%מ1עס 0-6 ; (טש , "האיבר נמצא והוא יושב באינדקס : %6ת")%1תנועס ; ("ץ6א שת8 5655קם")%1ת1עק ; () 9660 ; (0) םת2טו26% 89 ₪ ₪ 1 ₪ ₪ אררש 5 2 הב ה ה | /* תהליך המיון בשיטת "מיון בועות" ‏ */ :1 שת (מיחרך 7 הא > 7 7 ₪ = 61 ₪985 קז 2 ((1 )כ = אשד ₪36 7 ₪ = 62 568 ק ( 000( [1 = ]₪ <> [1] 50 ) ות (ב 6ם1 ,[]ץ8228 סת1) ק8טשפ בנסט /* תהליך החלפת המספרים במערך */ סח שוח ; [1] ץ8228 = סחם 4 המדריך השלם לשפת 6 ק[1 1 1 ]קקפה = | ב] ה = |[1 א 1 | ₪ ] ( |[ ]| ו שומ )) ופ סמו שמש 6 | /* הדפסה סדרתית של המערך */ 8 וחב ((פחתר ב ל א[ 6 2 קר 0 = )0 605 ( || ]| 5 1 56 = |[ 50| 06 וטו וסוס (( שש מו | | 7 ₪ומוו ו 6 תוב שופרב ָ /* חיפוש בינארי בשיטת "אריה במדבר" */ 1 = אפ = 10 1598 1657 הפו 07 = 05 ב פב ((006 1900 => 1089 512₪08) ש|צש | /+* מציאת נקודת האמצע במערךר */ 7 / ((465 16 0 605 שוכ )1‏ = 0 065 תתה /* תחילה נבדוק האם מצאנו את הערך הרצוי */ ((עפש == | 20 016 חן 0 )‏ 8ב ; (1688 10616ם) םעגו26% /* אם לא מצאנו נבדוק באיזה חלק של המערך יתכן ונמצא אותו ונעדכן את האינדקס */ (פנש > [054 ₪ סו | ₪ ו /* האיבר נמצא בחלק הימני של המערך */ 5 002 16 מ = 1085 רבפ 0-6 /* האיבר נמצא בחלק השמאלי של המערך */ 17 = 1206 6615 = 2602 165 ] ; (עאטססש עסא) פעו66ע2 ] תוצאות ריצת התוכנית: ₪ ₪ 97 009000 |6 1 ו פא 00 ₪ מ רס ת) 0סס ₪ ₪ ₪ ₪ ₪ ₪ ₪ ש פרק 6: מערכים ומחרוזות 155 1 = [8]צטה8 0 = [2]9ע8 המערך אחרי מיון 1 = [0]צטה8 2 = [1]עע8 3 = [2]עע8 4 > [3]ץט8 5 = [5]4ע8 6 = [5]פעף8 7 > [6]ץעט8 8 = [7]פעה 9 = [8]עע8 825]9[ = 0 האיבר שאותו נחפש הוא: 7 האיבר נמצא והוא יושב באינדקס: 6 צסא צם8 6585-כ אתחול מערכים בערכים אקראיים לעיתיס עלינו לציין מספר אקראי, או לאתחל מערך בערכיס אקראיים. ערכיס אקראיים יכוליס להחליף קלט מידע לצורך בדיקת פונקציית מיון למשל, או לצורך כתיבת משחק ניחוש. כיצד נבצע אתחול אקראי? במהדר של שפת 6 קיים מנגנון המחולל מספרים אקראיים. עלינו לאתחל מחולל וה כדי ליצור מספרים אקראיים. תהליך יצירת המספר הוא תהליך חישובי. כדי ליצור מספר אקראי שאינו חוזר על עצמו, יש לכלול בחישוב גורס המשתנה בכל פעם. גורס ה הוא זמן המערכת המשתנה בכל אלפית שנייה. ומן המערכת נכלל בחישוב, ולכן, נוכל לקבל סדרה ארוכה של מספרים השונים זה מזה. המאקרו 601126ח8ז מאתחל את המחולל במספריס אקראיים, כאשר אתחול זה מתבסס על זמן המערכת. הפונקציה (<מספר>)600ח8ז מחזיקה מספרים אקראיים מטיפוס ז660060חו החל מהמספר 0 ועד למספר כלשהו, שהוא הפרמטר שהפונקציה מקבלת. - נקודות לציון/ -שט 7 כדי לקבל מספרים החל מ-1, יש להוסיף 1 לערך האקראי שהפונקציה מפיקה : 1+ (<מספר>) ת80ם28+ 6 המדריך השלם לשפת 6 קיימת דרך נוספת לקבלת מספריס אקראייס אשר מקבלת נקודת התחלה, ומנקודה זו נקבל את המספרים האקראיים. מבנה הפונקציה: ;> חבס ;( (86) שת1ס (060םת516םתט)) 6ם8ע52 + 6וחט הינו מבנה המייצג זמן: שעות, דקות, שניות, אלפיות השנייה. גס פונקציה זו משתמשת במנגנון הומן כדי לחולל מספריס אקראיים. הפונקציה 6ח8ז מחזירה מספרים שלמים מטיפוס ז696חו. מבנה הפונקציה: ; (1+ (%100 ()8ם28) = מע 6ם1 שים לב/ אם לא נוסיף 1 לפונקציה זו יתקבלו המספרים מ-0 ועד ?2. כאשר נוסיף 1 לפונקציה, נקבל את המספרים מ-1 עד 100. העדה! לפונקציה ₪ח8ז5 יש מנגמן פנימי המחשב את המספרים האקראיים. כאשר נאתחל אותה בזמן המערכת בכל הרצה של התוכנית יתקבלו מספרים שונים. כלומר, זמן המערכת הוא מעין נקודת התחלה לחישוב, והרי זמן המערכת משתנה כל העת לכן יתקבלו מספרים שונים. כאשר נאתחל את הפונקציה במספר קבוע, נקבל סדרת מספרים אקראיים קבועים עאין כאן סתירה). אותה סדרת מספרים תחזור על עצמה שוב ושוב מפני שנקודת ההתחלה של החישוב קבועה. התוכנית הבאה ממחישה את אופן השימוש בפונקציות המחוללות מספרים אקראייס לצורך אתחול מערכים. 7 קובץ תקליטור: 0200608.6 ו <ג. 556010> 61066 1] <ת.0ס1תסס> 161066 /* לצורך שימוש ב- ()פמה8ת /*‏ <ם.מ55011> 010₪6ם1 /* לצורך שימוש במבנה זמן המערכת בפונקציה ()86ם528 */ <ת. 6ת1>%> 06גו61ת בץ 5 אמ 6מ0611 ( | | 18 ו | | ] 5 פופו ו פוב פופ בס ; ([][ץ8228 6מ16)1קת8א0 06ם28 בנ1סט ; ([][ץ8228 6ם16)1ק0ת8א6% ת00ם28 ב1סט ₪ , ] ץ8228 6ת16)1מת8א6 6ת8ע82 ב1סט פרק 6: מערכים ומחרוזות 157 (16סט) מ1את %ם1 | ][ץ8עע8 6ם1 = 2 בש 6 65 5568 (8 ; (צ8078) 010קת8א6 0ת8ת2 ( 7 ופפ 2 2 פומ וג פוסן ; (צ8228) 68816 תססת8ע ; ("106קתהאס תסהסם8ע" ,ץ7)8228ץ8228 ס>תנצס ; (צ8578) 6810 5780 ; ("16קת8א6 ת8ע8" ,ץ8228) 82287 >תנצס 5%" ( צתה 6588פ5ע")52סתנגמס ; () 9660 ; (0) ם2ו26% ( | | ופ ו > | || ששו פוב 2 םו פופ וצ 50 8 ָ כ הג 5 (-13-3 ק|קפען ₪2 002 = )| 608 |[ | 0 56 = |[ 6 || 5 ו סו ופוס ([][ץ8228 6ם16)1סתה8א0 בַם8ע בנ1סט /* המערך מקבל ערכים אקראיים בין 1 ל- 100 במסגרת קבועה */ (רקרוב ‏ ק ]ומ ₪106 07 = 61 65 5 0( 5 100( > 7 = [7]1ץ8228 ([]ץ8228 6ם016)1ת8א6 תס0ם8ע ב1סט /* המערך מקבל ערכים אקראיים בין 1 ל- 100 במסגרת משת 8 המדריך השלם לשפת 6 נה */ ₪ () 26 1'ת60ם 8 - מאקרו המאתחל את מחולל המספרים האקראיים. אתחול זה */ מתבסס על שעון המערכת, כלומר הנוסחה המחשבת את המספרים האקראיים משתמשת /* בחישוביה בשעון המערכת. לכן המספרים בכל אתחול של המערך יהיו שונים ; () 26 נותססםמ8: (-רו השפ > ₪ 07 = 61 ₪68 2 + (000)100ם28 = [7]1ץ8228 ([] ץ8228 6םת16)1קת8א6 0ת528 ב1סט /* המערך מקבל ערכים אקראיים בין 1 ל- 100 במסגרת משתנה */ ב /2 ו 5 מבנה המיצג זמן שעות:דקות:שניות:אלפיות השנייה */ ₪ שקהסו 88 - אתחול מחולל המספרים האקראיים, אלא שכאן מחולל המספרים מקבל */ נקודת התחלה, שהחל ממנה נקבל את המספרים האקראיים. אם נקודת ההתחלה היא השעון, אז המספרים בכל אתחול של המערך יהיו שונים, אחרת, אותה סדרת מספרים /* תחזור על עצמה. ; ((6)8%ת61 (60מם518ם6))0ם528 (1% קע > 1% 07 = 2) ₪68 > (100 6 () 605 = || 12| 0 תוצאות ריצת התוכנית: ס6תהאס 0ם8ע2 7 = [2]0ע82 1 = [1]עע8 3 = [2]ץ82 1 = [2]3ע8 7 = [4]%ע82 6תקאס תססתאע 2 = [2]0ע82 9 = [1]ץ82 6 = [2]ץע8 9 = [2]3ע82 1 = [2]4ע82 6 הא 5280 5 = [2]0ע8 2 = [82%]1 6 = [2]עע8 3 = [3]ץ82 0 = [2]4ע8 ץצסא צם8 6585-כ פרק 6: מערכים ומחרוזות 159 כיצד יתקבלו המספרים האקראיים? מספר אקראי מתקבל על ידי נוסחה פשוטה, כאשר נקודת המפתח לחישוב הוא המשתנה 5660 אשר מתקבל על ידי התוכניתן. ./ נקודת ציון? / .- - . טי - ₪ - ערך המשתנה 5060 הוא בדרך כלל זמן המערכת. הפונקציות הבאות ממחישות תהליך חישוב של מספר אקראי: ו קובץ תקליטור: 0200609.6 *****/ <ת.מ56011> 010066םמ1 ה תםךדתק1 טא 6מם3611 1 עצאטעאמתסא1 6ם6651 ;2 = 59660 6ם10 568610 (58660 60ם518ת6)80ם528 בנ1נסט /* המשתנה 5688 מקבל בדרך כלל את זמן המערכת (השעה) */ (10סט)0ם28 6שם1 | ; דאטאמתסאך + 5660 * תמזתקזץתסא = 5660 ₪ (16 5 5556 ( וב וטו ו תרגילים תשובות בתקליטור: קבציס 6661-66611ח!!86)9701ו6:)61 1 כתוב תוכנית הקוראת את הערכיס בווקטור, ומחליפה כל איבר בסכוםס כל האיבריס הקודמים לו. 2 נתונה סדרה גדולה המורכבת מסדרות של מספרים ממשיים. כל סדרה מסתיימת ב-0 והסדרה המורכבת מסתיימת גס היא ב-0. כתוב תוכנית, אשר: > תאתר את האיבר הגדול ביותר (מקסימוס) בכל סדרה ואת המקוס היחסי שלו בסדרה. 0 המדריך השלם לשפת 6 > תאתר את האיבר הגדול ביותר של כל הסדרות, ואת הסדרה שאליה הוא שייך. > תאתר את הסדרה הקצרה ביותר ואת אורכה. הרצ את התוכנית עבור הנתוניס הבאיס (כל סדרת מספריס מופרדת מחברתה בנקודה-פסיק): 51 10,207 90 3327 0152220 7 0 1007 3 נתונה מטריצה במבנה ריבוע קסס, שבו סכוס המספריס שווה בכל שורה, עמודה ואלכסון. לדוגמה, נתון ריבוע קסס, שבו סכוס המספרים הוא 15 : 68 3 7 204 כתוב תוכנית שמקבלת כקלט את מימדי הריבוע ואת ערכיו, ובודקת אס הוא ריבוע קסם. הנח שהריבוע קטן מ-10*10. 4. באזור מסויס יש רשת כבישים בין ערים. העריס ממוספרות בסדר עולה: 1, 42 ..., 5 וכו'. יש לכתוב תוכנית שתקבל כנתוניס : וח - מספר הכבישים ח - ווגות של מספריס המייצגיס ערים, שיש ביניהן כביש ישיר. לדוגמה, עבור המפה הבאה יהיה הקלט כדלהלן (קרא משמאל לימין) : 4.1, 2 2, 3,.2, 4:3, 8 ]-34 2-31 1-1 ] שר ו ה ח זוגות לאחר שלב וה תדפיס התוכנית הודעה, ותחל לקלוט זוגות מספרים של ערים. לאחר כל קלט של זוג מספרים, התוכנית תבדוק אס הוגדר ביניהן מסלול ותדפיס אותו. אס המסלול לא קייס, תודפס הודעה מתאימה. דוגמה לפלטי: 2 :0161089 01 ע81ק 6ע856%ם1 2 :2 6₪ת8 1 ת66א66ס 20066 (קיים מסלול ישיר) 4 :01616089 01 ע81ק 85696ם1 4 :4 6םת8 1 תב66א66ס 0066ת2 (קיים מסלול עקיף) פרק 6: מערכים ומחרוזות ‏ 161 .10 יש לכתוב תוכנית המקבלת שני מערכיס חד-מימדיים הממויניס בסדר עולה, ואת אורכיהס. התוכנית תדפיס את איברי שתי הסדרות ברשימה אחת, בסדר עולה. איבר המופיע בשני המערכים יודפס רק פעסם אחת. אין להשתמש במערך נוסף. הרצ את התוכנית עבור: 122 6 נתונה מטריצה בגודל ח*וח. כתוב תוכנית המכילה 2 פונקציות: (0012 ,0011) 001 ם160א5 (20₪2 ,2001) טסם ם160א5 פונקציות אלו מחליפות 2 עמודות או 2 שורות בהתאמה. התוכנית תתייחס למטריצה קיימת. היא תחליף בין עמודות כאשר יוקלד התו 'סיי ואחריו שני מספריס של העמודות והיא תחליף בין שורות כאשר יוקלד התו 'זיי ואחריו שני מספריס של השורות. כל תו אחר יגרוס להדפסת הודעת שגיאה. הקשת התו - 'י6'י תגרוס לסיוס התוכנית. נתון זוג וקטורים: (ת81,82,83,...8) = 0 (םמפ...,21,52,03) = 1 וקטוריס אלה נקראיס 'אורתוגונלייס'י, אס ורק אס, המכפלה הסקלרית שלהםס היא אפס : 0 = תפ * 8 + %..- 45 02 * 82 + 1 * 81 = בע *0ע קבוצת וקטוריס הס אורתוגונלייס אס כל זוג בקבוצה הינו אורתוגונלי. הגדר ואתחל מערך דו-מימדי שיכיל קבוצת וקטוריס כלשהי. כתוב תוכנית, אשר תבדוק אס קבוצה זו היא אורתוגונלית. כתוב פונקציה ()00ח11 5 המקבלת כקלט שתי מחרוזות 571 ו-5%2 ובודקת, אס 1 מוכלת ב-52. הפונקציה תחזיר 1 אס 51 מוכלת, ו-0 אס לא. לדוגמה: ; ("0ת1ע55" ,"0)"56ם51 ע6פ5 1 ; ("55".,"שת1עץ:פ")0םת51 עספ 0 כתוב פונקציה (00ח6 ח 5 המקבלת כקלט שתי מחרוזות 51, 52 ומספר שלס ח ובודקת, אס ח התוויס הראשוניס בשתי המחרוזות זהיס. הפונקציה תחזיר ערך בדומה ל-(56000. כתוב פונקציה (0)קט %0 5 המקבלת מחרוזת והופכת כל אות קטנה לאות גדולה. דוגמה: "15" <-- "15281" 2 המדריך השלם לשפת 6 .1 נתון מערך של מחרוזות. המחרוזת הגדולה ביותר היא בת 100 תווים ומספר המחרוצות - 30. כתוב תוכנית הממיינת מחרוזות לפי סדר לקסיקוגרפי (כלומר, לפי סדר האלפבית) ומדפיסה אותן כשהן ממוינות. = משימות: י"א | תרגילים 12-6. פרק 6: מערכים ומחרוזות 163 פרק 7 עיצוב תוכנית נכתב על ידי אבי בוצ המונח 'הנדסת תוכנה''י נועד לתאר את תהליך הניתוח של מערכת תוכנה. כאשר ניגשים לפרויקט חדש או מתכננים מוצר חדש, יש לשים דגש על יימה רוצים לבצעיי, ולא '"'איך נבצעיי. יש לתכנן את מהלך הפתרון ולהקדיש לכך מספיק זמן (כאשר המחשב כבוי) מפאת מורכבות התוכניות. בדרך זו נחסוך לעצמנו כאב ראש עתידי מיותר. מחזור פיתוח תוכנה כולל כמה שלביס עיקריים: 1. הגדרה מפורטת ומדויקת של דרישות המשתמש. 2 עיצוב תוכנית על-פי דרישות אלו. 3 בחירת כלים וקידוד מתאים. 4. בדיקת המערכת. הגדרת דרישות כשניגשיס לפרויקט, יש לסכס עס הלקוח בכתב את הגדרת דרישותיו. כאשר עומדים לפני פיתוח מוצר חדש לשוק, יש לערוך סקר שוק (או להומין סקר אצל העוסקים בכך). התוצאה אחת: הגדרת הדרישות ממוצר התוכנה שמפתחים. רצוי לבנות אב-טיפוס כדי להציגו ללקוח, ולוודא שאכן הלקוח מקבל את מה שהוא רוצה. בוניסם דגס אב-טיפוס של המערכת בעזרת כלי פיתוח מהירים מהדור הרביעי, שאינס בהכרח כלי הפיתוח של המערכת. לעיתים לא ניתן להגדיר את הדרישות במלואן ובפירוט מספיק ללא כלי עזר זה. בעזרת אב-הטיפוס ניתן לדייק יותר בהגדרת הדרישות לשנות, לבטל, או להוסיף דרישות. 1את עושים הרי כדי להימנע מאי הבנות בעתיד. וזאת אף על פי שאי-אפשר לחזות מראש את כל המצבים ולסגור את כל הפינות. צריך לתכנן את המערכת באופן גמיש, המאפשר שינוייס ותוספות, אס וכאשר יידרשו. פרק 7: עיצוב תוכנית 5 עיצוב עיצוב התוכנית בשלב וה אנו מתרגמיס את הגדרת הדרישות למשבצות ביצוע. כלומר, מה הס המודוליס המרכיבים את התוכנית, ומה מרכיב כל מודול. פירוט מרכיבי המודול, כולל את הפונקציות השונות. תיעוד כל פונקציה אשר כולל מה בדיוק אנו רוציס לקבל ממנה. במידת הצורך יש לפרט את האלוגריתמים, או סוגי האלוגריתמיס הנדרשיס. יש לקחת בחשבון את אילוצי החומרה השונים, תצורות גרפיות, ניצול זיכרון, ועוד. צריך לציין שימוש בשירות ספריות פונקציות קיימות, או תוכנות עזר מכל סוג שהוא, היכולות להשתלב ולעזור ובכך לקצר את זמן הפיתות. עיצוב מסכים עיצוב מסכים כולל חלוקת המסכים על-פי נושאים שונים, עס פירוט של מרכיבי המסך, סגנון עיצוב, צבעים, ועוד. מומלצ להחליט על תקן לעיצוב מסכיס ולבנות מסכים על-פי תקן זה. מסכי עבודה צריכים להיות ידידותיים למשתמש, ובמילים אחרות, דרוש ממשק משתמש ידידותי, פשוט ואחיד כדי להקל על המשתמשים. לא פחות חשובה צורת התצוגה - קוויס נקיים וברורים. מסכים שאינם עמוסים מוסיפים המון לאיכות המוצר. מערכת עזרה מקוונת וברורה הכתובה בשפת אנוש ולא בשפת מחשב יכולה לתרוס לשימוש נכון ונוח בתוכנית. כלל וה חל גםס על הודעות השגיאה למיניהן, כמו בעת קליטת נתון שגוי, או ביצוע פעולה שאינה מותרת. טכניקות עיצוב טכניקת "חשסס-קסד" - "מעלה-מטה" בטכניקה זו מבצעיס חלוקה של התוכנית לרמות עד לרמה הבסיסית ביותר. ניתן להשוות טכניקה זו לארגון היררכי ראה תרשים 7.1. מנכייל סמנכייל שיווק סמנכייל פיתוח סמנכייל כספים צּ צ צּ מנהלי שיווק מנהלי פיתות חשביס אנשי מכירות טלמרקטינג מנתחי מערכות מנהלי חשבונות צִּ עב + טלפניות דיוור תוכניות גביה שכר בירוריס תרשים 7.1: טכניקת *מעלה- מטת?/ 6 המדריך השלם לשפת 6 טיפ/ יש לציין שטכניקת עיצוב זו היא המומלצת, מפמי שזו דרך חשיבתו הטבעית של האדם. להלן תוכנית דוגמה הממחישה את טכניקת העיצוב 'יחאוסס-ססדיי. /* קובץ תקליטור: 60200701.6 -/ <ת.585%010> 01066םמ1 6606 =סו 1 שו /* הכרזה על הפונקציות המשתתפות */ 7( ₪ ₪ ₪וםו1) ופ הב ץ 36 שו = מופב) שו שוב 9 פופו 0 פומ פס 6 ספוש 6 | ובסו ל 66 62 9] שוחב ₪ וו 15 5 שה ) 6 6 /* פונקצית מגהת היא סמנכ"ל הפיתוח */ (ס1נסט) מנאת 1סט לפ ב סה /* נקה את המסך */ 9( 515656 קפ ) וו ו ק 9 7 כ" ) ופט 66 / /* פונקציה % 60 היא מנהל הפיתוח */ ((פ! סומו 7 שטוו 65 פוש ₪5 | סנפ ָ פב (ת0ס80%1) ם160חטפ ; (סם ,800)8 = 2690116 ₪ 660 6 62 5 57 ;68%ע ; (סם ,1%)8גטת = 2690116 פא כ ל ו 0 2 ו ו ;68%ע 650007 ופ וו 6 :6 פרק 7: עיצוב תוכנית 17 /* פונקציות טסם5 ,1%6טחת ,868 הם התוכניתן */ ((19 שו ₪ שו )₪96 פוב ָ ל 6 = 6 ו 6 ה ות 7( > ו ו 6 6 62 0 שוחב ₪ סוםו ‏ = 5 סופ 0 6 6 ןָ פס ה בב ב ו ו טכניקת "כ(-ו50)0" - "מטה-מעלה" טכניקה זו היא היפוכה של טכניקת ''חצוסס-קסדיי. בטכניקה זו אנו מתחילים ברמה הבסיסית ביותר ומתקדמיס אל הרמה העיקרית, הגבוהה. טיפ/ יש לציין ששילוב בין שתי הטכניקות די מקובל, אך טכניקת '*השס-מסדיי ממחה יותר ברמת תפיסתו הטבעית של האדם. ראוי לציין, שטכניקת מטה-מעלה גמישה פחות לשינויים, כי לא ניתן לקרוא לפונקציות אשר לא הוגדרו בתחילת התוכנית ומוקמו מתחת לפונקציה הקוראת. זאת אומרת, כאשר ברצוננו להוסיף מרכיב או תת-מרכיב בהיררכיה, יש לדאוג למקמו מעל הפונקציה אשר אמורה לקרוא אותו שכן, אחרת הוא לא יוכר על ידי המהדר מהסיבה הפשוטה: הוא פשוט לא ראה אותו קודס. מגבלה זו פוגמת לעיתים ברצף ההגיוני ומכניסה את התוכניתן לאילוציס מיותרים. לפניך תוכנית דוגמה, הממחישה את טכניקת ק/-וחסטסם : /* קובץ תקליטור: 60200702.6 -/ <ת.56010> 101066 <ם.10תסס> 10610866 /* פונקציות טסם5, 1%טח, ב6ּב, הן התוכניתן * / ה ב | 6 3 = 9 8 המדריך השלם לשפת 6 (8ן 6 ₪ שוח ) שופ סוב | ; (סם * 8)ם660%5? ((ו6 ו שוש 66 92 ₪ - 2 שו כ ופנא 6 סול מ הפ ה ב לב /* פונקציה % 60 היא מנהל הפיתוח* / ₪ 5 ₪ ₪ | כ תס ב סוס שהחום)) וו ₪6 ובס ן ל סופ (תם0ס80%1) ם160חטפ ; (ס ,800)8 = 2690116 לסל יכב 160 6 ק 62 6 6500 ;68%ע ; (סם ,1%)8גטת = 2690116 ל ב ל ונפו 60 ו הו ו ;68%עס 65000807 65 ו 6 :6581 /* פונקציה מגבת היא סמנכ"ל הפיתוח* / (ס1נסט) מנ1נאת 1סע | קפ 0 = ₪ 06ב /* נקה את המסך */ 8 ( 6 6113566505 כ( 0 2 7 ) פושוו ₪ ( 0 2 ) פופו ₪6 ] פרק 7: עיצוב תוכנית 19 סיכום טכניקות עיצוב שימוש בשיטת עיצוב מודולרית ''ק0-חחסששספ'י או 'יחצוסס-ססדיי, מאלצ אותנו להשקיע זמן ומחשבה, אך רק כך אנו יכוליס לחימנע מראש מחלק מהבעיות אשר יצוצו בהמשך הפיתוח. המערכות כיום מורכבות ביותר, ולא ייתכן שניגש ישר למלאכת התכנות. ללא תכנון מוקדם, אנו פשוט פותחיס דלת לבעיות שניתן למנוע אותן מראש. יש מספר נושאים נוספיס שעלינו להתייחס אליהס בשלב וה והס : ניהול הנתונים. כיצד נאחסן את נתוני המערכת: בקובץ אחד או בסדרת קבצים, מה יהיה מבנה הקבציס! האס נחזיק את הנתוניס במסד נתוניס טבלאי במקוס סדרת קבציס ללא קשר ביניהס. מסד נתוניס נפוץ כיוס הוא 460655 של חברת מיקרוסופט. אבטחת הנתונים. גישה חופשית לנתוניס אינה מקובלת, שכן לא ניתן לעובד להציצ במשכורות העובדים אם אינו מורשה לכך, ובוודאי שלא לבצע שינויים שאינו מוסמך לעשותם. יש לקחת בחשבון את נושא אבטחת הנתונים מראש. בחירת הכלים וקידוד מתאים מקובל להשתמש בספריות עבודה אשר מסופקות על ידי יצרן המהדר, וגם לרכוש ספריות מיצרניס אחריס. דבר זה חוסך הרבה מאוד זמן, כי משתמשים בחומר קייס ולא ממציאיס יאת הגלגליי. יש לבדוק את איכות חבילת הספריות, לבדוק תיעוד ותמיכה, ולבדוק את העלות. אס בכל זאת הגענו למסקנה שאין מנוס מקידוד עצמי, יש לכתוב פונקציות כלליות ככל האפשר, כדי שניתן יהיה לעשות בהם שימוש חוזר בפרויקטיס הבאים. יש לשיס לב לכליס מהדור הרביעי ולבדוק אס ניתן לפתח בעזרתס את הפרויקט, או להפוך אותם לכלי עיקרי ולכתוב ספריות בשפות ++6/6 כדי להשליס תכונות אשר חסרות בהם. בשיטה זו, ומני הביצוע מתקצרים ואיכות המערכת עולה. כליס מקובליס אשר נעשה בהם שימוש נרחב הם 260655, 2856 |8טפו/, וחקוסס, זסאוסק זט וכדי. יש לקחת בחשבון את אפשרויות הפיתוח בכלים אלה לפני שניגשיס לעבודה. בדיקת המערכת מערכת טיפול בשגיאות צריכה להבטיח שלא תהיינה יינפילותיי של התוכנית, ואם כן - שניתן יהיה לשקס את התוכנית ולהחזירה לתפקוד. מערכת זו גס צריכה להבטיח ששגיאה בתוכנית לא תפגע בתוכניות אחרות שרצות במחשב באותו זמן. בדיקת כל נתון קלט, כל פעולת חישוב הן דוגמאות לנושא זה. במקרה של שגיאה שנובעת מפעולת המשתמש, צריך לתת לו הודעה מפורטת וברורה, כדי שיוכל לתקן או לפעול בצורה נכונה. 0 ההמדריך השלם לשפת 6 יש לבדוק כל פונקציה בנפרד בזמן הפיתוח לפני שמשלביס אותה במערכת, וגם לדאוג לצימוד חלש בין פונקציה לפונקציה. ואת אומרת להשתדל לתכנן את הפונקציות בצורה כזאת שיהוו יחידות עצמאיות עס משתניס מקומיים, ולא להרבות במספר הפרמטרים המועבריס אליהן. כך נבטיח פחות שגיאות. רצוי להימנע ככל האפשר ממשתנים גלובלייס אשר מהוויס פתח לתקלות, בגלל חוסר שליטה. מומלצ לרכו את הטיפול בשגיאות במודול נפרד. גישה זו תאפשר ניהול אחיד ומסודר של הטיפול בשגיאות. כתיבה עצמית של פונקציות, תוך שימוש יעיל במערכת הפיתוח של בורלנד, או מיקרוסופט מהווה חיסכון נוסף בוּמן. לצורך כך נשתמש בספרות העזר אשר קיבלנו על-מנת ללמוד את רזי מערכת הפיתות. לקידוד התוכנית מקדישיס בדרך-כלל 40% מזמן הפיתוח, המפתח צריך לפעול לפי נהלי עבודה שנקבעו ביחידה או בארגון. סגנוו הכתיבה חשוב אף הוא. כדי להפוך את התוכנית לקריאה יותר לא רק למפתח עצמו, יש לאמ מערכת כללים לתכנות בשפת 6, ולדאוג להטמיעה במחלקות הפיתוח בחברה (שים לב לנספת ב', נהלים לכתיבת תוכנית ב-6). תיעוד תיעוד יעיל ישפר את התחזוקה של המערכת, מכיון שהמערכת צריכה להתקייס גס לאחר שהמפתח אינו מטפל בה יותר. כאן נעיין בשני היבטיס : שמות משתנים שמות המשתנים, הקבועים, הפונקציות ואפילו שמות הקבציס (₪.*) צריכים להיות בעלי משמעות. משמעות זו תתרוס רבות להבנת התוכנית. לדוגמה: ;([ ] צ6א כ81 ע8ם0) שתהת ₪562 466 82ם0 (10סט) תנ1נ8ת 16סע זָ 12[2] צְ6א% 812 858ם0 ;[15] 6תהת 5850865 82ם0 ; ((צ6א כ5851) סשתהת 0862 666 ,"61)"%5תנצס ( [ ] צ6א כ851 שאם0) ש6תת 862טט 466 0282 ָ ו ברור לנו שפונקציה וו מחזירה את שס המשתמש לפי תעודת הזהות שלו. פרק 7: עיצוב תוכנית 11 הערות בגוף התוכנית הערות כותרת הערות מאפשרות להבין טוב יותר את שורות הקוד ומקלות על תחזוקת התוכנית. את הערות נכתוב רק כאשר יהיה צורך בהן. כאשר קטע קוד מורכב יש להסבירו הן לעצמנו, כאשר נחזור אליו לצורך תיקוניס או שיפוריס והן למפתחים, שיבואו אחרינו. הערות אלו יקלו על חייהסם, ויחסכו זמן וכסף לארגון. ניתן לחלק את התוכנית לפסקאות ולתת-נושאיםס שוניס, להסביר מדוע השתמשנו באלוגריתס זה או אחר. מומלצ לא להרבות בהערות, וגם לא לדחות את כתיבת ההערות לסוף הפרויקט, כי לא תמיד יימצא הזמן לכך. חשוב לכתוב את ההערות בעת התכנות. הערת כותרת לתוכנית והערות כותרת לפונקציות חשובות במיוחד. בהערת כותרת לתוכנית עלינו לדעת את שסם התוכנית, תאריך ושעת כתיבה, מטרת התוכנית, מי כתב אותה, ולציין הערות מיוחדות אם יש צורך בכך. טיפ/ מומלץ להכין תבנית הערה, להעבירה מקובץ לקובץ ולשנותה בהתאם. מומלץ לבנות מפה עם שמות הפונקציות כדי לוודא שאכן יש קשר בין הפונקציות, האס באמת לכל הפונקציות במודול מסוים יש קשר למשא המודול. ייתכן ויש לנו פונקציות מיותרות. *יתכן והקשר של הפונקציה לנושא מסוים הוא חזק יותר, ועל כן יש להעבירה למודול אחר. אולי יש פרמטרים מיותרים. מפה זו תהיה לנו לעזר רב מאוד - מומלץ להשתמש בה. הסבריס נוספים בנושא ראה בנספת ב': נהלים לכתיבת תוכנית ב-6. 2 המדריך השלם לשפת 6 פרק 8 יצירת פרויקט נכתב על ידי אבי בוץ עד כה למדנו את טכניקת השימוש בפונקציות ספריה. למדנו שיש לכלול בתוכנית את הספריה הדרושה. למשל, נכתוב <ח.5500> 6006ח%1 לצורך שימוש בפונקציות הנמצאות בספריית קלט/פלט. מהי פונקציית ספריה? פונקציה היא תוכנית מחשב אשר כתובה בשפת 6 או בשפת עוטוח556, או שילוב של שתיהן. תוכנית מחשב זו נכתבה עבורנו במהדר 6 של בורלנד או מיקרוסופט (או מהדר אחר), בדרך בה אנו כותביס את תוכניותינו. כך נוצר קובצ 6 ובו מספר פונקציות בעלות מכנה משותף, כמו טיפול בקלט/פלט, למשל. בקובצ התוכנית שכתבנו, אשר קרוי גס קוב מקור (₪ 06זט50), אנו כולליס את הפונקציה הראשית חוח. את הקוב הזה אנו ממיריס לספריה. לקובצ מתוסף קוב נוסף באותו שס, אך בעל הסיומת ח. למשל, 50010.6 ו-0.0ו5%0. בקובץ הכותר ה (ז68006ה 6) נמצאות כל ההכרזות של הפונקציות, בדיוק כמו בשיטת חווסס-קסד. הכללת ספריה זו בתוכנית נועדה לשלב את ההכרזות בקובצ, כדי שנוכל להשתמש בפונקציות שבקוב> 0.6ו5%6. למעשה, מבלי שנדע, עבדנו עד היוס עס מספר קובצי מקור שכללו פונקציות שלא נכתבו על ידינו. כיצד, אס כך, נוכל לבנות קוב פונקציות משלנו, שנוכל להשתמש בו ככל שנמצא לנכון, בלי לכתוב שוב את הפונקציה, או מבלי להעביר אותה מתוכנית לתוכנית! פרק 8: יצירת פרויקט | 173 יצירת תוכנית ממספר קובצי מקור שפת 6 מאפשרת לפרוש את כתיבת התוכנית על פני מספר קובצי מקור (65!ו1 06זט50), בעלי סיומת 6. כל קובצ כזה יכול להכיל פונקציה אחת או יותר, המוכרות באופן גלובלי זו לוו. קובצ מקור אחד בלבד חייב להכיל את הפונקציה ((0חופּחח, שממנה מתחילה ריצת התוכנית. לדוגמה, ייתכן המצב המוצג להלן. הקובצ 861.6 מכיל: ()תגנאת הקוב 162.6 מכיל: ()62תג כלומר, למרות העובדה שהפונקציה (620ח%0 נמצאת בקובצ 8!62.6, ניתן לקרוא לה מתוך הפונקציות ()חו3ח ו-(610חט), המוגדרות בקוב 61.6!ו8. לאחר תהליך ההידור של התוכניות שבקבציס 661.6 ו-8!62.6, נוצריס קובצי בינייס בעלי השמות [1!61.09 ו-[6162.00 בהתאמה. תהליך הקישור (אחון) מחבר את שני קובצי הבינייס הללו ואת קובצי ספריית המערכת לקובץ ריצה אחד, המקבל סיומת 5אם. ניתן להריץ אותו על ידי הקלדת שמו, כאשר נמצאיס בפיקוח מערכת 05כ. למעשה, כאן אנו רואיס באופן ברור יותר שהשתמשנו בשיטה זו באופן סמוי. כאשר כתבנו תוכניות 6 בקובץ מקור אחד, קראנו למעשה לפונקציות של ספריות המערכת מתוך התוכניות. כידוע, פונקציות אלו הוגדרו בקובצי מקור אחרים, ושולבו בשעת ביצוע הקישור. סוג נוסף של קבציס הינס קובצי ספריה, בעלי סיומת 118. בכל אחד מקבציס אלה משולבים כמה קובצי [טס., והמקשר יודע לשלוף מתוכס רק את הקטעיס הנחוציס לתוכנית. בקבציס אלה לא נעסוק כאן, אולס חשוב לדעת שקובצי ספריות המערכת של 6 801800 למשל, הינס קבציס מהסוג הזה. 4 המדריך השלם לשפת 6 מהו פרויקט? ב-6 6ח8!זסם מקובל לכנות בשס ייפרויקטיי תוכנית הפרושה על פני מספר קובצי מקור. התהליך ליצירת קובצ 66 על ידי הידור וקישור נקרא עשיית פרויקט (6א18) 665[סזק). בכדי להגדיר ל-6 8011800 אילו קובצי מקור שייכים לפרויקט מסוים, מכיניס קוב פרויקט בעל סיומת [זק, שבו נמצאת רשימה של קובצי המקור. בדוגמה שלנו, קובצ הפרויקט [זס.1[סזק יכיל את קובצי המקור 61.6 ו-8162.6. את קוב הפרויקט ניתן להכין באמצעות חלון העריכה. לשס כך, יש לבחור את הפריט 0[66ז₪, בתפריט הראשי (או על ידי הקשת 5+:|4 בכל עת) ולבחור בו את הפריט 6וחפח 60[סזפ. כעת יתקבל חלון קלט, שבו ניתן להקיש את שס קוב הפרויקט: 1[סזק. לאחר מכן, יש לבחור את הפריט 6!וסוח60 מהתפריט הראשי, ובתפריט 6!וטו60 המתקבל יש לבחור את האופציה וו 0!וט8. מנקודה זו ואילך, ימשיך המהדר באופן עצמאי. תחילה, הוא יבצע הידור לקבצים 61.6!₪ ו-8!62.6 ויקבל את הקבציס [61.02!₪ ו-[8!62.00. אס ההידור מצליח עבור שני הקבציס, יחל תהליך הקישור. קובצ התוצר ייקרא על שס קובצ הפרויקט, 1.6%6[סזק אשר ניתן להריצ אותו. כעת נציג מהלך מפורט של עשיית פרויקט במערכת בורלנד. כיצד נבנה פרויקט כיצד נבנה פרויקט במערכת 6 0ח8|זספ! 1 הצעד הראשון - פתיחת פרויקט חדש. ד ו ויו . ע065%60 165 התה 116+ 166%[סעק 3 1086 | ₪461 | תדשיס 8.1: פתיחת פרויקט חדש פרק 8: יצירת פרויקט | 175 2 נבחר שס לפרויקט עס סיומת [זס.*. מם 8 = מָנָס נמ 6% 6 ה 6תחס חט [0ע99 11% 116 1 ]= 1=========================== 2). 1 00 5 00%):1,05) 01.0 ==[ ] ] ו 68 0160>6ע2 ה26ק0 6 0760>6ע2 חש ככ 34 דד? ]= 111 | תדשים 8.2: קביעת שם לפרויקט 3 נקבל חלון פרויקט ונכתוב את שמות הקבצים אשר ישתתפו בפרויקט. || יו 9 1 5 3 7 1 / מ יי ] , [== 1720001602 (171 >< 2171 8 06 8 100% 6חהה 116ק [ב= = 4 [2 % 676 60 16678 חה 080 ע61 |" תרשים 8.3: נעבור לסימון הקבצים הדרושים 6 המדריך השלם לשפת 6 4 נקבל תיבת דו-שיח. נמקס את הסמן על שס הקוב ונבתר את הקבצים המשתתפיסם. מם ה ₪ 1 1 [י) ו יו 6 ת 5 23| ו 1 1.6 1.0558 6. מטאת 6 1אם 6. 25 38אם 6 48את 6. ל 49אע 6 מ 6. 75 פא 6 ה 6 76 2פאע אוד 5 6 ל א 6 [=2111==--ן 1 ה י 181 8 6 שחהּה 16גק 6).* 00661055 :6 ה18:8098 9,1996 461 2859 6 17 . | ד 4- | 01900009108 שס0+ ע6קע₪ ,1188+ ע0+ ע1006 :(0ע568 %81[1ה606ע6ה1 0+ 6קעך 610 | תדשים 8.4: סימון הקבצים *המשתתפיסיי בפרויקט כדי לבנות קובץ ריצה אחד (א6), יש לבחור בפונקציה !ו 6!וט8 שבתפריט 6 ס6. / 1 16וגטם 1 ]- , [== 1728018265 50 111 2] 11-[ * 88 06 8% 1006100 6שחהּה 116ק ו 8/ח 8/ח 8/ח 5 - 7.6 8/ח 8/ח 8/ח 0-5 - 6. 105% ו 8/ח 8/ח 8/ח 5 - 6 87 נ/זקקטת ד : - |2 8 311 10בטמ6ת 610 | תרשים 8.5: הוראות ביצוע לבניית הפרויקט למעשה, תהליכי ההידור ו/או הקישור לא מבוצעיס תמיד. המהדר בודק את התאריך של כל קובצ, ומשווה אותו לתאריך ולשעה של קוב התוצר, שאמור להיווצר בכל שלב. רק כאשר קוב המקור חדש יותר מקובף התוצר יבוצע ההידור. לדוגמה, לאחר עשיית הפרויקט נבצע שינוי (בחלון העריכה) לתוכנית 8!62.6, ומייד לאחר מכן נבצע תהליך עשיית פרויקט. המהדר יבצע את שלב ההידור לקוב> 8!62.6 בלבד, כי על פי התאריך והשעה הוא חדש יותר יחסית ל-[8162.00. לא יבוצע כל הידור ל-6!61.6, כי הוא לא השתנה מאז ההידור הראשון. לאחר מכן יבוצע שלב הקישור, שכן [8!62.05 חדש יותר מקובצ התוצר 6א1.6[סזק. מסיבה זו, חשוב לעדכן את התאריך והשעה במחשב בכל פעם שמתחילים לעבוד (עדכון השעה מתבצע אוטומטית, אס מותקן במחשב כרטיס שעון מגובה סוללה). פרק 8: יצירת פרויקט | 177 מההסבר האחרון ניתן לראות שקיימת מערכת סמיכויות בין הקבצים : > [861.00 מסתמך על 61.6ו8. *> [8!62.00 מסתמך על 62.6!₪. > 6א1.6[סז] מסתמך על [61.00! ועל [8!62.00. תוכנית דוגמה לפרויקט התוכנית הבאה מורכבת משלושה קבציס: > קוב ראשי, 66.6ח|8ח המכיל את הפונקציה הראשית חופח, ומפעיל פונקציות שנמצאות בקוב> 8.6 6!. > קוב המכיל פונקציות לחיבור ומכפלה של שני מספרים שלמים, וכן פונקציית הודהות המדווחת על שס הקוב ומה הוא יודע לעשות. + קוב 8.6 66 היודע לספר שלוש בדיחות. את הבדיחות בוחרים על-פי מספר הבדיחה. פונקציה ואת מפעילים מהקוב הראשי 6.6ח81ח. תהליך חיבור הקבציס ויצירת קובצ הפרויקט הוסבר בסעיף הקודם. התהליך במלואו, על כל שלביו, בוצע על קבצים אלו. דוגמה: בקובצ תקליטור 6700801 הקבציס המשתתפים הם: 0 1116 ם.8 1116 6 1116 ם.ס 1116 0 נא 7 קובץ תקליטור: 0200801.6 7 0% וו ונוה 8 68 ו 5 ץע 16ג1ע קובץ ראשי / <ת.56010> 101066 <ת.10תסס> 101066 יש להכליל את ההכרזות על הפונקציות שנמצאות בקבצים אשר בנינו. הכרזות */ אלו נועדו לאפשר לנו להשתמש בפונקציות, כדי שהמהדר "יערוך איתם היכרות", שידע על קיומן. הכרזות אלו מצטרפות להכרזות על פונקציות פנימיות המוגדרות בקובץ זה. /+ תהליך הבנייה של כל הקבצים לקובץ ריצה אחד מכוון לריכוז כל הפונקציות יחד. 8 המדריך השלם לשפת 6 ופ" סטג ו 1" 65ב /* הכרזות על פונקציות */ סש סונו 5 10 | סש ופוג סו ןו |0 ופי ו אג 5 6 50 כ - א דג א ; 2 םשמ שש השס = (10סט) ת1את 1% | ( 6 5566 9( וס = 16 בק וס 65 ₪ 1105 ; ("ץ6א צטם8 688ק")65ת1עס ; () 9660 ; (0) מעגו26% ] ו 8 ₪ 1 ₪ ₪ א שו ₪ 8 7 == / ( ו /* הפעלת קיית בי 5 בש */ ו ; () הזה 0 68 ( (4- 000650 וו = (( 0 שוסטם ‏ 3 6ב 560 פו סוסב סוס 2( 16050 כ "66 = (4 ₪ 5 ו ה ו (0010)ם80%10 ₪ 5116 ב1סט /* הפעלת הפונקציות בקובץ 5.6 2116 */ ןָ (₪0 5 08 0416 ק (1 0 515608 65ך 7 (5-) 8 55156 65ופך ] /* 6 ₪118 8 6 6 5 ץע 16ג1ע קובץ פונקציות ראשון = <ת.585%010> 01066ם1 65 שוב פרק 8: יצירת פרויקט | 179 ₪ ₪ 1-0 ש ₪ אש ₪ ק (10סט)ת8 1 8 5116 ב1סט | ; ("םשלום! אני קובץ 8 5116 ואני יודע לחבר ולהכפיל 2 מספרים שלמיםת ") +6ם נש ] ב ב | 5 3 ובו ] ( ה | 5 85 > 19 9 ] /* ₪2 2116 8 6 5 5 ץע 16ג1ע קובץ הכרזות לפונקציות בקובץ 8.6 1116 2 בש מע 3 ₪ 52 |0 שפצ 0( 5 ₪ 96015 סוסב 8( 1005 ₪ ₪ ) פופה ססות 0% 6 ₪116 8 6 ו 5 ץע 16ג1ע קובץ פונקציות שני / <ת.5%6010> 01066ם1 ל 666 5סהו חונ סש 5 ב ]| 10 0 מס | ; ("םשלום! אני קובץ 5 15 ואני יודע לספר בדיחותמ") וס ] 0 המדריך השלם לשפת 6 (62מתטא70%6 6םת856160%02)1 70%6ך בנ1סט (ע6סתטא70%6) בם160שפ | ; ("תמה אוכלים קניבלים בדיאטה ? גמדיםת") %1ת1עק :1 0856 ;268% "תכמה גרוזינים דרושים בשביל להוריד תמונה מהקיר ?מ")51ת1עס :2 0856 ; ("תעשרה, אחד מחזיק את התמונה ותשעה שוברים ת'קיר" ;268% "ת מדוע החבריה שחוזרים מגואה לא צריכים אוניברסיטה ?מ")51ת1עסק :3 0856 ; ("םכל החומר בראש" 268%; ( ] | 0 ₪216 5 6 ו ץע 16ג1ע קובץ הכרזות לפונקציות ובקחבקן ‏ 56 5 / )3-5 0 26 בצ ; (ע6סתטא70%6 6םת86160%02)1 70%8ך בנ1סט תוצאות ריצת התוכנית: שלום! אני קובץ 8 1116 ואַני יודע לחבר ולהכפיל 2 מספרים שלמים 7 = (4 %ם1 ,3 6ם800)1 2 = (4 %ם1 ,3 6ם1)שגגות שלום! אני קובץ פע 5116 ואני יודע לספר בדיחות מה אוכלים קניבלים בדיאטה? גמדים מדוע החבריה שחחרים מגואה לא צריכים אוניברסיטה? כל החומר בראש פרק 8: יצירת פרויקט ‏ 181 אפיון משתנים וטוויח ההכרה אפיון משתנים וטווח הכרה בשפת 6, כבשפות עיליות אחרות, אין חובה לבצע הידור משותף של כל הפונקציות המרכיבות את תוכנית המחשב. כאשר תוכנית גדולה ומורכבת, מקובל לחלקה למספר חלקים, ולכלול בכל אחד מהס רק חלק מהפונקציות. כל חלק כזה נמצא בקוב> מקור (6|=₪ 66ז50) וניתן לבצע הידור שלו ללא קשר עס קובצי המקור האחריס. לאחר הידור כל קובצי המקור, ניתן לחבר ביניהס באמצעות תוכנית מיוחדת הנקראת 'ימקשר' (זסאחו1) ולקבל תוכנית מחשב שלמה המוכנה להרצה במחשב. תהליך עבודה וה כבר הוסבר בפרק הקודם. אך עתה נבדוק בכליס של 6 המאפשריס לנו לעשות כל זאת. המשתנים המוגדרים בקובצי המקור מסווגיס במספר קבוצות, המאופיינות על ידי טווח ההכרה (56006) ואורך החיים (6ו60וו1) שלהן. נגדיר מונחיס אלה: טווח הכרה מגדיר את הפונקציות שבהן יוכר משתנה שהוגדר במקוסם מסוים, ומאיזה פונקציות ניתן להתייחס אליו. אורך חיים | מגדיר באיזה שלב של ביצוע התוכנית נוצר משתנה מסוים, ועד מתי ניתן להתייחס לערכו. תיאור סכימטי של התהליך ניתן בתרשים 9.1. משתנים אוטומטיים עד עתה עסקנו במשתנים השייכים לקבוצת המשתנים האוטומטיים. משתנים אלה הס הפרמטריס הפורמליים של הפונקציה, או המשתניס המוגדריס בתחילת גוף הפונקציה (מכנים אותס בשם משתנים פנימיים, לוקליים, או משתנים מקומיים). טווח ההכרה שלהס הוא בתוך הפונקציה שבה הוגדרו, ואורך החיים שלהס הוא משך זמן ביצוע הפונקציה. פרק 9: אפיון משתנים וטווח ההכרה 183 מהי המשמעות של עובדה זוז כידוע, כל משתנה תופס מקוס מסויס בזיכרון בגודל המתאיס לטיפוס שלו. כאשר מפעילים פונקציה, מוקצה באופן אוטומטי מקוס בויכרון עבור המשתניס האוטומטייס שלה, מתוך מאגר הזיכרון הכללי של התוכנית. במהלך ביצוע הפונקציה (וגם כאשר קוראיס לפונקציה מתוך פונקציה) נשמריס והות המשתניס האוטומטייס והערכיס שלהסם בזיכרון שהוקצה לשס כך. כאשר הפונקציה מסתיימת, חוזרת הבקרה לתוכנית הקוראת, והזיכרון שהוקצה מוחזר למאגר הכללי. במקרה זה אובדים הערכים של המשתניס האוטומטיים. רפס. 80112061 6 הידור <>- 2-6 51ס. 8002062 הידור >- תוכנית מוכנה 001. 8002063 6 להרצה הידור >- -- תדשיס 9.1: תהליך ההידור והקישור - יצירת פרויקט משתנים כלליים (גלובליים) קבוצה נוספת של משתניס הס המשתנים הגלובליים, אשר מוגדרים בתוך קובצ מקור כלשהו מחוצ לפונקציות. ניתן להתייחס אליהס בפונקציות אחרות, וערכיהס נשמריס כל זמן ריצת התוכנית, כך מקבליס מנגנון נוסף להעברת ערכיס מפונקציה אחת לאחרת. טווח ההכרה של המשתנים הגלובלייס הוא בכל הפונקציות המוגדרות, החל מנקודת ההגדרה של המשתניס הגלובלייס ועד סוף קובצ המקור, ואורך החיים שלהס 4 המדריך השלם לשפת 6 הוא כל משך ריצת התוכנית. הזיכרון המוקצה עבור המשתניס הגלובלייס ישתחרר רק בסיוס התוכנית, ולכן כל הערכיםס נשמריס במשך הריצה שלה. ניתן להשתמש במשתנים גלובליים גם בקובצי מקור שוניס מהקובצ בו הוגדרו. כדי לעשות ואת, על הפונקציה הקוראת להכריז (שיס לב, הכרזה ולא הגדרה) על המשתנה המסויס שברצונה להשתמש בו כמשתנה גלובלי. הכרזה כזו מציינת למהדר שמשתנה זה מוגדר בקובצ מקור אחר, חיצוני ((בּחזסזאם). צורת ההכרזה: ; <שם המשתנה> <טיפוס> תש₪%66% הכרוה כוו בתוך פונקציה טובה עבור אותה הפונקציה, ואילו הכרוה כוו מחוץ לפונקציה - טובה עבור כל הפונקציות מאותה נקודה, ועד לסוף קוב המקור. נציג תוכנית דוגמה לשימוש באופציית חז)%א6 לשיתוף משתנים גלובליים בין קובצי מקור שוניס. / אאא אא קובץ תקליטור: 506 *****/ /* שימוש ב-מ%66%א5. קובץ ראשי */ <ת.5%6010> 01066ם1 <ת.10תסס> 1061066 650 5 6ב /* הכרזות על פונקציות אשר הוגדרו בקובץ זה */ סש 1 ו ופ וס ; (52)0010 םת מ6%%6%2 16סט הכרזות מ66א6 למשתנים גלובלים, אשר הוגדרו בקובץ מקור אחר (6. 00902ם6) */ הכרזה זו מציינת למהדר שהמשתנים הוגדרו בקובץ מקור אחר והם למעשה גלובליים לשני הקבצים. אפשר לראות זאת כמשתנה גלובלי לקובץ אחד גדול, אשר ניתן לעדכנו /* מכל מקום בתוכנית. מומלץ להימנע משימוש במשתנים גלובליים. /* מערך חיצוני יוכר בכל התוכנית */ | || 55 5 65 ו ו /*+ משתנה חיצוני יוכר בכל התוכנית | */ וה 61651 שופ ו 72 ₪ 2 1 ₪ = 8 ₪ 06 ₪ 8 (10סט) מנ1נאת 1% הכרזה על משתנה אשר הוגדר כגלובלי בקובץ המקור 6. 902 600 משתנה זה 9 /* יוכר בפונקצית גאח בלבד. לא ניתן לאתחל משתנה חיצוני בשורת ההכרזה. וש ו מותו הפ ל 8( 6 /* הפעלת הפונקציות המקומיות, אשר הוגדרו בקובץ זה */ פרק 9: אפיון משתנים וטווח ההכרה 185 ל( 51 מ ה ; () 2+ ת תמ66%א6% 6 = שש שו ((מונופשו- ה הפב )7 ) ו סומ וב מנוסן ל( 5 )| /* הפעלת פונקציה השייכת לקובץ .600902 */ ;()1+ 8 םע6%66 ניתן לשנות את ערכו של משתנה זה. יש לזכור, שכל */ /* קובצי המקור "הרואים" משתנה זה, יקבלו אותו עם הערך 6 = שש שו /* הפעלת פונקציה השייכת לקובץ .600902 */ ;()1+ 8 םע6%662 /* הדפסת ערכי המשתנים הגלובליים תוך ציון מקום ההדפסה. */ ; (עהט ם662א6,"ם50 = שש ₪ ( פופו פ₪)) * )) ו סומווג פס ו = 2 6 611 ( מו מל התו5)) )*‏ סופווב פנוסן ; (עאט ת%ע%66א6% 010081 ,"ת%8 = 6ת8%83 מע66א6% (ת1הת<-ת םע662א65)")6םת21ס ; (6ת8א5 מ%669א6 ; ("ץ6א שת8 5655קם")%1תנ1עק ; () 96605 ; (0) ממגו26% (10סט) 11 ת ת66%א6% ב1סט ָ /* הדפסת ערכי המשתנים הגלובליים תוך ציון מקום ההדפסה. -/ ו = פפש ו 611 21 ה )7 ) 5 סוווב מנוסן ; (עהט ת%ע%66א6% 010081 ,"מ%58 = סתה8%8 מע566א6 (51 ת מע66א65)")6מ1מס ; (6ת8א5 מ%669א6 סש 2 ה וס |0) ןפש ָ /* הדפסת ערכי המשתנים הגלובליים תוך ציון מקום ההדפסה*/ 6 = שש מ 611 (( 2 ה בשומו וב פנוסן ל 58 בו 516 ו ,"מ%58 = סתהא8 מע66א6 (52 ת םע66א65)")6מ1מס ; (6ת8א8 מ%66%א6 6 המדריך השלם לשפת 6 / א א אא קובץ תקליטור: 00902.6 0 /* שימוש ב-מ66%א6. קובץ מקור */ <ת.56010> 1010066 <ת.10ם0ס> 01066ם1 /* הגדרת משתנים גלובליים ואתחולם */ 90 עהאט מ6%66%2 10081 6ת1 = קש ₪ פוב 7 7 [5 ] סתהא5 ת66%א6 עַ8ם0 */ 89 0 1 ₪ ₪ א שיש -< נש 1 5 ו 6 ָ הדפסת ערכי המשתנים הגלובליים תוך ציון מקום */ /* ההדפסה. קובץ 600902 פונקציה 11 קש ו ל 55 ופ 661 1 ,"ת%5 ; (6ת8א5 מ%669א6 / א א 9% תוצאות ריצת התוכנית: ו עהט תת66%א6% 010081 פוש 5 (( 1 ₪ ממ ש6)) ') ו הו ב מס ((1 5 )7 ) ו סוהווג פס 5 5 21 = ה ש)) )ו סוהו ב פס קובץ תקליטור: מ.0902ם0 ו 2 וש 51 ₪ ב 60 0 = עהט ם66%א6% 521(410081 ת םע66א0) 1טת = 6ת8א5 מע66א51(6% ת םע66א0%) 0 = עה8ט ם66%א6% 522(410081 ת םע66א0) 1טת = 6ת8א5 מע662א52(6% ת םע662א0%) 9 = ע8ט ת6%%62 (ם1את<-ת םע662א0%) 9 = עהט םע66א51(6% 8 םע66א0%) 0 = ע8ט ם66%א6 21(10081 8 םע866א0) 1טת = 6ת8א58 מע66א51(6% 8 םע662א0%) 6 = עהט מםע66א51(6% 8 םע66א0) 0 = עאט םע66א6% 10081ש11(6 8 ת66%8א6) 1טת = 6ת8א8 מע66א51(6% 8 םע66א0%) 6 = ש8ט ת6%%62 (ם1את<-ת םע662א0) 0 = עאט מ66%א6 610081 (ם1את<-ת םע66א0) 1טת = 6ת5%88 מ6%662 (ם1את<-ת םע66א0%) ץצסא צם8 6858-כ פרק 9: אפיון משתנים וטווח ההכרה 187 | שים לב/ מומלץ להימנע משימוש במשתנים גלובליים ככל האפשר, אלא אם אין ברירה, כמו לדוגמה כאשר משתנה מסוים דרוש בהרבה מאוד פונקציות. זכור? שימוש רב במשתנים גלובלייסם מקשה על קריאות התוכנית ועל התתזוקה שלה. שינוי ערך של משתנה גלובלי, כאשר מספר פונקציות אינן *יודעותיי על כך דבר, יוביל לתוצאות שגויות. נקודת ציון/ <וד אס בכל זאת צריך להשתמש במשתנה גלובלי, מומלץ לקבוע לו קידומת סט לפני שמו, כמו ?אטחסווש זחו, כדי שנזכור שמדובר במשתנה גלובלי, ומקפיד על השימוש בו. משתנים סטטיים לעיתים מעוניינים להקנות למשתנים אוטומטיים אורך חיים למשך ביצוע התוכנית כולה (בדומה למשתנים גלובליים), אך לשמר את תכונת הפרטיות שלהס מבתינת טווח ההכרה. כלומר, משתנה כזה, שטווח ההכרה שלו מוגבל רק לפונקציה שבה הוגדר, הוא משתנה סטטל (5/906). נשתמש במשתנה סטטי, כאשר ברצוננו לשמור על הערך שהתקבל בו בומן ביצוע הפונקציה, עבור הקריאה הבאה לאותה פונקציה. משתנה סטטי מוגדר כך: ; <שם המשתנה> <טיפוס> 568616 אם ברצוננו שמשתנה מסויס יוכר על ידי מספר פונקציות בקובצ מקור מסוים ואך ורק בהן, נשתמש בהגדרה זו לפני הפונקציה הראשונה (מחוצ להגדרות הפונקציות שבקוב המקור). משתנה כזה מכונה סטטי-כללי 5900 |88סו6) ויוכר מנקודת הגדרתו עד סוף קובצ המקור, ואך ורק בקוב זה. כך מאפשריס לקבוצת פונקציות לשמור על הפרטיות של המשתניס שלהן, ועם את - להשתמש בהס במשותף. הסכימה שבתרשיס 9.2 מתארת את הקבוצות השונות וטווחי ההכרה שלהן. 8 המדריך השלם לשפת 6 קובץ מקור 1 1-10 ססטה | 6100 | ססגו3 | 8105 | פס61 1% %מ1 1% 1% %םג | עַַַם0ס 1 םס ס ַ 8 מס % ;תס עהתס ₪ ₪ ₪ -- תו 0 5 ו תרשים 9.2: טווחי המדרה של משתנים בקובץ מקור 1 קובץ מקור 2 70 | ססגו8 % | םס 1 % ;ס סת1 םת6%66 (6 .52 | שאתס מת66א0% ו ;א עאםס 230( 1 שו ו תרשים 9.2 (המשץ): טווחי הגדרה של משתניס בקובץ מקור 2 ניתן לראות בטבלאות של הקבציס 1 ו-2, שההגדרה האחרונה של משתנה בעל שס מסויס היא שקובעת, כאשר אזור ההגדרה שונה מהאזור בו הוגדר המשתנה קודס. פרק 9: אפיון משתנים וטווח ההכרה 189 במקרה שלנו, המשתנה 608 מטיפוס תו מוגדר בקובצ מקור 1 כמשתנה גלובלי, וטווח ההכרה שלו הינו עד סוף הקוב. אולס בפונקציה ()1), שהיא שטח ריבוני ושונה מאזור ההגדרה המקורי, הוגדר משתנה בעל שס והה כערך פורמלי, ולכן הוא משתנה אוטומטי מטיפוס שלס. הגדרת 6 כמשתנה אוטומטי מטיפוס שלס תופסת לגבי הפונקציה ()1+ בלבד. בפונקציות נוספות בקובצ המקור 1, יוכר שוב המשתנה הגלובלי ח6. יש לציין, שניסיון להגדיר משתנה גלובלי מטיפוס שלס בשס ח6, היה גורס להודעת שגיאה בזמן ההידור, שכן מדובר בהגדרה סותרת באותו אזור הגדרה. המשתנה 8 מוגדר בקוב מקור 1 כמשתנה גלובלי מעל הפונקציה (10), ולכן הוא יוכר מנקודת הגדרתו עד סוף קוב מקור 1. בקובץ מקור 2, 5 מוכרוז כמשתנה גלובלי מחוצ לכל פונקציה, ולכן הוא יוכר כמשתנה גלובלי מנקודות ההכרזה ועד לסוף קוב מקור 2 המשתנה 8 מוגדר כגלובלי בקובצ מקור 1, בדומה למשתנה פ. אולס בקובצ מקור 2 הוא מוכרז כחיצוני רק בתוך הפונקציה 30, ולכן הוא יוכר כגלובלי בתוך פונקציה זו בלבד. אפשרות נוספת לשימוש באופציית 5)906, היא הסתרת פונקציה מפני קבציס אחרים. שיס לב/ כאשר נגדיר פונקציה כ-57906, לא ניתן יהיה להפעילה מתוך קובץ מקור אחר. בפעולה זו אנו מסתירים אותה מפמי קבצים אחרים. מדוע זה טוב? כאשר נחליט שהפונקציה בקובצ המקור הינה פנימית ונועדה לשימוש אך ורק בקובצ המקור על ידי פונקציות אחרות באותו קובצ, למשל. הוספת ההגדרה 50806 לפני הגדרה והכרזה של הפונקציה, תמנע מאתנו להפעילה בטעות מקובצ מקור אחר ובמיוחד - על ידי התוכניתן אחר הנדרש להוסיף את חלקו למערכת, או לתחזק אותה. בתוכנית הדוגמה הבאה נדגיס את השימוש באופציה 5/9066 להסתרת פונקציות. / אאא קובץ תקליטור: 06 *****/ /* שימוש באופציה 568616 להסתרת פונקציות */ <ת.5%010> 010866םמ1 <ת. 10םסס> 61066ת בנז 605 35165 ₪ ₪ ₪ ₪ א = ₪ 1 2 ₪ ק (10סט) מ1את %6ם1 ָ 61568 )( 8 0 המדריך השלם לשפת 6 /* לא ניתן להפעיל פונקציה זו מקובץ זה */ ₪968 // 81)(7 ₪ 526 // ; ("ץ6א שת8 5659קםת")%1תנ1עק 9660 )( ; ; (0) םעגו26% / אאאאא קובץ תקליטור: 0.6 *****/ /* שימוש באופציה 568616 להסתרת פונקציות */ <ם.56010> 66ט10סמ1+ הגדרת פונקציה כ 5568616 תמנע מאתנו להפעילה בקובצי מקור 4 /* אחרים, אך ורק בקובץ זה. (סש)) פו 5 וו ענ( ופוסו ָ 7 1 ₪ ופוסו סו תה 1" ) ₪ שו ה / קובץ הכרזות לקובץ 8.6 549066 7 קובץ תקליטור: 0200905.6 7 /* שימוש באופציה 5%68%16 להסתרת פונקציות | */ /* הכחוה של פווקצי ‏ 56| "/ )1 ₪ 6026 6 6 סוב משתני אוגר הקבוצה הרביעית והאחרונה של משתניס בשפת 6 היא משתני האוגרים (₪60156 65). קבוצה זו תקפה אך ורק לגבי משתנים אוטומטיים. הגדרה של משתנה אוגר היא ייהמלצה'י למהדר ליצור פקודות מכונה מתאימות לשמירת משתני האוגר בתוך האוגריס של היעיימ (יחידת העיבוד המרכזית). ווהי המלצה בלבד, מכיון שמספר האוגריס ביעיימ קטן, ולא תמיד יכול המהדר להקצות אוגר למטרה זו. במקרה שהאוגריס תפוסים, יהיו המשתניס הללו אוטומטייס. צורת ההגדרה של משתנה אוגר: <שם המשתנה> <טיפוס> ע6018%66ע מומלץ להשתמש בהגדרה זו עבור משתניס אוטומטייס שהשימוש בהס שכיח מאוד. פרק 9: אפיון משתנים וטווח ההכרה 191 כדוגמה לשימוש במשתני אוגר נציג מוני לולאות : ) ותגופ ָ (ם %ם1 2 ,1 6ם1 ע2601866% (ב4+ ;םת => 1 ;0 = 58 ,1 = 05)1ס+ ;2 =+ 5 ; (8) םשגו26% ו הפונקציה ()חט5 מחשבת ומתזירה את סכוס המספריס מ-1 עד ה, שהוא הערך הפורמלי שלה. | ו-5 הס משתנים אוטומטייס המשמשיסם לצורך חישוב הסכוס. הגדרתס כמשתני אוגר תיצור (אס הדבר אכן אפשרי) תוכנית יעילה יותר, שכן הפעולות בין האוגריס ביעיימ הן המהירות והחסכוניות ביותר. נסכס את התכונות של משתני אוגר: א. דוגמה לנושא טווחי הכרה 12 מסיבות של גודל וטיפוסי המשתנים - משתני אוגר יכוליסם להיות מטיפוס תו, שלס, או מצביע בלבד (זּח6, לחו, *). מספר המשתניס השוניס המוגדריס כמשתני אוגר מוגבל, ותלוי בסוג המחשב בו אנו משתמשיסם. הגדרת משתנה אוגר מהווה המלצה בלבד למהדר. / א אאא המדריך השלם לשפת 6 קובץ תקליטור: 906 /***** <ת.5%60610> 61066םת81 7( )51 66 ל 25 66 20= שת (ס1נסץט) מנאת 1סט | 2 = + 1 ; (צ)12 (ץ,א,"ם (56 ,50) = (ץ,א) : () פנהת") 61מ1עס ( ו םה כל 72 = ץ = א (( ו ן 5( =( 65( שר פנ טסווב מנסן לאחר הרצת התוכנית יתקבל הפלט הבא : (20,5) = (ץ,א) : 110 (20,10) = (ץ,א) : ()12 (15,10) = (צ,א) : ()םתנ1ת השתמש בסכימת טווחי ההכרה שהוצגה קודס ובכלליס שלמדנו עד כה, כדי לאמת את נכונות התוצאות שקיבלנו. אתחול משתנים אתחול (ה2800|טוח1) הינו מתן ערכיס התחלתייסם למשתנים. פקודת האתחול משולבת בפקודת ההגדרה של המשתנה באופן הבא : ; <ביטוי אריתמטי של ערך ראשוני> = <שם משתנה> <טיפוס> דוגמה: 72 ,1=5 = '98 = 0 :עבת את קטע התוכנית הזה, אפשר לכתוב בדרך שונה: נ | ₪ ]- אתחול של משתנה גלובלי או סטטי הינו למעשה מתן ערך התחלתי למשתנה בתחילת הריצה של התוכנית. מכיון שמשתניס אלה קיימיס עד סוף ביצוע התוכנית, לא תהיה לפקודת האתחול כל השפעה, מעבר לעובדה זו. הערך הראשוני מחושב בזמן ההידור, ולכן הוא יכול להיות ביטוי המורכב מקבועיס בלבד! אתחול של משתנה אוטומטי מתבצע בכל פעס שמשתנה זה נוצר כאשר מפעילים את הפונקציה שבה הוא מוגדר. הערך הראשוני מחושב תוך כדי ריצת התוכנית, ולכן הוא פרק 9: אפיון משתנים וטווח ההכרה 193 יכול להיות ביטוי המורכב מקבועיס ומשתנים. בדוגמה הבאה נשכלל את הפונקציה )החפ וננצל את אפשרויות האתחול. (ם %ם1)תט 85‏ (1) )2( 1 1=, 7‏ 6ם1 ע2601866% (3) (1) 16ותט (4) )5( 5 += 1-- ; ; (5) ם2גו26% (6) [ (ל) הסבר: א. משפט זס? בדוגמה של משתני אוגר הוחלף (בשורה 4) במשפט סווחאו, מכיון שאיננו זקוקיס לחלק המאתחל של משפט זה. הקטנת ערך המונה (ו) משולב בשורה 5 בתוך פקודת חיבור מקוצרת, בשיטת הקטנה עצמית מאוחרת. בשורה 3 מתבצע האתחול של המונה, ואנו מסתמכים כאן על העובדה שמשתנה אוטומטי מאותחל בכל פעס שמופעלת הפונקציה בה הוא מוגדר. מטעמי נוחות ביצענו בפונקציה הנוכחית חיבור הפוך (מהערך הגבוה אל הערך הנמוך). תובצאת החישוב איננה משתנה כמובן. כאשר לא מתבצע אתחול מפורש, תקפים הכללים הבאים: א. ב. 14 משתנים גלובלייס וסטטיים מאותחליס לאפס על ידי המהדר. משתנים אוטומטייס יכילו ערך בלתי מוגדר על פי התכולה האחרונה של המקוס שהוקצה עבורם בזיכרון. ערך זה נקרא בלשון עממית 'יזבליי. המדריך השלם לשפת 6 הגדרות קדם-מעבד המהדר לשפת 6 כולל בתוכו קדם- מעבד (006550ז6-0זס), שתפקידו לתרגס משפטי בקרה (65ע660זו זס!וקוחס6) ולבצע לפיהם פעולות מסוימות בזמן ההידור. ניתן לסווג את משפטי הבקרה לשלוש קבוצות: חסופט!6ח1 1!6=] | הכללת קבציס לפי שס בזמן פעולת ההידור. ח0וזטזו5025% סזסבּוא | עיבוד והחלפה של הגדרות מאקרו. הסו3!וכ וח 60 [3ח0ווח0ס6. הידור מותנה. באמצעות משפטי בקרה אלה, אפשר לייעל את תחזוקת הקבצים, לקצר את גודל התוכנית המורצת (וחפזפסזק 9ח(6600אם) וליצור מכנה משותף למספר רב של קבצים. הערה טווח ההכלת (50006) של משפט בקרה, הוא ממקום ההגדרה ועד סוף קובץ המקור. כפי שנראה בהמשך, ניתן לבטל את השפעת משפט בקרה מנקודה מסוימת בקובץ ואיקך. במהלך ההידור של תוכנית 6 יש ארבעה שלבים: 1. מעבר (606550סזק-6זק) על קוב המקור לפני תחילת ההידור. כלומר, תהליך הקודם להידור. הפקודות המיוחסות לתהליך ז066550זק-6זק מאופיינות על ידי ציון "א (סולמית, דיאו) בתחילת השורה. שים לב/ תהליך זה גורס בדרך כלל להגדלת קובץ המקור. תהליך 6סטוסחא למשק, מעתיק תוכן קובץ כותד 008060 לקובץ המקור. התמיות הידור קובעות מה ייכנס לקובץ המקור ובאיזה תנאי. 2 בדיקת תקינות הפקודות מבחינה תחבירית. 3 | יצירת קובץ, או קובצי 6₪ןסס. 4 קישור בין קובצי 60[פס כדי ליצור קוב 5אם (קובץ הרצה). פרק 10: הגדרות קדם-מעבד | 195 הכללת קבצים בדוגמאות השונות שהבאנו במהלך הספר, כללנו פקודה הגורמת לכך שבמקום בו היא נמצאת מוכנס לצורך ההידור תוכן הקוב 0.0ו500. <ת.5%010> 610866ת1+ הוראת 6|₪06חו% מאפשרת להכליל קוב כלשהו במסגרת קבציס אחרים. שימוש עיקרי לכך הוא בקובצי ההגדרות שאינס מכיליס פקודות ממש, אלא הגדרת טיפוסים, קבועיס וטיפוסי פונקציות. נהוג לכנות קבציס אלה בשס קובצי כותר (65| ז6806ח), או 65| 61006חו, ולתת להם סיומת : ח. או 6חו בהתאס. ההגדרה מתבצעת בשני אופניס : "םמ.שם קובץ" 0108₪6ם1 <ת. שם קובץ> 0100₪6ם1 במקרה הראשון, יחפש קדס-מעבד את הקוב בספריה הנוכחית או במסלול אשר נציג לפניו. לדוגמה: "ם.שם קובץאסספת218סס:6" 61066ם1+ במקרה השני יתבצע החיפוש במסלול הסטנדרטי: "מסטתסא1ספאת1ת20: 0" ראוי לציין, כי תוכנס של קובצי :6806 אינו מוגבל, וניתן לכלול בהס תוכניות ופונקציות, אס כי הכללה זו אינה רצויה ואינה מקובלת. ניתן לבצע קינון של הגדרות אלו, דהיינו הגדרת 06ט!6חו% בתוך קוב שגס הוא נכלל בקוב אחר. שיס לב/ הפקודה 6סטסחוא תגרום להכללת קובץ 6806 בקובץ המקור בזמן קק | ההקור. יי עיבוד והחלפה של הגדרות מאקרו נניח שבתוכנית אנו מתייחסיס לקבוע מסויס מספר פעמים במקומות שונים, לדוגמה: אורך מקסימלי של מחרוזת, גודל מערך, ערך מוחזר וכוי. אחרי שהרצנו את התוכנית מספר פעמיס הסתבר, שעלינו לשנות בה קבוע מסוים. ללא מנגנון ההגדרה היה עלינו לערוך את קוב המקור ולשנות את כל המשפטים שבהס מופיע קבוע זה. כאשר תוכנית המקור גדולה במיוחד - פעולת שינוי כזו קשה, ולא אמינה. לעיתיס קרובות צריך לבצעה מספר פעמים, כי לא מאתרים ומתקניס בפעם הראשונה את כל המשפטיס הרלוונטייס. מנגנון ההגדרה מאפשר להחליף את הקבועיס בשמות סמליים, ובעזרת שינוי יחיד לבצע את הפעולה שתיארנו קודס. ההגדרה נעשית בצורה הבאה: <ערך מוחלף> <שם סמלי> 6מ4+46+1 6 המדריך השלם לשפת 6 שיס לב/ שס סמלי נקרא גס קבוע. העדה! נהוג בשפת 6 להגדיר שמות סמליים באותיות אנגליות גדולות (690/9/9), כדי להבדילס ממשתנים ומילים שמורות. התוכנית הבאה מדגימה את יעילות מנגנוןו ההגדרה: / אא א קובץ תקליטור: 61001.6 א /* הדגמת מנגנון הגדרה */ <ם.5%6010> 61066ת1+ 0 אאא 6ת4611+ 1 משסתץ 6ם06+1+ 0 מפתתם 6ם4611+ 'ץ' מט05171סק 6ם%4611 'ת' מטזדזתסתא 6םת461+1+ םושש שפםו >/ (10ס7)0ץ8528 5111 6ת1 | ;%תטסס , [אם1זאת] פעסמתטםת 6ם1 ;עסחפתה עה8םס 09% 0 4100 0ס ס לח | מהרדש: > | | רלט לייא | לחש | | מהלקוען = מלרשו > נלללט/ מלרדען = | החלש | | לרק | לחש = מלש | קריע = | לצע, 1 4 צבן --] %=ן. צשן = ₪60 לופ ‏ = ₪פחו ((טט11תסמא == עסחפם8) 66 (אמתאהא > סתטסס)) 16נ1נתט | ,ץהעעה8 60 עסכתטם 8 ע6סםע םת") 61מנ1נעס ; (סתטסס-אם/אתא, ": 180865 ש16תנ1נהתסם: 50 ל( [ סו | 5 שו כ 7 655 ו 15 5 ( 57/8 52ב 56 שוהושלף שופ 6 )| סו בס 7 7 7 7 7 = 362 גאט פאר ת) ן(6 31 א שת 7 יבשא ש-שו ישש ששל | 2-מ ; (5₪62ת68 ,"%0") 508% ] (אתאתא == פתטסס) +1 ; (120₪) ם5גו266 ; (5תת) םש1ו26% ] /* תהעסשסעק 6ם6 */ (ס1סט) מנאת ה1סט ו וש 8 65 (8₪פע == ((92956 ₪111 = בשש 268)) 18 ; ("ץ16%661קתסס 111160 פ8ח שהעעת ם") 61מתנ1עס 1 ₪ ₪ ש צש יצ יצ ץצ 6 0 0 72 ₪ 000300000 00041 פ 6 פרק 10: הגדרות קדם-מעבד | 197 1-6 (31) ופ פה 39 שצ מ םל פוסו ה רסופן (32) הסבר: א. הערך המספרי הקבוע 20 משמש אותנו בארבעה מקומות שוניס במהלך התוכנית הקצרה. בעזרת מנגנון ההגדרה (שורה 1) תרמנו לקריאת (ש!ו768080) של התוכנית ולתחזוקתה. אס נרצה, בעתיד, לשנות את אורכו המקסימלי של המערך זספותטח, נוכל להסתפק בשינוי היחיד של ההגדרה: <ערך חדש> אמתאתא 6םת84611+ באמצעות המאקרו %06006 אפשר לבצע פעולות נוספות, כמו למשל לקבל ערכיס ולהציבס בביטוי מורכב. כאשר המהדר מגיע להגדרת המאקרו מוחלף השס הסמלי בביטוי כולו. ההגדרה: <ערך מוחלף> (פרמטר ם,...,פרמטר 1)<שם סמלי> 6מם4611+ דוגמה: מע*8/מ+8 (ס,8)תטא טנק אס5 6ם06+1+ א*א*א (א)0א6 16ס621 6ם4651+ לדוגמה, כאשר הקדס-מעבד מגיע לביטוי המכיל (0)10א6 6!מסקוט, הוא יחליף אותו בביטוי 10*10*10. באופן דומה, הביטוי ((פ+8))קא6 6!מקוש יוחלף ב-(8+5(*)8+5(*)8+5). שיס לב/ הסוגר השמאלי שויי צמוד לשם הסמלי כדי למנוע אי-הבנות בזמן הפענות של קדם-המעבד. נקודת ציון? השימוש בהגדרת מאקרו באופן זה אינו רצוי בתוכניות שבהן חשוב לקבל 1 תוכנית ריצה (0ח0600א) קצרה. השימוש בפונקציה במקוס במאקרו מאפשר לחסוך במקום, כי כאשר מצייניסם בתוך התוכנית שם של פונקציה, מבוצע דילוג אל מקום הפונקציה הנמצאת רק פעם אחת בתוכנית, ולא מעתיקים אותה בכל מקום שהיא נדרשת. מאידך גיסא, השימוש במאקרו יגרום לתוכנית להיות מהירה *ותר. רצוי להקיף בסוגריים כל פרמטר בהגדרת המאקרו, כדי למנוע שיבושים כתוצאה מקדימויות. 6+ יכולה להופיע בכל מקוס בקובץ אחר. בהגדרת 6ח06א ניתן לחרוג מגבולות שורה על ידי תו המשך יייי. דוגמה: [ם]. [סס6.]6[.]6ת8א 116ע] 58826 : 58066ש")1>ת1עס ₪50 6מם0611+ ; ("ת[6תהא 2856] [6תהא 15256סם] 8 המדריך השלם לשפת 6 בכל פעס שתופיע ההודעה 156 בקובץ המקור, היא תוחלף בשורת אחוזם, ובומן הריצה תוצג ההודעה הכתובה בין הגרשיים. שימוש נוסף בהוראת ההגדרה מאפשר להימנע ממשפטים ארוכים ומסורבלים. העדה! ניתן לבטל הגדרת מאקרו החל ממקוס מסוים ואילך באמצעות הפקודה ו6סחטא. היא תגרום לכך שהשם הסמלי לא יוכר אחריה /אלא אם הוגדר שנית בעזרת 6ח2060). ההגדרת : <שם סמלי> +6בתגו+ בעורת מנגנון ההגדרה והמנגנון המותנה שנלמד מייד, ניתן להגדיר יחסי גומלין בין קבציס שוניס הקשורים זה לזה. הידור מותנה הידור מותנה מאפשר לנו לכלול או להוציא קטעיס מסוימיס מתוכנית בהתאם לתנאי, או תנאיס מסוימיס. <ביטוי המורכב מקבועים> +1%+% א. הקטע יוכלל אם הביטוי אינו 0 <שם סמלי> +41+46 ב הקטע יוכלל אס השס מוגדר <שם סמלי> +646ם+4%41 ג. = הקטע יוכלל אם השם אינו מוגדר כל הגדרה )%1006 מסיימיסם במילה ו0ח6א, וניתן לכלול ביניהן את המילה 86!56. ניתן לבדוק מפתחות שוניס (אלה אותס שמות סמליים אשר השתמשנו בהם להגדרת תבניות הפקודות), אשר נגדיר תחילה בקובצ המקור. בהתאס לכך יבוצע הידור סלקטיבי של הקטעים השוניס של התוכנית. דוגמה לכך יכול להיות קטע שמטפל בטיפוסי קלט שוניס ומבצע פעולות אריתמטיות בהתאם: סט | 5ב0ב ;2פס6מתטםת ,1פ6סמתטם ‏ 11086 6 צפא צא1 +1586+ ;2עפסחטת ,1עפמתטם ‏ 6ם1 6+ צפא התס 15 + ; 2פס6מתטם ,1פפ6סמתטם ‏ 028% +6 + + 61מ6+ + נ0ת6+ ; 2עסמחטםת =+ 1מ65מתטםת פרק 10: הגדרות קדם-מעבד | 199 הסבר: אס צ5א ₪041 הוגדר קודס בפקודה 406₪06, תתבצע הפקודה עד ל-46|56. אחרת, יתבצעו הפקודות שנמצאות לאחר 46156 עד ל-6ח%060. טיפ? ניתן באותה שיטה לבצע הכללות מותנות של קובצי ₪68067. הבחירה בין הקטעיס השוניס תהיה באמצעות סדרת מפתחות כדוגמת : צפא צתסתע 6ם66%1 וא ?ַא1 6ם66%1 [א 085 6ם86%1 ₪ ₪ הביטוי הנבדק יכול להיות ביטוי מורכב הכולל פעולות אריתמטיות, אבל אך ורק בין קבועים. את ההתניות ניתן לכתוב בקינון, כפי שמוצג בדוגמה. הגדרות אלו מאפשרות לבדוק אס שמות מסוימים מוגדרים, ולכלול קטעיס שוניס בהתאם לדוגמה: צמא צתסתץ 11661 פא [תסתת 661מט+ 'ע' צמא לתסעת 6ם06+1+% +גסת או: צמא [תסע 5+ צפא [הסנע 6ם406+1 +גסת בעזרת הגדרות אלו ניתן לקשור בין קבציס רבים, גם אס תוכן חלק מהם אינו ידוע, ולמנוע הודעות שגיאה על הגדרות כפולות, או משתניס שאינס מוגדריס. דוגמה נוספת להידור מותנה: במהלך הניפוי של תוכנית ניתן לשב הדפסות ביקורת במקומות שונים, ולבטל את הביצוע שלהן כאשר התוכנית מוכנה להרצה. 0 ההמדריך השלם לשפת 6 ו קובץ תקליטור: 0201002.6 ו <ת.585%6010> 01066ם1 /* דוגמה להידור מותנה */ 6 66ת0611 (ס1נסט) מנאת ב1סע ו הרק שורה סופ | ( ו 0 כ הוה 0-5 ( 0 0 > ש ס6ספמת +1+06+ 7 2"₪ 6 ₪6 ₪ 3 )| הטב ספ + 6+ ] כלפ 56 3 25 5016" 2מההפס ] בתוכנית זו נקבל את כל ערכי הביניים של א ו-ץ. לאחר שנוודא שהתוכנית פועלת כראוי, נוכל לבטל את השורה 25806 46606 על ידי מחיקתה, או הכנסתה בתוך הערה, ונבצע הידור. כאשר נריץ את התוכנית, לא תבוצענה ההדפסות של ערכי הבינייס. בתוכנית גדולה ניתן לשבצ הדפסות במקומות שוניס לשס ביקורת, ולשלוט על כולן באמצעות שורת ההגדרה של 806פפ. כאשר מכניסים שינוייס בתוכנית, ניתן לחדש את פקודת 05806 6ח%06 ולהפעילה שוב עס הדפסות הביקורת בעת הניפוי. פרק 10: הגדרות קדם-מעבד | 201 מצביעים המצביע (וסזחוסק) הוא מצביע לכתובת בזיכרון. והו משתנה בעל גודל קבוע, אשר תלוי בסוג המחשב וגודל מרחב הזיכרון שלו. ניתן לראות במצביע מעין יינקודת ייחוס", אשר בפעולות חשבוניות פשוטות אפשר להזיוו על פני טווחים גדוליס של זיכרון, יילדלות'יי ממנו מידע ולהציב לתוכו מידע אחר. בכך ניתן לייעל את התוכניות הנכתבות. פונקציות בשפת 6 מקבלות פרמטרים 'לפי ערך' - 'יסטופּע עְפיי, אשר הדרך היחידה לשנותם הינה על ידי שימוש במצביעיס. הגמישות הרבה של השימוש במצביעים בשפת 6 הופכים אותס לכלי חשוב בשפה זו, אשר מחייב תשומת לב רבה כדי להימנע מתקלות ושגיאות. עלינו לציין, שלמרות שמצביע הוא משתנה בעל גודל קבוע, הרי כל אחד מסוגי המצביעיס מיוחס אל הטיפוס שעליו הוא מצביע. התעלמות מעובדה זו היא שגיאה נפוצה בתוכניות הנכתבות בשפת 6. אנו ממליציס לקרוא פרק זה בעיון רב, מכיוו שהבנתו תקנה לך כלי חשוב ורב עוצמה לכתיבת תוכניות בעתיד. מצביעים וכתובות זיכרון המצביע מצביע אל כתובת בזיכרון. אם א הוא משתנה מסוג שלס וכתובתו 2000, הרי שהמצביע אס המצביע עליו, יכיל כתובת זו. בשפת 6 משייכיס לכל משתנה שני ערכים : 6 ו-6ט]הּעז, או ערך שמאלי (סטופצ ‏ 16 וערך *מנ* (סטופט אחִפָוְ₪) בהתאמה. הערך השמאלי הוא כתובת המשתנה בויכרון והערך הימני הוא הערך שמכיל המשתנה. המצביע מכיל את הערך השמאלי של המשתנה שאליו הוא מצביע. המצביע יכול להיות מוגדר לפני המשתנה, או אחריו. לדוגמה, בתרשיס 11.1 מוצג בצורה סכימטית משתנה א שנמצא בכתובת 2000 וערכו הוא 25. פרק 11: מצביעים 203 *% 18106 / 8 / תרשים 11.1: שני ערכים משויכים למשתנה א דוגמה נוספת: בהנחה ש-אס נמצא בכתובת 2006 בויכרון, נראה בתרשיס 11.2 את תמונת הזיכרון והערכים של א ו-אס. 5 אס 8 / 108106 86 / 178106 א 255 / / 2006 ---< 2000 >--- 25 א תרשיס 11.2: כיצד פועל המצביע 10066 1-08 ניתן לראות, שאם נציב ב-אס את הערך 1996 הוא יצביע על המשתנה ץ. נכתוב תוכנית שמתאימה למצב זה. (ס1סט) פנ1את 1סע | ; אס* ,ץ ,א סם1 שו = אכ = ל קלפ = ע ] הסבר: 1-60 00009 א. לפנינו שני סימניס חדשים: 6 ו-*. הסימן * (כוכבית) פירושו ייהערך המוצבע על ידייי. לכן, משמעות ההגדרה שבשורה 3 היא: י"יהערך המוצבע על ידי אס הוא מטיפוס שלס'י. כדי להכריז למשל, שהערך המוצבע על ידי שק + הוא מטיפוס ממשי, יש לכתוב: ;עס +* 11086 4 ההמדריך השלם לשפת 6 הסימן 8 פירושו ''כתובתו שליי. בהתאס לכך מתקיימים השוויוניס הבאיס: 0 = א6 6 = 67 ומהו הערך שמייצג הביטוי אא + - ערך וה הינו 2006. בשורות 6-4 מתבצעות שתי הצבות למשתניס מטיפוס שלס : 5 = א א = ץ בדרך ו משתמשיסם במצביע אק כדי להציב ערך ל-א. משמעות המשפט ;אס* = ץ בשורה 6 היא: ייץ מקבל את הערך המוצבע על ידי אסיי. כאן, והו ערכו של א. מכיון שלכל מצביע משייכים טיפוס, עלינו להצהיר על כך בזמן הגדרתו: ;* פַם0 ;עס +* 11086 ;6תנסס 1* פַת0ס1 עתה נערוך סימולציה של התוכנית הקודמת להמחשת תהליך העבודה עם מצביעים. 7 קובץ תקליטור: 0201101.6 ו /* סימולציה של מצביעים למשתנים שלמים */ <ת.585%6010> 01066ם1 <ת.10ם0סס> 01066ם1 2 ₪ 2 1 ₪ = 2 ₪ 0 ₪ (10סט) מ1את %ם1 | ה ק (6 0368 ₪1 /* נדפיס את ערכי המשתנים שהוגדרו ונראה שערכם אקראי לחלוטין */ כ ל" קל 5 6 = לס 2 68 = ל 2 ₪ = )ופוס מוסן /* נדפיס את כתובת המשתנים שהוגדרו בייצוג הקסה-דצימלי */ ; (אק8 ,ץ8 ,א6 ,"מא% = אס8 , א% = ץ8 , א% = אא")61מ1סס /* נדפיס את כתובת המשתנים שהוגדרו בייצוג של מצביע ‏ */ ;(אס8 ,ץ68 ,8% ,"תק% = אסא , ק% = צץ8 , ק% = א1)"6>תועק נבדוק לאיזו כתובת המצביע 5 מצביע ומי מתגורר בכתובת זו, 5 ניתן לראות שהמצביע מצביע לעבר כתובת אקראית, וגם את הערך שנמצא בכתובת זר. אסור לעשות שימוש כלשהו בכתובת זו, שכן יתכן שערכה משמש את התוכנית שלנו או תוכניות אחרות, וכל שינוי שנבצע יביא לנפילת התוכנית שלנו במקרה הטוב, לנפילת /+ המחשב במקרה הפחות טוב, ולתוצאות לא נכונות במקרה הגרוע ןי" קאפ 2 9 = >לס | כשן = >עם ) סו ספ פרק 11: מצביעים 205 /* נעביר את כתובת המשתנה אל משתנה המצביע */ ;א = אס נדפיס את ערכו של המצביע אש וניווכח, שערכו הוא למעשה כתובתו ‏ */ של משתנה א. כלומר, הוא מצביע על משתנה א והערך שנמצא בכתובת / * ₪-אק* מצביע אליה הוא ערכו של משתנה א. 9( 9 2" ו6 = שש 6 = ₪ ) 5 ה ספ /* נציב ערך בכתובת שאליה מצביע א5. כתובת זו היא ערכו של משתנה א */ 57 = אס* נדפיס את הערך שנמצא בכתובת ש-אש* מצביע אליה -/ / *(כתובתו של משתנה א) ונווכח שערכו של משתנה א שונה, והוא עתה 25. פ ( ל" 8 ו ‏ = 6סן 610 = ₪ ) פ סוב סו / * נציב במשתנה ץ את הערך שנמצא בכתובת ש- אש* מתייחס אליה (ערכו של משתנה א) * / לפלפ = ק נדפיס את ערכו של משתנה ץ וניווכח שערכו שווה לערכו של משתנה א,*/ כלומר 25. נשים לב, שכתובתם של המשתנים א ו- ץ לא השתנתה, אך המצביע אס מוזמן ל"בקר" בכתובתם, לשנות את ערכם, ולעשות "ככל העולה על רוחו". מכאן ניתן להבין שמצביע הוא כלי רב עוצמה, אך יחד עם זאת מסוכן ביותר. /* לכן יש לנקוט זהירות מירבית בשימוש במצביעים. 0 ; ("ץ6א צטם8 2688ק")65ת1עס ; () 9660 ; (0) מ6682ת תוצאות ריצת התוכנית: 5 = אס* ,12803 = ץ ,29322- = 0 = אס60 ,5112 = ץ8 ,1114 = 0 >= אס ,2פתת = צץ6 ,4ססע = 5 = אס* ,8295 = 2 ,= אס* ,4ששק = אס 5 = אס* ,25 = א 5 = אסש* ,25 = ץ ,2עעק = א צסא צם8 6858-כ בנוסף לאופן המיוחד של ההגדרה, ניתן להשתמש ייבערך המוצבעיי על ידי המצביע, כפי שמשתמשים בכל משתנה מאותו טיפוס. בהתאם לכך הפעולות הבאות הן חוקיות : ++ (אס*) 7 / מס +5* = 268 1 6 המדריך השלם לשפת 6 שיס לב/ משתמשים בסוגרייסם בפעולת ההגדלה של המצביע: ++0ש"*). הסיבה 2 לכך נובעת מסדר השערוך של פקודות יחידניות (אונריות) כגו(: ++, -, *, -, אשר נעשה מימין לשמאל. ללא הסוגריים, הביטוי ++אט* היה גורם להגדלת ערכו של המצביע אס לאחר גישה למשתנה המוצבע על ידי אם. לעומת זאת, אס ברצוננו לבצע הגדלה מוקדמת 0סחסוחסוסחו-6זק), אין צורך להשתמש בסוגריים. הפעולה אט*++ תגדיל ב-1 את ערך המשתנה המוצבע על ידי אס לפני הגישה, ועל-כן לא השתמשנו בסוגריים. מדוע? אפשרויות השימוש במצביעים ובאריתמטיקה במשולב הן רבות ומגוונות, אך גם עלולות להיות מקור לטעויות. פעמים רבות, ההבחנה בין המקריס היא דקה, ומומלץ להשתמש בסוגריים כדי להבטיח שאכן יתבצע מה שדרוש. נקודת ציון? -ר הגדלת ערכו של המצביע בפקודה אונרית, תגדיל אותו בגודל הטיפוס שעליו הוא מצביע. למשק : שחו יגדל בשני בתים, 6087 יגדל בבית אחד. בדוגמה הבאה נחלק ב-8 את הערך המוצבע על ידי שס +, בהסתמך על הקשר החזק שיש לפעולות 6 ו-* ביחס לפעולות האריתמטיות *, /, +, -. לשם כך יש לכתוב: 72 / (עסס 1*) = 268 5 היתרון הבולט של המצביע הוא הגמישות והדינמיות שבשימוש בו. הגדרת משתנים, כגון: +חטס6, חט5, וחטח ו-%חו מייעדת לכל אחד מהס תפקיד ומקוס מוגדר בתוכנית, ואין בהס הגמישות הזצו. נקודת ציון? מצביע מסוג * וסט אינו מצביע לדבר, ויכול להכיל מצביע מטיפוס כלשהו. אולם, לא ניתן יהיה לבצע עליו פעולות ++ או --, מכיון שהמהדר אינו *יודעיי את גודל הטיפוס המוצבע. שימוש במצביע מסוג זה נעשה ביישומים מתקדמים. בעזרת מצביע, ניתן לבצע את רוב הפעולות וההצבות הדרושות בתוכנית. בדוגמה הבא נציג סימולציה של פקודות אונריות על מצביעים. בסימולציה זו נבחן את התהליכיס שלב אחר שלב, ובכל שלב נציג על המסך את ערכיהס של המצביעים ואת כתובותיהם, כך שנוכל להיווכח בשינוי כתובתו או ערכו של מצביע מייד לכשיתרחש. יו קובץ תקליטור: 0₪01102.6 *****/ /* סימולציה של פקודות אונריות על מצביעים | */ <םמ.55010> 66₪ט61מ+1+ <ם.10ם00ס> 66ט61מ+1+ פרק 11: מצביעים 207 א 2 ₪ ₪ 0 ₪ ₪ = ₪ 2 2 ₪ (16סט) מ1את %ם1 5 שו ₪10 /* עתה נדפיס את ערך המשתנים שהוגדרו וכפי שנראה ערכם אקראי לחלוטין* / 9( 6 0 "ה 6 = 5 2 6 = 55") ותו סוס /* נדפיס את כתובת המשתנים שהוגדרו דרך א'. */ ; (אק6 ,א6 ,"מא% = אק8 , א% = א%1)"6תנעק /* נדפיס את כתובת המשתנים שהוגדרו דרך ב '. */ ; (אק8 ,א5 ,"מק%5 = אס8 , ס% = א61)"8מ1עס נבדוק לאיזו כתובת המצביע א מצביע ומה נמצא בכתובת זו. ניתן לראות ‏ */ שהמצביע מצביע לעבר כתובת אקראית, וגם את הערך שנמצא בכתובת זו. אסור לעשות שימוש כלשהו בכתובת זו, שכן יתכן שערכה משמש את התוכנית שלנו או תוכניות אחרות וכל שינוי, שנבצע יביא לנפילת התוכנית שלנו במקרה /* הטוב, לנפילת המחשב במקרה הפחות טוב, ולתוצאות לא נכונות במקרה הגרוע |( 0 "ות = > כ = ₪ ) 5 וסוס /* נעביר את כתובתו של משתנה למשתנה המצביע */ ;אא = אס נדפיס את ערכו של המצביע אכ וניווכח, שערכו הוא בעצם כתובתו של */ משתנה א. כלומר, הוא מצביע על משתנה א והערך שנמצא בכתובת עליו אס* / * מצביע הוא ערכו של משתנה א ץש | לפ 9 = >לס | כ = 5ס) ו וב שמפן /* נבצע הצבת ערך בכתובת עליה מצביע א5. כתובת זו היא ערכו של משתנה אס */ לכו = ככ < נדפיס את הערך שנמצא בכתובת עליו אק* מצביע (כתובתו של משתנה א) ‏ */ / * וניווכח, שערכו של משתנה א שונה והוא עתה 25. 5 | = הלס | |ש = > ) שוסוה וב שמסן /* נקדם את הערך היושב בכתובת עליו אק* מצביע ב-1 -/ ;++ (אס*) נדפיס את הערך שנמצא בכתובת ש-%* מצביע אליו (כתובתו של משתנה א) */ וניווכח, שערכו של משתנה א גדל ב- 1 והוא עתה 26. ערכו של /* המצביע לא השתנה, והוא ממשיך להצביע אל המשתנה א 8( קלפ" ל ק "פ = 96 = ₪ 2 ₪ = )ה ל נדפיס את הערך שנמצא בכתובת ש-א0* מצביע אליו (כתובתו של משתנה א) */ וניווכח, שערכו של משתנה א גדל ב- 1 והוא עתה 27. ערכו של / * המצביע לא השתנה, והוא ממשיך להצביע על המשתנה א. 8 (%ן קלפ 2 2" 9 = 96 = ₪ 7 50 = )ה ספ /* נבצע הגדלה מוקדמת לערך שנמצא בכתובת ש-א0* (ב-1 כאמור של > 8 המדריך השלם לשפת 6 ָ נדפיס את הערך שנמצא בכתובת ש-א₪* מצביע אליה (כתובתו של משתנה א) 7 וניווכח, שערכו של משתנה א גדל ב- 1 והוא עתה 28. ערכו של המצביע לא השתנה, והוא ממשיך להצביע על המשתנה א. הצבת ערכו */ של המצביע בין סוגריים נועדה לצורך בהירות בלבד ועל כן היא מומלצת. 8 (%5 ןל 7 ₪72 9 = ₪ 96 = ₪ 7 5 = 95) 5 הס אזהרה! הגדלה באופן הבא תקדם את הערך שנמצא במצביע, כלומר תקדם -/ את הכתובת בשני בתים אל כתובת אשר יתכן והערך שנמצא בה שייך /* למשתנה אחר. כאן מתחיל הנזק. שימו לב! ררל נדפיס את הערך שנמצא במצביע א, כלומר את הכתובת המוצבעת, 2 /* שאינה הכתובת של משתנה א, ואת הערך שנמצא בכתובת זו. 7 (9%ן קפ 2 6 = אפ 6 = 0 ) ההוב מס ; ("ץ6א צטם8 2688ק")65ת1עס ; () 9660 ; (0) מ662ת תוצאות ריצת התוכנית: 6.- = אם* ,29319- = 2 = אס8 ,1154 2 >= אס8 ,4קסק 6- = אס* ,3203 = 9 = אס* ,4שעץ = 5 = אס* ,25 = 4 = אס 26 = אס* ,26 = 4 = אס 27 = אס* ,27 = 4 = אס 28 = אס* ,28 = ץצסא צם8 6858-כ מצביעים ומערכים קייס קשר הדוק בין מצביעיס למערכיםס. המהדר הופך כל התייחסות למערך, כמו למשל 3[=5]ץ878, להתייחסות באמצעות מצביע והיסט (01860), ומקבלים שהמצביע הוא שס המערך. ההבדל בין משתנה שהוא מצביע לבין שס של מערך, הוא בכך שהאחרון קבוע, ולכן בלתי ניתן לשינוי כפי שמאפשר מצביע. את משמעות ההיסט נסביר בהמשך. לפנינו דוגמה שתמחיש את ההקבלה בין שס מערך לבין מצביע: ;צסס 6* ,[5]ץ8228 0 פַַַםס ;צְהעעה 0 = מס 6 ;'8' = [7]4ץ28ע82 0 = .(2דסכ %00 פרק 11: מצביעים 209 הסבר: א. במשפט 2 הורינו כי שק 6 יצביע לתחילת המערך. במשפט ץאזזה 6 = וק 6 מומחשת ההקבלה שקיימת בשפת 6 בין שמות מערכים לבין מצביעים. יש להדגיש שהצבה הפוכה שק 6 = זז 6 אינה אפשרית שכן, כפי שציינו קודס, שס המערך הוא קבוע. ב. | משפטים 3 ו-4 מבצעיס את אותה הפעולה בדיוק: הצבת האות 3 לאיבר האחרון של המערך שאזזה 6. כזכור, בשפת 6 מסמניס את האיבר הראשון ב-0, ולכןו האיבר החמישי יסומן כך: [4]ץ8778 6. את קטע התוכנית שלמעלה ניתן לשכתב באופן הבא : ;[0]ץ8תע8 60 = עסס 6 ;'8' = (82287+4 0)* = (4+עטכ 66 כפי שרואים, כתובת האיבר הראשון במערך וערכו של שס המערך זהים. עובדה זו נובעת מההגדרה יישם המערך הוא מצביע לאיבר הראשון בויי. כתוצאה מהקבלה זו, ההצבה ;'8' = (4+ץפזוג -6* היא חוקית. המהדר מתייחס תמיד לביטוי [ו]א כמו אל ([+א)*. כאן המקוס להסביר את הקשר בין טיפוס המערך/מצביע לבין חישובי ההיסט. נניח שנתונים שני מערכים, אחד מטיפוס שלס טחו) והשני מטיפוס ממשי פּס). נגדיר: ;ק 1* ,[4]תטם 1 6ם1 ;םק 1* ,[4]תטםת 5 11086 המשתנים 0 | ו-כ + הס מצביעיס מטיפוס שלס וממשי בהתאמה. תמונת זיכרון אפשרית שמתקבלת לאחר הכרזה זו מוצגת באופן סכימטי בתרשיס 13 איבר 0 0 :תטם 1 איבר 0 0: תטם 1 2 אברו 202 איבר 1 1004 איבר 2 2004 6 אבר5 2006 איבר 2 08| [ 4008‏ ] -] 3000 :ס 1 איבר 5 2000 1008 תרשים 11.3: תמונת זיכרון מקורית של שני מערכים גודלו של המצביע בבתיס הינו קבוע ותלוי במרחב הזיכרון במחשב. נניח, שגודל הטיפוס השלסם הוא 2 בתים, וגודל הטיפוס הממשי הוא 4 בתים. בנוסף נניח שבמחשב שלנו מרחב הזיכרון הוא 21% ולכן גודל המצביע הוא שני בתים, כדי להכיל את 0 ההמדריך השלם לשפת 6 הכתובת העליונה של מרחב הזיכרון. כעת נבצע סדרת פעולות והה על 2 המערכיס ונראה את ההבדלים: א. /* 2000 = ס 1 */ ;חטם 1 = סק 1 /* איבר שלישי מקבל 5 */ ;5 = (2+ס 1)* ב. /* 4000 = ק 5 */ ;תטם 1 = ס 1 ;5 = (2+ס 1)* במקרה אי, המהדר רואה את כ | כמצביע מטיפוס שלם. לכן, לפני חיבור ההיסט לערכו של המצביע הוא יכפול אותו בשניים, שכן הו גודלו של הטיפוס השלס. כתובת התוצאה היא: 2 * 2 + 2000, כלומר 2004. לכתובת זו מציביס את הערך 5, וכפי שניתן לראות בתרשים 11.3, האיבר השלישי (איבר 2) אכן נמצא בכתובת 2004. במקרה ב'י, המהדר רואה את כ + כמצביע מטיפוס ממשי שגודלו 4 בתים ולכן, לפני חיבור ההיסט, הוא יכפילו ב-4. כתובת התוצאה היא 4008, וזהו המיקוס הנכון של האיבר השלישי (איבר 2) במערך וחטח ). לאחר ההצבה נקבל את תמונת הזיכרון, אשר מוצגת בתרשיס 11.4. 200 1000 200 102 200 14 200 1006 0 1008 2500 4008 1000 תרשים 11.4: תמונת זיכרון של מערכים במהלך העבודה הערך 5 בייצוג ממשי אינו 000000005 (בתאיס 4008 עד 4008) כפי שמובא כאן להקלת ההסבר, אלא ייצוג מעריכי, שפרטיו נקבעים בכל מחשב בצורה שונה. אס היינו משתמשים ב-כ | גם עבור ההצבה במערך הממשי וחטח +, המהדר היה מחשב את ההיסט לפי הטיפוס השלם, והייתה הצבה לכתובת 4004 (2 * 2 + 4000). זוהי כתובת האיבר השני במערך חטח +, ולא האיבר השלישי כפי שרצינו. דוגמה זו ממחישה מדוע יש להקפיד על צורת השימוש הנכונה במצביעים. אריתמטיקה של מצביעים בדוגמה קודמת הצגנו אפשרות להוסיף או לחסר קבועים ממצביעים. התרגוס של פעולות אלו לפעולות הכפל המתאימות נעשה על ידי המהדר. מכאן נגזרת היכולת לקדם, או להקטין מצביעיס בעזרת פעולות ++, --, כפי שנראה בהמשך. הפעולות האפשריות על מצביעיס הן מועטות: אין משמעות לכפל או חילוק של מצביעים. פעולות לוגיות כגון <, ==, > מוגבלות למצביעיס המתייחסיס לאותו מערך וכל חריגה תגרוס לתוצאות לא צפויות. כאשר נכיר טוב יותר את השפה, נלמד לעקוף מגבלות אלו ולהשתמש באריתמטיקה של מצביעים גם בפעולות אריתמטיות-לוגיות פרק 11: מצביעים 211 כגון *, |, 6. שימוש כזה מחייב הכרה טובה של מפת הזיכרון ושימוש זהיר בהצבות וו שינבעו מפעולות אלו. נראה מספר דוגמאות פשוטות שתמחשנה את האפשרויות שכבר הכרנו: / א%אאא קובץ תקליטור: 01103.6ם6 *****/ <ת.56010> 61066ת1+ כ (1) ושמ = 6 || 5 קש ה וסוס 65 (2) (ס1סט) מנאת ב1סט (3) | (4) 5 שופ| הרקה ק בחרתה 7 15220(‏ < 5 ב/סששותר-ופן ג 7 1-0) 5 (5) /* אתחול מערך[] פעססמתטם */ ; 0 = ע6ס ם* (6) ק5ופת = ₪ = ססספן (7) ( (++עסק)*) 16נ1תט (8) /* הצבע את 5% לסוף המחרוזת */ / וה (9) 8 615502808 8םס - 6 תהַם5 602086658 18 פסס")55מנ1טס ‏ (10) (₪ = >ספןק "הו 56 ] (11) לאחר הרצת התוכנית יתקבל הפלט הבא : 6 18 06ת011+1626 6םתם- 0 בת 6208662 18 מסס הסבר: א. בשורות 2-1 אנו מגדיריס את המשתניס והמצביעיס ומאתחליס את המערך פופח במחרוצת ייס1/אפי'י. ב שורות 6-5 הן דוגמה לאתחול מהיר של מערך בעזרת לולאת זס) ומצביע מטיפוס שלס, שק ח. צורת אתחול זו שימושית כאשר צריך לאתחל מערכים דינמייס. ג. = השימוש במונה ובשורות 6-5 מיותר, וניתן היה לנקוט בדרך שונה: ; (0=(++צפס ם)*;628(>20מתטםת-ת62ק ם);6258מתטת=62ס ם)102 כפי שהסברנו קודם, ניתן לבצע פעולות חיסור/חיבור כאשר המצביעיס מצביעיס לאותו מערך. כאן נעזרנו בעובדה זו ואת פעולת ההצבה הכנסנו במסגרת שלב העדכון של משתנה הלולאה במשפט זס!). שיס לב/ פעולת החיסור (ושקותשח אק ח) היא ההפרש בין שתי כתובות בזיכרון. / . התוצאה היא מספר, אשר במקרה שלנו מוכנס לתבנית מספרית (%0) מסוג /. 2 המדריך השלם לשפת 6 ד. במשפט 6ווחאו בשורה 8 הסתמכנו על העובדה, שהאיבר האחרון במחרוזת הוא 0 (ווטח בסוף קבוע מחרוזת) ומשמש כתנאי עצירה. בסיוס הלולאה, שק יצביע לקצה המערך []פוחּח. פעולת ייקידוס אחרייי הוכנסה לסוגריים, כדי למנוע פעולה לא רצויה של הגדלת הערך המוצבע על ידי המצביע, במקוס ערך המצביע עצמו. ה. הערך שמודפס במשפט ]ו (בשורות 10-9) הוא האורך של המערך 6וחפח, מכיון ש-שס מצביע לסוף המערך ו-6 מצביע לתחילתו. מצביעים וערכי פונקציות העברת פרמטריס לפונקציות נעשית בשפת 6 'לפי-ערך'' (סטואּט-ץ8). נניח שברצוננו לכתוב פונקציה, שתקבל שני ערכים מטיפוס שלם ותחזיר את המכפלה ואת המנה שלהס. נכתוב תוכנית להצגת אפשרות זו: / א אא קובץ תקליטור: 61104.6 הר <ם.55010> 66ט610ת1+ ( 5 50 שו ) וט בס /* גוף הפונקציה */ | ו ו (ס1סט) מנאת 1סע (10) ו 00 90 7 שו ( צ תע ( ; (ץ ,א)ט1681טת ) ( 0 ו6 16 ₪ 6 ₪ ")55065 ו ש ( הסבר: א. לא ניתן להחזיר בפונקציה אחת יותר מערך אחד במשפט חזטשסז. לכן ניסינו לפתור את הבעיה על ידי הצבת תוצאות הכפל והחילוק למשתנים א ו-ץ (שורות 7, 68. פרק 11: מצביעים 213 לאחר הקריאה לפונקציה (0טופוטווח הדפסנו את ערכי המשתנים א ו-ץ שאמוריס להכיל את התוצאות, אך להפתעתנו (הלא רבה) קיבלנו את המשפט הבא : 4 18 ץ/א ,16 18 ץ*א הסיבה לתוצאה זו היא תכונת העברת הערכיס. הפונקציה (טופוטחח אינה יימכירהיי את המשתנים ,א המוכרזים בתוכנית הראשית (חופח. כאשר אנו קוראים לה, מועתקים ערכיהם (16 ,4) למשתנים מקומיים זמניים המוכרוים בפונקציה (0טו0פוטח. כל הפעולות המתבצעות על אותס משתנים זמניים, אינן משפיעות על המשתנים שב-()חופחח. פתרון חלקי למצב אפשרי על ידי הגדרת ץ,א כמשתניס גלובלייס מחוצ ל-()חו8ח, וקריאה ל-(0עו90|טח ללא ערכיס כלל. במקרה כזה היו התוצאות המודפסות נכונות, אך שכרנו יצא בהפסדנו: הפונקציה (0עו4פ|טחח יכולה לבצע את הפעולות רק בין שני משתנים מסוימים - ץ,א. השימוש במצביעיסם מאפשר לעקוף בעיה וו ולשנות מספר בלתי מוגבל של משתניס מתוך פונקציה כלשהי. המצביע, כשמו, מצביע אל מקוס בויכרון. לאותו מקום יכולים להצביע מצביעים אחדים וכאן מצוי הפתרון: 7 קובץ תקליטור: 60201105.6 ו <ת.55010> 66ט610מ1+ (%פן" שוחו שש" שוחו ) שו בוטה ופי (1) ₪ ) כ 6 ה[החה- סמות (3) 9 9 שסן = םוה (4) 2 שש אס = ₪ (5) וו = סה (6) ;10 = שס* (7) )8( ] () מגאת (9) )10( | ? שצ 2 תות 1) 2 = א (12) 0 = ץש (13) ; (צ 6‏ ,6%)ט1681טת (14) 6 5 0/0 96 18 ש9) הנ (15) ] (16) 4 ההמדריך השלם לשפת 6 הסבר: א. שינינו את הפונקציה (0טוופוטחח. הערכיס שהיא מקבלת הס עתה מצביעיס מטיפוס שלס. ב הקריאה לפונקציה (0)צו0פוטות נעשית עס כתובותיהס של א ו-ץ כפרמטרים. הסיבה לכך היא, שהפרמטרים הפורמליים של הפונקציה הס מצביעים. בזמן הקריאה מקבלים אס ו-ץם את ערכי הכתובות בהתאם והם מצביעיס לתוכנס של המשתניס א ו-ץ בהתאמה. ג. | פעולות ההצבה בשורות 6, 7 משנות את הערכיסם של א ו-ץ. זוהי גישה עקיפה אך יעילה לפתרון הבעיות שהעלינו קודס. תוכנית הסימולציה הבאה תמחיש בפנינו את פעולת הפונקציה ;()צוש!טוח. / א%*%%א קובץ תקליטור: 0201106.6 ו /* סימולציה של פונקצית ()ט1581גטת */ <ת.585%6010> 01066ם1 <ת.10םסס> 01066םמ1 /* מצביע למשתנה שלם ועל כן שמון עשסת1סק (עפק) 5666%מם1 (1) */ לק( פשפן > ₪00 50 עספן 51 כותב) סש שופ ופצ (10סט) מ1נאת %6מ1 ן וצ 0 = 5 שן חצ ה( 6 ל 66 = ₪ (שןך 6% %₪2 = ₪2 (בחובת >6 המחה" פופ 6 2 0 6 = שש (עחך 6 9 = = (בחוטתג 6 ₪ ; (ץ8 ,א8)ט1681טת 0 6 1 9 6 - 5 ל = יפורטבוס ; ("מץ%6 שת8 5655קם")%1תנ1צס ; () 9660 ; (0) םמ2ו26%6 (ף פמפן 1" פב כ שפן 71 סוה ) קספו ונופ וטנס ָ ה פרק 11: מצביעים 215 "(ערך 1%טת) ,ס% = 16%גות8 (כתובת 1%טחת) (הגדרה) ם )ופוח 006 "(ערך ט61) ,%0 = טצ661 (כתובת ט61)ם, %8 = 16טת" 1 ה ה-א סמ 83 (התורת החפריע )ית "מ ₪ ₪ עס יה הבתורת המוטרעת = ופי ובא (ערך המצביע כ התן התה ה ו וסונ 6 4 0 / "מ, ס% = ץ שסס 3 (הכתובת המוצבעת) " 7 0 = א מש > ( שר וב ל ק% פספן 2" כ שססן 5 9 שפסש לק( פנספן ב" קה שו 0 קשר מסוסן 1 1 יש לשים לב שכתובת המצביע שונה מכתובת המשתנה מכיון ששניהם משתנים 5 התופסים מקום בזיכרון. הערך היושב במצביע הוא הכתובת של המשתנה ולכן /* כל פעולה אשר תתבצע על תוכן כתובת זו כאילו התבצעה על המשתנה ק (ש ששפן 691 9 (% פסשן 2 ק(ש עשפ 692 / (5 שש 5 ו = תוצאות ריצת התוכנית: 4 = ץ (ערך ץ) ,2עתע = ש8 (כתובת ץ), 16 = א (ערך א) ,4עעץ = א6 עצמו )* 6 ות *) טנס > פפפן 1ל עספן 1" (כתובת א) (הגדרה) , 168 = 16טת(ערך 16גח) ,2288 = 16גת8 (כתובת 16גות) (הגדרה) 1 = טגבב(ערך טצ61) ,6מעק = ( 4פסק 91 (כתובת צ81) א עס 3 (הכתובת המוצבעת) ,₪מעע = א עסס 81 (כתובת המצביע) ,0 = א מס 3* (ערך המצביע) , 2עעע = ץ עס 1 (הכתובת המוצבעת) ,0פעץ = ץ מסס 61 (כתובת המצביע) ,4 = ץ מס 1* (ערך המצביע) 4 18 צץ/א ,64 18 ץ * א ץ6א צם8 658עק מצביעים למחרוזות ושימושים בפונקציות בעת הדיון במערכיס הזכרנו, כי השימוש במצביעיס יפשט את התוכ ניות ויעשה אותן ברורות יותר. נזכיר, שאנו מניחים כי מחרוזות מסתיימות ב-ו|טח (0), ועובדה זו משמשת בסיס לכל הפעולות עליהן בעזרת מצביעים. כעת נוכל ל הפונקציות העיקריות העוסקות במחרוזות. 6 המדריך השלם לשפת 6 שכתב את ארבע פונקציה למדידת אורך של מחרוזת / אא מתוך קובץ תקליטור: 01107.6 וו ות (1) ו (2) ב (3) (מפפן פה 7 ופפ 79 << 605 )₪60 (4) 8( = אפ 5) ו (5) )6( ] הסבר: א. הערך שמקבלת הפונקציה 0ח5₪!6 הוא מצביע לטיפוס תו, המצביע לתחילת המחרוזת שאת אורכה מודדים. ב בלולאת זס), בשורה 4, מציביס למצביע שס 5 את ערכו של 5 ולכן שק 5 מצביע לראשיתו של המערך. כאשר שק 5 מגיע לסוף המערך, יהיה הערך המוצבע על ידו 0 (אפס) ולולאת זס) תסתיים. ג. | בשורה 5 מותחור הפרש הכתובות שבין המצביע שק 5 לבין 5, אשר מצביעים לתחילת ולסוף המחרוזת. ערך זה הוא אורכה של המחרוזת. דוגמה: ;"ק1טתת" = סתהַת* עַַאםס . 4% /* 1=5 */‏ ;(סשתהת)ם8%216 = 1 מהלך שישי - לולאת 10 7 מהלך ראשון - לולאת +10 סשת סשת / צר 35 0 | 0] 5 | 1 | צ | ג | 5 |+8..| 6| 5 | 1 | ט | ג | 5 |+5 תרשיס 11.5 למעשה, ניתן לוותר בפונקציה זו על המשתנה שק 5. מכיוו שהמשתנה 5 הינו משתנה מקומי וזמני, ניתן לשנות את ערכו בתוך הפונקציה, מבלי שהדבר ישפיע על המשתנה בו השתמשו כאשר קראו לפונקציה: (8) ם5%216 ; 8* מהתס תד (%5%01 94+2* <1=0) 508 2 (1) םמגו6%ת פרק 11: מצביעים 217 שים לב/ [ הרווח בכך שולי, כי היה עלינו להציג את המשתנה 1 כמונה. 7 ] תוכנית הסימולציה הבאה תמחיש את פעולת הפונקציה למדידת אורך של מחרוזת. ו קובץ תקליטור: 0₪01108.6 *****/ /* סימולצה של פונקציה למדידת אורך מחרוזת */ < ו ל >> 5 וחב כ( 05ו6) ובו מו 5 ססות א ₪ ₪ 0 ₪ ₪ = ₪ 1 2 ₪ 2 (16סט) מ1את %םמ1 ו מל 6 = ₪ 502 ל( 585 /* נדפיס את כתובתה וערכה של המחרוזת שהוגדרה */ ",ס% = 85 (כתובת המחרחת)(הגדרה) ")65םתנ1עס "מת, ס% = (<-5)8 (הכתובת המוצבעת) " 8( ;‏ ,8 ,659 , "םםת%5 = 5 (הערך היושב בכתובת המוצבעת) " ; ((8)ם85210 8 ,8 ,"ם%6 = (%5)ם65)"56210מ1מס ; ("תץ6א צְת8 688תק")%1תנ1עק 9660 )( ; ; (0) םמ2ו26%6 (₪* 6₪) 91 ₪ פוב ו /* מצביע למחרחת ועל כן שמו ע6פםב1ססק (עסס) 8ם1ע85 (8) */ ל ספ 5 65 (פהרופן 65 קפשפן 6" ₪72 = שסן 65 שק קפ = וס ₪6 ( בתובת פוב ( 005ג) *') 5 סו וב פוסן "מ, ס% = (<-062)8 5 (הכתובת המוצבעת) " ,צסס 85 ,"ם%0 = פסס 5* (הערך היושב בכתובת המוצבעת) " ? (פשפן 5" קפס 5 8 המדריך השלם לשפת 6 /* מה הכתובת של המשתנים כעת? קפ = פפפן ₪5 (כתובת המצביע) (עס+ 8166%)ם")%1תנ1עס "מ, ס% = (<-8)עסק ‏ ה כ טסופ 5 7 = ((=₪) ;(8 ,88 ,65 5 (=) ₪₪ = (ל=6) ספ 5 ו ) , תוצאות ריצת התוכנית: 8 (הכתובת המוצבעת) " 8 (כתובת המחרחת) " 8 (הכתובת המוצבעת) " /* /* מהו הפרש הכתובות ? */ (הכתובת המוצבעת) פ") +%מ51 8 (הכתובת המוצבעת) " ₪ = 65 ₪ ₪2 קששפן ₪ הלת (9 = ששפן ‏ 6) וה ו העדה: הכתובת של המחרוזת 5 יכולה להשתנות על פי ההקצאה של מערכת ההפעלה. יש לשים לב לשינוי הכתובת ולא לערך הספציפי. , תת00 = (<-5)8 (הכתובת המוצבעת) ,84עע = 65 (כתובת המחרחת)(הגדרה) נחת-806 = 5 (הערך היושב בכתובת המוצבעת) , הה00 = (<-62)8ס 5 (הכתובת המוצבעת) ,₪6עע = מסס 868 (כתובת המצביע) (505) 8 = מס 5* (הערך היושב בכתובת המוצבעת) ,; 0088 = (<-62)8ס 5 (הכתובת המוצבעת) ,₪6עע = מסס 88 (כתובת המצביע) (505) 0 = מס 5* (הערך היושב בכתובת המוצבעת) , 0086 = (<-62)8ס 5 (הכתובת המוצבעת) ,6שעע = מסס 868 (כתובת המצביע) (50%) 8 = עסס 58* (הערך היושב בכתובת המוצבעת) , 0082 = (<-62)8ס 5 (הכתובת המוצבעת) ,₪6עע = מסס 868 (כתובת המצביע) (505) - > מסס 5* (הערך היושב בכתובת המוצבעת) , 008 = (<-62)86ס 5 (הכתובת המוצבעת) ,₪6עע = מסס 88 (כתובת המצביע) (50%5) א = מס 5* (הערך היושב בכתובת המוצבעת) ,; 0082 = (<-62)8ס 5 (הכתובת המוצבעת) ,6שעע = מסס 88 (כתובת המצביע) (505) ות > מס 5* (הערך היושב בכתובת המוצבעת) ,; 0080 = (<-62)8ס 5 (הכתובת המוצבעת) ,₪6עע = מסס 868 (כתובת המצביע) (505) 1 = עסס 58* (הערך היושב בכתובת המוצבעת) ,; 0081 = (<-062)6 5 (הכתובת המוצבעת) ,₪6עע = םסק 88 (כתובת המצביע) (2ס+ 8566%) 005 = (<-5)8 (הכתובת המוצבעת) ,92עע = 85 (כתובת המחרחת) 7 (=) 0022 = (<-5)8 (הכתובת המוצבעת) (-) 0081 = (<-62)6ס 5 (הכתובת המוצבעת) פונקציה להעתקת מחרוזת 7 = (נחַת-806) םמ56216 ץ6א צת8 2688ק ל מתוך קובץ תקליטור: 01107.6 ב (500206* שַהַת0 = *)500206++( ( %* תהּתס) צץק0ע62פ5 ָ (++%8206%)*) 16נ1תט , פרק 11: מצביעים 29 הסבר: א. הפונקציה 50600 להעתקת מחרוזת מקבלת כערכים שני מצביעים מטיפוס תו. מניחיסם שהמצביע 06זט0ס5 מצביע למחרוזת כלשהי המסתיימת ב-ו|טח, ואילו המצביע 19706% מצביע למקום פנוי בזיכרון, שגודלו לפחות כאורכה של המחרוזת ובתוספת מקוס לצורך ווטח. הפונקציה (0ץק5₪6 מורכבת ממשפט 6ווחש בודד הכולל הן את העתקת המחרוזת והו את הבדיקה לסיוס. ווהי המחשה לעוצמתה של השפה בעת שימוש מושכל במצביעים. הערך של משפט השמה הוא ערכו של הביטוי מימין לסימן ההשמה ועל עובדה וו אנו מסתמכיס כתנאי שיעצור את לולאת 6ווחצו. בהגיענו ל-ו|טח המסיים, יהיה ערכו של הביטוי 0 (זהו ערכו של האיבר האחרון), הביטוי יהיה שקר והלולאה תסתיים. שוב עלינו להתריע מפני מצב, שבו המצביע 197060 מצביע למקוס קטן מדי, או שאינו מצביע למקוס פנוי כלל. במצב כזה התוצאות אינן צפויות ומהלך התוכנית עלול להשתבש. ראה תיאור של פעולת העתקה בתרשים 11.6. דוגמה: ;[1]6וס ע8ם0 ; (6ת8ם ,5גוס) ץ56200 מהלך שלישי 7 מהלך ראשון = = ספת ו 5גוס 2% +גוסם ] + [ [5] [‏ [ 5 ]6 [ ט [ 5[ 1 [ ץצ ] ג [ 5] + טּ ה ו ו מ ו מ ה ו תרשיס 11.6: העתקת מחרוזת פונקציה להשוואת מחרוזות / אאא מתוך קובץ תקליטור: 01107.6ם60 *****/ (0566000 ו 60 כ 5 ופי 66 ו (1) | (2) ;* 868 199%+* 68 0ת1178%==*56₪00+* ;) מ05ס+ (3) 3-96 כ 0 ₪ הדקר 6600 == 6 ופי מ (4) ] (5) 0 ההמדריך השלם לשפת 6 הסבר: א. לולאת זס] נמשכת כל עוד המצביעים 585זו ו-0ח5660 מצביעים לערכים זהים, ואינס שוויס לאפס. ב בגמר כל השוואה, המצביעיס מקודמיס לקראת ההשוואה הבאה. ג. | בנקודת אי-השוויוו הראשונה, או כאשר אחת מהמחרוזות הגיעה לסיומה, נפסקת לולאת זס). התוצאה המוחזרת היא ההפרש בין ערכי 45611 של התוויס בנקודת ההפסקה. פונקציה לצירוף מחרוזות ו מתוך קובץ תקליטור: 6001107.6 ו ב הב ₪ סום ס ה מום ה ם ם כ ב ופ לה | ק6 (פספן 95 ₪ 7 פופ ריר קפוסופן 5" = ספ 65 005 , 8 ( פנ סופ תדתר | קוסתרה קל ופ 65007 1608 הסבר: א. יש לצרף את המחרוזת המוצבעת על ידי המצביע 800, להמשכה של המחרוזת המוצבעת על ידי המצביע 856ם. ב בשורה 4 מקדמיס את המצביע זו 5 במסגרת לולאת זסו, עד סוף המחרוזת 2856. ג. | בשורה 5 מועתקיס הערכיס של המחרוזת הנוספת המוצבעיס על ידי המצביע 6, אל המקומות המוצבעים על ידי המצביע זו 5. בפונקציה (0ץק56 הצגנו אפשרות תכנות ללא המשתנה שק 5. בפונקציה (5068%, נוכל להציג אפשרות חסכון דומה במשתניס שס 5 ו-6. במקרה זה, יהיה החסכון משמעותי יותר, שכן אין צורך להציג משתנים נוספים : 65 1605 6 > 50006((( (886*) 116תשט ++5886 ; ((++8060)* = (++89856)*) 16נםתט , ו ָ פרק 11: מצביעים 221 שיס לב/ בכל הפונקציות שראינו לטיפול במחרוזות השתמשנו בתבנית פונקציה כזן: (2 ש8ט* %ע8ם0 ,1 עאט* שא8ת0)פתהת ססתג1 תבנית קודמת היתת: (2 מאט ,1 עא8ט) סתהת 06ם160 2 עאט ,1 שה8ט* 8%5ם0 כלומר, השוני הוא בכך שהגדרת המשתנים כעשית בהגדרת הפונקציה ולא בשורה נפרדת. תוכל לבחור בדרך שרצויה לך. מערכים של מצביעים עד כה התייחסנו למצביעים כמשתניס בודדים, המצביעים לכתובת כלשהי בזיכרון. כשס שיש מערכים של משתנים מהטיפוסים שהכרנו עד כה, ניתן להגדיר גס מערך של מצביעים. בכך אפשר להתייחס לכמות גדולה של נתוניס במרוכז ובגמישות, כפי שנראה בדוגמה הבאה. נניח שברצוננו לרכזּ שורה של הודעות, אך איננו יודעיס לכמה מהן נזדקק, ומה יהיה האורך של כל אחת מהן. אס נשתמש במנגנון המערכיס שהכרנו עד כה, יהיה עלינו לקבוע מראש את מספר ההודעות המירבי ואת האורך המירבי הצפוי להודעה אחת, ולציין ואת מראש בהגדרת המערך. בדוגמה שלפנינו נגדיר מערך שבו עד 100 הודעות שהאורך המירבי של כל אחת מהן הוא 50 בתיס: =[50] [100] 65858868 עַַַםס | , "ץסססץע62ט6 6110ם" ,"סת11 6₪ם5600 פם₪ 158 15ם+" ,"50=ת0%ת16 צתח ₪28%'8 6ת8 1028686 6ם₪ 15 6ם11 15ם" ,; "סת11 6עסם5" , "806פפסת 1856" נן הידור הקטע הזה יגרום להקצאת שטח זיכרון שגודלו 100*50, שהס 5000 בתים. אס נרצה להוסיף הודעה שאורכה גדול מ-49 בתים (כזכור, יש לשמור תו אחד לתו הסיוס ווטח), או להגדיר יותר מ-100 הודעות, יהא עלינו לשנות את הגדרת המערך בהתאס ולהדר שוב את התוכנית. ניתן לראות שניצול המקוס בזיכרון בדוגמה זו אינו יעיל, כי במקרה וה אנו וקוקיס למקוסם עבור 5 הודעות בלבד ורובן קצרות ואינן מנצלות את 0 המקומות שהוקצו לכל אחת מהן. 2 המדריך השלם לשפת 6 ההגדרה הבאה תאפשר לנו למנוע את החסרונות האלה, ולנצל טוב יותר את הזיכרון העומד לרשותנו: )=[] 5800פפף* | שַ8ם0 , "ץססץע62ט6 6110ם" ,"סת11 6ת5600 פם₪ 18 15ם+" ,"...0868%ם10 66 1585 6םת11 15ם6" קש "5800פסת 18586" ו המערך 655806 הוגדר כמערך של מצביעים. כל אחד מאיבריו הוא מצביע מטיפוס תו (ז8ח6), אשר מצביע על מחרוזת הנמצאת בזיכרון. ניתן לראות שבמקרה זה אין צורך בכלל להגדיר את אורך ההודעה הארוכה ביותר. בזמן ההידור של התוכנית, המהדר מקצה לכל הודעה את כמות הזיכרון הדרושה לה, וכל מצביע יקבל את הערך שלו בהתאם לכך. תמונה אפשרית של הויכרון לאחר ביצוע ההידור ניתנת בתרשיסם 11.7. 6 פס [0] 655866 65 5866 ]1[ תרשים 11.7: מערך של מצביעים הדפסת הודעה המבוססת על המשפטים האלה תתבצע באופן דומה בשתי צורות ההגדרה. לדוגמה, ביצוע המשפט השני: ;([6558066]1ת ,"%5")+6םתנ1עס ובדרך השנייה: ;( (655806+1ת) * ,"מ%5")+6ת1צעק פרק 11: מצביעים 223 שיס לב/ ( 0 - שם המערך הוא גס כתובתו וכאשר נוסף לו 1 נגיע לכתובת .. הבאה במערך. * - מציין את הערך שנמצא בכתובת זנ. ס6ת11 6ת5600 סם6 18 1585ם6 השימוש במערכיםס של מצביעים מאפשר גמישות ויעילות רבים יותר כאשר עוסקיס במספר לא ידוע של משתנים, שגס האורך של כל אחד מהם אינו ידוע מראש. התוצאת: מצביעים למצביעים מדוע להסתפק במצביעים פשוטיס בלבד! האס יש אפשרות להגדיר מצביע שיצביע למערך של מצביעים: שפת 6 מאפשרת הגדרה כזו. לדוגמה, ;[10] פ625סתטם* ,עסק** שם1 ;פפ62סמתטם = עס נוכל להתייחס למספר השלס המוצבע על ידי המצביע המצוי ב-[5]0ז6טוחטח בדרך זו: -=₪ ו ; [0 ] 28 ססותגום * או: ₪ ו ; ע6ס* * למספר השלם המוצבע על ידי המצביע שב-[3]פזסטוחטח נתייחס כך: ; [3] פעססמתטת* = 1 או: ; (0%7+3)%* = 4 למעשה, אין גבול לרמת העקיפין (|68! ח66000זו0ח1) בה ניתן להשתמש בתוכניות. כל רמה כזו מוסיפה מרחב פעולה ועוצמה גדוליס יותר מאשר הרמה הקודמת. הבעיה בשימוש ברמות עמוקות יותר היא המעקב אחרי מהלך התוכנית והסיכון הרב לשגיאות. רמת עקיפין שנייה (מצביע למצביע) מאפשרת פתרון יעיל וקצר של בעיות מסוימות ואפשר להסתפק בה ברוב המקרים. נניח שברצוננו לחשב את ממוצעי הציוניס של התלמידיס בבתי הספר. כל ביייס מיוצג על ידי מערך של מצביעים מטיפוס שלם, המייצגים את כיתות ביהייס. כל כיתה מיוצגת על ידי מערך של שלמים (בעל גודל שאינו קבוע מראש). תחילתו של כל מערך היא ציוניהס של תלמידי הכיתה והאיבר האחרון יכיל את המספר 1-. הפונקציה שתחשב את ממוצעי הציוניס תקבל ערך אחד בלבד - את שם ביהייס, ותחזיר את ממוצע הציוניס של כל התלמידיס באותו ביהייס. במהלך החישוב יודפס הציון הממוצע של כל כיתה. 4 המדריך השלם לשפת 6 התוכנית: ו קובץ תקליטור: 6201109.6 ו <ת.556010> 610866מ1+ 56 ו (1) 7720090 90 100 = | ₪1 ,[1-,6[=)20,55,90,82,100] 01898923 (3) ; [1-,6[=]76,64,88,99,85] 61355824 (4) = || | 01 ו (5) ;[3,0185824,0ת01888522,01885, 10185821 501 0 100 905 77006 2 2 = | | 68 שמג (6) ו 9 9 כ ו = || || שפו5 615 (7) )8( 6553 | | = 777 7909 55 1 ה 0 5 61 6151 = | || 5 61 %מג (9) ל הפ קחשת ₪ ששו פון (10) (( 61 > שו ו 50665 סופוסו וב (11) )12( )13( ₪ = חש 15 קש קחשת 620 תבסה 1% (14) ₪ = שש ₪1 = שו שר = מחשס מו (15) ו וו וי (16) זָ ; 0=תגופ=תגות (17) (1- =! 82806 6ם06ט560*) 116םמש (18) ; תגות (19) 6 וו = החוטב (20) ; 62806 6ת5%6006 (21) )22( 1 6 ב 6 65 665פו=)שת/) פנטן חווד פופ (23) ; ( (ותגום / גפ ) ( ב = מש ו (24) וטו = פט שושסו (25) ; 001ם50++ (26) )27( 1 ; (תטם 606/מ50 60%)מעטס26 (28) )29( ₪ פרק 11: מצביעים 225 ()םמגהת | (30) 319 ;סט 11086 (32) ; (ת 502001) 028066 8062806 = סעטה8 (33) 1 66העפטג םתה םתס1ט 6םמ06ט560 56 בת תב 65)"50₪002>תנ1עס (34) ל( ו ו ו ( 66061 62505 66 = [0ש (35) 5 66בעסטתג םתה תסנשט 6םמ06ט560 56 ַבם 28 5)"508₪002>תנ1מעס (36) ל( ו ו 7 ] (37) הסבר: א. השורה 11 מגדירה את סוג הפונקציה וערכיה. במקרה וה, מוגדרת הפונקציה 78060 3/6806 (ציון-ממוצע) מטיפוס ממשי, כבעלת ערך יחיד |00ח50, שהוא מצביע למצביע מטיפוס שלס. נבחן עתה בתרשיס 11.8 תמונת ויכרוו אפשרית על-פי ההגדרות של בתי הספר. הגדרת הערך |00ח50 כמצביע למצביע מאפשרת גישה לביייס שלס באמצעותו, כפי שמודגס בקוויס המרוסקים. בשורה 14 מוגדריס המשתניס המקומיים, בהס תשתמש הפונקציה במהלך חישוביה. המצביע 806זט %ח56006 יצביע בכל פעם על הציון הבא, אותו נוסיף לסה'יכ. וחטח 0% ,וחט5 0%+ יכילו את מספר התלמידים ואת סיכוס ציוניהס בכל הכיתות. טפ ו-חטח הס מוני בינייס של ערכיס אלה. שורות 28-16 מכילות את הלולאה העיקרית המבוצעת בכל שלב של מעבר על ציוני התלמידיס בכיתה כלשהי. היא מדפיסה את תוצאת הביניים כנדרש. ההצבה בפקודה 6וחשו בשורה 16 מעידה על היחס של רמות העקיפין שקיימות בין המצביעיס 07806 %ח50006 ו-|ססח56. בשורה 28 מותזר הציון הממוצע המשוקלל לפי מספר התלמידיס וסיכוס ציוניהס. שיס לב לתנאי העצירה בשתי הלולאות. תנאי העצירה של הלולאה החיצונית מיוצג למעשה על ידי משפט ההצבה ((00ח56* = 07806 %ח50₪06) אשר, כפי שהזכרנו בפרקיס קודמים, ערכו הוא ערך ההצבה (|00ח56*). תנאי העצירה של הלולאה הפנימית (שורה 18) הוא הביטוי הבוליאני (1- =! 07806 %ח50006*). בחרנו בערך 1-, כי בנתוני ציוניס אהו ערך בלתי אפשרי, ולכן ניתן להשתמש בו כתנאי גבול. 6 המדריך השלם לשפת 6 | 01888 2 01888 3 56001 8 -< | - 01888 4 01888 2 01888 3 תרשיס 11.8: מערכים של מצביעים למצביעים מצביעים לפונקציות השימוש במצביעים לפונקציות אינו שכיח, ופעמיס רבות נחליט לכלול אותו בתוכנית רק בדיעבד. כשס שמומלצ להפוך קטעי תוכנית שחוזרים על עצמס לפונקציות, קיימיסם מקריס בהס נרצה לבצע אותן פעולות עבור טיפוסים שוניס של נתוניס. במקריס בהס נרצה לבצע פעולות שונות על אותס נתוניס נשתמש באפשרות המוצגת כאן. נעיר, ששפת 6 מאפשרת הגדרת מצביעים לפונקציות, למרות שהפונקציות עצמן אינו משתנות. פרק 11: מצביעים 227 נשתמש בדוגמה כדי להסביר את הנושא : נניח שעלינו לכתוב תוכנית המחשבת היקפים של מעגליס החוסמים ריבועיס. התוכנית תקלוט נתוניס בשלושה סוגי ייצוג: א. שתי נקודות בייצוג קרטזי (קואורדינטות /,א). ב שתי נקודות בייצוג פולרי (רדיוס וזווית). ג. | אורך צלע. כדי לפשט את הדוגמה, נציג את ההנחות הבאות : א. הנתוניס ייקראו באופן סדרתי מתוך קובצ נתוניס. כל שורה מכילה את אחד משלושת הייצוגיס ומסתיימת בתווים 'ח' ו-ווטח. ב התו הראשון בכל שורה יגדיר את סוג חייצוג: 'ש'י, ייס'י, ייזיי בהתאמה. ג. | הנתוניס בקובץ הס בייצוג הקסה דצימלי ואין בורך בפעולות הסבה (חסופזש/חס6) כדי לקבל את ערכס האמיתי. הטיפול המפורט בקבציס יובא בהמשך הספר. ד. המהדר שבידינו מכיל את הפונקציות הבאות : (8)+זף5 מחזירה צ. (605)8, (א)חו5. ונניח שקובץ הקלט נראה כך: פ 15 07 02 18 60 מ 78 06 35 05 ק מ 07 ש2 הייצוג בדוגמה הינו בקוד 45011 ומשמש לצורך ההסבר בלבד, כיון שהקובצ מכיל תוויס שאינס ניתניס לייצוג. > השורה הראשונה מגדירה שתי נקודות בקואורדינטות (7,15) (18,2). > השורה השנייה מגדירה שתי נקודות: ברדיוס 5, זווית *35. ברדיוס 6, זווית 78ל. > השורה השלישית מגדירה צלע באורך 7. נניח שהפונקציה (א)ז50 מוגדרת כך: (8) 5062 7 תד ן ;(א * א)םת2660 ו כעת נגדיר שלוש פונקציות בעלות ערך יחיד מסוג 'מצביע לשלסיי, אשר מחזירות את האורך של צלע הריבוע. 8 המדריך השלם לשפת 6 א. פונקציה לקלט קרטזי: ב ופ ופול מו ו שר (( ((2 רפופ סופןחב) > = שופ סוס 5 )| שטוו (( ( ( (3*קסשפן שש 2)* = ( ;סופ ₪ )56 1 ב פונקציה לקלט פולרי: / א מתוך קובץ תקליטור: 01110.6 בו (עפס %קםת1* ע8ת182)0סס ו |[ ]| 5 5 ספוטו 655 /* הערה: פונקציות טריגונומטריות ב-6 מקבלות ערכים ברדיאנים */ > עשסן פב" = ץהעעה סקסס 0 (1866 7 3414" (21ן 6ח) *) ₪ ( ו ) * עשפ קב" = |1 |[ש225 סשפם (180 / 3414 (1 שופ ופ ) > 6 5 6) = רקופ ושן) = = |[2 | שמ ופפ (186 7 3418" (52-9ּן ₪ ) = ה ( )| רשפ ופ 2) * = || | 5 ופוס (160 / 3018" (5 52 5 ) *) 60 ( וו ) ( 2 פופ ו )| וו / ג. = פונקציה לקלט אורך צלע: / א מתוך קובץ תקליטור: 01110.6 בוו ו ו ופ שופ )ו / כתוב פונקציה נוספת, לחישוב היקף של מעגל חוסס. הפונקציה תקבל שני ערכים: מצביע לפונקציה המחזירה אורך צלע, ומצביע לשורת הנתונים. ו מתוך קובץ תקליטור: 6001110.6 ו ((1056 6165 1305 ₪ 1) 6065 616 1/0505 וב שופן הו תו (6 (160. 696816 פוו 160 (166 מה כ (5 1 סופוחו) ([1606 16 6*)= 158 156 15₪( > 2(‏ 168) 968 626 > 14 54) הפשפופ = 60% פאר ת) 60 1 00 פרק 11: מצביעים 229 הסבר: א. שים לב להגדרת הערך השני בשורה 3 : ;()(60! 68!6*) זחן חשוב להקפיד על צורת הגדרה זאת, שהיא ייחודית להגדרת מצביעים לפונקציות. הפונקציה ()69! 686 מוגדרת כאן כפונקציה המחזירה מצביע לשלס. ב הקריאה לפונקציה נעשית בהתאס למוסכמה: הערך המוצבע על ידי (690! 686 הוא (68! 686*). ווהי פונקציה, ולכן הקריאה בשורה 6 היא: (6ת11 סקת1) (166 0816*) התוכנית הראשית: ו קובץ תקליטור: 60201110.6 ה לעפ 5" פע 1 165 ; [6]40םת11 סטשת 1‏ מ85ם0 ; (*לה8תס) 26011182 , (*82ם0) ע18סס, (*885ם0) ם8 0826621 ות ;0-תטפ ם16 /* "6368" ססתהת 5116 סוסםת1 מ6סקס */ ק ( וו סו סופ 1 (₪=1 (פופושן 39 110 פושופופו ) 5 ו 15 בסו | ([6]0ת11 סטסת1) ם160ש5 8" 65 = 5 ה שו דשב 1 סוטופ ו פופו ופ ₪16 ;268% 8 5 ל ( 66615 כ המויב 1 וס ןמו וו ונ 16 וט 15 ;268% 98 66 = ₪ 168 ( ₪55 כ 1 הרעסב 1 פוב ה ו 16 ;268% :ו ו ופ 15661 6 םל ) פנ סוב פמפן ] ] ל וטופ 158 "ה 1 1 1261160 5 םשהש שו ) 5 פוחו ספ 0 המדריך השלם לשפת 6 הסבר: א. בשורה 6 מוכרוות הפונקציות הייחודיות המשמשות לחישוב צלע הריבוע בכל אחת משיטות הייצוג. הכרזה וו אינה הכרחית, כי ברירת המחדל לטיפוסי פונקציות בשפת 6 היא שלם טחו). ב. בשורה 8 נפתח קוב הקלט לקריאה ומתבצעת קריאה סדרתית של שורותיו באמצעות לולאת פווחצו שבשורות 23-9. ג. | כל שורת קלט נקראת לתוך מערך הקלט 6חו| %טסחו. ד. באמצעות משפט הוסזאו5, הבורר לפי תו הקלט הראשון, מתבצעת הקריאה לפונקציית החישוב ()ח6!6זו6 686 עס המצביע לפונקציה הייחודית המתאימה. | שיס לב/ [ שם הפונקציה (בדומה לשם המערץ) הוא מצביע לתחילת הפונקציה. ₪ תרגילים 1 לפניך תמונת זיכרון ותוכנית. מה תהיה תמונת הזיכרון לאחר הרצת התוכנית! 0 :עס 2002 () מגנאת 2004 45 | 2006 ;עפס* ,0=ץ ,0=א 6ם1 ו ו 20000 (- | 0 | -3 4 ו 34 (+ששי-3 | 8 | 306 ו 3 2008 אל 0/9 12 2008 פרק 11: מצביעים ‏ 231 2 | לפניך מערך שלמים ושני מצביעים. מה יהיו ערכי המערך לאחר הרצת התוכנית! 2 + = []82258 1 סת1 + ,21סק* %6ת1 (2 =+ 1עסס ;10 > (522ס-521ק) ;82287 1 = 22סס = 21סס) 1058 /2* = 1ע62כ* 2 = (12 + 622ס)* ו 3 כתוב בעזרת מצביעיס את הפונקציה (00ח₪ ‏ 5, שהוגדרה בשאלה 8 בפרק 6 (מערכיס ומחרוזות). 4 כתוב בעזרת מצביעים את הפונקציה 60 ח 57, שהוגדרה בשאלה 9 בפרק 6 (מערכים ומחרוזות). כתוב תוכנית קצרה וקריאה. 5 כתוב פונקציה (0)שחן 5₪ שהופכת מחרוזת ומחזירה מצביע למחרוזת ההפוכה. למשל, עבור המחרוזת ייס1/אפ'י הפונקציה תחזיר ייפה/תפיי. מהס הערכיס שדרושיס לך כדי לבצע פעולה זו? 6. כתוב פונקציה ()קח6 ח6| 5 המשווה אורכיס של שתי מחרוזות ומתחזירה את הערכיס הבאיס: > ערך שלילי אס המחרוזת הראשונה קצרה מהשנייה. %> ערך 0 (אפס) אם אורכיהן שווים. > ערך חיובי אם המחרוזת השנייה קצרה מהראשונה. > אין להשתמש בפונקציה 00ח5016, ויש לכתוב תוכנית יעילה וקצרה. 7 נתון מערך של מצביעיס למחרוזות. כתוב פונקציה, אשר מחפשת את המופעיס של תו כלשהו במערך הנתון. הפונקציה מקבלת את המערך באמצעות מצביע ואת התו לחיפוש. היא מחזירה את מספר המופעיס של התו הזה בכל המחרוזות המוצבעות על ידי המערך. 8 כתוב תוכנית ראשית ופונקציה. הפונקציה מקבלת כערך את המערך שבשאלה 7, ומחזירה את מספר המופעיס של התו השכיח ביותר במחרוזות המוצבעות על ידי המערך. הפונקציה תציב את התו הזה במשתנה ז8ח6 אא (מטיפוס תו), השייך לתוכנית ()ח|ח. התוכנית הראשית תדפיס אותו ואת מספר המופעים שלו במחרוזות. בחר ערכיס מתאימיס וקרא לפונקציה באופן נכון. משימות: תרגילים 33-13. 2 המדריך השלם לשפת 6 מבנים מבנה (6ז0ז6ט5₪) הינו אוסף של משתנים מטיפוס זהה או שונה, המקובציס יחד תחת שס אחד. השימוש במבנה מקל על הטיפול בכמה משתניס בעלי קירבה בתוכנס, או במידע אותו הס מכילים. האפשרות לצרף כמה משתניס במבנה משולב, מקלה על הגדרת מבני נתוניס מורכביס ומאפשרת גישה מהירה ויעילה לנתוניס שבתוכם. תיאור והגדרה של מבנים הגדרת מבנה: <שם סוג המבנה>6%6טת562 הגדרת שדות בעזרת טיפוסים בסיסיים: תבנית ;< רשימת משתני מבנה > תרשים 12.1: תיאור סכימטי של מבנה הסבר: א. מילת המפתח השמורה 54666 פותחת הגדרה של מבנה, ועליה להופיע בתחילת ההגדרה. ב <שם סוג המבנה> : הגדרה זו הינה רשות. אם היא מופיעה - היא תוצמד להגדרת המבנה, כך שניתן יהיה להתייחס למבנה זה בעתיד באמצעות שם זה. מנקודת ההגדרה הזו תכיר המערכת טיפוס חדש (בנוסף לטיפוסיס הבסיסיים שכבר הכרנו) מסוג: <שם סוג המבנה> 6ס6גוע56 פרק 12: מבנים 233 ג. | הגדרת שדות: את תכולת המבנה מגדיריס בתוך סוגריים מסולסליס באמצעות טיפוסים בסיסיים המוכריס למערכת. למכלול ההגדרה הזו אנו מכניס תבנית. התבנית מקנה את צורתו ותכולתו של המבנה. ד <רשימת משתני מבנה> : הגדרה זו הינה רשות. המשתנים המופיעים ברשימה, במידה והיא קיימת, יהיו משתני מבנה בעלי תבנית זהה להגדרה. אס לא מצייניס רשימה כצזו, ישמש משפט ההגדרה להצגת טיפוס חדש שנשתמש בו בהמשך. נקל לראות, שהגדרת מבנה ללא <שס סוג המבנה> וללא <רשימת משתני מבנה> היא חסרת משמעות, כי אין כל אפשרות להשתמש בה. ה. לאחר שמגדיריס מבנה מטיפוס חדש, ניתן להגדיר בצורה מקוצרת משתני מבנה בעלי תבנית זהה, בעזרת ההגדרה הבאה: ; <רשימת משתני מבנה> <שם סוג המבנה> 6%וע56 <שם סוג המבנה> חייב להופיע כאן, ובלעדיו אין להגדרה כל משמעות. נשתמש בדוגמת יישוס כדי להציג את אפשרויות השימוש במבניס. נניח שברצוננו לתאר פריט, או מוצר מסויס, במסגרת תוכנית מחשב המסייעת בניהול חנות כל-בו. לכל מוצר יש מספר מאפייניסם: קוד-מוצר, שס-מוצר, מחלקה, מחיר, כמות הנמצאת במלאי, כמות מינימוס במלאי ושס ספק המוצר. את המאפייניס האלה אפשר לכלול במבנה, כדוגמת רשומה המכילה שדות של נתוניס שונים : + 200006 06וע56 2 מס (סשתם1 ;[10]%ת6ת600820 , [7]פתהת מס מַַםת0 7 מ1108₪ ; טת1 תנת ,צְעס6תס6טםת 1‏ 6ת1 ; [116%]10סקטפ עַַַםס ;ססמס ן[ הסבר: א. בדוגמה זו, <שס סוג המבנה> הוא שסטססזק. השס 6שטססזק קשור לתיאור אופי הנתוניס המוכלים במבנה, אשר מפורט בין הסוגרייסם המסולסליס. ב בתוך הסוגרייס המסולסלים מוגדרים משתניס מטיפוסים אשר מוכריסם לנו: %, חן ו-זהּח6. הס מהוויס את תבנית ההגדרה של המבנה ז6ט4סזס. ג. | שם המבנה שבדוגמה - ססזוס - הוא משתנה מטיפוס 6ש6טסזק 507066. נציג באופן סכימטי את המבנה (או הרשומה) שבדוגמה: תרשיס 12.2: מבנה של רשומה לדוגמת 4 המדריך השלם לשפת 6 כל אחד מהמשתנים המוגדרים בתבנית המבנה, נקרא שדה (60ו₪). על מנת לפנות לשדה מסויס נכתוב: <שם השדה>. בסצס שיס לב לנקודה (.) המחברת את שס השדה אל שס המבנה, כמו למשל: 6 ז.ה סז קוד המוצר של המבנה ססזם. זז סז המחיר של המוצר במבנה 6סזם. אילו הסתפקנו בהגדרת מוצר בודד, כדוגמת 6סזם, לא היה יתרון מיוחד "לארוז" במבנה את המשתניס המתארים מוצר. אפשר היה להגדיר את המשתנים באופן רגיל ולוותר על הקידומת 0סזם. יעילות השימוש במבניס באה לידי ביטוי כאשר מנצליס אותס כדי להגדיר מספר רב של משתני-מבנה. המשפט הבא מגדיר 3 משתניס מסוג מבנה-מוצר: 3 06400ע 0₪גוע56 כל אחד מהמשתניס ןס מכיל את אוסף השדות שהוגדר קודסם, בתבנית ההגדרה זו כדי להדפיס קטלוג מחירים של שלושת המוצרים, אפשר לכתוב את הפקודות הבאות: ; ("מת 106עק ףםם ססט6סעק ף") 61םת1עק ; (2106ק.1ס,פת8ם 5ק.1ס,"ם %5.25 ףםם %8 6") 65ם1עס ; (2.22106ס,6ת8ם עק.2ס,"ם %5.25 ףםם %8 6") 65ם1עס ; (03.22106,פתהת עק.3ס,"ם %5.25 ףםס %8 6") 65םמ1עס הצירוף '+סטססזס 50066יי במשפט ההגדרה ממלא תפקיד של ייסוג טיפוס משתנה" במשפטי ההגדרה שהכרנו עד כה. המשפט שהוגדר מקביל בתפקידו להגדרה : 72 סם1 באמצעות הגדרת המבנה טססזס הוספנו לארבעת הטיפוסים שהכרנו טיפוס נוסף המותאס לדרישה מסוימת - הגדרת מבנה. נחזור לדוגמה זו בהמשך. דוגמה נוספת: ברצוננו לתאר ייזמןיי על ידי הצגת שעות, דקות ושניות. לשס כך נגדיר טיפוס חדש באמצעות מבנה מתאיס. ]| שת%1 0%וע56 עטסםת 6ם1 תנת 6ם1 0 סת1 7 פרק 12: מבנים 235 הגדרה זו שקולה להגדרה המקוצרת הבאה: ) 6ת1> 6ס6גו560 7 ,תנגת ,עטסם ‏ %6ם1 ו מכיון שהשמטנו את <רשימת המשתניס>, משפט זה מגדיר תבנית בשס 6וחט. בשלב זה עדיין לא הגדרנו משתניס כלשהם. בומן ההידור, המהדר שומר את התבנית ומסמן לעצמו טיפוס חדש מסוג סח 5006%. כאשר נציין רשימת משתניס צמודה לטיפוס זה, תתבצע הגדרת משתנים ממשית ויוקצה להם מקוס ביכרון. במשפט ההגדרה הבא יהיו 61, 2 ו-%3 מבניס מטיפוס 6חוט. 32, 51 1+ ססגו%פ בהנחה שהמשתנים מכילים כל-אחד נתונים של זמן, ניתן לכתוב קטע תוכנית שיציב ל-₪ את הפרש הזמנים בין 1+ ל-2). ה קובץ תקליטור: 01201.6 *****/ <ם.550₪10> 61006ת1א 4 5שס | שה6ת סו (1) | מתו ות 7" סו לו 100-0278 = 2 10-20 1-4 פמנס | סה6תוקסום (2) (ס1סט) מנאת 16סע (3) )4( | )5( 2 = 51 0 = 7 = הנחב 1 = הו ה (6) )7( 066 = 1 566 - ה (8) )9( 63.560 += 02 )10( = 9 )11( ה (12) 72 =+ תגת.53 (13) )14( 9 )15( ו 3 הפ 6 הפ חן (16) ,"מ8מם8600 %56 ,פססטמתמ1ת %6 ,פעטסם 51)"%8ת1צס (17) 8 56 5 כ הנע 0 0 62 ו )18( ] 6 המדריך השלם לשפת 6 במשפטי ‏ שבשורות 8 ו-12 אנו מעדכניס שדה בעל ערך שלילי על ידי תהליך ייהשאלהיי משדה משמעותי יותר. לדוגמה, אס שדה השניות שלילי - נוסיף לו 60 שניות ונחסר דקה אחת משדה הדקות. תהליך דומה נעשה בין שדה הדקות לשעות. אתחול מבנים בדוגמה הקודמת אנו מסתמכיס על כך, שב-%1 וב- קיימים כבר ערכים. מתוכן התוכנית ניתן לראות שערכים אלה לא הוצבו עדיין למשתנים, ועלינו ללמוד איך עושים ואת. קיימות שתי שיטות להכנסת נתוניס למבנה: א. באמצעות פקודות הצבה. ב באמצעות אתחול. אס ברצוננו להציב ל-1+ את השעה 33:20 :13 (שעה 13, 33 דקות ועשרים שניות), נוכל לעשות ואת כך: 12 6106 006ע56 2 = מטסם.61 337 20 מנת.1+ 160 בדומה לאתחול המערך, אפשר לכתוב גם כך: ;[13,33,20+ = %1 שת1> 6סגות56 ההגדרה הכללית היא : ; [<רשימת ערכי אתחול>+ = <שם משתנה> <שם סוג המבנה> 56266 שים לב/ <רשימת ערכי אתחול> נמצאת בין סוגריים מסולסלים. שדות המבנה )6 יאותחלו לערכי הרשימה בהתאם לסדר הגדרתסם בתבנית. אס <רשימת ערכי האתחול> מכילה פחות ערכים ממספר שדות המבנה, יאותחלו השדות הנותרים לאפס. חוק זה ישים גם כשאין אתחול כלל/ כלומר, במבנה חדש (סטטי או גלובלי) יאותחלו כל השדות לאפס, אם לא הוגדר אחרת. אס בשורה (1) של התוכנית הקודמת נכתוב: 2, (%2=)14,50,25 ,[%11=)10,20,5 שת1ף 00%ע5% (1) יהיה הפלט בסיוס ריצת התוכנית : :1 31+1026₪0 סת61 6םמך 8 40 ,פ6סטת1ת 29 ,פעטסם 5- פרק 12: מבנים 237 שיס לב/ הערך השלילי מתייחס אך ורק לשדה השעות. כלומר: 5- שעות ועוד 29 6 דקות ועוד 40 שמות. | 0 נסה לשנות את הערכים שבשורת האתחול והרצ את התוכנית. בחן את התוצאות בהתאס לערכיס שהצבת. כדי לקבל הפרש זמן בערך מוחלט, נוסיף מספר פקודות בסוף קטע התוכנית הקודס, אחרי שורה 15 : ל מתוך קובץ תקליטור: 01202.6 5 (0 6 ₪32600) ו | ( 1 6 פא = 60 ו 27 = ₪3.8960 ] ( ופ 5 15055066 סו התרי ) פו סו ובפושן ,"מ8ת8600 %6 ,פסמטת1ת %6 ,פעטסם 61)"%6ת1עס 7 365 1-ו ו כעת, הפלט בסיוס התוכנית יהחיה: 1 06ת6ע62++41 6108 פםמך 8 20 ,פפסגמטת1ת 30 ,פעטסם 4 מצביעים למבנים כאשר עסקנו במערכים ראינו שניתן להתייחס למערך בשלמותו על ידי שימוש בכתובת שלו. כך גס במבניס - ניתן לקבל את כתובת המבנה ולהשתמש בערך זה בתוכנית. מכיון שמבנה יכול להכיל מספר רב של איברים, בדומה למערך, העברת מבנה בשלמותו לפונקציה היא תהליך מאוד לא יעיל. שפת 6 מבצעת, כוכור, העברה יילפי-ערך'י ולכן תתבצע העתקה של כל ערכי המבנה לתוך מבנה זמני וממנו למבנה היעד. פתרון טוב יותר יהיה להעביר את כתובת המבנה למשתנה פנימי של פונקציה, שיוגדר לצורך כך כמצביע למבנה. צורת ההגדרה הכללית תהיה: ;<שם מצביע> * <שם סוג מבנה> 66גומ562 לדוגמה: + 60060סעק ‏ 006ע56 0זס הינו מצביע למבנה מסוג 6שט6סזס. הסכימה הבאה מתארת את קשרי הגומלין בין המצביע לבין המבנה: 8 המדריך השלם לשפת 6 כתובת המבנה | קה תרשיס 12.3: מצביע למבנה כאשר פוניס למשתנה המוצבע על ידי מצביע, מוסיפים כוכבית (*) לפני שס המצביע. למשל, כדי לפנות למחיר המוצר 6סוזם, המוצבע על ידי המצביע 6זס, נכתוב: 6%. (020*) העדה? כאשר משתמשים במצביע למבנה, חשוב להקפיד שהמצביע יוגדר מטיפוס מצביע. פנייה מהסוג: זטסח. (0זס*) אינה חוקית, מכיון ש-6זק מצביע למבנה מסוג זסט0סזק ולא למבנה מסוג פחחט. כדי למנוע טעויות מסוג זה, מומלץ לכלול בשס המצביע חלק משס המבנה, וליצור קשר סמנטי כלשהו ביניהם. למשל: מעסס ת1ם6* או עפס 6עס* עקב השימוש הנפוץ במבניסם, קיימת בשפת 6 דרך נוספת לפנות למשתנה במבנה. אפשר לכתוב: 6%. (020*) או כך: 6 <-26ס סימן ייהחציי (מקף וסימן גדול מ-) מיועד אך ורק עבור מצביעיס למבנים ולאיגודיס (אותס נכיר בפרק הבא). מצביעים למבנים כערכים לפונקציות משתמשיס במצביעים למבנים, כדי להעביר בעזארתם מבנה שלס כערך לפונקציה. באמצעות פונקציה ניתן להפעיל את קטע התוכנית על מבניס רביס ולבצע בהס פעולות רבות. נציג עתה סדרת פונקציות על בסיס המבנה >6ט6סזק. את הפונקציות נקשור יחד, באמצעות תוכנית ראשית (0חו8ח ונקבל ייחבילת תוכנה'י המיועדת לניהול חנות כל-בו. השלבים שיוצגו הס שלביס בסיסיים בתכנון ופיתוח של מערך תוכנה, ומוצע לנהוג לפיהם במיוחד כאשר בוניס תוכניות גדולות ומורכבות. פרק 12: מבנים 239 תכנון ראשוני, הגדרת מטרות התוכנית א. ב. ה. עדכון מחיר מוצר. עדכון כמות המוצריס במלאי בשני מקרים: > כשמגיעה אספקה חדשה לחנות. > בסוף היוס, לאחר שנמכרו מוצרים. הדפסה של רשימת כל המוצרים בחנות. הדפסה חלקית של רשימת המוצרים, שיש להזמינס מהספק. התנאי לכך הוא, שהכמות במלאי קטנה מהמינימוס שנקבע עבור אותו מוצר. חישוב הערך הכספי של הסחורה המצויה בחנות, על פי הערך של כל מוצר. בשלב זה נסתפק במטרות אלו, ונכתוב עבור כל משימה פונקציה נפרדת. אחר-כך נחבר את כל הפונקציות לחבילת תוכנה אחת, שאותה נוכל להפעיל ישירות ממסוף המחשב לשם ניהול החנות. פונקציות שירות בסיסיות א. עדכון מחיר של מוצר: / אא א אא מתוך קובץ תקליטור: 01203.6 א (106עקטחסת 11086 ,6עס* ססטס6סעק 600%ע8552) 106עקפ6קט בג1סט | ;6סנעסחסת = 106עס<-ב5ס עדכון כמות המוצריס במלאי: / א מתוך קובץ תקליטור: 01203.6ם60 כ (60 %ם1 ,6עק* ספסטס6סעק 006ע5562) 6ת08ש66קט ב1סט ן ; =+ צעססתסטםת1<-6ע,ס ] ) הוא ערך המכיל את מספר הפריטים שהתקבלו (חיובי), או כמות הפריטיס שנמכרו (שלילי). תדפיס של מוצר בודד: ו מתוך קובץ תקליטור: 01203.6 ו (סעק* 0%מ6סעק 806ע856) 6סעספת1עסק ב1סט ו ,"מ%1058 5906 %55.21 5108 %578 61)"%40ת1עס | 6-6 וכו סנפ 6 59 סופספ ; (ע116ססטפ<-26ס ,ץעס%מסטם1<-20 ,106עס<-הע2ס 0 ההמדריך השלם לשפת 6 ד חישוב הערך הכספי של המלאי של כל מוצר בחנות: / אאא אא מתוך קובץ תקליטור: 01203.6ם0 *****/ (סעק* ססט6סעק 006ע562)צץפתסת 11086 ו ; (2106ק<-0ע * צשץפססתסטםמ1<-0עס) 26602 ה. הדפסת כותרת לדוח מוצרים: ור מתוך קובץ תקליטור: 01203.6 -, (10סט) 6מ68011ת בנ1סט ו ה ; ("ת116%סק50 שְ2ס6ת6טם1 22106 6ת6ת0ע82ס6כ 00006ק [ שיס לב/ את משפט ()חחט יש לכתוב ברצף כמשפט אחד ארוך, ואז אין צורך לכתוב את המקף התחתון אלא תו רווח אחד, או יותר כנדרש. תוכנית לבדיקת פונקציות השירות נכלול את הפונקציות הבודדות בחבילה אחת ונדגיס את פעולתן. את חבילת התוכנה לניהול החנות נבנה בהמשך, לאחר שנלמד מספר נושאים נוספים. / א מתוך קובץ תקליטור: 01203.6 כ = ששפן מס ופוסו שטוו 220610050 (הפסספ | המא 15 ;ו (ס1סט) מפנאת 1סט ן 680116 )( ; ; (02ק68)8ס2ס>תנ1צס ק ( ו 5 0 6611 ₪ 2283 86 ₪6 פפן 5 6ההו ) ו סוחו פופן ק ((3 2 0 68 665 ןוה ו ; () 6ם68011ת ; (ע0ק206)8ס>מנ1עס ; ("ת?תףעסח צעספמספטת1 550%6 6ת₪ 158 מסטת חסם")%1ת1צס ו פוש 0 4 605 קט םוב ישן ; ( (80₪) ץצסתסת, סתהת שס.עס פרק 12: מבנים 241 תוצאות הרצת התוכנית: עס11סקטפ צעססתסטם1 106עע 6םסתסע8ק6כ 2206006 00836 תטטאץ 0 2.36 עססתץ ו 15 .1 50 8611 06ם8 2.83 ₪0 106עס 66ם8ם0 6%נ1נ1סקטפ צְעססתסטם1 106עע2 6םסתסע8ק6כ 2206006 00836 תעטטאד 0 2.83 פססעץ ו 15 ?2 טְעססתפטםת1 86026 6םתם 18 מסטת חסם . 6%61ם5 141.5 18 א118א 01 צעספתסטם1 מערכים של מבנים התוכנית שכתבנו עבור חנות הכל-בו עדיין אינה שלמה, כי הפונקציות שכתבנו מטפלות במוצר אחד מסוים, בשעה שבחנות כל-בו ממוצעת קיימיס מאות מוצריסם. אס נשתמש בשיטת ההגדרה היחידנית, יהיה עלינו להגדיר כל אחד מהס בנפרד, מלאכה שאינה אפשרית בפועל. נוכל לפתור קושי זה על ידי מערך של מבני מוצריס. הטיפוס טסוק 5006 שהגדרנו, זהה בתכונותיו לטיפוסיס הבסיסיים. עתה, נוכל להגדיר באמצעותו מערך של מבנים מטיפוס זה. נניח שבחנות שלנו יש חמישיס מוצריס שונים, ונקבל: ;[065]50ט0סעק ססגססעס 06גע562 זהו מערך בן 50 מבניס שכל אחד מהס הוא מטיפוס טססזס 5006%. באופן סכימטי אפשר להציג את המערך 6ט0סזס בתרשים 12.4. תרשים 12.4: מערך של מבנים כדי לפנות למחיר של המוצר החמישי במערך, נכתוב: %6, [4] 2081065 באופן דומה, הספק של המוצר העשרים יהיה: ע116ססטפ. [19] 2080065 2 המדריך השלם לשפת 6 באופן כללי, נפנה כך לשדה כלשהו של המוצר ה-1: < שם השדה>. [1-] 668ג6סע בטיפול במערכים של מבנים מתגלה שימוש נוסף למצביעיס למבנים, אשר מקל את הגישה למבנים במערך ומקנה יכולת נוחה לבצע פעולות במערך. 2+ 2000065 0%טע 85‏ (1) ;[200₪006989]9ק8 = העס (2) פקודה 2 מציבה למצביע 6זס את הכתובת של המבנה העשירי במערך. באופן סכימטי מוצגת אפשרות זו בתרשים 12.5. תדשים 12.5: מצביע אל מערך כמערך של מבנים באמצעות 6זס ניתן לפנות לכל אחד משדות המבנה [6]9ט0סזס. כדי לגשת לשדה כלשהו נכתוב: <שם שדה><-6שס או באופן מפורש : . 106עק<-0ע2ס ,פתהת מס<-6צס מכיון ש-6זסק הוגדר כמצביע למבנה מטיפוס שט0סזס, הרי שהפקודה ;0זק++ תקדס את 6זס, כך שיצביע על המבנה הבא. הערך (או הכתובת) הנמצא ב-0זם יקודס בגודל של המבנה 6%ט6סזם. המהדר ייאחראייי לעקוב עבורנו אחר העובדה ש-6זם מצביע למבנה מטיפוס ז6ט0סזכ 5066, ולכן 'יידעיי לתרגס את פקודת הקידום כראוי. הפקודות הבאות תבצענה, גס הן, את אותה פעולה: 2 + 6ע = 26 ;1 =+ בע גודל המבנה הינו סכוס גודלי השדות המרכיבים אותו. במערכת מחשב, בה הגדלים של הטיפוסיס הבסיסיים הינם 6087 - בית אחד, זחו - 2 בתים, ₪086 - 4 בתים, גודלו של מבנה מטיפוס 6ט6סזכ יהיה 37 בתיס. שפת 6 מאפשרת להתייחס לגודל ה ללא צורך בחישוב כלשהו, או ידיעת הגדליס של הטיפוסים הבסיסיים, באמצעות הפקודה 4 (ייגודל שליי). אוהי פקודת ''פסידויי, אשר מבוצעת בזמן ההידור. ניתן להציב את הערך המתקבל למשתנה. פרק 12: מבנים 243 נגדיר: ; 812 0500 6ם1 ונכתוב כך: ; (לסטססעס 85200%) 812605 = 812 שסעס או כך: ; (סעס) 812605 = 812 6סעס כל אחת מהפקודות האלו תבוצע על ידי המהדר בעת ההידור, תחשב את גודל המבנה ותציב אותו כערך מוחלט. בדוגמה זו נקבל: 77 = 812 6סעס הערך המועבר ל-52606 הוא טיפוס, או מצביע לאותו טיפוס. נצייו שוב שפעולת 5/2606 מבוצעת בזמן ההידור ואין לה כל השפעה בזמן ריצה. לכן, פעולות הקידוס של המצביע 6זק מוסיפות לערכו את הערך (6טסזק 5706%) 2606ו5. פעולת קידום של מצביע, שאינו מצביע למבנה כלשהו מתוך מערך היא חסרת משמעות. נציין, שאופרטור הח (<-) הקשור למצביע למבנה, חזק יותר מאופרטור הקידוסם ++. לכן פקודה כגון : ץזסזח6עחו<0זקן++- תקדס את ערך המלאי של המבנה המוצבע על ידי שום, ולא תפנה לשדה המלאי של המבנה הבא! כדי לבצע פנייה כזו נשתמש בסוגריים, שלהם דרגת הקדימות הגבוהה ביותר: ץזסזח6עחו<-(0זק++). הפקודה: ;ץעס6תפטת1<-++26ס תפנה לשדה המלאי של המבנה המוצבע על ידי סזם, ולאחר מכן תקדס את 6זט למבנה הבא. פקודה זו שקולה לפקודה: ;ץעס6ףתפטת1<- (++20ס) שיס לב/ הסוגרייס מיותרים. מדוע? נותרה עדיין השאלה כיצד נאתר מוצר בודד מתוך מערך המוצרים! מכיון שבנינו פונקציות המטפלות במוצר בודד, עלינו לפתח דרך נוחה לאתר מוצר מסויס 'ולשלותיי אותו לאחת מהן. בדרך כלל נוח לבצע איתור כזה על פי המספר הקטלוגי (ייקודיי) של המוצר. שיטה זו עדיפה על פני איתור המוצר על פי שמו, מכיון ששגיאות כתיב נפוצות ועלולות לגרוס לאיתור שגוי (או לחוסר איתור). המוצריס שבחנות הכל-בו מסודריס במערך של מבנים מטיפוס סז 50066. נכתוב פונקציה המאתרת מבנה של מוצר על פי מספר הקוד שלו ומחזירה מצביע למבנה שאותר. את המצביע הזה ניתן להעביר לכל אחת מהפונקציות שכבר כתבנו, ולבצע עליו את הפעולה הנדרשת. 4 המדריך השלם לשפת 6 פונקציה לאיתור מוצר / א מתוך קובץ תקליטור: 01204.6ם0 ב |[ ]| 56005 66666 65 6066ו6ו סל 060065 וו (260006 6ם1 קפ טופ שופ פופ (פמ 2 6600₪פפן =1 ₪5 = 2 הפפ הסבר: , ; (ס) פפגו ה 6% א. הפונקציה (00סזספחו) הוגדרה מטיפוס מצביע ל-שטססזק 5006%. הגדרה זו תואמת את כל העובדות שהכרנו עד כה, בדבר טיפוסי פונקציות וערכיס מוחזריס. ב גוף הפונקציה מורכב מפקודת זס) ריקה (שורה 6 הסורקת את מערך המוצרים, על ידי קידום המצביע ק. הסריקה תתבצע עד שנמצא שוויון בין קוד המוצר המבוקש לבין קוד המוצר המוצבע על ידי ם, או עד שמגיעיס לסוף המערך. כאן אנו מניחיס שערך שדה הקוד של המוצר האחרון הוא אפס. אתחול מערך של מבנים אתחול מערך מבניס נעשה בדרך דומה לאתחול של מערך רגיל. נכתוב בצורה כללית: + = []<שם מבנה> <שם סוג מבנה> 6סגו562 ,[. ,<ערך שדה 2> ,<ערך שדה 1> + ,[. ,<ערך שדה 2> ,<ערך שדה 1> + ,[. ,<ערך שדה 2> ,<ערך שדה 1> + ; ן[ נאתחל לדוגמה, את מערך המבנים []6ט0סזס של חנות הכל-בו: / א מתוך קובץ תקליטור: 01204.6ם0 ב 4 = | 0 90660655 בופופ ששו , ( "הטטאע",3.54,30,20, "ססספ", "מקתאמס" ,123 , ("הטטאץע",0",2.46,100,50סת","אתדא",155 , ["מאחע",3.50,50,20,"מססת", "צתתססצ", 147 , ( "תאנפע",5.60,30,10,"פססע", "פטאתנעאתסס",133 ,[("האנפל",1.20,70,50,"פססם","תאזתתסתתא", 151 , [ "העדה" ,0.70,200,100,"פסספ", "סתתתפם",170 ,["הדת",60755",25.0,30,20","פדטתת",230 ,["תדת",610755",52.0,30,20","פדטםתת",251 ,("מאדא",50₪5",120.0,40,20","מאדא",262 , ["דת6","500095",75.0,50,30,"6תתאהתאפ",221 , ["א0תפפס",4.50,100,20,"מ0דפתס","אסססת 000" סו 50 7 ל 0 פרק 12: מבנים 245 הסבר: א. אתחול של כל מבנה מבוצע באמצעות רשימת ערכיס לשדות המבנה, כשהללו מוקפים בזוג סוגרייס מסולסלים שאחריהס פסיק. ב. | אתחול המערך מבוצע באמצעות רשימת אתחולים לכל מבנה במערך כשהללו מוקפים בזוג סוגריים מסולסלים ופסיק אחריהם. ווהי דוגמה נוספת לאחידות בשפה. ג. | המבנה האחרון מכיל אפסים ומטרתו לסמן את סוף מערך המבנים. בהסתמך על דוגמת האתחול, נדגיס את השימוש בפונקצית האיתור שכתבנו: ו מתוך קובץ תקליטור: 01204.6 ו (ס10סט) מנאת בנ1סט ן וסוס טסוט 6 17/0 6665 סוט 6066065 5ן665 מל )5 סוס נקוסן ; (20000%5,170ק)00200ת11 = בעס ()6ם8011סת ; (סשס) 0ס2ס6תנעס ] הפלט מהרצת התוכנית : 0 000 ם1%ח שסט6סעק 1200866 עסנ11סקטפ צְעסס6תסטם1 .10צק .0% 2206006 0086 זא 0.700 פעססע עתפתם ‏ 170 המצביע 6זם, שהשתמשנו בו בתוכנית הקודמת - מיותר כעת, כי השימוש היחיד בו נעשה לצורך קליטת התוצאה של פונקצית האיתור (0017000ח8 והעברתה לפונקציה (000זמזחוזק. אפשר לוותר על איתור מראש של המוצר לשס הדפסה, כי ניתן להפעיל את הפונקציה (00סזס0חו1 ישירות כערך של הפונקציה (00סזזחוזס. דוגמה לכך ניתנת בתוכנית הבאה: (ס10סט)פ1נהת 0186 (1) )2( 1 ; () 002008ם1+* 206₪00%ק 0%טע85 (3) ; ("תמ170 600066 םס1ח 06006סעק 100866) 61ת1עק ; () 6ם680811ם ;((170) 6₪02008ם11) סעספתנטס ] 6 המדריך השלם לשפת 6 חבילת תוכנה לניהול בית כל-בו בסעיפיס הקודמיס הצגנו את מהלך התכנון וחלקיס שוניס של חבילת התוכנה לניהול בית כל-בו. עתה נוכל להדגיס את התוכנה בשלמותה. מטרתנו להפעיל את התוכנה ממסוף, ועל-כן נקבע סדרת קודיס, אשר נקיש במקלדת לביצוע הפעולות השונות: פ - עדכון מחיר מוצר. 5- עדכון כמות שנמכרה. 1- עדכון כמות שהתקבלה. א - חישוב והדפסת הערך הכללי של הסחורה בחנות. צ - חישוב והדפסת הפדיון היומי של החנות. ד- הכנת תדפיס כללי של כל המוצריס בחנות. א - הכנת תדפיס של כל המוצריס הנמצאים מתחת למינימום. = - סיוס עבודה עס החבילה. כדי לבצע פעולה כלשהי נקיש את הקוד של סוג הפעולה הנדרשת. התוכנית תקלוט קוד זה, תבדוק אס הוא 8, כלומר ייסוף'י, ואס לא - היא תבצע את הפעולה. לכל קוד פעולה יש קטע תוכנית עצמאי, אשר נפנה אליו באמצעות משפט הבקרה חסטואו5. באופן סכימטי נציג זאת כך: (ס1סט) פנ1את 16ס ו ; אתחול מערך המוצרים ('ע' = !| קליטת קוד הפעולה) 116גש ;בצע את הפעולה לפי הקוד שהוקלד התוכנית הראשית: / א מתוך קובץ תקליטור: 01205.6 כ 4 = | 50 | 606600605 5066066 פושוט סו 1 הנתונים מופיעים ו ( בקובץ התקליטור | ] ל ן (סנסט) מנאת 1סט ו ו 0606 ₪66 ;]סחסת ,6ט1אט ,60%81 1108% ;0006 עהםס פרק 12: מבנים 247 ('ע'=! (()06₪0006= 8)) 16נ1תשט 51 66 )6006( ו שפר ( 0 66 וי 6; קשטסםת 8 פה ל 6; 101 8 0886 '7': 0 % ; קסטפ 8 : 'א' 0886 דד 0 6015 פס 5 וסוס | סוס 0 סוס (סע2ס) ץסמסת =+ 1 | הסה 0% 8 800206 6ם6 ת1 פססט0סעק 811 05 6ט1הט 6םל")61תנמס ( וספ ו ;268% ו ( ו ; (0עס) ץפתסת =+ 60%6חא6םת ;%ססחסם - 60081 = 8106 :8 8010 0608ג6סעק 05 6ט1הט 0681ע")65תנ1עס 5 5 0 106 2 %; 8 ו ; () 6מ68611ת (020ק++;00609 עק<-20-02000085689;026ס) 502 ; (50ס)0ס2ס%מםנעס ;268% 8 65 ; () 6מ68611ת ו ב ד כ (טם1 מגת<-6עס > צְעס6תסטם1<-1)020 ; (208)020ק6םת1עס ה 1 ; ("מת66ת6 8(8ע06תק")%1תועס 8 המדריך השלם לשפת 6 הסבר: א את הטיפול בשלושת סוגי הפעולה הראשונים לא פירטנו, כיוו שיש צורך להשתמש בפונקציות מורכבות שעדיין לא למדנו. אנו ממליצים להשאיר את התוכנית הראשית כמסגרת, ולא לכלול בה קטעים ארוכים ומורכביס. התוכנית קריאה ומובנת יותר, כאשר מוצג בה הרצף הלוגי של הפעילויות והטיפול בפרטיס חבוי בתוך הפונקציות. ב. | מטרת הפונקציה (96060060, שמופעלת בשורות הראשונות של התוכנית, היא להחזיר תו שהוקלד במקלדת. בהמשך נראה את הביצוע, כעת נסתפק בהנחה שהקוד שתקבל יהיה חוקי (היינו, אחד מאלה שמותריס בתוכנית). ג. | בארבעת קודי הפעולה הנותריס מתבצע מעבר סדרתי על כל המוצריס בחנות. המעבר מתבצע באמצעות לולאת זס), המקדמת מצביע על פני המערך כולו. כעת נכתוב את הפונקציות החסרות. עדכון מחיר של מוצר רו מתוך קובץ תקליטור: 01205.6 "רו (10סט)6סנ1עקטספםת בנ1בסט | שו ה ₪ פופ 55 9% 360 כת) ק ( 7" 6565 0605 9066ן 5סותום )סו ב ישן ; (600006 ,"5)"%6ם508 ; (00006 ,20000%9ק)00200₪ם51 = ס ה 9 3 ₪6 ₪ 6466פן 6016 ה רפ ק (66 פ = ןמחפ שפן = ו6 00041 ס 7 ; (":106עס חטסם עס6סםתםע")+>םתנצס ל 6 77 565 16 90 5 5 ]- ₪ ₪ ₪ 5 0 [ שים לב/ אנו משתמשים בפונקציה 50800 בשורות 7, 11. קליטת הנתונים נעשית 4 | : בעזרת כתובת המשתנים, כפי שלמדנו. העברת המשתנה עצמו הינה טעות נפוצה בתוכניות ואס נעשה זאת - הערכים לא יגיעו ליעדם. פרק 12: מבנים 249 עדכון כמות המלאי / א מתוך קובץ תקליטור: 01205.6 ו (10סט) 5611 ב1סט (1) (2) 6 2 6065 םוח (3) ; (":00066 0006%סע עססםתםע")+>םנפצס (4) 6006006( ;‏ ,"5)"%6ם508 (5) ;(":8010 5ת166 05 עססמתטם עס6סםתםע")+>םתנצס (6) ל 6 6707 (7) ; (%ת608- , (00066, 20000%8ס) 200ס0ת51) 82%6טס06סגו (8) ] (9) לאחר שקלטנו את קוד המוצר (בשורה 5) ומספר היחידות שנמכרו ממנו, אנו קוראיס ל-(80%0ט0ז0קט. אחד מערכיה הוא פונקצית האיתור (המחזירה מצביע, כנדרש) והערך השני הוא הכמות (בערך שלילי, כי ווהי הפחתה מהמלאי). עדכון כמות שהתקבלה / אא אא מתוך קובץ תקליטור: 01205.6 *****/ (ס1סט) ץ1סקטפ5 פנסט ן ;%תהט ,000סק 6ם1 2 7 6665 506000608 ישן ; (6006006 ,"5)"%6םת508 ; (":%ת6טסעס 16695 05 מססתטםת עפסתשע")1סתנמס ; (%ם 6008‏ ,"5)"%6םת508 ; (%ת08 , (065,00006ט200ס) 600200 51) 1060826 בדיקת חוקיות של תו "סוג פעולה" / א מתוך קובץ תקליטור: 01205.6 בו ()86%0006 כַהַתס (1) (2) 62 שהחוש (3) + 60 (4) ( 5 = ₪ (5) ||[ (*א=6) || (6==929) || ("0=="8) || (%ש%==0₪=)6 (6) (7יכ=0) || (7ש=0) |] ("6==78) ||[ (*שי==6) (7) ו (8) ; (0, "מת8081 צע5 ,0066 מחסתאתט תה 18 55)"560ם1עס (9) ] (10 0 ההמדריך השלם לשפת 6 ; (6%!) 16ו+תט (11) ; (0) ם22ו26%6 (12) הסבר: א. לולאת 6!וחש-00 מתבצעת כל עוד המשתנה 6ס אינו אמת. ב מתבצעת בדיקת חוקיות הקוד. ברגע שנמצא תו - הבדיקה נפסקת, אחרת - מתבצעת בדיקה מלאה. ווהי דרך מקובלת לבדוק תנאים לוגיים. ג. | התו המוחזר בשורה 12 מכיל קוד חוקי בלבד, כנדרש. מבנים בתוך מבנים - דוגמת יישום עד עתה ניצלנו את העובדה שמבנה הוא טיפוס, כדי שנוכל להגדיר מערכיס של טיפוס זה. נתקדס צעד נוסף ונגדיר את אחד משדותיו של מבנה מסויס כשדה מסוג מבנה. תוכנית לרישום נוכחות וחישובי שכר בדוגמה הבאה מוצגת תוכנית מחשב המשמשת לרישוס נוכחות במפעל ולחישוב שכר. בתוכנית זו, לכל עובד יהיה מערך של 25 מבניס, אחד לכל יוס עבודה בחודש. כל מבנה יכיל את המידע הבא: שס העובד, שעת כניסה למפעל ושעת יציאה. בסוף החודש ניתן יהיה לחשב באמצעות סריקת המבנים, את סהייכ שעות העבודה של אותו עובד בחודש ואת מספר השעות הנוספות (מעל 8 שעות נוכחות ביוס). באמצעות המידע הזה נחשב את המשכורת החודשית של העובד, וניקח בחשבון שתעריף של שעה נוספת שווה ל-150% של תעריף שעה רגילה. מבנה התאריך הוא: יוס, חודש, שנה. את שעות הכניסה והיציאה נשמור במבנה מסוג חש (אותו הגדרנו בתחילת הפרק). שים לב שהתוכנית אינה מלאה. ?] 0866 6סגות56 עהסץ ,בסתסת ,887 6ם1 לז מבנה "יום עבודה" ) ץה8האעסח 06וע56 ;[7]פתהאת ‏ 08% ;ץ8ס 0866 006₪ע562 62 ,עספסת תנף 0066ע56 ;ן המבניס של תאריך וזמן י*הוטבעויי בהגדרת המבנה המתאר יוס עבודה של עובד. פרק 12: מבנים 251 הסכימה 12.6 מתארת מבנה מסוג עְב3ּ0א'וסעש 5%06%. תרשיס 12.6: סכימה של המבנה /03אוס/ש עלינו להגדיר עבור כל עובד 25 מבנים יומיים כאלה, לכל חודש עבודה. נגדיר קבוע 5 /ו, כדי לציין את מספר העובדיס במפעל ונשתמש בו לציון מספר המבניס הדרוש לכל העובדיס במפעל. 0 פתתאתסח 6מם4611 + ; [5*25תשאת0סח] מסתסתאעסטחט צץ08א2סח 56206 הסכימה בתרשים 12.7 מתארת את המערך ח+%חסוחא זסעו. (0)ת%תסמ סש תרשיס 12.7: סכימה של המבגה ושמסתחסע תכנון ראשוני - תיאור כללי של המערכת המערך יתמלא בנתוניס במהלך החודש. בכל בוקר, יקליד כל עובד על המסוף את שמו ושעת הגעתו. מצביע למבנה ץ08אזסשו יתקדס על פני המערך, עבור כל עובד שיגיע ויוין את הנתונים. בסיוס יוס העבודה יגיע כל עובד למסוף ויקליד את שמו ושעת היציאה. תוכנית המחשב תסרוק את המערך מנקודת המצביע אחורה, תאתר את המבנה עס נתוני שעת הכניסה ותעדכן בו את שעת היציאה. בסוף החודש תתבצע סריקה כוללת של כל המערך עבור כל עובד, ותוך כדי כך תחושב משכורתו. 2 המדריך השלם לשפת 6 תיאור של הפונקציות א. (סאםת ,6ט1עע8 ,60087 ,פתהת ש) צְצ6תס הפונקציה 60/0 משמשת לאחסון שעת הכניסה של העובד. הפונקציה מקבלת את הפרמטריס הבאים : 6חאח שו שס העובד ץ08 תאריך זה שעת כניסה +אח מצביע למצביע למבנה הבא הפנוי במערך הסיבה למצביע הכפול היא הצורך לקדס מצביע לאחר אחסון הנתוניס. (סאם ,165% ,סתהת ח) 16אסש הפונקציה (%0וא6או משמשת לעדכון שעת היציאה של העובד. הפונקציה מקבלת את הפרמטרים הבאים: 6חהח ו שס העובד שאזזה | שעת היציאה אח מצביע למבנה הפנוי הבא (ש ,ס6תהם) 100866* צץ08א2סח ססטמ56 הפונקציה (1068%60 מאתרת מבנה עס שעת כניסה של העובד על פי שמו ומצביע למבנה הפנוי הבא. שיטת האיתור תהיה סריקה לאחור. הפונקציה מחזירה מצביע למבנה שאותר. (סאם ,7ץ8ק ,סתהת) ץ58182 11086 הפונקציה 0ץ58|87 משמשת לחישוב שכרו של עובד בסוף החודש. היא מקבלת את הערכיס הבאים: 6חהח שס העובד ה שכרו לשעה )א מצביע למבנה הפנוי הבא הפונקציה מחזירה מספר ממשי שהוא משכורת העובד. (ץע%ת6 ,16806) 6611ת61 11086 הפונקציה 060/60 משמשת לחישוב הפרש בין שני ומניס (כניסה ויציאה). פרק 12: מבנים 253 פונקציות השירות של התוכנית 7 מתוך קובץ תקליטור: ,ץ008ס>* 08066 6סטע56 ( ו ; (סּתהם ש ; 08%<-ץ6008 ;פףתסת<-7ץ6008 = ; עהסץ<-7ץ6008 ;מגוסת<-8221086 = ; תנת<-216ץ8 ;8607<-6ט1טץ8 פב סו שו 0 [סתס ם6תסת. צְהַבש<- שגוסם. %62ת8<- /***** ,סתהּת ח* עַ8ם0)ץ62ת6 בנסט הפ הפו , סתהּם<- (6אם*) ) ץ56200 = ץ638. ץהסא<- (6אם* (סאת 8 6ץ. צה8סא<- (6את (6את (6א תגנת. %6%ת6<- מ ( 6% )% ) 6% ( 0. שססתם<- (6אם* 2 פוש ) זרזר ,סתהת שט* 16)028%8א6ח ב1סט ( ו 6-2 = ; מ נת<- 5% 4 (ש* ץ8הא2סש 06גע56 (ש--; (סתַהם<-ש , פתתּהּת) קת5620 6 הסבר: ;ם1* ץץ08א2סש 06גע56 ; (>את,סתהת א) 100866 = עגוסם. 168%68<-ם1 ו פ5<-161%6 | ו ,סתהת* עַהם0) 1008%66* צץהבבאעסטח 06סגוע56 ָ 8 (ם6תסתאעסחא<שט) ;ש--) 108 , ; (ש) ם8גו26% א. ההקטנה של שו בתחילת לולאת זס) נעשתה במטרה שיצביע על האיבר האחרון במערך (כאמור, שש מצביע על האיבר הפנוי הבא). ב תנאי העצירה הוא הגעה לתחילת המערך (כשלון החיפוש), או קליטת ערך 0 מהפונקציה ()קוח5₪6 (שהוא כידוע הערך המוחזר כאשר ההשוואה מוצלחת). ג. = הפונקציה (068060! מחזירה מצביע למבנה המבוקש (במידה והחיפוש הצלית). 4 ההמדריך השלם לשפת 6 7 מתוך קובץ תקליטור: 01206.6 ו ,צְהק 51086 ,פתהת* כַהַת0)ץ58182 11086 (סאת* ץ08א2סח ססטע56 ;פעטסם ,תטפ 1108%6 |( ₪ 2 פואטס ק 00 65ב ; (>אם,פתהם) 1008%6 = סאת + (מ%מסתאלסשט =< 6אם) +11 ; (ע%0ת6<-%את6 ,10806<-%את011)6סת%1 = פעטסם ₪ ₪6₪) תת לטבסי ו כ(ה-המטפם) ₪ עבס יה + חמה 1-6 ;ץהק*פעטסםת =+ תטפ / ; (חגופ5) ם8ו26% ו הסבר: א. 00 00041 0 7 72 ₪ 3 7 7 7 7 = 62 2 גא 60 7 " חר לולאת זס) בשורה 4 סורקת את המערך []ח)חסוחאזסאו לאחור באמצעות הפונקציה ()06806!, ומאתרת את המבנים השייכים לעובד המבוקש. עצירת הלולאה נעשית כאשר המצביע למבנה הבא מגיע לתחילת המערך []חזחסוהאזסאו. חישוב השכר מתבצע, רק אם (068660! החצירה מבנה של העובד המבוקש (שורה 6 וזחסרהאזסצו < %אח). ]חח (שורה 7) מחזירה את סהייכ שעות עבודה באותו יוס. חישוב השכר (שורות 11-8) מתבצע על ידי כפל מספר השעות בשכר לשעה, תוך תשומת לב לאפשרות של שעות נוספות, אשר התעריף שלהן גבוה ב-50% מתעריף שעה רגילה. פרק 12: מבנים 255 7 מתוך קובץ תקליטור: 01206.6ם60 ב ( 5+ בס תו שפנו 1 )הנפ ₪ 6 שה )) םוב סוב ₪ | סנ ָ ;פעטסם 1108% ;עטסם<-%62ת8 - מטסם<-188086 = פעטסםת 2 / תנגת<-62סת6 - מנת<-16806) =+ פעטסם 2 / 560<-%62ת80 - 560<-10806) =+ פעטסםת ; (8עגוסם) םמגו26% כדי להפוך את כל הפונקציות שלעיל לחבילה אחת, צריך לכתוב תוכנית ראשית, דוגמת התוכנית לניהול כל-בו. התוכנית הראשית תקלוט ישירות את כל המידע מייהעולס החיצוןי': שמות עובדים, שעות כניסה ויציאה, שכר לשעה וקודי פעולה. על פי קוד הפעולה תקראנה הפונקציות המתאימות. אנו מציעיס לקורא לתרגל את כתיבת התוכנית הראשית ופונקציות העזר. מבנים המתייחסים לעצמם - רשימה מקושרת הצירופיס שניתן לבצע במבניס הס רביס. בפרק וה נלמד על מבנים המתייחסים אל עצמם (50060076 |61676008ז-56!1). בסעיף הקודסם ראינו, שניתן להגדיר מבנה בתוך מבנה על ידי הגדרה של משתנה מטיפוס מבנה בתוך תבנית ההגדרה של מבנה אחר. ביישומיס עס מבני נתוניס מורכבים, יש צורך להגדיר בתוך מבנה מסויס, מצביע למבנה מאותו טיפוס. בפרק וה תוצג לפניך דוגמה בסיסית לשימוש כזה, ובפרק הבא נראה שימושים ויישומיס מורכביס יותר. בשתי הדוגמאות האחרונות ראינו את היתרון שבהגדרת מערך של מבנים, אשר כולל קבוצת מבניס המכילים מידע בעל אופי והה. המבניס במערכים נמצאים בזיכרון המחשב בזה אחר זה ועובדה זו אפשרה לנו לסרוק את המערך כולו, בעזרת פעולת קידוס פשוטה של המצביע. בשימוש במערכים צריך להגדיר מראש את גודל המערך כדי שבזמן ההידור אפשר יהיה להקצות עבורו את המקוס הנדרש לזמן הביצוע. בדוגמת חישוב השכר הגדרנו מערך עבור 50 עובדיס, אך ווהי הערכה בלבד. ייתכן שהערכתנו מוגומת ובגמר קליטת הנתונים יישארו מבניס לא מנוצלים, וייתכן שאנו זקוקיס למספר רב יותר של מבנים. מבנה נתונים גמיש יותר מהמערך הוא רשימה-מקושרת. 6 המדריך השלם לשפת 6 רשימה מקושרת רשימה מקושרת 1150 60אח11) מורכבת ממבניס, אשר כוללים את שדות המידע ושדה שהוא מצביע למבנה נוסף מאותו טיפוס. המבנה הנוסף מכיל אף הוא מצביע למבנה נוסף, וכך מתקבלת שרשרת של מבניס המקושריס באמצעות מצביעים. מכיון שהמצביע הוא מטיפוס המבנה שבו הוא מוגדר, נהוג לכנות מקרה כזה 'מבנה המתייחס אל עצמויי (או ליתר דיוק - יימבנה המתייחס למבנה מסוגו"). שרשרת המבניס יכולה לשמש אותנו בדיוק כמו מערך של מבנים, אלא שאין חובה להגדירס ברצף בזיכרון ואין חובה לציין את מספרס מראש. כך נוכל לצרף מבנה נוסף, על ידי הצבת כתובתו לשדה המצביע של המבנה האחרון בשרשרת. נגדיר שני כללים : א. המבנה האחרון ברשימה מקושרת יכיל 0 בשדה ייהמצביע למבנה הבאיי. האפס, בדומה למחרוזות, מסמן לנו את סיוס השרשרת. ב משתנה מטיפוס יימצביע למבנהיי, המצביע למבנה הראשון ברשימה מקושרת, נקרא ''עוגן'י. הסכימה בתרשיסם 12.8 מתארת רשימה מקושרת בת ארבעה איברים: | ת | 8 הרה תדשיס 12.8: רשימה מקושרת של מבנים הקצאת המשתנים נעשתה עד כה בעזרת המהדר, ועובדה זו אילצה אותנו לתכנן מראש את כל המשתניס להם נודקק במהלך העיבוד. בשפת 6 קיימת פונקציה (השייכת לספריה הסטנדרטית) המבצעת הקצאה של זיכרון באופן דינמי. משמעות עובדה זו - יכולת להקצות משתנים תוך כדי ריצת התוכנית. הפונקציה ‏ (8]!06 (הקצאה, חסטפססו|8) משמשת להקצאת משתניםס בעת ריצת התוכנית. הערך היחיד ל-3/!060 הוא מספר שלם, המכיל את כמות הזיכרון הרצויה בבתים. הפונקציה מקצה בזיכרון הפנוי במחשב את מספר הבתים כמבוקש, ומחזירה את הכתובת של תחילת קטע הזיכרון שהוקצה. כתובת זו ניתן להציב למצביע ובאמצעותו לפנות לאזור זיכרון זה, באופן דומה לגישה למשתניס שהוקצו על ידי המהדר. פרק 12: מבנים 257 בדוגמה שלהלן ניתנת השוואה בין שני סוגי ההקצאה: א. הקצאה על ידי מהדר: ב. הקצאה דינמית בזמן ריצה: ;קץ*,1 6ם1 ;ס*,1 6ם1 ; ב6=ס ; (2) 100 81ת=ס ; 10=ס* ;10=ס* במקרה (א) המהדר הקצה משתנה מטיפוס שלם ו והתוכנית הציבה בו את המספר 10, באמצעות המצביע כ. במקרה (ב) הוקצה מקוס בזיכרון שגודלו כגודל הטיפוס שלם (2 בתיס), ללא שס משתנה, וכתובתו אוחסנה במצביע ם. כעת הגענו למצב דומה ל-(א), דחיינו - םק מצביע למשתנה מטיפוס שלם, ולכן ההצבה זהה. אלפון טלפונים - תרגול ברצוננו לבנות תוכנית המתחזקת אלפון כתובות וטלפוניס: היא תוכל לקלוט כתובת טלפון של אדס מסויס ותוכל להדפיס אלפון ממוין על פי שמות המשפחה. האלפון יחיה מורכב ממבניס, אשר כל אחד מהסם מכיל שדות עבור שס פרטי, שס משפחה, טלפון וכתובת. המבנים יהיו מקושריס ביניהס באמצעות שדה מצביע נוסף. הדפסת האלפון תיעשה מהמבנה הראשון ברשימה ועד סופה. נמיין תחילה את הרשימה וכך נקבל את תדפיס האלפון כנדרש. הגדרת המבנה: + תטמסתסםסק 0₪גוע56 ;[12[,80026858]22[,661]11]סתהת 7[,1886]פתהת 51586 שַַַם0 2 סאת* תותסתסםק 0%6גע5%2 ; ן השדה 6חסחכ %אח מוגדר כמצביע מאותו טיפוס של המבנה שבתוכו הוא מוגדר. שדה זה יצביע למבנה הבא ברשימה המקושרת. העוגן לרשימה המקושרת יוגדר כך: ;? 6מסםק 11286* מטתסתסתסק 562006 עד כה לא הוגדרו משתניס מטיפוס וחטחפחסחסק, כי ביטוי אה הוא הצהרה בלבד. ההגדרה הראשונה היתה תבנית בלבד, והשנייה הגדירה מצביע למבנה. חסר לנו מנגנון שיאפשר להגדיר מבנה במהלך ריצת התוכנית. כדי להקצות מקוס בזיכרון בזאמן ריצה עבור מבנה מטיפוס וחטחסחסתק, נשתמש בפונקציית הפסידו (5!26060. היא תיתן לפונקציה 8!!06ח את מספר הבתים הדרושים להקצאה. נגדיר כעת מבנה ראשון עבור הרשימה: ; ( ((תטתסתסתמק 862006) 8128605) 81100 = 6מסםק 11286 6חסחק 75% מצביע כעת למבנה מטיפוס וחטחסחסחק (שהוקצה דינמית). (12סא =! 6תסםתק 51286) 15 שים לב/ / יש לוודא שאכן קיבלנו את שטח הזיכרון שביקשנו. ₪ / 8 המדריך השלם לשפת 6 כדי להציב ערכים לשדות במבנה גה נשתמש באופרטור התצ: ,סתאת 1886<-6תסתק 51286 ,פתהת 21286<-6תסםק 11286 ; [%66<-6תסת 8002688,51286<-6תסםק 11286 במידה ונודקק למבנה נוסף עבור אדם חדש, נוכל להקצות מבנה נוסף ולהוסיפו לרשימה על ידי אחסון כתובתו במצביע: ;? 6מסםק סאת<-6תסםק 11286 לדוגמה: ; (( (תותסתסתק 81100)812601)86200%6ת = סתסםתס סאת<-6תסםק 11286 ושוב, יש לבדוק שאכן קיבלנו את שטח הזיכרון שביקשנו. הוספת מבנה הוספת מבניס חדשים בדרך זו איננה מבטיחה שהרשימה הסופית תחיה ממוינת על פי סדר שמות המשפחה. עלינו למצוא דרך לאתר את המקוס הנכון של המבנה החדש בתוך הרשימה המקושרת, להחדירו למקום זּה, ולבצע את הקישורים הנובעיס מכך. פעולה כזו מוצגת באופן סכימטי בתרשיס 12.9. תרשיס 12.9: הוספת מבנה ברשימה מקושרת פרק 12: מבנים 259 כפי שניתן לראות, שינינו את המצביע של המבנה 04 שאחריו יש להציב את המבנה החדש 02. בשדה הקישור של המבנה 02 רשמנו את ערך המצביע אל המבנה 03. הפונקציה שתבצע את השרשור תקבל ערך, שהוא מצביע למצביע של המבנה שאחריו יש לקשור את המבנה החדש, ותחזיר מצביע למבנה החדש. התוכנית שקוראת לה תוכל להשתמש במצביע, כדי להציב ערכים למבנה החדש. / א מתוך קובץ תקליטור: 01207.6 וו (ע8266** תטתסתסםתק 006ע562)ספס6פת1* תטתסתסתק ססטמספ (1) (2) (3) ; 5876* תטמספתסםתק 06וע56 (4) 5 = ₪ (5) ; ( (תטתסתסםק 0%ג0ע1100)81205)8%6את = 841662* (6) (12סא =! 85662*) 15 (7) 5 = שומוסמופן. ופול = )שפנו )| (8) ; (85662*) ממגו6%ע2 (9) ] (10) הסבר: א. הערך הפורמלי 8097 הוא מצביע למצביע שאחריו יינשתוליי את המבנה החדש. כאשר מציביס ל-58/6 את ערכו, שומרים למעשה את כתובת המבנה שמקושר אליו לפני השינוי. ב הצבת תוצאות ((8|!060 לתוך ז86* משנה למעשה את הכתובת שבתוך המצביע במבנה, כך שיצביע למבנה החדש. ג. | יש לבדוק בשורה 7 אס אכן הוקצה שטח הציכרון שביקשנו בשורה 6. ד לבסוף סוגרים את מעגל הקשרים על ידי הצבת הכתובת המקורית (מתוך 58/6 - שורה 8) לשדה המצביע במבנה החדש. פעולת הפונקציה 56%ח1 מורכבת למדי ועל-כן נבצע ייהרצהיי ידנית עבור המקרה המתואר בתרשים 12.6, ובמהלכה נסביר את המהלך הכללי של הפונקציה. בדוגמה זו עלינו לשרשר את המבנה החדש (04) לאחר המבנה 1ק. המשתנה ז36 יצביע על שדה ה'ימצביע הבאיי של 1ס, כלומר למצביע המצביע ל-02. ראה תרשים 12.10. 0 ההמדריך השלם לשפת 6 תרשיס 12.10: שרשור מבנה רשימה מקושרת (1) בפקודה (5) הצבנו ל-586 את הערך המוצבע על ידי זטא3. כיון ש-ז886 מצביע לשדה המכיל מצביע ל-02, נקבל לאחר הצבה זו שגם 58/6 יצביע ל-02. בפקודה (6) אנו מציביס למצביע המוצבע על ידי ז3%6 מצביע לשטח חדש המוקצה בעת הפעלת הפונקציה (6סווח₪. כעת, שדה היימצביע הבאיי של 01 יצביע לשטח החדש. ראה תרשים 12.11. שטח חדש תרשיס 12.11: שרשור מבנה רשימה מקושרת (2) המשתנה 867 מוגדר כמצביע למצביע לטיפוס וחטחסחסחק 506%, ולכן המהדר מכיר את השטח החדש כמבנה וחטחסחסחכ זסטש5. נקבל כי ס6מסתס סאם<- (85662*) מתייחס לשדה היימצביע הבאיי של השטח החדש. בפקודה (8) אנו מציביס לשדה זה את תוכן המשתנה 58/6 (כלומר, מצביע ל-2). ראה תרשים 12.12. פרק 12: מבנים 261 מ שטח חדש תרשיס 12.12: שרשור מבנה רשימה מקושרת (3) עתה השלמנו את תהליך השרשור, אולס נותר לנו לעדכן את שדות הנתוניס בשטח החדש. אין ה מתפקידה של הפונקציה (6+0פחו לעשות ואת, ולכן היא מחזירה מצביע למבנה החדש, כדי שפונקציה אחרת תוכל לבצע את העדכון. בפקודה (9) מוחזר הערך המוצבע על ידי ז8₪6. שיס לב, שאכן והו מצביע למבנה החדש. בסיוס הפונקציה (561%0חו המשתנה הזמני 58/6 של הפונקציה (56+0חו נעלם, כי הוא אינו דרוש יותר. איתור מקום ההוספה נכתוב פונקציה שתאתר את מקוס ההוספה הרצוי של מבנה חדש. נשתמש בפונקציה (0קוח56, אותה הכרנו בפרק שבו דנו במערכים. הפונקציה תחזיר מצביע למבנה שאחריו יש לבצע את הקישור. הפרמטר של הפונקציה הוא, כמובן, שס משפחה חדש. / אאא מתוך קובץ תקליטור: 01207.6 ו (ס6תהת חסםת* 85ת1806)0 6ם11* תטתסתסםתס 562006 ;580767* ,סק* תטתסםתסתס ססגטע56 = 66 05 וספ 3 66 קסופ ₪50 05 )₪‏ = 200 (6תסםק 6את<-ס=ק ((0 חקא 10 ה שא ו הת = 56 1-6 ;סק = 586 ; (58076) ם6%2: 2 ההמדריך השלם לשפת 6 הסבר: א. הלולאה זס? מבצעת סריקה על פני הרשימה המקושרת באמצעות המצביע ס. ערכו ההתחלתי של סק הוא העוגן 6חסחכ 5%זו, המוגדר לגבינו כמשתנה גלובלי. ב | המצביע 58/6 מצביע למבנה אחד לפני המבנה אותו אנו בודקים, כיוו שהעצירה של הלולאה מתבצעת כאשר השס הקיים גדול יותר מהשס החדש. ג. = 5806 מקבל גס הוא את ערכו של העוגן כערך התחלתי. כאן אנו מספקיס תשובה למצב שהרשימה עדיין ריקה, או שהשס החדש קטן מכולם. הוספת פרטים הפונקציה הבאה משתמשת בשתי הפונקציות הקודמות, כדי להוסיף לרשימה פרטיס של אדס חדש: ו מתוך קובץ תקליטור: 01207.6 ו טוה 1 605 הכשמו פב" נבעמו6))) 66| 506 ובושי (%61* ע8ת0 ,פפּסַפְחַ* עהתס 3-60 8% ;ק* תטמסתסםק 06גמע56 7 (שמטותו 1) הפ ופנ = פן ב ( פופ ₪205 ) פוב = <ן 6 ₪( פופ פוצטפל--0ן) ₪) פופפתו = פן ל תפות 0-5 5 פוש ץססת5 65 ; (₪61 ,₪61<-ס) ץ56200 (מפ 1 | ששאת 150 = 8 005 0-0 | | | | ת6 6 00041 0 72 7 7 7 3 ה ה = 62 2] א 60 5 7 7% %- חר הסבר: א. בשורה 5 מאתרת הפונקציה את המבנה שאחריו יבוצע הקישור של המבנה החדש. ב במידה ו-(8060!ק 6ח8 מחזירה אפס, הרי הרשימה המקושרת עדיין ריקה, לכן מציבים מיד לאחר העוגן. שיס לב שהפונקציה (56/%0ח1ו מקבלת כערך את כתובת המצביע 6חסחכ %אח<-ס. ערך וה תואס את הגדרת 306 כמצביע למצביע. פרק 12: מבנים 263 הגדרת טיפוס חדש בתצורה מורכבת שפת 6 מאפשרת להגדיר טיפוסים חדשים בנוסף לטיפוסים הבסיסיים שהכרנו במהלך הספר. במהלך הגדרת הטיפוס החדש משתמשים בהגדרות בסיסיות, או בהגדרות שנעשו קודס באמצעות 06061. הגדרת טיפוס חדש: 72, <שם טיפוס> ,<שם טיפוס> <הגדרה> 666%כע6₪> דוגמאות: ;זא תתתצסאה ,תתסמעדא1 6םג 5סַַ6סץ5 (1) 12 תצעפ* םס 65ַ6סץ 6‏ (2) 16 006ע86 66065סצ6 (3) ;סתהת הת הדקפ ;תום 18 תמסטצא1 ;[5] ם6110526 לאך הממצסאת ;פתתס 10* | בעזרת ההגדרות שלמעלה, נוכל להכריו על משתניס : ;% ,7 ,1 תמססצאך 72 ,פסס תתס הלק ;צפס 18 כאתס פ1 קיים דמיון רב בין הגדרת ]2606 להגדרות המאקרו 6ח06א. מכיון שהגדרת ]0606 מטופלת על ידי המהדר, בעוד שהגדרת מאקרו מטופלת על ידי קדס-מעבד, ניתן להשתמש בה להגדרות שלא ניתן לבצע באמצעות הגדרת מאקרו. לדוגמה: ;() (סאסת 8ה0*)* עהםתס 6065קץ₪ הטיפוס %6= 645 הוא מצביע לפונקציה שמחצירה מצביע מטיפוס תו. דוגמה לשימוש: ; ()560208%6* , () קת5620* שפתס ;0 5602 086 ,עסק 865 קתס סאטשע אתס כעת נוכל להציב: ;קת0ע5%2 = עס 568 סתס 22 = מס 808 086 כפי שראינו, השימוש ב-6060כ/+ מאפשר לשפר את הקריאות וההבנה של תוכניות, מכיון שהגדרות מסובכות ומורכבות אפשר להחליף בשמות קצריס ובעלי משמעות. 4 המדריך השלם לשפת 6 רשימה מקושרת דו-כיוונית לאחר שלמדנו על עקרונות רשימה מקושרת חד-כיוונית ויישומס, נגלה שישנס מספר חסרונות, שכדי להתגבר עליהס יש צורך ברשימה מקושרת דו-כיוונית. שיס לב/ כאשר מספר הנתונים ידוע מראש, מומלץ להשתמש במערך מצביעים. ,+ ,| כך ניתן להשיג מהירות בתהליך שליפת הנתונים, שכן ברשימה מקושרת קיימת גישה אך ורק לראש הרשומה או לסוף הרשומה. כדי להגיע לרשומה מסוימת, צריך לעבור ברצף מרשומה לרשומה, ולא על ידי גישה אקראית כמערך. יש לשים לב שגודל המערך נקבע מראש, ולכן לא נוכל להוסיף מבנים במהלך הריצה. התוספת שיש להוסיף לרשימה דו-כיוונית הוא מצביע למבנה הקודם (זסזחוסס 86%ם). כך ניתן לאפשר תנועה בשרשרת המבניס קדימה ואחורה - מה שלא ניתן לבצע בשרשרת מבנים חד-כיוונית. פעולה זו מקנה מהירות בהשגת נתונים, בכך שניתן לנוע קדימה או אחורה על רשימת המבנים, ולבצע פעולות על הרשומות שקדמו לרשומה הנוכחית. - 1 ל נקודת ציון? בק ₪ יתרונה הגדול של דשימה מקושרת שרשרת נתוניס) הוא בכך שאין צורך לדעת מראש מה מספר הרשומות שיידרשו במהלך התוכנית. כך נוכל להוסיף מבנה נתונים בכל מקום שיידרש ברשימה לאחר קבלת האישור על קבלת שטח הזיכרון שביקשנו. בתוכנית הבאה נלמד כיצד לטפל ברשימה מקושרת דו-כיוונית. 7 קובץ תקליטור: 0201208.6 ו רשימה מקושרת דו-כיוונית << סיוב <ת. 10ם00> <ת. 8%6010> ל 6 סו ל 05 > <ת.5%60110> 7 אשת טאמא /* מבנה בית בזיכרון (801%=0-255) */ ₪ / ססטנ1סתג ססטנ1סתג ססטנ1סתג ססט1סתג ססט1סתג ססטנ1סתג מ6+1 ;ספץס ע8ם0 66ת16פתט 6061סץ6 פרק 12: מבנים 265 /* מבנה מערך של פסיקות, ניבחר בצורה אקראית, בדיוק כמו שם וציון למשל */ ] 560% 061ססץ6 ; [12] 6>קע%מנסתם עַַַםתס שו ;10מ61קטע2ססםת1 [ מבנה הכולל מצביע לבלוק הנתונים (מערך פסיקות במקרה שלנו) ושני מצביעים */ /* לבלוק הנתונים לפני (צעס*) ואחרי (%אם*) | מו5 ונשוס וט ;8%8* ב1סט ות ומס שו6טסו ישן וב וממ טנסו ;ו /* טיפוס 115%תכ מסוג מבנה 118% */ 2 מְ2118 006ע865 +6061סץ6 /* מצביע קבוע אל תחילת הרשומה */ > 5ו= מו /* הכרזות על הפונקציות */ ל סש סו פופ ונופ ונס סש פוב פופ | שו ו ; (10סט) עעסתסת מת0168 ב1סט 5 1 > ו ו 61 ופי" בצ ; (ס1בסט) סט תסספסס צ418018 בנסט ; (10סט) תשס6 6007 צץ6418018 בנסט ; (010ט) עססתטם צס 661 בנ1סט 6 6 סנב םקנ מותוב ‏ םק | באל ((שספו*" ₪ותו) שמוג סוסמנפווב סומב ל (( 0 עפש ספ ₪ נמ ₪1 > ו מו ק (פווםוס* |סענפוש 2 5 > םוש )פופו מפן" וש נמ ; (ס1סט) 655886 1סט ; (1₪סט) נומסת 16ס ו ו ו ינ לפכוה ה ופוס הקנ ו 0 */ ₪ 2 ₪ ₪ 0 ₪ ₪ > א 1 2 א /* ההההההההההההההההההההההההההההההההההההההההההההה-777---- ; (10סט)מנ1את סנ1נסט ו פונקציה המציירת תפריט בכתיבה ישירה למסך // ; () גומסות סוב פופ םושו ו 55 1 ו 8 ₪ 12 ₪ ₪ א שר ₪ /* ההההההההההההההההההההההההההההההההההההההההההההה-7ה7---- ; (10סט)מתס1נפקס 5861606 ב1סעט ָ /* נושא הפונקציה: בחירת אופציה מתפריט*/ ;תסנססס פַהַםת0ס ( "שש" = |( (0 ספ פוש = ב ןש 15 ב 6 המדריך השלם לשפת 6 (מס%1קס) ם160שפ5 9 (0 1026 מפעפב 65 2 2%" 656 ;268% ל () פכפחשת | ₪1 8 ₪7" 6 ;68%ע2ס 8( פוט וסוס ₪1 - 5 ל(" 666 ;268% ל( וסוס וספ ₪21 8 969 66 ;268% 8 ( ) שסומובתה ₪150 5 "76 6656 ;268% ] ז ] / * 4 ו ו (010ט) תסנססס 666 מַַַם0 /* נושא הפונקציה: בדיקת תקינות בחירת האופציה מתפריט* / 6 5 0 = 86₪602)(; ו ה 5 | | |( =-] /* כאשר מ6 מקבל את התו המתאים ‏ 0 = 0% אחרת 1 = 0% */ ית 2 52 660% ה ב ה ה הפ ( ; (16)!0%נ1תשט ; (ם0) םתגו26% (18סט) ץעסתפת מת0168 ב1סט /* נושא הפונקציה: נקה זיכרון* / ; (2ע) ת6168 מכ ;(1,1) ץא9060% ; ("!0ת0168 שעסתסת")652תנמס פרק 12: מבנים 267 ב /* נושא הפונקציה: נקה זיכרון* / כ ו 61 שו פופו 55 ומוס ( ו חייבים להעביר את המצביע לבלוק הבא אחרת נאבד* / /* את הקשר, מפני שהמבנה הנוכחי נמחק ;%אם<-011002 = 6סאא011 ; (411002) 12608 0 = 6 ] ; (0) ם8גו26% (10סט) קט תסספסס צץ6415018 בנסט ָ /* נושא הפונקציה: הצג רשימה מסופה ועד תחילתה*/ ₪ ו ;511 11* 15%6כ ל טג הו 31 שנומ 5 )שוחו 15 ק ( 6 ס> 20%608) 2156 תסנסהתעס1םת1 65ק66220ם1")פ6גוסס ק ו ו פוט /* מגיעים לסוף הרשימה* / = 1100 11116065 = וה קפושע =1. סקופ = )₪ 0 ( = 16 /* חוחזרים לתחילת הרשומה בעזרת המצביע ששכ ומקרינים על המסך את נתוני המבנה */ ו0- 1 (‏ 2ס וו )= 20 606 סו 1 15 ב ה ;2 =! 6₪מ96ע50002ם11 86 תתסא =! 1186 = 116650 שסןל- 110 = 1160 (08%8<-118%(* %50ם61קט6622ם1) ל ל 5 הס פוה - 12/5 5 שה ) 66| ,6סע6תנסתהת<-%ת000226+ם11 ל ( 55ו9 ונל ה 66 בהר ו ו ] 8 המדריך השלם לשפת 6 / + בסוויוו הו סו ה ו ו ו (010סט) משס6 60 צץ6415018 בנ1סט ו /* נושא הפונקציה: הצג רשימה מתחילתה ועד סופה* / ₪ וו ו וז ו ו וו 8 ( 6 5566 60 0סץ) 2156 מסנפאתעס+םת1 %65ק66220ם1")פ6גוסס ; ("מםע (ת00%60 עוברים על הרשומה בעזרת המצביע 6את עד לסופה* / /* ומקרינים על המסך את נתוני המבנה = %ת%0ע0002+%ת771 ,תע =1186) 505 סל-- 155( ו ות =! 5מם1000226ם11 66 עתטא =! 1186 6 כ ל 1 = ₪ (08%8<-118%(* %50ם%1קט6622ם1) ל 2 | םס 1/5 ₪ ההא ) וסור ,%סע6ת נסת8ם<-%ת5000226ם11 ; (%20%ם1<-%מ50002286ם11 ( 6 3566 וה (10סט) עסמתטםת צס 661 ב1סט ָ /* נושא הפונקציה: מחיקת מבנה ברשימה על פי המספר הסדרתי של המבנה ברשימה * / ;תטמפסעפת1 %6ם1 ו זנ ו שוחו 1 /* מצביע למבנה אשר יצביע על תחילת הרשימה */ סוי ו ות 5656 6 ( ₪6 09 (8 :עפססתטת 100% 118% 8 ע662ת6 ,לססתטם צס 61666כ")%61ת1עסס ל 2 = 50מםךך ק ( ו 5 /* מגיעים למספר המבנה המבוקש* / ה ו (עעטסא =! 6₪868<-קתף) +1 ; (88%8<-קת6 (*0282) ,%קעפתנ1נסתהםת<-10ם7)11ץ56200 7 1108 כ ₪51 מ ] ; () 5886 5 סו פרק 12: מבנים 269 / * 0 (10סט)50ם1 6קע6םת1 66% בנ1סט ו /* נושא הפונקציה: הכנה לקליטת נתונים* / /* שו1שט תע6%%0ע2 - טע ה ; (אתצ6) 0תט%6086%020א606 ; (21/08) %600102א66% 0566 6 ( 8 05 ו ; ("(0ם6 50ם1 - 64) : 6קטע662ם1 6 פתהת 6קט6622ם1")פ6וקס (07 == 072 = ש8) 508 626 )ו סופןפפותו = שו ו ק ו ה ] ל ( 6 35 שו ] / * ה ואר שה שופ א הו הערא שה הו שביה אד לה ורש ורש הר ו 7 ₪ ככ עפ שוחו פ וו סוס נפותווב פוסוב ָ /* נושא הפונקציה: קלט נתונים ובדיקות* / 57 ₪1=1 פתב ; [12|] ס6תהת6קע62ת1 מבתס 511630 כ ןוו שוחו 16 ות ; (שסע* ,001) ץ6060% /* ניקוי השורה ממקום הסמן עד סופה | */ 2( 5561 /+ מחזיר את הערך של מספר השדות הנקלטים* / ; (6תהת6קע%ת1 ,"פ1)"%5ם508 = 116185 /* האם הקשנו 0 או ליציאה*/ ;(1) םע60%8ע (0 == ("0" ,פתַהַת6ק62ם1) קתס1ע56) 15 /* ניקוי %56%טם המקלדת */ ; (ם5%01) מ1₪8++ 6 172 = 06 6 ; (>קעפת61 ,"1)"%96ם808 =+ 116185 /* אם נקלטו יותר משתי שדות = לא תקין = */1 1 6 פופ ((/2 = 1000 )‏ פב ;( (0ס+מ%1קט86220ת1100)512605)1הת(* 0+ם%1קמע02סםת1) = 50ם11 /* באשר אין מקום בזיכרון = (1-)* / ; (1-) תמט66? (מתסא == ס5מד1ד) +1 ; (6תהתמסספפת1 ,>קמפתנסתהת<-50ם11) ץק620פ5 ל = 56-58 ו ד 0 המדריך השלם לשפת 6 /* לפעם הראשונה כאשר הרשומה ריקה */ ז 2 ו | )ו מו = ו 8 85 1= 8 ₪ == 10056 )וו כאשר המבנה החדש נקלט בצורה תקינה יוחזר מצביע אלין* / /* ולא ל-1,זשא, לכן יוחזר 0, להמשך קליטה 5 1= 8 ( שש == 17806 המ ו ופ ו /* ו ( ופוס |פוומפוש" 66פפוי* טוש מס גו ופ" 5ו₪ המו /* נושא הפונקציה: מחק מבנה* / /* הנתונים עצמם - 68%8 / מבנה הנתונים - 166% */ קפסו םוש המופ קששוסן שוכ וו = וטו 6/5 = קת%;0ם00ס5! 66 עעטא =! סאת<-קת%;100%ע = קתס) 02ס+ (%אם<-סת> /* כאשר מצאנו את מבנה הנתונים המתאים */ ו (0 == (08%8<-סת (*0282) ,82*(038%68ם0)) קתסע552) 15 | /* דואגים לצאת מהלולאה */ ה /* מעבירים את המצביע למצביע למבנה הנתונים * / ;קתס = 106% מעבירים את המבנה המוצבע הבא ע"י המבנה* / /* המיועד למחיקה, למצביע למבנה זמני ול 01 = פשוסו /* כך גם את המבנה המוצבע הקודם* / קששפופן- וסוס = שופן /* אם המבנה הקודם מכיל נתונים* / הנה /* מעבירים את מצביעו אל המבנה המוצבע הבא, על ידי המבנה המיועד למחיקה*/ ול 10| = םואפתול-פנפן /* כך גם את המבנה המוצבע הקודם*/ קטעס = טעס<-סתס (עתסא =! קתס) 15 עתה כשניתקנו את הקשרים של המבנה בשרשרת* / /* נשחרר מהזיכרון את נתוני המבנה המיועד למחיקה (תתסא =! 08%8<-0100% 66 6868) 15 ; (38%8<-0106%) 1188 ונשחרר את המבנה עצמו */ ; (0100%) 1188 / פרק 12: מבנים ‏ 271 / ; (קת6) 2ט66ע ו" |נפש 1180 > םו₪ נמום) ו > ₪ הו ָ /* נושא הפונקציה: הוסף מבנה נתונים חדש* / ₪0 8 פם" 1506 /* כל עוד יש נתונים צריך להגיע לסוף הרשימה כדי להוסיף מבנה חדש* / = 05 13 )ה 5ב ₪0 ; (>את<-קתס = קתפס;תתסא =! סאםת<-סת%;118% = סתפס) 102 65 וא = שו /* הקצאת מקום למבנה החדש*/ ( ( ו ופ 6 ב 166 ונפש( ₪ 1מם) = 256 ששם /* יש מקום - מעדכנים מצביעים */ =1 ₪266 ₪₪) ב ו /* מצביע אל המבנה האחרון */ = ופשמ--06 קבאמ /* מצביע אל מבנה הנתונים 68%8* */ 2 = 08608<-60ע שחסת /* מצביע אל המבנה הקודם תש - (תחילת המבנה הקודם)*/ לפוט = שפ-256 ה כאשר המצביע על מבנה קודם מצביע על נתונים יש לעדכן את* / /* מצביע (6אם) אל תחילת המבנה ששולב, שהוא המבנה האחרון ברשימה (ע1סא =! 118%) +1 שו = שופתה-- ןסו ] /* החזרת מצביע למבנה החדש שנקלט */ ; (260 שסם) 26% ] /* ו (ס1סט) 655886 1סט ; (24 ,25) ץ4060% ; (".. .טתפת תנהת סם צ6א עשתה 2688קע")1סתנמס ; () 96608 (1סט)ומסת 16ס | == 6 20 = 2607 כ שב 65 2 ההמדריך השלם לשפת 6 /* מצביע על ה-אתת 71860 (5800א0% תס7)*/ ופ סו /* מצביע לסוף זיכרון המסך* / ₪000 500 0) ו א( 50 שש = 60 פ שמוצסו 0 גותסת תגבאת " + = [אמת טאמא]פפת* עַאַםס = 6 9 6 , ,". עססמתטת צס 261666 - 1 מ 660-ה ןס = ₪ ל 5 7 ופוסו = |סל 6 3 ,". ץעסתפסת 626 מ0168 - 2 = ; (אתצ6) 0תט%60806%020א606 ; (2108) %600102א66% 6 ( ה | 0[ 3 | 56 = 5 2 * ₪1 005800 ₪(" פפם שש = הקל 7 160 > 6 ((עתטסא =! ע6פ5*) 866 (0ם5028 > קטצ)) 16נ1גתט | /* כתוב תו ישירות לזיכרון המסך* / ל ((רפר 5 ))‏ כןקי* /* כתוב תכונה ישירות לזיכרון המסך* / ו פו תרגילים 1 הגדר רשומה שתכיל פרטים אישיים של אדס עבור שרות שידוכים ממוחשב. נתוני הרשומה הס: שס ושס-משפחה, כתובת, מין, גיל, תחומי התעניינות. תחומי ההתעניינות מוצגיסם כמערך המכיל את האיבריס הבאיס : 5סטוו|סם, +וסס5, 65ססם, 6 6907 ו-+זה. בנה שתי רשומות 065001 ו-2ח50ז6ק המכילות את הנתוניס הבאיס בהתאמה: > ישראל ישראלי, כינרות 20 תל-אביב, וכר, 30, מתעניין בספרות, מוסיקה וספורט. + נורית ברזל, בלקינד 3 תל-אביב, נקבה, 26, מתעניינת באמנות וספורט. פרק 12: מבנים 273 2 הגדר מערך של 20 רשומות כמו בשאלה 1. כתוב תוכנית שתקלוט בכל פעס נתוניס של אדס חדש ותנסה להתאים לו/לה בן/בת זוג לפי הקריטריוניס הבאים : מין נגדי, הפרש גילאיםס קטן מ-10 שניס, תחוס התעניינות משותף אחד לפחות. אם נמצא בן/בת זוג, התוכנית תדפיס את נתוני בני הזוג והקריטריוניס בהס עמדו (כלומר: הפרש גילאים, תחומים משותפים). 3 נתון ביחייר המעסיק 20 עובדים. עבור כל עובד יש לשמור את הנתוניס הבאים: שס ושס משפחה, גיל, ותק, משכורת ומערך המכיל את מספר ימי החופשה שנלקחו בכל אחד מ-12 החודשיס האחרוניס. כתוב תוכנית שתקלוט את הנתוניס של 20 העובדים שבמפעל ותבצע את הפעולות הבאות: א. תמיין, בעזרת מערך מצביעים, את העובדיס לפי סדר האלף-בית. ב. | תמיין, בעזרת מערך מצביעיס, את העובדיסם לפי גובה המשכורת. ג. | תמיין את העובדיס לפי מספר ימי החופשה שלקח כל אחד מהס ב-12 החודשיס האחרוניס. הדפס את הרשימות הממוינות. 4 כתוב את פעולות המיון שביצעת בשאלה הקודמת באמצעות פונקציה מרכזית. פונקציה ו תקבל את המצביע המתאים, המצביע אל מערך המבנים שיש למיין. 5. במערכת להנהלת חשבונות מנהליס שתי קבוצות של נתוניס בחשבון הלקות: א. נתוני זיהוי ויתרה: שס לקוח (15 תווים), מספר חשבון, גובה האשראי שמוכנים לאפשר לו, יתרה בחשבון. ב. תנועות של פעולות כספיות, שהתבצעו במשך החודש האחרון. תנועה מורכבת משני נתוניס: מספר חשבון וסכוס חיובי או שלילי (עבור הפקדה או משיכה בהתאמה). התוכנית תקלוט עד 30 חשבונות כאלה (גמר קליטה כאשר מספר החשבון 1-). אחייכ היא תקלוט תנועות ותדפיס בכל פעס מצב חשבון. אס הלקוח חורג מסכוס האשראי המותר לו, תודפס הודעת אוהרה והמשיכה לא תתבצע. 6. רשימה מקושרת של איבריס הממויניס בסדר עולה. כתוב תוכנית המבצעת באמצעות פונקציות את הפעולות הבאות: א. הכנסת איבר חדש לרשימה. ב הוצאת איבר מהרשימה. ג. | הדפסת הרשימה. ד. | מניית מספר האיברים ברשימה. עליך להשאיר את הרשימה ממוינת לאחר כל אחת מהפעולות האלו. הגדר מבנה מתאיס. 4 ההמדריך השלם לשפת 6 במסגרת הסקר הסטטיסטי הנערך כל שנה אוספים מידע מ-50 תושבי השכונה. הנתוניס כוללים: מספר ת'יז, שס ושם-משפחה (20 תווים), כתובת (30 תווים), מספר ילדים, מספר חדרים בבית, גיל. משרד הפניס מקבל מעורכי הסקר את רשימת הנבדקים, כשהיא ממוינת בסדר עולה של מספרי זהות. רשימה וו תכיל את הפרטים: שס ושס-משפחה, כתובת ומספר ת"ו. לצרכים סטטיסטיים רוצים לערוך רשימה בלי פרטים מזהים, אשר תכיל: גיל, מספר ילדים ומספר חדריס בבית. הרשימה תהיה ממוינת בסדר עולה לפי גיל, ותכיל נבדקיס שגילס גבוה מ-18 שנה. יש לכתוב תוכנית שתוציא הדפסות כנדרש בעזרת מבנה נתוניס יחיד, אשר יקלוט ויבצע קישוריס מתאימיס בין איברי הרשימה. דמז! השתמש בשני שדות קישור והגדר שתי פונקציות שתבצענה קישור בהתאס לקריטריונים שהגדרת. משימות: תרגילים 34, 35. פרק 12: מבנים 275 איגודים המבנה, אשר הכרנו בפרק הקודם, מורכב ממספר שדות בעלי טיפוס זהה או שונה, כשבכל אחד מהס ניתן להציב ערך כלשהו. לעומתו, האיגוד (חסוח() הוא משתנה בודד, אשר יכול להכיל ערכים מטיפוסים שוניסם, בזאמניס שוניס. הגדרה של איגוד האיגוד מאפשר להגדיר משתנה יירב משימתייי, המסוגל להכיל טיפוסים שונים מבלי לדעת מה גודלו של כל אחד מהם. גישה זו תצרוך כמות מינימלית של זיכרון, עקב החפיפה במיקומס של המשתנים מהטיפוסים השוניס שהוגדרו בו. המהדר הוא שדואג לבצע את הקצאת הציכרון המתאימה. הגדרת האיגוד והה בצורתה להגדרת מבנה: <שם סוג האיגוד>מסנתט הגדרת משתנים מטיפוסים בסיסיים ; < רשימת משתני איגוד > תדשיס 13.1: תיאור סכימטי של איגוד הסבר: א. מילת המפתח השמורה חסוחט פותחת את הגדרת האיגוד. ב <שם סוג האיגוד>: הגדרת השם הינה רשות. הגדרת שס מאפשרת להתייחס לתבנית ההגדרה של האיגוד - באופן והה להתייחסות להגדרה של מבנה. ג. | תבנית ההגדרה מכילה הגדרות של משתניס בעלי טיפוסיס בסיסיים או מורכביס המוכריס עד לנקודת הגדרת האיגוד. צורת ההגדרה זהה להגדרה של מבנים, פרק 13: איגודים | 277 אולס באיגוד, רק משתנה אחד ויחיד מתוך תבנית ההגדרה יכול להכיל ערך ברגע נתון כלשהו. ד. <רשימת משתני איגוד>: רשימת משתנים הינה רשות. אס משתמשים בה, היא מגדירה משתניס מהטיפוס: <שם סוג האיגוד> מתסנתט דוגמה: ] 16קת8א6 תסנםט 32 ישתד ; 5 11086 ; 8* שהםס ; 1ט |[ בדוגמה זו הגדרנו איגוד מסוג 8006א6 והקצינו משתנה-איגוד 1 מטיפוס חסוחט 6 וחהּאס. תבנית ההגדרה מורכבת במקרה זה משלושה שדות. באמצעותה יוכל המשתנה 1ט להכיל ברגע נתון ערך כלשהו: שלם, ממשי, או מצביע למחרוות תווים. כמות הזיכרון שיקצה המהדר עבור 1ט תהיה על פי הטיפוס בעל הגודל המירבי, מכיון שהשדות באיגוד מוגדריס באותו שטח בויכרון בחפיפה. סכימטית, נוכל לראות את 1ט כמו בתרשים 13.2. תרשיס 13.2: סכימה של מבנה איגוד /1) הפנייה לשדות האיגוד נעשית בדרך זהה לפנייה לשדות של מבנה (שים לב לנקודה המחברת): <שם שדה>.<שם איגוד> או <שם שדה> <- <מצביע לאיגוד> הטיפוס של הערך המצוי באיגוד ברגע מסוים והה לטיפוס הערך האחרון שהוצב לתוכו. פנייה לשדה מטיפוס רצוי קובעת את הטיפוס של הערך שיהיה באיגוד באותו זמן. פנייה זו, והאחריות לשימוש בערך הנכון, מוטלת על המתכנת. 8 המדריך השלם לשפת 6 לפניך סדרת פקודות להמחשה: 2 = 1.1ט 0 ( ;(₪1.1 ,"ת%6-פפת581ת60 1ט") +%ת1עס התוצאה: 5-פת1הסתסס 1 סדרת הפקודות הבאה תניב תוצאות בלתי ניתנות לצפייה מראש: 81.13 = 7 67 ;(+.1ט ,"ת%1-5ת%81ת00 1ג' 5נעצס שיס לב/ ו במקרה זה, יש אי התאמה בין הערך האחרון שהוצב לאיגוד ‏ שדה 5 / לבין הפנייה לאיגוד (השדה הממשי). למעשה, אין זה מדויק לומר שהתוצאה אינה ניתנת לצפייה. אם המתכנת מכיר באופן יסודי את מבנה המחשב, את גודלי הטיפוסים השונים וצורת *יצוגם בזיכרון המחשב - מיתן לנצל בכמה אופנים שונים את האיגוד בכדי לטפל בקטע הזיכרון המשותף לשדות שלו. על ידי התייחסות לשדות אחרים באיגוד (השונים מהשדה שקיבל ערך לאחרונה) ניתן לייעל פעולות שונות ולחסוך בכמות הזיכרון. הדיון בשיטות אלו חורג מנושאי הדיון שבספר זת. שיבוץ איגוד בתוך מבנה ניתן לשב הגדרת מבנה של איגוד בתוך מבנה אחר. כפי ששיבצנו מבנה בתוך מבנה, יהיה משתנה האיגוד אחד משדותיו של המבנה. צורת שימוש אופיינית תהיה יצירת מבנה המכיל איגוד, ושדה המורה לנו מה הטיפוס המצוי כרגע בתוך האיגוד. המבנה הזה יאפשר לנהל מעקב נוח אחר הטיפוס הנוכתי. דוגמה: 0 עא1 6ת6611 + 1 זתסץ 6ת6611 + 2 ע תתם0 6ם4611 + ] 6סץ6 עהאט 006מע5% ; 86160% פַַם0 ; 81ט גו 6880016 תסנתט ן[ באמצעות סדרת פקודות אלו הגדרנו משתנה מבנה בשס זפּ, המורכב משני שדות: שדה 566065 - שבאמצעותו נעקוב אחרי טיפוס הערך המצוי באיגוד; ושדה ופצ ט מטיפוס 6|קו8א6 חסוחט שהוגדר קודס. פרק 13: איגודים 209 נקבע לעצמנו כלל: כל הצבה לתוך אחד משדותיו של האיגוד תלווה בהצבת ערך של סוג הטיפוס (זא1, 1031 ו-ק 6048₪) לתוך שדה 566065. בהתאס לכך נוכל לכתוב פונקציה שתדפיס את הערך באיגוד באמצעות הפקודה ()שחוזס מתאימה: ( ו (1) (2) (3) ]+ (86160%<-) ם160ש5 (4) ((‏ שי שול- 0 7070 הסהונסן 5 עצא 0856 (5) 0% (6) ב ופ מול-0ן (7527) פמבפפן 8 הקסע ₪6 (7) 0% (8) |( 1 של-ן ה79₪7) פמבקסן 5 8 656 (9) 8% (10) ) (11) ] (12) נדגיסם שימוש בפונקציה זו: (ס1סט) פנ1את 1סע (1) | (2) = ו-1פש ₪שבצרפש (3) ;א = 856160%.עב (4) ק ( 9 6608 בוט ישן (5) ; (עהט) 1פט סש (6) ("ח) פנטווומופן (7) 6 עס תע 3" = 14פש ₪ פפש (8) ₪ = 51008 פוש (9) ק ( חווטו פהבויי) בסו ספ (10) ; (עהט) 1פט סש (11) מו שושןהו בסוסן (12) ) (13) הרצת קטע התוכנית תפיק את הפלט הבא : 5 12 תסנב1םתט 6םמ7 5 פס 0 60א5791 בת : 5פא1ה7א0ס6 אסאס טשחץ ₪ 1 דוגמה לשימוש באיגוד נבנה תוכנית המוצאת פתרונות למשוואה ריבועית, ונדגיס בכך שימוש מעניין באיגוד. למשוואה ריבועית מהצורה המנורמלת : 6=0+אפ+2א8 קיימיס שני פתרונות אפשרייס: (480 - 07)) 5 מ- 2 5 0 המדריך השלם לשפת 6 את הביטוי שמתחת השורש, המופיע במשוואת הפתרונות (02-486), נכנה דיסקרימיננטה ונסמן אותו ב-ס. על פי ערכו של פ ניתן לקבוע את אופי הפתרונות : אס 0= קיים פתרון יחיד: 8---2א=ן% אס 0<פ קיימים שני פתרונות ממשיים : 28 91,277 אס 0> קיימיס שני פתרונות מורכבים: ג |"פ-34|486 םד | 7 ו כדי שהתוכנית תהיה כללית ותענה על כל האפשרויות, עלינו להתייחס לכל אחת מהן. נגדיר איגוד אשר לתוכו יוכנס הפתרון בין אס הוא ממשי ובין אם הוא מורכב. נניח, שמעניין אותנו גם אס הפתרון הינו ערך שלס (עגול) או ממשי (עס שבר עשרוני. נגדיר לפיכך, את האיגוד המתאים : ) 00%ע מסנתט 12 סת1 12 ₪ 11086 ;[2]א16%קתסס | 11086 ו תיאור סכימטי של האיגוד ניתן בתרשיס 13.3. [1 ]א16קמסס [0]א16קשסס תרשיס 13,3: סכימה של מבנה איגוד /2) כדי להבדיל בין סוגי הפתרונות האפשריים, ינארוז'י' את האיגוד בתוך מבנה המכיל שדה ייסוג פתרוויי. הפונקציה שתחשב את הפתרון תאחסן אותו באיגוד ותעדכן את סוג הפתרון. פרק 13: איגודים 201 תכנון הפונקציות בשלב ראשון נבנה תוכנית, שתקלוט את הערכיס של המשוואה הריבועית (המקדמיס 8 9, ו-66) ותדפיס את פתרונות המשוואה. בשלב מאוחר יותר ניתן להרחיבה, כך שנוכל לבצע פעולות נוספות על הפתרונות בנוסף להדפסה שלהם. פונקציות העזר הדרושות : א. קליטת הנתוניס באמצעות (568010. ב מציאת הפתרונות וסוגי הטיפוסיס של הפתרונות. ג. = מציאת אופי הפתרונות על פי הדסקרימיננטה (כ). ד. הדפסת התוצאות. התוכנית / אא אא קובץ תקליטור: 61301.6 **%**/ <ת.56010> 6100₪6ם1 (1) <ם. מ6ַ> 16108006 (2) 0 ותתתת 6ת06+1 (3) 1 | 00% 6ם0651 (4) 2 סעאטסת 6ם66+1 (5) | 38668 06570 (6) ( 1שש 34 שת (7) 1 ₪ ₪5 (8) ; [2]א16קתסס 11086 (9) י ו (10) + 3266586 שה6ו סו (11) קפ 050 ₪ (12) ; 781 68ע 006ע מס1מט (13) 9 [2] ₪5 | (14) ק ()1עססץס ,()1ספסץ6 פבםס (15) (ס1סט) מ1את (16) | (17) ל 0 הס (18) 66 6 60 6 - 10 ₪ הפו ו (19) ; ("מ6=0+א8%2+0% 81 (66- ₪090 0 7 ו 6% (20) 6 9 6 שושפ 6 (21) 2 המדריך השלם לשפת 6 (22) (23) 6 92 ) שפוטפן 6 (24) 6 05 - ה (25) (26) )27( )28( 7 6חע 210 ,0 516860 6 )29( ₪ = 49 = 49896 ( (כ) 0605ץ5=6) ב0ס16חפ5 ו ₪556 8 5 | = 9 7 )298( /* כ שלילי, ולכן נחשב שורש של מספר חיובי */ קה (298) / (ש=) 6 = ופ ₪21 = [0] 6015 צחש. 9 |[ ] 55 ; 1080 [ 1 || 655156 = 61 656 |ן 0 | 5656 ;2% 8 555 (298) / () ₪606 + פ= = | ) = 1 )21( (‏ = 6 2658 |[ 0 56 ₪ 0568 ָ : תת 0856 21 = עפש 5148 0065 0 56 ;2688 :פאטסת 0886 כ ₪1 (196) = עפש ב ותש 28ב [₪0] 6 ;2688 ] (29₪) 7 ((₪) 60 = שב6 = |ק ( (16)21 0-62 = 8שפןשם ₪6 | 1 | 6565 ₪ 06 :1 08856 21 = [תש ואש ₪5 [1 ] 8 ;68%תס :פאטסת 0886 כ ₪1 (פשב) = עפש 2 וש פשתום |[ 1 ] 8 ;268% ] 568%; 1 ] (0) 1סס6סץס פַהםס ₪ ₪05 74 ₪ 3900 0 00 2 73 8 600 פקר 03 0 0041 62 73 ]8 600 פאר 0 00 00-41 0 62 72 8% 605000 ן6 1 00 00 00 00 00 60 600 600 600 0) 5ק א פא בק 45 08 5 5] פק רצק ת) ת) ת6) ת6) ת6) ת) ת) ת) ת) ת6 0 00 00 0 00 00 0 0 שר ויו ישו וער ועו קור שר ועו יקור ו ור הרשו שור שור ור יור יור וער הער וצו ער יור שור הער וו ועו ה שר ועו ועו קר וע ור עור ור ישו וס יר ו פרק 13: איגודים 23 204 | (8>0) 1% ; (008018) םשגו26%+ ; (1תתת) ת26%02 / (ע) 1ע6סץ6 עבםס ₪ 16 5 שת ו (ע == 1) 1% ; (עתאטסת) םשגו6%6+ ; (1תתת) 26602 ] ופ בה 7 2 סב 2( 90 0 ₪ = (62) > %(6) - 2 (55) ") +6ם1עס |( == 1-2 םוח למס ועו 56 | ₪ ] )| הו וס | :60% 08856 הו את ו ו חן 0 סו וש 566 [ ₪0 ]| 5656 1 ]65 וש = [ ]| 56 |( 0 וש 05 |[ ₪ ]| 6565 ( 1 ] ונפש 05 [ 0 | 556 ; 268% 0 655 3 טש 5 (354 2 ₪61 2 2=0) 5686 | (פופ ‏ ₪ |[ 2 | 6 6 נש | ו1תתת 0856 8 (₪1ש 122 265 [ 2 ]| ו 767 )סוב פופ ;268% :פאטסת 08856 2 (1ש 42 1 65 |[2 || 6 767 )1 סוב פופ ; 68%ע2ס ] לת 8 כל 2 ((0==) 0 נט מס ] ] ] המדריך השלם לשפת 6 סס 0סס 00 0ס 0ס 0ס 00 00 ₪ 72 ₪ 000000 ן6 1 ס פ ס ס ס פ פ ס 9 00 0039 00-41 ס 7 7 7 " חר הסבר: א. בשורות 5-3 השתמשנו במנגנון 'יההגדרה'' 6חו%061 עבור שלושת הטיפוסים של הפתרונות. מכיון שייתכנו שני פתרונות, הגדרנו משתנה מבנה בשס 65ז כמערך של שני מבניס [65]0ז ו-[65]1ז. כל מבנה כזה מכיל איגוד עבור הטיפוסיס האפשרייס של הפתרון ושדה סוג פתרון בשס 26 65ז. בשורה 15 מבוצעת הגדרה מקדימה של שתי פונקציות עזר המחזירות ערך [ מטיפוס תו. הסיבה לכך נובעת משימוש בפונקציות לפני ההגדרה שלהן. התוכנית קולטת מהמסוף שלושה מקדמים של משוואה ריבועית, מחשבת את הפתרונות באמצעות הפונקציה ()סוטקוחס6 ומדפיסה את התוצאות באמצעות הפונקציה (0)חוזם. הפונקציה ()פזטקוחס6 מחשבת את הדסקרימיננטה (כ). הפרמטרים שלה הס ערכי המשוואה. על פי סוג הדסקרימיננטה מתפצל המשך החישוב באמצעות הפקודה ה6וש5. שיםס לב ש-ח6זואו5 (שורה 30) פועל על תוצאות הפונקציה (פ)60ס, ולא ישירות על פ. במידה והפתרונות מורכבים, מחושביס ערכיס רק עבור [65]0ז. הפתרון השני [65]1ז, יהיה זהה בערכיו לפתרון הראשון, בחילוף סימן האיבר הדמיוני. עבור פתרון לא מורכב מחושביס שני פתרונות. באמצעות הפקודה ח6זווו5 הפועלת על תוצאת הפונקציה (60ק (שורות 42, 53), מאחסנים את התוצאה בשדה השלס, או בשדה העשרוני של האיגוד. הפונקציה ()חוזם בשורה 82, מקבלת את ערכי המשוואה. הפונקציה בודקת את תוכן שדה סוג התוצאה במערך מבנה התוצאות (שורה 86) ועל פיו מדפיסה את התוצאות מתוך השדות המתאימים של האיגוד. עבור תוצאה מורכבת יתקבלו התוצאות רק מהמבנה הראשון ובחילוף סימן ביניהס (שורה 91). כאשר התוצאה אינה מורכבת יודפסו שני הפתרונות באמצעות לולאה. | שיס לב/ 1 בשורה 105 נמצאת פקודה זו: ; ("ת" : " ," ? (1==0)) %1ת1עס על פי ערכו של 1 (מספר הפתרון) היא בוחרת בסימן שיסיים את שורת הפתרון. פרק 13: איגודים 205 דוגמאות הרצה: 2ס+ 8 0 ,0 ,8 עס6%ת₪ 6=0+א3%2+0% ת608610 | 0018028610 8מנ- 1 0 = (18.000000) + א(8.500000-) + 2א(1.000000) 4 ,4.500000 = 1,2א 2ס+ 8 0 ,0 ,8 עספתם 60+א3%2+0% תם608%10 | 008028610 2 2 0 = (5.000000) + א(2.000000-) + 2א(2.000000) (11.500000 - 0.500000) ,(11.500000 + 0.500000) = 1,2א שס+ 8 0 ,0 ,8 עס%פתם 00+א3%2+0% ת608%10 | 008028610 3-9 2 0 = (0.550000-) + א(3.450000-) + 2א(1.200000) 3,. ,3.0264432 = 1,2א תרגילים 1 הגדר מבנה איגוד בשס 6101066 המכיל שני מבנים ומפתח מסוג תו. > המבנה הראשון מיועד לצוות הניהולי של המפעל ומכיל את הפרטיס הבאים: שס ושס-משפחה, גיל, מספר שנות ותק, השכלה (מספר שנות לימוד), אחוז מניות במפעל, דרגה ניהולית (מספר מ-1 עד 20). > המבנה השני מיועד לפועלי הייצור ומכיל את הפרטים: שס ושס משפחה, גיל, מספר שנות ותק, סוג התמחות מקצועית (1-100) ושיוך מחלקתי (1-10). הגדר מבנה 66ץ0ווח6 שיענה על הדרישות שבשאלה 1. מהס ההבדלים בין שתי הדרכים להגדרת המבנה הזה. כתוב תוכנית שתקלוט רשימה של 20 עובדים ותכניס אותס למערך של איגודיס מסוג 66ץס!|קוחס. בגמר הקלט, התוכנית תמיין את הרשימה לפי מפתח הצוות. אחר כך היא תדפיס שתי רשימות ממוינות לפי אלף-בית עבור צוות המנהלים ועבור עובדי הייצור. = משימות: 2 על -] - ה אש תרגילים 38-36. 6 המדריך השלם לשפת 6 נושאים מתקדמים תוכניות עם פרמטרים הסתכל בתוכנית לפתרון משוואה ריבועית, בפרק העוסק באיגודים. התוכנית הראשית ()חוהחז מורכבת רובה ממשפטיס שתפקידם לקלוט את נתוני המשוואה. שפת 6 מספקת מנגנון, | שמאפשר לתוכנית הראשית לקבל נתוניסם במסגרת שורת הפקודה (5 6 0 6חו|-0ח8 חח 60). לתוכנית ()חופוח יש שני פרמטרים פורמליים : 6פזּ ו-צשיזהּ. ([]טט0ע8* ע8ת06 ,8280 סת1)תנ1נאת בנסט ְ ) הערך 86ז8, מכיל את מספר הנתוניס שנכללו בשורת הפקודה, כולל שס התוכנית. הערך עפּזהּ, הוא מערך של מצביעים למחרוזות הנתונים. אס התוכנית נמצאת בקובצ 6 ס6, ונפעיל אותה כך: מםסך צְ8התסת צתתאכע 826קתסס יתקבל מבנה, אשר נוכל להציג בצורה סכימטית, שבה שס התוכנית הוא הערך הראשון המוצבע על ידי מערך המצביעים טפָז. תלשים 14.1: סכימת הפרמטריס הפורמליים של חופוח פרק 14: נושאים מתקדמים | 287 בהפעלת תוכנית ללא ערכיס נקבל, אס כך: 1 = 8200 <שם התוכנית> <- [0]עצ820 שיס לב/ לפני שנראה את השימוש בנתוני שורת הפקודה, נדגיש שכל הנתונים יתקבלו כמחרוזות 3190 - מערך מצביעים למחרוזות). אס התוכנית זקוקה לערכים מספריים, יש לבבע המרה ממחרוזת לטיפוס הרצני. בספריה הסטנדרטית של שפת 6 נמצאות פונקציות שמבצעות המרות בסיסיות: > המרה ממחרוזת לערך שלס ע6606ת1 ₪0 88011 - 8601 > המרה ממחרוזת לערך ממשי 5 סם 88011 - 860% הפונקציות האלו מקבלות מצביע למחרוזת ומחזירות מספר מהטיפוס המתאיס. דוגמה: התוכנית לפתרון המשוואה הריבועית 6=0+א5פ+2א8 וקוקה לשלושה ערכים מטיפוס ממשי המגדירים את הקבועים 8, 5 ו-6. לפניך שילוב מנגנוו הפרמטריס עס התוכנית הזו. / א קובץ תקליטור: 61401.6 כרוו, <ת.5%010> 610066םת1+ (1) <ת.מ5%011> 610066ם1+ (2) ו ו /< כ כשכ שש 4 ([]טטסע8* ע8םת0 ,8260 6םת1)תנ1את בנבסט (3) בה (4) לא התקבלו מספיק פרמטרים. כזכור, עלינו לקבל בשורת הפקודה את */ /* משתני המשוואה הריבועית וגם את שם התוכנית, ובסה"כ 4 ארגומנטים. (4 =! 060ע82) 15 (פ5) | ( ו 5 6 60 = שופ | וש תושי טוח פופן (6) /* סיים את התוכנית כאן */ 7 (0) 35 (7) ] ;([8601)820%]1 = 8 (8) לופו (9) ( | 9 ] ש806) 08 = ₪ (10) 8 המדריך השלם לשפת 6 8 90 2 ו 5 7 ₪ |6 566 )הלופ (11) הסבר: א. בשורה 4 הגדרנו את משתני המשוואה הריבועית. כפי שציינו, הפונקציה (ס8 מחזירה ערך מטיפוס ממשי. ב בשורה 5 בודקיס אס התוכנית אכן הופעלה עס מספר הנתוניס הדרוש. בתוכנית זו אין אנו מבצעיס בדיקות לתקינות והתאמה של הערכים. ג. | בשורות 10-8 מציביסם למשתני המשוואה את התוצאות המתקבלות מהמרת המחרוזות המוצבעות על ידי מערך טְפָזגּ. שיס לב, שהנתון הראשון מתקבל מהמחרוזת המוצבעת על ידי [1טפָזגּ, שהוא האיבר השני במערך. האיבר הראשון [0זְטפָז מצביע על שס התוכנית. א נכקודת ציון/ +<-:] בעת הבדיקות של התוכמנית אין צורך לצאת למערכת 005 כדי להעביר הא ארגומנטים לתוכנית. נמיתן לעשות זאת דרך מערכת הפיתות. תרשימים 14.2 ו-14.3 מתאריס כיצד להעביר ארגומנטיס לתוכנית דרך מערכת פיתוח. שססח 1 פהסן+ק 0 0"0[166%‏ 26009 00002116 הטם ה568"0 - 201% 1[8- + 0%-1+9 1+2-0% 6% ההחפס-ס 4 "ספחטס 0ס% 80 7 סצה]1 866חז | 8 חסצס 5%60 ... %5ה6השפ-ה תרשים 14.2: שלב ראשון בהעברת ארגומנטים פרק 14: נושאים מתקדמים 289 | 22-ב שבי--44 84-מ ובשנ -₪ ביצצ-ש- מכ מש. 15ב ב 5 רושחונטף -וב הפס -זק יי ו 5 השח :וף-ה ]| ... 8"803ק 8"802ק 1הה"הק 0 61 34610 או [ שא | !ואט תרשיס 14,3: שלב שני בהעברת ארגומנטים שיס לב/ יש אפשרות לפרמטר נוסף במסגרת הגדרת הוח ,[]טסעה8* ע8ת0 ,8260 6ם1) תנ1את ב1בסע ([] עטתס* מהםס פרמטר זה מייצג את משתני הסביבה כגון : +קוחסיום, ההדגם וכני. מצביעים לכתובת המסך למסך יש כתובת מיוחדת בזיכרון, אשר ניתן לקרוא ממנה ולכתוב אליה בגישה ישירה על ידי מצביעים. כתובת מסך מונוכרוס: 90000א0 כתובת מסך צבעוני: 0-00 = נקודת ציון/ כמ כ הקידומת א0 מציינת ספרה הקסדצימלית. אופן הגישה למקוס זה נעשית על ידי הכוונת מצביע לתחילת הכתובת או למקוס כלשהו במסך, טיול על פני כתובת זו וביצוע קריאה/כתיבה במהלך הטיול. 0 המדריך השלם לשפת 6 כתובת המסך אינה נמצאת באזור הזיכרון של התוכנית, ולכן, נדרש מצביע רחוק (ם חס חוסק). השיטה לקבלת מצביע לכתובת המסך: ;(0 ,0800א0%) קת אא = 802 עסק םס* 58 עהַםתס שים לב/ 4% יוצר מצביע רחוק והוא מוגדר ב-<005.0>. עסס6תנ1סק 588 6א8ת <- ס5 את נקודת ציון/ המצביע -50 א 6% מצביע אל התו הראשון בכתובת המסך המוקרן בשורה הראשונה, עמודה ראשונה. כיצד מחולק המסך המסך מחולק ליחידות של תו ותכונה | תכונה כאשר התכונה מייצגת את צבעו של התו ואת תכונתו. ואת אומרת התו הוא צהוב ומהבהב, למשל. מכיון שבמסך יש 80 עמודות ו-25 שורות, ניתן להקרין בו 2000 תווים. מכיון שכל תו מורכב משני תאים (התו עצמו ותכונתו) נגלה בחישוב פשוט שזיכרון המסך מורכב למעשה מ-4000 תאים. 2000 תאים עבור אחסון התווים ו-2000 עבור אחסון תכונות התוויס. התוכנית הבאה ממחישה כתיבה ישירה לזיכרון המסך. אנו נכתוב על המסך מחרוזת, במיקום א,ץ ובצבע הנדרש. רו קובץ תקליטור: 6 1[סתס *****/ /* כתיבה ישירה של מחרחת לזיכרון המסרךר */ <ת.5%010> 61806ת%1 6 > פוס ותו <ם.008> 01066םמ1 /* יצירת קבועים המצביעים על תחילתה וסופה של כתובת מסך צבעוני (768) */ (0800,0א0)קע אא עתת57 אתפתספ 6ת3611 (0800,4000א2)0ע אא | פאם אממטת50602 6ם4611; ₪3 ק (58פ שב 661 פשב ₪2 20 ה 69" ₪ 6) פפ פושפן בס ו ו ו ו לו ו ור ו ו הד לור וה חר מ הל הח ה לה וה הד הר ה ו ו ו ₪ ₪ ₪ 0 ₪ ₪ = ₪ 1 2 - 8 פרק 14: נושאים מתקדמים 291 (10סט) ת1את 1% ן פ ( 6 ו 8 090 957 12 , 7 שפפס בש ) ספוטו פוטופן ; ("מץ%6 שת8 56558קם")%1תנ1צס ; () 9660 ; (0) ם2ו6%6ע2 ((פנפושום שומווב ‏ 0 6601 פומו 0 פו פוש פמשחום) [פפו מושפן סנס ( 2 ₪ 6) = שספן ₪" ₪ 65 ₪ אנו מורידים 1 ממשתני שסש, 661 מפני שטבלת הזיכרון מתחילה ב-0/ */ אורכה של שורה אחת במסך הוא 80 תווים. יחידת תו מורכבת מ- 2 בתים: תו ותכונה, לכן אורכה הוא 160. עלינו להכפיל את מספר השורה באורכה כדי להגיע לשורה המתאימה. לאחר שהגענו לשורה המתאימה, עלינו להגיע לעמודה המתאימה. עמודה מכילה 25 תווים ושוב עלינו להכפילה ב-2 (תו, תכונה). /* בסופו של דבר, המצביע 68 565 יצביע בדיוק בנקודה הרצויה (601, ). " (1 = 601) 5 180 * (1 = ש90) = שש 29 (ע8%* 88 עאת אתםת50 > פסק 5652) 16נותט כעת מציבים ביחידת תו את התו עצמו ואת תכונתו 2 /* עד לסוף המחרוזת, או עד לסוף המסך. /* הצבת התו המתאים */ (( שרפו ) = ( ו /* הצבת התכונה המתאימה*/ ו ( ו חיפוש ומיו| בעזרת פונקציות ספריה מערכת ספריות הפיתוח מספקת פונקציות מיון וחיפוש חזקות במיוחד, אשר תוכננו ונכתבו עבורנו בחברת 6ח8!זס8. כל מה שנדרש מאיתנו הוא ללמוד היטב כיצד פועלות פונקציות אלו ולשלבן בתוכניתנו, כאשר דרוש. מיון מהיר הפונקציה 050% מבוססת על אלגוריתם החיפוש המהלר (וחחזוזסט!הּ +660₪)סוטף). לצורך הפעלתה דרושיס הפרמטריס הבאיס: ,ם10%ט 6 85126 ,ת616ת 6 8126 ,8860כ* 10סט)%ע4502 בנסעט ; (? (* 7016 008% ,?*16סט 8%6ם00) (קתס>*) 6ם1 2 ההמדריך השלם לשפת 6 6* מצביע מערך למיון. וח6!6ח מספר הכניסות בטבלה. ה+₪וש | מספר הבתים בכל כניסה. קוחס?* מצביע לפונקציית השוואה אשר אותה יגדיר המשתמש. בתוכנית הבאה נדגיס שימוש בפונקציה 501ף. ו קובץ תקליטור: 60201403.6 *****/ /* מיון מהיר (שימוש בפונקציה 480%%) */ <ת.5%6010> 01066ם1 <ת.10םסס> 01066ם1 <ת.560110> 01066ם1 <ת.8ם1ע5%2> 01066ם1 5 אשת 6םת6651 7 6607 כ 65007 כ 627 "של 1 = | 2] | ]| 16 62 ל (פו שצפש 6 9 6 ₪ ופוסו 5 סופ 8 56" נבום|ס)) סוסב סומ ונפטס | ומס ו ו איג 8 6 0 25 - א דג א ; 7 דדש ד שיא שיד התרי שיש יולו רהש אוש ה שש ו (ס10סט) מ1את 6ם1 (6 565 61 "ופ ו ל שוח הפ ( ]0 ] פופו ו 1 ( = 66 6 6565 וט ₪ ק "ו 5 פס ו פמ" לספס וו סופ ; ("מץ%6 צת8 655,קם")1>תנ1עס ; () 9660 ; (0) תמע660ע2 ] ו שי שו לק ולו שי האוא הרא מו קר או שש וק א ההשו או שש יר .א שש < / הס ל מס חלשל ל מה קד שב תי בה סל של רת האר חכ אק של ורוי להי ל ל רל, וקני של שה ל לוו ל השק רק לי ו ב ו | כ( 1( 66605 2( 6 ) ןו | םושו ] (0פת* 7)0282ץ8228 סתנעס בנסט פרק 14: נושאים מתקדמים 293 ו 56 ו 55 סוב פמ ((קל-רו ‏ ק ]| ₪ 07 = 1) ₪ ( | ] 18 ה 5 סו מו תוצאות ריצת התוכנית: "502%" 6505ס 0% עס 81668 "502%" סמפס תס 8 עס 0% צסא צם8 6858-כ חיפוש בינארי על עקרונות החיפוש הבינארי למדנו בפרק על מערכים. עקרונות אלה תורגמו לשפת 6 ונכתבו עבורנו על ידי אנשי 6חג8!זס8. כל שנותר לנו הוא ללמוד כיצד להשתמש בפונקציה 6%ז0568 העושה שימוש בעקרונות אלה. לצורך הפעלתה נדרשיס הפרמטריס הבאים: ,6* ב1סט 00286 ,צ6א%* ב1סט 86ם60) מסע508ק* ב1ס ,ת10%ש 6 8126 ,ת616ם 6 5126 ; ((*16סט 008% ,*16סט 8%ם00) (קת0ס+8) %6ם1 ץפא* מצביע לערך שמחפשים. שאר הפרמטרים הוצגו בהסבר לפונקציה ז+וספף, והם נכונים גס לפונקציה זו. בתוכנית הבאה נדגיס שימוש בפונקציה ח6ז0508. 4 המדריך השלם לשפת 6 / אאא אא קובץ תקליטור: 1.6 *****/ /* חיפוש מהיר (שימוש בפונקציה מ5856820) */ <ת.585%6010> 01066ם1 <ת.10םסס> 01066ם1 לה 6 5611 3665 /* תהליך חישוב מספר האלמנטים במערך */ כ( [0] 5 5 7 66 56 ( ₪ סע 5 6 אאת 6ם0611 ( וש 6 סש 60665 (נפוספניי) ‏ 5 5655 ו 9 00 607 5120 1895 41290 = | | סט שו ; (צ%6 %6ם1)סטאסס1 6ם1 8 יפ" 5 66005 - 1פן" ו ₪ 660 6 בוט שו ; (0פת* ע8ת7)0ץ8228 סתנעמס בנ1סט ד אג 5 6 50 < - א דג א ; 7 == == / (10סט) מ1את %6ם1 (6 1566 ; ("ת : 82287 6ם6 שסבט") ץהעמה 6מנבמס ((512)קטאסס1) 15 (( "ו ב ו פס ₪ 5 12 לפ טוח ופ 0-6 ( ו ב 1 וס ו 6 5 12 פה פופו ומוס ; ("מץ%6 שת8 5655קם")%1תנ1עס ; () 9660 ; (0) 26602 ] ל ד ד וש וו יוור ₪9 ₪ ₪ ₪ א שש 2 /* הההההההההההההההההההההההההההההההההההההההההההה--הרה---- ; (ץ%6 %6ם1)קטאסס1 6ם1 ָ ו - סוס ,ץה22התטםת ,ץ8%6)ם86820ע (* סם1) = עסקת166 ; (ס1ע6תטם (ע56ס?) , (%6ם1) 512605 , (ץ228התגום) פאמזטא ; (עתסא =! ע%קת1606)םעג66ע2 ] פרק 14: נושאים מתקדמים 295 5[ שוחו 6605 כ 1פן" וו ₪ 66 6 בוו סופ ; (2ק* - 1ש*)מ05₪%ץ ] (0פת* 7)0282ץ8298 סתנעס ב1סט ָ ה ו ו 5 ו סב סוס 1(‏ קפ > ₪ 08 = 62 ₪ ; ([1] ץהע2התטם , "ם1)"%6>תנ1צס תוצאות ריצת התוכנית: ץהעעה8 6םת6 חסנ1נט 13 15 2 27 100 3 .1 סמש ם1 18 512 צסא צם8 6858-כ פונקציה בעלת מספר משתנה של פרמטרים כבר השתמשנו בפונקציה צחוזס או 5681 ולמדנו שתבנית הפרמטריס של הפונקציות הללו משתנה בסוגי המשתניסם (חו, ₪08%, ז3ח6) ובמספרס. בשפת 6 יש לנו אפשרות לכתוב פונקציה משלנו, בעלת מספר משתנה של פרמטרים. במקוס להציגם למסך כב-צחוזק, אנו פשוט נאסוף אותס אל הפונקציה ולעבד אותה לפי צרכינו. העברת תבנית הפרמטריס אל הפונקציה נעשית בעזרת מחרוזת. את המחרוזת הזו יש להמיר למאגר. תהליך ההמרה מתבצע בעזרת המאקרו +58 8צ אל תוך מערך 55| 8/ המחזיק את המידע הנדרש אודות הארגומנטיםס. המאקרו והמערך האלו מוגדריס במהדר 0ח8!זס8. מערך ה עובר תהליך עיבוד או הדפסה לפי צרכינו. 6 המדריך השלם לשפת 6 שיס לב/ / תנאי חשוב בצורת הכתיבה הפרמטרית הוא שלוש הנקודות בסוף | הפונקציה הפרמטרית. לדוגמ : ;(... ,562* ע8ם0) 65ת1מס צת בתוכנית הדוגמה הבאה נלמד כיצד לכתוב פונקציה בעלת מספר משתנה של פרמטרים. 8 קובץ תקליטור: 0201405.6 היה /* הדגמת כתיבה פרמטרית (הקרנת טבלת 58011ת) */ <ת.5%6010> 01066ם1 <ת.10מסס> 01066ם1 <ת.560820> 01066ם1 <ת.808> 10610066 2 082 66ת18פתט 6061סץ6 קפ 65 ה ₪588 פששפ ₪ שפשפ ₪1 שש פ פוהובפופן שו | 3 ₪ ₪ 0 ₪ ₪ = א 2 2 ₪ 2 (10סט) תנ1נאת 1% | 090 6 6 ( 0500 ופ 0166 5 7 0450 = ששו 5 ה ווה ; (2108) 600102א56 ; ( צת3ת1108706) 0תט020א%6086%א56 ל (6 ₪565 8( 0 6 ק(*₪ ₪ ₪ ₪ ל ן הסה 0 10 > (19 / 2) ,1 > ₪ * (19 6 12))השהבפס שה 666 022 25 0 ק (" ווהשות כותיוב בורפופור > ( 5 ₪ ₪ 6 5 וו ופ 0 2 0250 6 ( 19967 ₪ שו ופפ 96608 )( ; ; (0) ם8גו26% פרק 14: נושאים מתקדמים | 297 ₪8 ₪ ₪ א רש < פופו ששפ 61 םעפ פו פוו פופ א ובס 6-9 ו 0 (מאקרו) מערך המחזיק מידע הנדרש ע"י שהוא גם מאקרו המבצע - ה /* את רשימת המשתנים. זאת אומרת ממיר את הפרמטרים שב- (562*). סופספ ופ 1 פא /* 565+טם המחזיק את תבנית המחרחת (86%*). */ [ 255 ]| ספוש - 66 /* מצביע על ה- 5165טם. */ לו 5 /* מצביע על ה- %תת 660נט. */ ;קט* ע58 ססצץס /* ממיר את הפרמטרים (מאקרו הקובע מצביע על המשתנה הראשון שב-(562*).*/ ( ו ו]) ופנ סו הפש /* שולחת את תבנית הפרמטרים אשר ב- (562*) אל ה-61++גוס */ ; (6%62ת828ק ,85629 ,1טספטס)65ת1עספט 0 (100 % שש 8 2 * 661 5800 ופט 6 (9 פבם שפסעש) = קש ה /* כתוב תול- אגפ 0ס166ט */ ל ןוו > = ו /* כתוב תכונה ל-אתת ספ6נ */ ;857 = כן/* תוצאות ריצת התוכנית: לא ניתן להציג כאן את תוצאות ריצת התוכנית. התוצאה המתקבלת היא טבלת ₪5611, הכוללת תוויס מיוחדים. הרצ אותה בעצמך, בחן את הפלט ובדוק לעומת הפעולות המתבצעות בגוף התוכנית. הקצאת זיכרון דינמית הקצאת זיכרון (חס63ס!|8 ץזסוחסוח) דינמית נועדה למניעת בזבוז של משאבי זיכרון. העיקרון המנחה של הקצאה דינמית הוא הקצאת שטח זיכרון שגודלו ניתן לשינוי במהלך התוכנית לפי הצורך. נחזור לנושא מערכים, ונגדיר מערך בן 100 מחרוזות: ; [80] [58562]100 ע68% 8 המדריך השלם לשפת 6 המערכת הקצתה עבורנו מקוס ל-80*100 תוויס. כלומר, 800 תוויס בזמן הידור. מה יקרה אס אורך המחרוזת במקריס מסוימיס קטן מ-80! בזבזנו מספר תוויס לשווא; ואס המערך אינו מלא עד סופוז בזבזנו הרבה יותר תוויס לשווא. כאשר נדרש להוסיף מחרוזות במהלך העבודה (כשהתוכנית רצה) אנו בבעיה. פתרון הבעיה הוא הקצאה דינמית של ויכרון. כלומר, הקצאת זיכרון מדויקת, בדיוק לפי מספר התוויס הנדרשים, או לפי הצורך במהלך ריצת התוכנית. כך ניתן למנוע חלק ניכר מבזבוז זיכרון הנגרס על ידי שימוש במערך נתונים רגיל. שימושים שכיחים > הגדרת טבלאות דינמיות'י אשר שטח הזיכרון שהן תופסות ידוע מראש ומשתנה על פי הצרכים במהלך ריצת התוכנית. > מבנים של נתוניס בזיכרון (עליהס נדבר בפרק העוסק במבנים). > כל תהליך או פעולה הדורשת שטח ציכרון, אשר גודלו אינו ידוע בזמן ההידור. ]| שיס לב/ אישור קבלת שטח הזיכרון מותנה במערכת ההפעלה. תמיד יש לוודא שניתן אישור ממערכת ההפעלה, כי אס לא נבקש, אנו עלולים לדרוס שטת | זיכרון המוקצה לצרכים אחרים, והתוצאות בעל מקרה הינן הרות אסון. הספריה אשר מטפלת בהקצאת זיכרון היא <ח.6ס!|8> ובה מרוכזות הפונקציות המתאימות. עתה נערוך היכרות עס הפונקציות המיועדות להקצאת ציכרון. 512001)( הפונקציה ()5260 היא אופרטור ומילה שמורה, המחזירה גודל של משתנה או טיפוס משתנה בבתים. (<טיפוס>) 51260% (משתנה) +51260% לדוגמה 12 תד ;םס עַַת0 2[ מ6₪פט 8 088 ; [10] מעסשסתטםת 1 6ת1 %2 סשְסם1 (668ץ 2 = סם1) 2 = 268016 <-- ; (1ב)812605 = 16גו268 (68סץכ 1 = צ8םת )0‏ 1 = 68016ע2 <-- ; (ת812601)0 = 16גו268 0 = 2098016 <ה= ; (ע9086 812605)8 = 2680116 (%68ץ 1*20 = פַַת6) 0 = 268016 <-- ; (ע6סמחטת 812605)1 = 268016 (%68ץ 2*10 = 6מם1) פרק 14: נושאים מתקדמים 299 שיס לב/ מומלץ מאוד לבדוק גודל של משתנים בעזרת 5260/0, מפני שגודלסם של טיפוסי +חו תלוייסם במערכות השונות, ולעיתיסם שונים ממערכת למערכת. לכן, כדי לשמור על יבילות עוווספוסט) בין מערכות שונות. יש לבצע בדיקה זו ולתאם את המהלכים הבאים הקשורים לטיפוס בהתאם לתוצאת %ח508. הפונקציה ()3!!06ח הפונקציה (8!!060ח - הקצאת בלוק ציכרון. מבנה הפונקציה: ; (8126 6 5126) 11006הת* 1נסט + 5126 קבוע של בורלנד. 6 מספר בתיס להקצאה. הפונקציה מאתרת שטח ציכרון פנוי להקצאה ומחזירה את כתובתו כ- *סוסט. כאשר הפונקציה אינה מצליחה לאתר שטח ציכרון פנוי, היא מחזירה ערך ווטח. נקודת ציון? 2+" - *סוסט יכול להיות כתובת לכל טיפוס, ולכן יש לבצע הסבה בכות (6350/79) לסוג הטיפוס שברצוננו להחזיר. דוגמה ינש" = [] 58פש ₪ קפשן 6" 62 קשספן 1 שב ל (2> (68פש 5) 615968) 1196 (" 655) = פש 6 (11שם = 1 ₪5 566 ; ( !08 שעסתסת") 62מנ1טס ו ; ("ץפסתפסת סא")65ת1עס ו (₪₪11 = 1 פספן 62 00 65 ישן ו ; ("ץעסתפסת סא")65ת1עס 0 המדריך השלם לשפת 6 הפונקציה 063|!06 הפונקציה 681!06 - הקצאת ויכרון ואפס את תוכנו. מבנה הפונקציה: ; (5126 6 5126 ,5ת6ס1םת 6 081100)5126* בנסט 5 מספר בתיסם להקצאה. ] 5126 | קבוע של בורלנד. 26 גודל הטיפוס להקצאה. דוגמה לשימוש 2 = ע6פ* עַַת0ס ;( (ש8םת81260%)6 ,081100)10 (* ע8ם0) = מ56 הקצאת מקוס למערך מחרוזות בגודל 10. שים לב! ( הפונקציה מקבלת מספר בתים לטיפוס ומקצה מקוס בהתאם: מספר > בתים*הטיפוס. הפונקציה מחזירה ושח אם אינה מצליחה לאתר שטח זיכרון פגני. דוגמה נוספת לשימוש ע%ק 1* 6ת1 ;((%ם812605)1 ,10) 081100 (* 6ם1) = מסס 1 הפונקציה 1:66 הפונקציה 4166 - שחרור בלוק מוקצה בציכרון. מבנה הפונקציה: ; (106%מ* 16סט) 5266 ב1סט 6% * מצביע לבלוק אשר הוקצה בזיכרון. הפונקציה משחררת אזורים בוּיכרון שהוקצו על ידי הפונקציות (8!060 ו-(681!060. שים לב/ ָ חובה לשחרר בלוק שהוקצה בזיכרון לאחר סיוס השימוש בו. התוצאות , הנובעות ישירות מאי שחרור בלוק בזיכרון היא מילוי שטת הזיכרון, עד -- לנפילת התוכנית בגלל חוסר שטח בזיכרון. ניסיון לשחרר בלוק זיכרון שלא הוקצה, או במילים אחרות, קריאה לפונקציה ₪66 עם פרמטר שהוא כתובת כלשהי בזיכרון תביא לתוצאות בלתי צפויות. פרק 14: נושאים מתקדמים ‏ 301 דוגמה לשימוש 7 ל* הת0 /* הקצה זיכרון לפי תווים */ ; (81106)10ת (* ע8ם0) = ע56 /* העבר מחרחת לתוך האזור המוקצה */ ; ("נחה ₪08" ,8%2) צ562600 /* שחרר את שטח הזיכרון אשר הוקצה */ ; (5%62) 1266. התוכנית הבאה מדגימה את תהליך הקצאה ושחרור ציכרון. ו קובץ תקליטור: 60₪01406.6 *****/ /* הקצאת זיכרון דינמית */ <ת.8%6010> 01066ם1 <ת.10ם0ס> 01066ם1 <ת.81106> 01066ם1 <ת.560110> 01066ם1 <ת.8ם1ע5%2> 01066ם1 ; (10סט)81100ת 8 16סט ל( 6 5 | ו אג 8 6 0 5 כ - א דג א ; / ככ שבכש = ] (ס1סט)מנ1את 6ם1 | ( 6 1566 ; () 1100את 8 ל( 6 5 ; ("מץ6א% שת8 56558קםת")%1ת1עס ; () 9660 ; (0) ם2ו26% ] 0 1 ₪ 6 שש 2 /* ההההההההההההההההההההההההההההההההההההההההההההה7ה-ה--- ; (81106)07010ת 8 ב1סט ו 5" 65 /* הקצה זיכרון למחרוזת באורך 10 בתים */ (פפמשא == ((₪1166610 (" 668882 = 8שפש 6)) פב ו ; ("תץ?סתסת משטסת6 שסא")61ת1צס ;(6%1%6)1 ] /* העבר תוכן למחרחזת */ 67 58 - 6 06 506 /* הקרן את המחרחת על המסך */ ? (שפפ ₪ ק"ח5 3 15 הפש 0306 שת (( 1166 "י) סופ ופ 2 המדריך השלם לשפת 6 /* שחרר את הזיכרון אשר הוקצה */ קל ( 568 ₪) 056 1 (0811006)0010 8 16סט ָ וו = 52 ₪ 650 /* הקצה זיכרון למחרוזת באורך 10 בתים */ == ( ( (6₪) 1990 1166010 (* 5פה6) = פספש 6)) 8ב (תטסא ן ; ("תץ?סתחסת משטסת6 ססא")61>תו1צס ; (1) 6%1%6 ] /* העבר תוכן למחרחת */ 67 ₪ 5 65 סופ /* הקרן את המחרחת על המסך */ ( ₪ ₪ ₪2 2 15 השפ 6 שה (כ1660 61 6 ו וחב הפן /* שחרר את הזיכרון אשר הוקצה */ לק 5 5 56 ] תוצאות ריצת התוכנית: 06 םמע268 : 18 ע6פט 8ם1ע56 6ם71 (1106ַת) 06 םע168 : 18 ע6פט 8ם1ע56 6ם7 (081106) ץצסא צם8 6858-כ עבודה בסיביות עבודה בסיביות מיועדת בעיקר למשתמשיסם בשפת 6 ביישומי ומן אמת וגרפיקה, בהס הגישה לסיביות היא הכרחית. אחת התכונות החשובות של שפת 6 היא היכולת לגשת ליחידת המידע הקטנה ביותר במחשב - אל הסיבית טוט). עד כה עסקנו בבתיס ופעולות בין משתניס שגודלס נע מבית אחד עד שמונה בתיס. הסיבה לכך פשוטה: הטיפוס הקטן ביותר בשפת 6 הוא התו, שגודלו בית אחד. עובדה זו נובעת ממבנה הזיכרון במחשב, המאפשר גישה ישירה ליחידה של בית, וכתובת הזיכרון היא כתובת של בית מסויס. כעת נראה כיצד ניתן בעזרת ארבע פעולות בסיסיות להתייחס לסיביות בודדות ולבצע בעזרתן פעולות לוגיות. לפניך טבלאות המתארות את ארבע הפעולות וערכיהן הלוגיים, כתלות באופרטוריס של כל אחת מהן. פרק 14: נושאים מתקדמים 303 סא הפסא ₪3 פאג *+- שם הפעולה ה [גןפן-| |1ן9ן | | | |. |סימןבשפת: 0 "ד הפעולה כפי שניתן לראות, קייס קשר בין הפעולות הלוגיות לפעולות המקבילות בסיביות. מכך נובע לדוגמה, הסימון /88' לעומת הסימן הבודד 'א'. שים לב/ טעות נפוצה היא ליישכותיי את אחד הסימנים כאשר עוסקים בפעולות לוגיות, ומקבלים תוצאות לא צפויות בזמן הרצת התוכנית (מהדר יאינטליגנטייי יעיר על טעות זו). בניגוד לפעולות הלוגיות שהכרנו קודסם, פעולות אלו מתבצעות על כל סיבית של האופרטוריס בנפרד, והתובצאה המתקבלת היא אוסף התוצאות של הפעולות הבודדות. דוגמה 8 2 (0010) = 0 8₪ם8 0 1 סמ8 0 1 1 1 סת8 = 0 סם8 ו - 5 ₪ ₪5 ₪ תוצאת הפעולה: (0010). מכיון שבשפת 6 ניתן לייצג מספריס בבסיסים שונים, כל הפעולות הבאות הן חוקיות : 5 6 88א0 7 9 0%19 9 7% ((090 | (צץ8א))-> 4 המדריך השלם לשפת 6 העדות? א. אין לבצע פעולות בסיביות בין מספרים ממשיים. ב מומלץ להשתמש בסוגריים, כדי להימנע מטעויות בהערכת הביטויים. ג | כדי לחשב את הערך של *משלים 2-2 סַהסהופוקוחס6 25) ניתן לבצע פעולות שלילה שסח) ולהוסיף 1 לתוצאה : 1+ א. דוגמה 01 = א 0 <-- 0 אא 1 <-- 1+א- שים לב/ בעזרת המשלים ל-2 מקובל להפוך מספר בינארי חיובי למספר 7 בינארי שלילי ולחיפך. שימושים נוספים > פעולת 6חה (8) משמשת לכיבוי סיביות לפי מסכות, וגס לבדיקת זוגיות של מספר (כל סיבית 0 במסכה מכבה סיבית בתוצאה). %> פעולת א0 (ו) משמשת להדלקת סיביות לפי מסכות (כל סיבית 1 במסכה מדליקה סיבית בתוצאה). > פעולת 08א (") משמשת לאיפוס משתנים, החלפת תוכן בין שני משתנים, וגם להפיכת סיביות מסוימות ובדיקת סיביות לפי מסיכה (כל סיבית 1 במסכה נבדקת בתוצאה). דוגמאות בדיקת הסיבית הימנית: 72 6 א כיבוי הסיבית הימנית: 2 = ₪ א איפוס משתנה: ;א"א = א בדיקת אי-זוגיות של מספר: (1 6 א%)15 פעולות הזזה בסיביות לאלה המכיריס את שפת אסמבלר ועיבודי זמן אמת, ידועה חשיבות פעולות הזזה 0זוח5). פעולות אלו מאפשרות כפל וחילוק מהיריס בחזקות של 2, והזוה של סיביות במטרה לבצע עליהן בדיקות. פרק 14: נושאים מתקדמים 305 שיס לב/ המהירות חשובה ביישומים שבהם זמן הביצוע של מחזור העיבוד הוא 7 גורס קריטי. =] רוב שפות המכונה מכילות ביטוייס כגון: % מְ11₪ם5 10ס66תת1%עת - מפת %ב1ת 156ם5 6610תתפנ1עת - אפת בשפת 6 מצייניס פעולות אלו על ידי הסימניס הבאיס: << הזות סיבית ימינה. >> הזות סיבית שמאלה. לדוגמה, 2 >> 01א0% התוצאה: 004 1 << 814א0% התוצאה: 008 אס נסתכל על הפרישה הבינארית של פעולות אלו, נבין את התוצאה: )00000100(2 >-- )00000001(2 >2 / שים לב/ בעת הזזה שמאלה יינכנסים'יי מימין אפסים. בפעולה זו ייהזונויי את הסיביות 2 מקומות שמאלה ועל ידי כך כפלנו את המספר ב-22 (כל הווה חינה כפל ב-2). שיס לב/ [ יש לזכור את המרכיבים של בית בזיכרון : שיס לב/ בכל פעולת הזזה שמאלה, הולכת לאיבוד הסיבית השמאלית ביותר. 2 ל מסיבה זו, מותר לכפול מספר בחזקה של 2 על ידי הזזה שמאלה רק אם פעולה זו אינה גורמת לאובדן הסיבית בעל הערך 1 בקצה השמאלי ביותר. 6 המדריך השלם לשפת 6 בפעולה השנייה: 1 << (00010100) --> (00001010) מזיוים את הסיביות מקוס אחד ימינה. שים לב/ [ משמאל נכנסים אפסים. 0 יה והתוצאה היא חלוקה ב-2 (14(16) = 20(10), 4(16) = 1010)). שפת 6 מתייחסת בצורה שונה לפעולות הזוה של משתנים וקבועים בעלי סימן וחסרי סימן. ערכים שליליים מיוצגיסם במחשב בשיטת משלים ל-2. שיטה וו מכתיבה שהסיבית השמאלית ביותר היא 0 עבור ערך חיובי, ו-1 עבור ערך שלילי. בפעולות הזזה ימינה של ערכיס בעלי סימן, נשמר הערך של סיבית זו על מנת לשמור על הסימן. פעולות הזוה על ערכים בעלי סימן נקראות הזזות אריתמטיות, שכן הן משמרות את הסימן האריתמטי. ניתן לראות סכימטית את פעולות ההזזה ימינה כך: תרשים 14.4: הזזה אריתמטית ימינה בפעולות הזזה ימינה של ערכים חסרי סימן, אין שימור סימן ותמיד ייכנס אפס (י0י) משמאל. פעולות הוזה של ערכיס חסרי סימן נקראות הזזות לוגיות. סכימטית נציג זאת בדרך זו: 0-3 = = תרשיס 14.5: הזזה לוגית ימינה פרק 14: נושאים מתקדמים 307 בשני סוגי ההווות שמאלה נכנס אפס ('0') מימין והסיבית השמאלית הולכת לאיבוד: ]---3 !----4 תדשיס 14.6: הזזה שמאלה שיס לב/ בעת הזזה ימינה של משתנה בעל סימן (60ח60) יכולים להיות שני מצבים: כאשר נכנסת סיבית הסימן בפעולת ההזזה, נקרא לפעולה %ו/5 4616 ; וכאשר ייכנסו אפסים בפעולות ההזזה, נקרא לפעולה ז5/1 1007081. במשתנה (ססתו5תט) ייכנסו אפסים בפעולות הזזה. | שיס לב/ כאשר לפמנו עדך מסומן (ש6טופ ססַחסָ5) ראינו שתחום טיפוס תו / במקרה כזה הוא מ-128- עד 127, או 10000001 עד 01111111. כלומר, כדי לעבור ממספר חיובי לשלילי יש להפוך את ערכי הסיביות ולהוסיף 1. נבצע הווה כפולה למספר הָןְ(63) = 00111111 נקבל את התוצאה 11111100, שערכה 4-. נציג ואת בדוגמת התכנות הבאה: ;תגות 082 2 = חטת 2 >> חטת = חתטת ; (תטם ,"65)"%0ת1צס 7--- בתוכנית הבאה נלמד כיצד להפוך מספר ז696שח! לייצוג הבינארי שלו בעזרת פעולות על סיביות. יו קובץ תקליטור: 0₪01407.6 *****/ /* קלוט ערך שלם והצג את הסיביות בעזרת אופרטורים לעבודה בסיביות */ <ת.56010> 6100₪6ם1 <ת.10םמסס> 01066ם1 (וטה שו ) 7 5 ו פופ |6 סל 8 המדריך השלם לשפת 6 ₪ ₪ ₪ 2 2 ₪ 2 2 ₪ = (10סט) מ1נאת %ם1 ָ ;1 = חתטם %םמ1 65 565 (8 ; ("מ1%8ע 6606%ת1 צ15018כ")1>ת1עס 8( 8 ₪ 6 56 90 605 66 ₪ ות ₪ 5נ שוחה ; (תטם6 , (מטם) 116תש | ב "%9")+ם508 (מטם) +1 ; (מום) צ615018 16ס (מתטם %ם1) ה ] 2 0 ופט ץְה1ס5ו1ה 16סם ב1סט ,1 = 85% 6ם1 | 6 ה /* פירוק המספר לסיביות */ ָ /* כל מה ש-1 נשאר 1 וכן0 נשאר 0 */ (%פ85ת 8 תטםת) +1 8 = [₪ = 6[]15 0-6 ה כ הפו /* הזחה של ספרה אחת אחורה לצורך בדיקת הסיבית הבאה */ , ; ("ת3210 7654 298 1 =>> אפ5את ] ו ה ה המה ָ ק (* 7) פמתנפסן (₪ == 68 9 8)5ת ו פרק 14: ] נושאים מתקדמים 309 תוצאות ריצת התוכנית: תרגילים 8 664860₪ת1 צ15018כ ₪ 2 : 016% 0ם <0> סעסטתסס 60 עססמתטםת 8 6652 0 765%45 298 6כסמע 0 0000 0000 000 > 0 : 6016 סם <0> סעפטםתסס סם עשסתטםת 8 שס6םם אין תשובות בתקליטור. 1. מה היא התוצאה הבינארית של הפעולות הבאות: א. ב. ג. ד ה. ( 01101001 88 1 01110010 | 0 1 * 1001001 71 | 200101010 00% | (0801א8/0 853-א0) (75א0 8 ז7א0) 8 (01א0 5 /78א0)) 2 כיצד תבדוק אס הערך של הסיבית החמישית מימין במספר 75א0 הוא 1! פרט את הפעולות שתבצע והביטוי הלוגי המתאים. 3 כיצד תהפוך ל- 0 (ייתכבהיי) את הסיבית השמינית במספר 0397א10 4 פרט שתי דרכים להפוך את ערכי הסיביות של המספר 35א0. 5 מה תהינה התוצאות של הביטוייס הבאיס: א. ב. ג. 2 << (07א0 8 35א0) (3>> 05א0) * 15א0 (12 >> 15א0) 0 המדריך השלם לשפת 6 רקורסיה רקורסיה (חסו5זטו66ח) מתקיימת כאשר פונקציה כלשהי קוראת לעצמה, באופן ישיר או עקיף. קריאה ישירה הינה קריאה של הפונקציה אל עצמה בתוך אחת משורות הפקודות שלה. קריאה עקיפה נעשית כאשר פונקציה א' קוראת לפונקציה בי, וזו קוראת שוב לפונקציה א'י. שפת 6 מאפשרת לכל פונקציה להיקרא באופן רקורסיבי, דהיינו: להיקרא על ידי עצמה. באמצעות הרקורסיה ניתן לכתוב תוכניות המבצעות משימות מורכבות, באופן פשוט ונוח לקריאה ולהבנה. נדגיש עס ואת, שהרקורסיה אינה חוסכת זיכרון בומן הריצה, מכיון שהחיא נתמכת על ידי מנגנון הצורך שטח זיכרון גדול. תהליך הבנת הרקורסיה ודרך השימוש בה אינו פשוט, ולכן נציג את הנושא במפורט ובשלבים. הפעלה של פונקציה רקורסיבית בדוגמאות הבאות נלמד איך פועלת הרקורסיה ואיך מתנהגת פונקציה רקורסיבית. התבונן בקטע התוכנית הבא : / א א אא קובץ תקליטור: 1501.6קת6 בו <ת.5%010> 06ט610מת1+ (10סט)ע568 16סט ( ו ו (ס1נסט) מנ1את 1סע (8 פרק 15: רקורסיה ‏ 311 בדוגמה זו, התוכנית הראשית קוראת לפונקציה (50970, אשר מדפיסה כוכבית וקוראת לעצמה שוב. לכן, 58970 הינה פונקציה רקורסיבית. הקריאה הנוספת ל-()5087, תגרוס להדפסת כוכבית נוספת וכן הלאה. התהליך הזה יימשך לעד, שכן כל קריאה ל-(5%870 מדפיסה כוכבית וקוראת שוב ל-50970. המסך יתמלא ברצף בלתי פוסק של כוכביות והתופעה תזכיר לולאה אינסופית. התבונן בקטע תוכנית נוסף להגדרת 51870 : ו קובץ תקליטור: 0201502.6 *****/ <ת.5%810> 1066סת1א (ס1נסט) מנ1נאת 1ס 08 /* הפונקציה עצמה */ (10סט)85682 ב1סע | ו ( ו ההבדל מתבטא כאן בשינוי מיקוס השורות: הקריאה הרקורסיבית ל-5₪970 מתבצעת לפני הדפסת הכוכבית. כדי לנתח את תוצאת ההרצה, נתתיל בקריאה הראשונה ל-()5%91 מהתוכנית הראשית. הפעולה הראשונה ש-(970ז5 מבצעת היא קריאה לעצמה, ולכן (50970 תופעל פעס נוספת. פעולה זו תגרוס לקריאה ל-5₪970 וכך הלאה: תתקבל סדרת הפעלות בלתי פוסקות של הפונקציה 50 בוו אחר זו, ולפקודת ההדפסה לא נגיע לעולס. השינוי הקטן שביצענו גרס לכך שמטרתנו האמיתית - הדפסת רצף של כוכביות - לא תושג. בעת הפעלת התוכנית נדמה לנו שהמחשב ייתקועיי מכיון שלא מתבצעת כל פעולת 'יפלטיי, ואמנס כך הדבר: המחשב עסוק בקריאות חוזרות ונשנות לפונקציה (50970. פקודת ההדפסה אינה מתבצעת, כיון שאין חוזריס מהפונקציה 5%970. כזכור, חזרה מפונקציה מתבצעת על ידי הפקודה חזגשסז, או כאשר מגיעים לסוף הפונקציה. במקרה זה, אף לא אחד מהדבריס האלה מתבצע ב-(5087)0. נוכל לייתקן'י את 970ז5, כדי שנוכל לצאת מהפונקציה. נעשה זאת על ידי התניית ההפעלה הרקורסיבית מתוך (80970: ו קובץ תקליטור: 0₪01503.6 *****/ <ם.85%610> 06ט610ת1א /* הפונקציה עצמה */ ה ו ה (1=1) ו ( יי )) גוסו וב סנס 2 ההמדריך השלם לשפת 6 בנוסח זה של 5970 הוספנו משתנה אוטומטי 1, שערכו קובע אס תבוצע קריאה רקורסיבית ל-()/558, או לא. משתנה זה מוקצה מחדש בכל פעם שקוראים ל-(51970. אס | גדול מ-1, מתבצעת קריאה נוספת ל-(5870 עס הערך 1-ו. ערך זה יגיע ל-1 של (5%870 הייחדשיי. נדגים תהליך זה באמצעות התוכנית הראשית הבאה, ובאמצעות תרשיס 1: () מנאת ן ; (3) 5682 ] ההפעלה הראשונה של 5970 מקצה משתנה אוטומטי ו בעל ערך 3. כל הפעלה נוספת של 50970 מעבירה את הערך של 1-ו, ולכן תהיינה שתי קריאות נוספות ל-51970 עס ערכים 2 ו-1 בהתאמה. בקריאה השלישית, בה 1=ו, לא תתבצע קריאה רקורסיבית נוספת, כיון שהתנאי שהצבנו אינו מתקיים. בנקודה זו תתבצע הפקודה ()שחוזס ותודפס הכוכבית (יי*יי) בפעס הראשונה, ותתבצע חזרה מהפונקציה (כי הגענו לסופה). בקרת התוכנית תחזור לפונקציה הקוראת, שהיא ההפעלה הקודמת של (587. נקודת התחזרה מהפונקציה היא פקודה אחת לאחר הקריאה עצמה, ולכן תתבצע פקודת ההדפסה השנייה ושוב תהיה חזרה מהפונקציה. באופן דומה תתבצע פקודת ההדפסה השלישית וחזרה ל-()חואוח. (1) 5682 12 6ם1 )1<1( 2 )1-1( 8 5 "(5 8 ( 7 ו פוב ופ ו תרשים 15.1: סכימת תהליך הדפסה רקורסיבי הפלט על המסך ייראה כך: %%+ פרק 15: רקורסיה 313 שיס לב/ [ הכוכבית הדאשונה המופיעה הודפסה על ידי הקריאה השלישית 1 51970-5/ | | 0 ניתוח דומה, אס כי ארוך יותר יראה, שקריאה ראשונית ל-50970 בתוכנית הראשית הבאה, תפיק הדפסה רצופה של 10 כוכביות : 5682 )10( ; *א*אא*אאאאאא בדוגמאות הקודמות ביצענו לולאה באמצעות רקורסיה, ללא שימוש במשפטי הבקרה זסז, או 6|וחו. הכוכבית הראשונה בשורת הכוכביות הודפסה על ידי הפקודה ()שחוזס של ההפעלה האחרונה של (5087, והכוכבית האחרונה בשורה - על ידי ההפעלה הראשונה של הפונקציה. ניתן להדגיס את תהליך הביצוע של הפונקציה על ידי החלפה של הפקודה: ; ("*")65ת1צס בפקודה ; (ב," ב%6") 61מנעס התוכנית המתוקנת: (ב %ם5682)1 | (1 < 1) +1 (1-1) 5682 ;(ב ," %6") +6ם1מס ] 1 23 4 5 6 7 8 9 0 כדי לקבל סדר יורד של מספרים (שהוא הסדר הנכון של הקריאות) נוכל להחליף את מיקוס הפקודות בפונקציה (5%970: הפעלת (97)10ז5 תפיק את הפלט הבא : (ב %ם5682)1 ;(1 ," %6") 65תנ1עס (1<1) 15 (1-1) 568% ) ההדפסה מתבצעת לפני הקריאה הרקורסיבית. הפעלת (97)10ז5 תפיק את הפלט הבא : 10 9 8 7 6 5 4 3 2 1 4 המדריך השלם לשפת 6 כל קריאה רקורסיבית ל-(5090 הינה כניסה לדרגת קינון (9ח650א) נוספת של הרקורסיה: בדוגמה (59)3 נכנסנו לדרגת קינון 3 ובדוגמה (5097)10 הגענו לדרגה 10. התנאי (1<ו) א נקרא ''תנאי עצירת הרקורסית'י, כי על פי ערכו הלוגי מחליטים אס להמשיך בקריאות רקורסיביות או לא. כדי שרקורסיה תהיה סופית, היא חייבת להכיל תנאי עצירה כלשהו, שיפסיק את תהליך הקריאה בשלב מסוים ויאפשר חזרה אל התוכנית הקוראת. מנגנון הרקורסיה עד כה התעלמנו מהמתרחש במחשב בזמן הביצוע של פונקציה רקורסיבית. ייתכן שהתרשימיס הסכימטיים שהראינו במהלך הפרק יצרו את האשלייה שבכל קריאה רקורסיבית לפונקציה היא נפרשת מחדש בויכרון המחשב. הדבר אינו כך! למעשה, במחשב קיים רק עותק אחד של הפונקציה, אשר מבוצע מחדש בכל פעם שיש קריאה רקורסיבית. מנגנון הרקורסיה אחראי לעקוב אחד הנקודה בה נפסק הביצוע הקודם של הפונקציה, וכשתסתיים הקריאה החדשה ותהיה חזרה מהפונקציה, הוא ידאג לחזור לנקודה זו ולהמשיך בביצוע. לעומת ואת, בכל הפעלה רקורסיבית של הפונקציה מוקציס המשתנים האוטומטיים והערכים הפורמליים שלה מחדש, והם :יחודייס לאותה הפעלה. אס ברצוננו להתייחס לאותו משתנה בכל אחת מהקריאות הרקורסיביות, עלינו להגדירו כמשתנה גלובלי או סטטי. ערך מוחזר מפונקציה רקורסיבית דוגמה קלאסית לפונקציה רקורסיבית היא פונקציה המחשבת עצרת. עצרת של המספר השלם ח מחושבת כמכפלת כל השלמים שקטנים, או שווים ל-ח: ת*(1-ם)*...*1*2*3 = !ם לפניך הגדרה של הפונקציה (86%), המבצעת את סדרת המכפלות הדרושות בצורה רקורסיבית : כ קובץ תקליטור: 01504.6 ****>/ <ת.5%68610> 61066ת1א ( ו ה ( (₪0-1) 6₪פ > 6 1-6 6 1 (8 600% פהרת6 600 001 פרק 15: רקורסיה 315 הסבר: א. הקריאה הרקורסיבית מבוצעת כאן בתוך הפקודה חזנש6ז שבשורה 5. ב הפקודה א בשורה 4, היא תנאי עצירת הרקורסיה. כאשר 1==ח תתבצע הפקודה (1)חזטס6ז, ולא תתבצע קריאה רקורסיבית. ג. | כאשר (1 < ח) מותחזרת התוצאה (4800-1*ח, אשר מבוססת על קריאה רקורסיבית ל-(86%0). נדגיס ואת שוב באופן סכימטי בתרשים 15.2, עבור ההפעלה (186:)3. ו (ם) 806+ 1 : ָ ו 3 ;ם 6ם1 ו : ל ו ו ( [ , (1<ם) 1% ו 7-4 (ת) 80%6++- ((1-ם)6ס80+*ת)םעט65ת -+ 6..! - , 06 י:: ;ם 6ם1 / 1 ( [ ;(1) מעטס6ע ח 1 * (1<ם) +1 [ ) ש (ם) 1866 +-:((1-ם)2806*ם)מעטם 26‏ --+ 2 ה 06| ::: ;ם 6ם1 1 ד ( 1 ; (1) מעטס6ע ו ו (1<ם) 1% | ; ((1-ם)5805*ם) מעגס6ץ ! 6 . י-> ;(1)םע266%0 | -%> 1 ]) תרשים 2,1:15.2 6-1 הס העדכים המוחזרים על ידי הפונקציה (13610 נפעיל את התוכנית : / <*%אא מתוך קובץ תקליטור: 1504.6סם0 *****/ ( (₪6605 5 672 = [|56) הפוסו ופ 5 = 0 הבסיס המתמטי לחישוב !ח באמצעות רקורסיה הינו השוויון הבא : הפלט: ם*!(1-ם) = ת*((1-ם)*...1*2*3) = םת*(1-ם)*...1*2*3=!ת 6 המדריך השלם לשפת 6 כלומר, כדי לחשב !ח, נחשב תחילה את !(1-ח) ואת התוצאה נכפול ב-ח. נראה בהמשך, שהבסיס לפונקציות רקורסיביות הינו היכולת לנסח את אופי הבעיה בשני שלבים : א. פתרון בעיה דומה בעלת דרגת קושי אחת פחות. ב שילוב צעד נוסף לקבלת הפתרון הנדרש. את בעיית העצרת ננסח כך: א. פתרון !(1-ח). ב. | נכפול את התוצאה של שלב אי ב-ח ונקבל !ח. תרגיל: כתוב פונקציה רקורסיבית (₪!טח, המקבלת שני ערכים וכופלת אחד בשני, על בסיס השוויוו המתמטי הבא: א + ((1-ץ) * א) = ץ * א עקרונות תכנון של פונקציות רקורסיביות כפי שראינו בסעיפיס הקודמים, קיימיס כמה עקרונות עליהס יש להקפיד כדי לקבל פונקציות רקורסיביות סופיות, המחשבות תוצאה מסוימת, או מבצעות פעולה כלשהי על פי עקרונות אלה. נגדיר שיטה לתכנון פונקציה רקורסיבית: א. הגדר את הבעיה הכללית שברצונך לפתור. ב חלק את הבעיה לשני שלבים: 1. פתרון בעיה דומה בעלת דרגת קושי אחת פחות. 2 הגדרת השלב הנוסף הדרוש לפתרון הבעיה הכללית, בהנחה ששלב 1 ניתן לפתרון. ג. | קבע מהו התנאי לעצירת הרקורסיה. ד. | כתוב את הפונקציה על פי השלבים הבאים : 1. התחל בבדיקת התנאי לעצירת הרקורסיה. אס התנאי מתקיים בצע חורה מהפונקציה, עם או בלי פעולת חישוב. 2 כתוב את שלב ב(2) מתוך הנחה ששלב ב(1) פועל כנדרש. אוהי נקודה חשובה, ולכן נפרט את הפעולה: אנו מניחיס מראש, ללא בדיקה, כי הפונקציה שאנו כותבים 'ימסוגלת'י לתת פתרון בעל דרגת קושי אחת פחות, ועל פי זה אנו כותביס את השלב הנוסף ב(2). חשוב ביותר בשלב התכנון והכתיבה של הפונקציה יילתת אמוןיי ביכולתה לבצע את ב(1), מבלי לבחון כיצד הדבר נעשה. סוד ההצלחה של פונקציה רקורסיבית טמון בחלוקה הנכונה של הבעיה לשלבים ב(1) ו-ב(2). פרק 15: רקורסיה 317 ה. בחן באופן ידני את הפונקציה שכתבת. עשה ואת באמצעות דוגמאות פשוטות של הבעיה הכללית (כפי שעשינו בתכנות הפונקציות (3)ז9ז5 ו-(86)3)). סביר להנית שבשלב זה תגלה שגיאות אפשריות, או שתוכיח את נכונות הפתרון. נדגיס כעת מספר בעיות ופתרונן באופן רקורסיבי, על פי השלבים שתיארנו לעיל. קיימות שיטות נוספות לתכנון פונקציות רקורסיביות באמצעות 'קיצורי דרך'י ותחבולות, אך לא נעסוק בכך. אנו ממליציס לנקוט בשיטה שהצגנו, לפחות עד לקבלת מיומנות בעבודה עס פונקציות מסוג זה. בעיות ופתרונן ברקורסיה בעיה 1 א. הגדרת הבעיה: חיפוך של מחרוזת בעלת ח תווים. דוגמה: "התסת ם" <- "₪ כספםת" "57 51 ג 5לת1אס" <- "סא5721 הת 15 15תל" ב | חלוקת הבעיה לשני שלבים : 1. היפוך של מחרוזת בעלת תו אחד פחות מהמחרוזת המבוקשת (1-ח תווים). 2 הצמדת התו הראשון במחרוזת לסוף תת-המחרוזת המתקבלת בשלב בנ). אנו 'יימאמיניס'י כאן, שתת-המחרוזת ייתטופליי כראוי על ידי שלב ב(1). פעולות אלו מוצגות באופן סכימטי בתרשים 15.3. ורד ד ךז ד ד ד דרת 3 רד ד ד ך ד ד ד + 5 *-- 0!51!41!3172'17א!51!71 !וןו!-1!41!5!21!514!7!כ!ג1ו וזן2ן3ן%ןלו5ו7ו5 ו ו 9 לו 6 ה 5 וזו ופן7ן5ולןוו2וו 1-44 פתרון הצמדת התו היפוך תת- תת-מחרוזת הבעיה הראשון לסוף מחרוזת על קטנה באחד על ידי ב(2) ידי ב(1) תרשים 15.3: תהליך רקודסיבי להיפוך מחרוזת ג. | תנאי עצירת הרקורסיה: כאשר אורך המחרוזת הוא 1 - אין משמעות לחלוקה של סעיף בי. לכן נעצור את הרקורסיה ונחזיר את התו עצמו. היפוך של מחרוזת בעלת תו אחד בודד הינה המחרוות המקורית ללא שינוי. 8 המדריך השלם לשפת 6 ד תוכנית הפונקציה: / א אאא /* עצירת הרקורסיה */ /* קריאה רקורסיבית */ קובץ תקליטור: , 6511 505 6 /***** <ת.5%8₪10> 1066סםת%1 65 > ו ₪5 (1 => (8)ם85%216) +1 ; (5) ם8גו26% ל = יפו ((12202)5+1ת ,585) ש00ע562 6 = (( ((5) שו )5 וה ה. בחינת הפונקציה עבור מחרוזת פשוטה '86א'י. נכתוב תוכנית ()חוצחח הקוראת לפונקציה עס הפרמטר ''י86יי. את מהלך הפתרון נציג באופן סכימטי בתרשים 15.4. ; %5 0787 | |[ :5 / - ; + 00876 | | (1 => (5)ה18ת%+5) +1 | ; (5) תתש%+6ת | -- ;] %5 = + | 7-4 (5) 0010000 0788 >- ;( (01000005+1 ,65 עקסה+8 1 ₪ 1 ; %5 086 [ ;+ = ( (5+5%06008)% , | ; (58) תהתט6%ה -=- 08 | ;+ 086 | ), | (! => (5)ה8ת%+5) +1 | ב (5) התש6%ה --0 % ; %5 = + לָ(010000)5+1 ,5) עקסת+5% : + = ( (0)5ה5+5%78)% ; (65 תהקש6%ת 3 1) ( , ; (("0")חסת19ח ,"00" ,"ת%5 <== %8") %%ה1סם | ס|8|אן :5 | | ר-- (5) 0010008 0088 =--- ו 0087 017000 )5( 0088 %5 ; , 60886 + ; (! => (5%7|60)8) +1 ; (5) התט6%ת ו ; %5 = + ו ;( (₪10007)0)5+1 ,65 עקסת%+5 ; + = ( (5+5%718005)% ; (5) תתט6%ה ---=1 ) --ההה 7-7 7-77 תרשים 15.4 : מהלך פתדון רקורסיבי להיפוך מחדוזת פרק 15: רקורסיה 319 ,2 0 ו ו ָ תוצאת ההרצה היא: את <-- 0םת בעיה 2 א. הגדרת הבעיה: מיון מערך בעל ח ערכיס שלמים, לפי סדר מספרי עולה. ב חלוקת הבעיה לשני שלבים : 1 | מיון מערך בעל (1-ח) שלמיס על פי סדר עולה. 2 הכנסת השלם הנותר (ה-ח-י) למקוס הנכון. אנו יימאמיניס'י שהמערך הנותר על פי ב(1) כבר ממוין. תיאור סכימטי לפתרון זה ניתן בתרשים 15.5. על פי ב(1) הכנסת הערך הנותר על פי ב(2) תרשים 15.5: סכימת מיון בשיטת רקודסיה ג. | תנאי עצירת הרקורסיה: כאשר קייס במערך רק ערך בודד, אין משמעות לחלוקה על פי סעיף ב. במקרה זה המערך נשאר ללא שינול. ד. התוכנית: / אא אאא קובץ תקליטור: 5506 *****/ <ת.5%8₪10> 06ט010ם%1 ₪ שווב 2 |[ | וטו )658 | בסו ן 7 ו (1=>מ) +1 ק תעט6ספע /* קריאה רקורסיבית */ (1-₪ שת ₪ 0 המדריך השלם לשפת 6 ((1 < ם) 86 ([2-ם]פתטםת > [1-ם] פתטם)) 116תשט ן /* החלפת ערכים */ ; [1-ת]פתטם = 1 ; [2-םת]פחתטם = [1-ם] פתגום ₪ = | 2=הון| פופו 0 - 2 1 3 ה. בחינת הפונקציה עבור המערך הפשוט 3 וו תוכן []5והטח הערך ח עומק הוקורסיה א בצ מב : : 1- עצירת הרקורסיה 3 וחזרה 2 2 : הפקודה 6ווחאו גרמה להחלפה בין 2 ו-3 אך לא בין 2 ו-1. חזרה לתוכנית הראשית : המערך ממוין! 0 שים לב עד כמה פשוטה תוכנית מיון בעזרת הרקורסיה. תרגיל כתוב פונקציה למיון מערך בסדר מספרי יורד. עצים בינאריים עץ בינארי (66זד עזבּחום) הינו מבנה נתוניס נפוצ ביישומי תוכנה רביס. הוא מורכב משורש בודד, צמתים (065ס1) ועלים (168/65). השורש טססם) של העצ הבינארי הוא האיבר העליון ביותר שממנו ייצומחיי העץ, ועל כן הוא י'מייצגיי אותו. מן השורש ומן הצמתיס יש התפצלויות נוספות, עד לעלים, שמהס אין כל התפצלויות שהן. פרק 15: רקורסיה ‏ 321 לשורש ולכל אחד מהצמתים יש שני מצביעים, ימני ושמאלי, המצביעיס לצומת או לעלה. בנוסף למצביעים ניתן לאחסן בשורש, בצמתים ובעלים מידע כלשהו. זוג המצביעיס הוא שנותן לקבוצה זו את שמה - עץ בינארי. המצביעיס לעליס ולצמתיס נקראים ענפים: ענף שמאלי וענף ימני - בהתאס למצביעים. בדרך כלל מכנים את האיברים בעצ הבינארי על פי ייייחוס משפתתייי. כל צומת הוא אב (או ''צומת אב'י) וכל איבר הנמצא בקצה אחד הענפים שלו נחשב לבנו - בן ימני או בו שמאלי בהתאמה. באותו הקשר, ניתן להגדיר סבים, נכדים וכוי. בשפת 6 ניתן לייצג כל אחד מהאיבריס האלה באמצעות מבנה הדומה למבנה של רשימה מקושרת בעלת זוג מצביעים. לשורש ולצמתים ניתן יילקשוריי צומת או עלה בודד. במקרה זה, המצביע הנותר מכיל 0 (ווטח). עלה מוגדר ''כצומת מנוון'" אשר שני המצביעים בו מאופסיס והוא מכיל רק את המידע הנוסף. מטבעו, עלה יכול להפוך לצומת על ידי שרשור עלה לאחד ממצביעיו, בדומה להוספת איבר לסוף רשימה מקושרת. בתרשים 15.6 ניתן ייצוג סכימטי של עץ בינארי. מידע תרשים 15.6 : סכימה של עץ בינארי המבנה הפשוט ביותר של עץ בינארי מכיל פריט מידע בודד, מספר שלס למשל: ] 26266 ₪ס0גוע56 ; 1+0ם 1‏ %6ם1 ; 161%* 26266 ססגוע56 ; %ת106ע2* 26266 06גוע56 2 ן 2 ההמדריך השלם לשפת 6 אחד השימושים לעצ בינארי הוא אחזקת מידע על פי סדר מיון כלשהו. העצ הבינארי מאפשר הוספת מידע לעצ ממוין ושליפתו בצורה נוחה ביותר. שיטת המיון מתבצעת כך: א. התחל מהשורש. הבן השמאלי מכיל איבר קטן יותר והבן חימני מכיל איבר גדול יותר. ב עבור לאחד הבניס. בנו השמאלי של זה מכיל איבר קטן יותר והימני - איבר גדול יותר. המשך בדרך זו עד לעליס, אשר להם אין בנים. העדה בעץ בינארי ממוין, נמצא האיבר הקטן ביותר בעלה השמאלי ביותר. נתבונן בעצ בינארי ממוין המוצג בתרשיס 15.7 ונערוך מסלול ייטיוליי על פני ענפיו, כך שנעבור על פי סדר החמיון על כל המידע המצוי בו. תרשים 15.7: סכימה של עץ בינארי ממוין אילו הדפסנו את המידע המוכל בכל צומת, על פי הסדר המסומן לאורך מסלול הייטיוליי, היתה מתקבלת רשימה ממוינת של המידע (בהנחה שהעצ אכן ממוין בשיטה שתוארה קודס). טיול על פני עצ בינארי ממוין והדפסת המידע שבו על פי סדר המיון, הינו יישוס קלאסי של פונקציה רקורסיבית, וקשה מאוד לבצע ואת ללא מנגנון כזה. בעיה 3 א. הגדרת הבעיה: נתון עצ בינארי ממוין המיוצג על ידי השורש, בעל איבריס מטיפוס 80766 501066. יש לכתוב פונקציה רקורסיבית להדפסת המידע שבו, על פי סדר המיון, תוך טיול על הע. פרק 15: רקורסיה 323 פירוק הבעיה לשלבים: 1 נייצג עצ בינארי ממוין כשורש, שאליו מקושריס מימין ומשמאל שני תתי-עצים בינאריים ממויניס. שורשיהס הינס הבן הימני והבן השמאלי של השורש המקורי. נכנה אותס תת-עצ ימני ותת-עצץ שמאלי בהתאמה. תיאור סכימטי של העץ ניתן בתרשים 15.8. נניח, כי הפונקציה מסוגלת לבצע טיול והדפסה על פי המיון של כל תת-עצ. בכך נציג בעיה בעלת דרגת קושי אחת פחותה יותר. אפילו אס אחד מתת-העצים אינו קייס (כלומר לשורש המקורי יש בן יחיד), הרי שבתת-עץ הנותר יש צומת אחד פחות (השורש המקורי). תרשים 15.8: סכימה כללית של עץ בינאדי 2 כדי לבצע את הפתרון הכללי נדפיס את תת-העף השמאלי לפי סדר המיון על ידי קריאה רקורסיבית נוספת לפונקציה. אחר כך נדפיס את המידע בשורש, ונבצע קריאה רקורסיבית נוספת להדפסה של תת-העץ הימני לפי סדר המיון. ג. | תנאי עצירת הרקורסיה: כאשר אחד מהמצביעים של השורש מאופס, פירוש הדבר שאין מתחתיו תת-עץ, ולכן לא נבצע קריאה רקורסיבית לפונקציה. לגבי הפונקציה הרקורסיבית - השורש הוא השורש של תת-העצ שבו אנו עוסקים. ד. | תוכנית להדפסת עצ בינארי ממוין: 7 קובץ תקליטור: 0201507.6 ב (00%ע* 262686 008ע95) 502666 סש 6נ1נסט ו (0=! 16%%6<-200%) 15 ו ((- 605 766 פנ סו שן 0 כ ה הוה ((םח6 שלכ--260). |56 50 פּן 4 המדריך השלם לשפת 6 פונקציה וו פשוטה ומובנת. שמרנו כאן על כל כללי התכנון של פונקציה רקורסיבית, ואנו מביאיס לידי ניצול מלא את הפוטנציאל הרב הטמון במנגנון הרקורסיה. תרגיל: כתוב פונקציה רקורסיבית להדפסת המידע בע בינארי ממוין על פי סדר מיון יורד. ה. נבחן את הפונקציה על פי הדוגמה הפשוטה המוצגת בתרשים 15.9. לשס נוחות, מספרנו את הצמתיס במספרים שוטפים משמאל לימין, וציינו זאת גם בתוכנית. 410) ( , ;(000%) 507%006 םש ג (000%) 5070%9₪ םש 5% 0% 8%008 000% ; 01 (0 =! 16%%<-700%) 1% (000%) 0500%86-------; (%+18<-000%) 507%06 םש רד" |2| ; 000% ₪%088 ₪%000% ; (0+ה1<-+00ת," ‏ שא") +%ה1חק (0 =! 18%%<-000%) 1% (000%) 0/500%06 7------; (16%%<-000%) 507%86 קש | | ז (0 =! 7197%<-700%) +1 | | | | | ; (7190%<-000%) 500%980 םש --------=(-:% ב סכנ שב ; 000% 8%008 5%00% ; (0+ח1<-00%ה," ‏ שא") %1ה1חק ן (8 =! 18)6%<-0%סת) 11% ] (8 =! 190%ת<-+ססת) 1% ;] (18%%<-000%) 5070%80 םש | | | ך-;(9190%<-+000) 5070%96 םש | ד-ג 6 ? (0)ה1<-+700," שא") +%ה1חק | | | | (0 =! 5100%<-%+000) 1% : (7190%<-+000) 500%90 םש -- (000%) 500%60₪ 7 = | 5 | ; 000% 8%008 5%0% ₪ ₪ , (0 =! 16%%<-00%ה) 11 (18%%<-000%) 807%80 קש ( בכש ל ב ב בב ב-א (+000) 8070%80 םש ; (0+ה1<-+00סת," שא") +%ה1חם |3| ; 000% ₪%068 0%ש₪%0 [-ד1 [ (0 =! 7100%<-+00ת) +1 (0 =| 18%%|<-700%) +1 : (0190%<-000%) 507%80 םש | ; (%+16<-000%) 5070%06 םש ; (0)ה1<- ",000%‏ 4א%") )+הגחק (0 =! 0197%<-%+000) +11 הר (6ה010<-000%) 500%66 םש -- רב (00%ם) 5009%86 ם | 6 | | 000% 8%008 8%00% ו | (0 =! 8%%<-700%) 1% !| ; (186%<-000%) 507%00ש ך*-; ",000%-<10+%0(‏ שא") ++%ה1סק | | (0 =! 0197%<-00%ת) 11 ; (0100%<-000%) 507%00 םש 3- תרשים 15.7 : סכימה להדפסת עץ בינאדי 0 51 20 15 10 פ פלט התוכנית יהיה: פרק 15: רקורסיה 325 מגדלי האנוי לסיכום נציג משחק מעניין, הניתן לפתרון אלגנטי באמצעות פונקציה רקורסיבית. הסיפור הוא על משחק המכונה ''מגדלי האנול'' ((סח38] +0 5זסצוסד). המשחק מורכב משלוש יתדות, אשר על אחת מהן מונחות ח דיסקיות בעלות קוטר הולך וקטן מלמטה כלפי מעלה ועל-כן יוצרות תבנית יימגדליי. מטרת המשחק היא להעביר את ח הדיסקיות ליתד אחר, כאשר הן מסודרות כמו בתחילה. להעברה זו אפשר להשתמש ביתד ביניים. חוקי המשחק הם: א. בכל צעד מותר להעביר דיסקית אחת עליונה בלבד מעמוד לעמוד. ב אין להניח דיסקית על גבי דיסקית קטנה ממנה. נפתור בעיה זו בשלבים לפי הנוהל שלמדנו: א. הגדרת הבעיה: קיימות שלוש יתדות שנסמן אותן במספרים 1, 2, 3. על יתד 1 מונחות דיסקיות בעלות קוטר הולך וקטן מלמטה למעלה. יש לכתוב פונקציה המדפיסה את סדרת הצעדים שיש לבצע בכדי להעביר, על פי חוקי המשחק, את מגדל הדיסקיות ליתד 3 באמצעות יתד הבינייס 2. ב חלוקת הבעיה לשלבים: 1. נניח כי הפונקציה מסוגלת להעביר את 1-ח הדיסקיות העליונות ליתד 2, באמצעות יתד 3. מכיון שהדיסקית התחתונה היא הגדולה ביותר, לא תפר פעולה זו את חוקי המשחק. 2 לאחר העברת 1-ח הדיסקיות ליתד 2, נעביר את הדיסקית ה-ח (הגדולה ביותר) מיתד 1 ליתד 3. באמצעות ב(1), נעביר את 1-ח הדיסקיות מיתד 2 ליתד 3 באמצעות יתד 1. ג. = תנאי עצירת הרקורסיה: כאשר קיימת דיסקית בודדת, ניתן להעביר אותה ליתד היעד באופן ישיר, מבלי לפגוע בחוקי המשחק ובלי להודקק לקריאה רקורסיבית. ד. התוכנית: נגדיר תחילה את הערכיס הדרושיס לפונקציה: ח מספר הדיסקיות ב'ימגדליי המקורי סק מספר היתד עליו מצוי המגדל בן ח הדיסקיות ש+ מספר יתד היעד להעברת מגדל הדיסקיות מ מספר יתד הבינייס, שבאמצעותו מתבצעת ההעברה 6 המדריך השלם לשפת 6 ו קובץ תקליטור: 0201508.6 ה ב (1==ם) +1 ,"ת/%0 016 60 %6 016 ת0סל+ 815% סטסת")61ת1צק ( 95 0-6 | ו ו ,"מ/%0 016 ₪0 %86 016 תסל+ 815% סטסת")%1תנ1עס ; (סס ,ס5 (₪ 52 ₪2 12-₪) הפו ] בתרשים 15.10 ניתן תיאור הפעולה של הפונקציה. 1% מקור | 50 ביניים קג תרשים 15.10 : סכימה של פתדון מגדלי האנוי להלן דוגמת הרצה של הפונקציה 0וסח8ח עבור 3 דיסקיות. לצורך הרצתה הכנו את התוכנית הראשית הבאה: (ס1נסט) מנאת 1סט ; ("מת :21585 3 תסנשח פ5תמאסץך [סאתא")1+תנ1צס (2 92 10 635 שתשה / 3 מ6נט פתמא0סעל 1סאתת 2=ק8 3=סף 50=1 3=ם : 1סאתת 803 2=ס% 50=1 2=ם : 1סאתת 82 3=ס% 50=1 1=ם : 1סאתתם 3 0016 50 1 016 מ0סע1 8415% ספטסת פרק 15: רקורסיה 327 2 016 סםס 1 016 ת0ס2+ 315% 6טסת 1+סג3 2=ק5 5850=3 1=ם : 1סאתםח 2 016 סםס 3 016 ת0ס2+ 341585% 6טסח 3 0016 0סם 1 016 מ0סע1 415% פטסת 801 3=סם 50=2 2=ם : 1סאתת 3=סף 1=ס% 2=ס5 1=ם : 1סאתםח 1 016 סס 2 16סק ת0ס2+ 341585% 6טסח 6 868 0ם 2 016 מסע 315% סטסת 8-2 3=ס6 50=1 1=ם : 1סאתםח 3 0016 0ם 1 016 תסע+ 318% 6טסח בדוגמת הרצה זו הדפסנו את הפרמטריםס האקטואליים בכל הפעלה של פונקצית ()וסחהח. כמו כן, הדפסנו את שורות הפלט בהסטה פנימה, ככל שעומק הרקורסיה גדל. בדרך זו ניתן לעקוב אחר סדר הקריאות לפונקציה הרקורסיבית ולבחון את הפלט בכל שלב. ללא ביצוע הדפסות הביניים, מתקבל הפלט הבא : 3 מ%נטח פתמאסע 1סאתת 3 016 סם 68 ת520 415% סטסת 2 016 0ם 68 ת520 418% סטסת 2 016 60 3 016 120 415% סטסת 3 016 סם 68 520 415% סטסת 1 016 60 2 016 120 415% סטסת 3 016 60 2 016 120 415% סטסת 3 016 סם 68 520 415% סטסת תרגילים 1 מה מבצעת התוכנית הבאה! 7 קובץ תקליטור: 1509.6קת60 ו "ת.0655010ט61ת1" 6סט1סתוש ₪ () מבאת | ב 7 [₪298]25 17 ור 60 סופ וסט אצ = || ]| 550 5 ; פופ וש - ( ו 8 המדריך השלם לשפת 6 ₪ |] | = ₪ (860 528 6₪) ספ ₪6 = מס ₪ קסופ 0" חיו56 ופ 605 5 ₪06 6 חי ו טונ וסן ((8פן 2" שמ ה א4ספן 6* 6₪₪) פופחו שוש ו כ פס 6> 6 פשפן 92 וב ( ה ((001ן 2 כ 1תמסן 66 הפפ 6) = פס 6* 6 7 פשפן של = ₪ (שספן 1* = פשסשן ₪) טלוו ] כתוב תוכנית רקורסיבית שקוראת תווים ומדפיסה אותס בסדר הפוך. קריאת התוויס תתבצע עד שמגיעים לתו ".יי (נקודה). נסה לפתור ואת בדרך אחרת, המוצגת בבעיה 2 בפרק זה. כתוב תוכנית רקורסיבית שקוראת תוויסם ומדפיסה אותס בסדר רגיל. תנאי עצירה כמו בשאלה 2. כתוב פונקציה רקורסיבית לחישוב המכנה המשותף הגדול ביותר של שני מספריס שלמים (זסז8חו סח הסותוח60 0768065%) באמצעות האלגוריתס של אוקלידס. השיטה: א. אס המספרים שוויס - המכנה הגדול הוא הערך של המספרים. ב אם הס שוניס - יש להפחית את המספר הקטן מהגדול ולהמשיך עס שני המספריס הבאים באותו אופן: > ההפרש בין שני המספרים. > המספר הקטן משני המספריס המקורייסם. הראה את סכימת הפרישה בקריאה לפונקציה (180= עבור 3=א ועבור 4=א (בדומה לדוגמה בפרק). כתוב את הפונקציה (0קוח56 המשווה בין שתי מחרוזות, כפונקציה רקורסיבית. הראה את סכימת הפרישה בקריאה לפונקציה שבשאלה 6, עס הערכים ''+)זסץ-שסת'' ך- "סח" : ; ("%א2סץ-טחאס6ם" ,"חסםת") סת0סע56 פרק 15: רקורסיה 329 .10 כתוב פונקציה רקורסיבית לחישוב הנוסחה לקירוב של *6. הפונקציה תקבל זוג מספריס ממשיים: 605 ו-א, ותחשב את הסכוס שלהס עד שהאיבר הנוסף יהיה קטן מ-605. 8 ₪ % כדי לכתוב פונקציה רקורסיבית דרוש ערך נוסף, מהו? כתוב פונקציה רקורסיבית ()6חס ח686ז הנעזרת בעיקרון שלמדנו בשאלה קודמת: מכל מספר א ניתן לפרוש סדרה ףא ...,א, א ומובטח ש-חא יהיה 1. הסדרה היא: א = וא בא זוגי 2 / = 7 .א אי-זוגי 31 הפונקציה תדפיס את הסדרה המבוקשת, כאשר הערך 1 יודפס ראשון (בסדר הפוך). נתונה רשימה מקושרת המוצגת באופן סכימטי כך: עסתסתה8 האיבר האחרון ברשימה מכיל את הערך 0 בשדה המצביע לאיבר הבא. ההגדרה הפורמלית של הרשימה: ]‏ 1186 1 6סגו562 2 סם1 12 סאת* 1186 1 562006 ;צסתסםת8* [ כתוב פונקציה רקורסיבית (15%0| 6/6196 על פי כל השלבים שלמדנו. הפונקציה תהפוך את סדר קישור האיברים, כך שהאיבר האחרון יהיה הראשון (מוצבע על ידי זסח6חה) והאיבר הראשון יהיה האחרון (והמצביע שלו יהיה 0). משימות: תרגילים 47-39. 0 המדריך השלם לשפת 6 קלט/פלט וקבצים במערכת מחשב מחולק הזיכרון לשני סוגיס עיקריים: + ויכרון ראשי, או ויכרון מיידי. + ויכרון משני. הזיכרון הראשלי - ₪411 (וסוח6וא 406655 וחִססְחְגּא) קשור באופן ישיר למעבד המרכני של המחשב. בזיכרון זה נטענת התוכנית ובו היא מצויה כל עוד היא מופעלת. המשתניס והמבניס המוגדריס בגוף התוכנית נמצאיס גס הס בזיכרון וה. גמן הגישה לוּיכרון הראשי, דהיינו ומן העברת נתון בין הציכרון לבין המעבד - נמדד בננו-שניות (1 ננו-שנייה = 107% שנייה). הזיכרון המשני מצוי בהתקן תיצוני. דוגמאות להתקנים כאלה הס התקליטון (דיסקט), ודיסק קשיח. הקשר בין המחשב לזיכרון זה אינו ישיר, אך המחשב יכול לפנות אליו בצורה דומה לזיכרון הראשי, ולאחסן או לשלוף מתוכו נתוניס. זמן הגישה לוּיכרון המשני נמדד במילי-שניות (1 מילי-שנייה = 1073 שנייה). פרק זמן וה איטי פי מיליון מזמן הגישה לזיכרון הראשי. לאור נתוניס אלה, מדוע אנו וקוקיס כלל לזיכרון משני! הסיבה נובעת מהתכונות השונות של הזיכרונות והמטרות להן הן יועדו. הזיכרון הראשי נועד להחזיק את התוכנית ואת הנתוניס הדרושיס לה במהלך העיבוד השוטף והוא מוגבל בנפתו. הזיכרון המשני נועד לאחסן את מאגרי הנתוניס של המשתמש, הנמדדים בעשרות ובמאות מיליוני בתיס. הזיכרון המשני זול מאוד באופן יחסי לויכרון הראשי. שוני נוסף הוא, שהנתוניס הנשמרים בזיכרון המשני אינס אובדים לאחר כיבוי המתח למחשב - לא כך לגבי הזיכרון הראשי. כאשר יש כמות רבה של נתונים בזיכרון חיצוני וזקוקיס לחלק מהם באופן תכוף במהלך ריצת תוכנית מסוימת, נשמור אותס בזיכרון הראשי מראש באופן קבוע, ככל שיתיר לנו המקוס. ברוב המקריס קוראים לקטעי נתוניס שוניס לסירוגין במהלך העבודה, בהתאם לצורך. פרק 16: קלט/פלט וקבצים ‏ 331 ארגון הנתונים בזיכרון משני כאשר אנו מצייניס את המונח ייזיכרון משנייי נתייחס ברוב המקריס לתקליטון או לדיסק הקשיח. בסרט המגנטי נשתמש בעיקר לשמירת נתוניס הסטוריים או לגיבוי ושמירת עותק של הנתוניס שבדיסק הקשיח. הנתוניס אשר אוגריס בזיכרון המשני יכולים להיות תוכניות מקור (וח8זפסזם 66ז50) כפי שנכתבו על ידי המתכנת, תוכניות לאחר הידור וקישור המוכנות להפעלה (00[660 הת8זפסזס), אוסף נתוניס מספרייס המייצגיס מידע כלשהו כמו פרטיס אישיים של עובדיס במפעל, או ייצוג של תמונות גרפיות. פריט המידע הבסיסי בעולס המחשב היא הסיבית (ופ), אשר יכולה לקבל את הערכים 1 או 0 בלבד. הסיביות מקובצות בייחבילות'י של שמונה הנקראות בתים (8/165). בחשבון בינארי (בסיס 2) ניתן לייצג באמצעות בית אחד 256 ערכים שונים (0 עד 255). ניתן לייצג תוויס במחשב באמצעות קוד 45611. ראה בנספתח טבלה המתארת את הסימנים והקוד המתאים לפי 45011. על פי קודים אלה כל תו מיוצג על ידי בית אחד. לכל טיפוס של משתנה יש ייצוג פנימי המורכב מבית אחד (טיפוס זפּחס), ועד שמונה בתיס (טיפוס 6|פוס0). הנתוניס בזיכרון נמצאיס בצורת משתניס בודדים, או בצורת מבניס המכיליםס משתניס רביס ולכן גם מספר בתים רב יותר. הנתוניס בזיכרון המשני נמצאיס בקבציס בצורות ארגון שונות, כפי שנראה בהמשך. בדרך כלל, כל קובא מכיל מידע בנושא מוגדר ובסופו יש ציון ייסוףיי על ידי תו הקרוי ₪6 +0 0ח5 (או בקיצור -0ם). לכל קובץ יש שם ייחודי וקיימת עבורו כניסה בטבלה מיוחדת הנקראת ספריה או מדריץך (ע6600זו0). הקשר בין הקבצים לבין המשתמש מתבצע באמצעות מערכת ההפעלה. במערכת ההפעלה 5-05 למשל, הנפוצה במחשבי 56-18%, פקודת זו תגרוס להקרנת הספריה של התקן הזיכרון המשני (תקליטון או דיסק). על המסך תתקבל רשימה של שמות הקבציס הקיימים באותו התקן אחסנה. כדי להציג את תוכן של קוב מסוים עלינו לתת את הפקודה: <סיומת>. <שם קובץ> 6סע6 חוקי הכתיבה של שמות הקבציס נקבעים על ידי מערכת 05כ-15. הצורה הכללית של שס קוב הינה (הפעס כתבנו זאת באנגלית): <ת510ת6266> . <86ת116+> כאשר: <6וח8ח1116> | שס הקובצ, מורכב מ-1 עד 8 אותיות, תווים, מספרים או יי יי (קו תחתון). <ח%60510א6 | הסיומת מורכבת מ-1 עד 3 אותיות, מספרים או יי יי. הסיומת הינה < רשות, כלומר אינה חייבת להופיע. ניתן גס להצמיד משמאל לשס הקוב את כינוי הכונן, אס דרוש : :<כונן> 2 המדריך השלם לשפת 6 כאשר <כונן> הינו 4 או 8 לציון דיסקט ו-6 עבור דיסק קשיח. לדוגמה, הגדרת קוב בכונן 8 : מא%.16נ1פצת:ם העדה! במערכת ההפעלה 3.11 פשססחעו אפשר לקבל את רשימת הקבצים באמצעות מנהל הקבצים, וב-595/וססח/ - באמצעות הסייל. מערכות הפעלה כגון 95פשססחעץ או זפיסטחועש אינן מטילות מגבלות כה חמורות על שמות קבצים וניתן להשתמש במחרוזות ארוכות ובעלות מובן, כולל רווחים בין מילים. לצורך תאימות עם כלי פיתוח שונים, מומלץ למרות זאת, להשתמש בכללים המיל עד לפרישה רחבה של מערכות הפעלה אלו. את קובצי הנתוניס ניתן לארגן בצורות שונות. הפשוטה שבהן היא רצף של תוויס מתחילת הקוב ועד סופו. קובץ כזה נקרא קוב תמליל או קוב טקסט (6= 760) ולמעשה, כל תוכנית מחשב שאנו כותבים (תוכנית מקור) היא קובצ מסוג זה. חלק מהתוויס של קובצ התמליל הס תוויס מיוחדיס המסמנים סוף שורה, ותפקידס לחלק את הקוב לשורות. התוויס הללו הינס 68 (15011-13) ו-=1 (5611-10). כאשר מדפיסים אותם, או מציגיס על המסך, הס גורמים לתוויס העוקביס להתחיל בשורה חדשה. 6% - חזט₪6 6אַ13ז63 | הוראת דילוג לתחילת השורה הנוכתית. =] - 660 116 | הוראת דילוג לשורה הבאה. משתמשיס בתוויסם הללו כתוויס מיוחדים לסימון סוף שורה בקובצ, כדי שניתן יהיה להדפיס את הקוב> כמות שהוא, מסודר לפי שורות. לדוגמה, הקוב 01.04ו8א6 מכיל את השורות הבאות: 8 1116 15םמך :1 3 111 ע1םת6 6ם6 15 18םמך תרשים 16.1: טקסט עס תווי בקרת הדפסה פרק 16: קלט/פלט וקבצים 333 מבנה הקובץ באחסנה יהיה כפי שמתואר בתרשיסם 16.1. הקוב מורכב בדוגמה זו מרצף של 54 בתים. כל בית מייצג (בקוד 45611) תו מסוים, כולל התוויס המיוחדיס לסימון סוף שורה וסוף קוב. שיטה נוספת לארגון נתוניס בקובצ היא על ידי חלוקתו לרשומות. כל רשומה (₪66070) מורכבת מאוסף של שדות בדומה לתכולת מבנה (6ז600ט5) המצוי בזיכרון הראשי. גודל כל שדה תלוי בסוג הנתוניס האגוריס בו. הקובצ עצמו מכיל אוסף של רשומות הזהות אחת לחברתה במבנה ולמעשה, צורה זו של ארגון קובצ מקבילה למערך של מבנים הנהוג בזיכרון הראשי. כפי שהוזכר, היתרון באחסנת מערך של מבניס באמצעות קוב על גבי התקן משני, הוא באפשרות לאגור כמות גדולה מאוד של רשומות לזמן ארוך. ניקח לדוגמה קובצ המכיל תנועות בחשבון בנק. כל רשומה מכילה נתוניס הקשוריס להמחאה שהופקדה בחשבון ויש בה את השדות הבאיס: מספר חשבון בנק ט(חו), מספר המתאה טח), תאריך (ז8ח6), סכוס 0080), לפקודת (08ח6). מבנה הקוב >ח2.0קח8א6 מתואר בתרשיס 16.2. לפקודת סכוס תאריך מספר מספר המחאה | חשבון תרשים 16.2: רשומות בקובץ שיטות גישה לקבצים הגישה לנתוניס המצויים בקבצים, שונה מגישה לנתוניס בויכרון הראשי של המחשב. ההבדלים נובעים מהעובדה שהויכרון הראשי הינו מיידי, ולכן ניתן לגשת בצורה ישירה לכל תא זיכרון שבו. לקבציס המצוייסם בהתקן אחסנה חיצוני, יש לגשת באמצעות מנגנון בינייס מכני (בדיסקיס - ורוע וראש קריאה/כתיבה), ולכן - ומן הגישה לנתוניס ארוך יותר. מסקנה חשובה מדיון זה היא, שאין גישה מיידית לכל נתון בקוב הנמצא בדיסק. 4 המדריך השלם לשפת 6 לכל קוב שבו משתמשיס במהלך התוכנית (לשס קריאה או כתיבה), קיים מצביע מיוחד המצביע אל הבית הבא בקובצ. כאשר נפתח קוב לקריאה או לכתיבה יצביע המצביע על הבית הראשון שבו. כל קריאת בית מהקוב תגרוס לכך שהמצביע הזה יתקדס אוטומטית לבית הבא. באופן דומה, כאשר תוכנית המחשב יוצרת קובצ - יראה המצביע על המקוס הבא בקובץ שבו ייכתב הבית הבא. לאחר הכתיבה, יתקדס המצביע באופן אוטומטי למקוס הבא. קיימות שתי שיטות גישה לקבציס: גישה סדרתית וגישה אקראית. הצורה הפשוטה ביותר לטפל בקוב היא בגישה סדרתית. בשיטה וו מנצלים את המצביע האוטומטי לקובץ. תוכנית המחשב ערוכה לבצע את כל הפעולות הדרושות על הקוב בסריקה סדרתית מתחילת הקוב ועד סופו. שיטת גישה זו פועלת בדיסקים ובסרטים. שיטת גישה אקראית אפשרית במתקני דיסקים בלבד. מכיון שלא תמיד ניתן לבצע את כל הפעולות הדרושות על קוב בגישה סדרתית, קיימת אפשרות להזיז את המצביע ממקוס למקום בקוב> לפי דרישת התוכנית, באופן אקראי. השליטה במיקומו של המצביע נעשית מתוך תוכנית המחשב, באמצעות פונקציה מיוחדת. לאחר מיקוס המצביע על הבית הרצוי בקוב, ניתן להמשיך בגישה הסדרתית (קריאה או כתיבה) עד להזוה הבאה. מתכנני שפת 6 היו מעוניינים שהמהדר יהיה פשוט, קצר ויעיל. כתוצאה מכך אין בשפת 6 פקודות קלט/פלט. כדי לבצע פעולות אלו בקבציס, במסך, או במדפסת, צריך לקרוא לפונקציות ייעודיות, מוכנות מראש. לכל מהדר 6 קיימת ספריה של פונקציות (הספריה <ח.0ו560> במערכת 6 6חהוזסם, למשל), המכילה גם פונקציות לפעולות קלט/פלט בקבציס. בשוק קיימיס מהדריס רבים לשפת 6 וייתכנו הבדלים מסוימיס בהגדרת הפונקציות בספריות השונות כפי שהוכנו על ידי היצרנים. נתאר להלן מספר פונקציות מייצגות, הנחשבות לסטנדרטיות. עליך לבדוק בספריית המהדר בו הינך משתמש מהי ההגדרה המדויקת לפונקציות הללו. בספריית המערכת של 6 נחלקות הפונקציות המטפלות בקבציס לשתי קבוצות, אשר כל אחת מהן מטפלת בקבצים ברמה שונה: א. פונקציות המספקות שירותי מאגר אוטומטי נקראות 1/0 60ז16/₪. ב פונקציות שאינו מספקות שירותי מאגר נקראות 1/0 67606))טפחטש. הפנייה אל קובץ באותה תוכנית צריכה להיות עקבית, באותה רמת שירות. קריאה או כתיבה מקוב> שנפתח ברמה הראשונה מתאפשר רק באמצעות הפונקציות השייכות לרמה הראשונה. וכך אס הקוב נפתח ברמה השנייה - הוא יופעל בפונקציות של רמה זו. פרק 16: קלט/פלט וקבצים 335 פונקציות קלט/פלט עם מאגר הפונקציות בקבוצה זו מטפלות בתחזוקת מאגר הזיכרון (ו6ט8, או חוצץ), אשר דרכו מתבצעות פעולות הקלט/פלט הקרויות 1/0 4676/ט8. המצביע לקובצ מנוהל גס הוא על ידי פונקציות אלו. שיטת העבודה היא: א. כאשר תוכנית המחשב קוראת לפונקציה שתפקידה לשלוף את הבית הראשון מהקובצ, מתמלא המאגר בקטע שלס מהקוב> החל מהבית המבוקש. ב. | קריאה לפונקציה שנית, לשס הבאת בית נוסף, תגרוס לשליפתו מהמאגר. לעובדה זו חשיבות רבה, שכן המאגר נמצא בזיכרון הראשי והגישה אליו הינה מיידית לעומת הגישה לדיסק למשל. ג. | לאחר קריאת הבית האחרון המצוי במאגר, הוא יתמלא בקטע הבא של הקוב באופן אוטומטי. שיטה זו מאפשרת לקרוא את הקוב באופן סדרתי, בית אחר בית במינימוס גישות לדיסק, כי רוב העבודה מתבצעת דרך המאגר. כאשר כותביס לקוב>, תתבצע הכתיבה אל המאגר תחילה, ורק כשזה יתמלא, הוא ייכתב בבת-אחת לקוב> שבדיסק. מנגנון המאגר הזה יישקוףיי לחלוטין למתכנת ומבוצע כולו באחריות הפונקציות. | שיס לב/ ; יש אפשרות להכריח את המערכת לכתוב את תוכן המאגר לקובץ בדיסק על ידי הפקודה הבאה : ;ע+* מת11 ; (ת2) 1108 פתיחה וסגירה של קבצים בכדי שניתן יהיה להתייחס לקוב מתוך תוכנית מחשב, יש צורך להגדיר את ההתקשרות אליו בנוהל פתיחת קוב (ח6ק0). לאחר פתיחת הקובצ מתאפשרת פנייה של התוכנית אליו ומוקציםס לו מאגר ומצביע. פונקצית הספריה המבצעת פתיחה של קוב נקראת ()60ק20. המצביע לקוב> הינו הערך המוחזר על ידי הפונקציה ()חפסס). באמצעותו מתבצעות שאר הפעולות על הקובצ. תיאור הפונקציה: (6ססת , סתַהת+) תסקס+* מזדק ; סססת* , סַתַהת+* מהתס <6וה+> | מחרוזת המכילה את שם הקוב, כפי שמופיע בספריה (/6607זוס). <066וח> מחרוזת המכילה אחד מן התווים ייזיי, ייששיי או ייפּיי, אשר מגדיריס את צורת העיבוד הרצויה: 6 המדריך השלם לשפת 6 ל פתיחת קוב לקריאה בלבד. 'יצ'י פתיחת קוב לכתיבה בלבד. אס הקוב קייס הוא נמחק; אס הוא לא קייס הוא נבנה. יי פתיחת קוב כדי להוסיף בסופו. אם הקובץ לא קיים הוא נבנה. .ה % שיס לב/ בפתיחת קובץ טקסט מומלץ להוסיף את האות שי 60 בבתחירת 8זז, למרות שזו ברירת המחדל כלומר, לכתוב : זי, שעשי, 8₪י. נקודת ציון? ניתן לפתוח קובץ 6% לעדכון. המחרוזת של פטס היא : /ץ+/. אפשרויות נוספות להגדרת צורת עיבוד קוב>, בפרמטר <%006> : +ז +עש +ףּ טז (2+ז) פעו (פ+שש) סה (8+2) פתח קובצ קיים לקריאה/כתיבה. צור קובצ חדש לעדכון. פתח קוב להוספה או צור קוב חדש, אס הקוב לא נמצא (הוספה - תוספת תווים לסוף הקוב). פתח קוב בינארי לקריאה. פתח קובצ בינארי לכתיבה. פתח קובץ בינארי להוספה. כל תוכנית המכילה התייחסות לקבצים חייבת להכיל בתחילתה את ההוראה הזו: <ח.0ו5%0> דוגמה: <ם. 5%6610> 06ם610ת1+ קובצץ הגדרות בסיסי - קובץ כותר - שנועד לשימוש פונקציות הקלט/פלט של ספריית המערכת. בקובצ זה מוגדר הטיפוס מסוג ם.ו1:, תוויס מיוחדים לצורך עיבוד הקוב (כגון 505 המסמן סוף קוב) ועוד. כדי לפתוח את הקוב 86.04 לקריאה נכתוב את משפטי התוכנית הבאים: <ת.5%6010> 61006ם1 + (ס1סט) פנאת 16סט ָ ;21160+* מתזק ופ | כ ל ולטוב ל 8655 = 156 ורמג ] 9% 600 רכת6 68 פרק 16: קלט/פלט וקבצים 337 הסבר: א. בשורה 4 המשתנה 8!80 מוגדר כמצביע לקובץ, כדי שנוכל לשמור בו את תוצאות הפונקציה ()ח6סס+. באמצעות 8160 תבוצענה הפניות לקובץ לאחר פתיחתו. ב בשורה 5 השתמשנו בפרמטר ישזיי, אך אפשר לכתוב ייזיי בלבד, כי טקסט הוא ברירת המחדל. טיפ? מספר הקבצים שניתן לפתוח במקביל באותה תוכנית מחשב, היו מוגבל. סיבה זו נובעת מכמות הזיכרון, אשר דרוש לכל קובץ עבור המאגר לאחר פתיחתו. בספריית המערכת נמצאת פונקציה המאפשרת לתוכנית לסגוד קובץ (0/056) לאחר שסיימה להשתמש בו ולשחרר את הזיכרון הראשי שהוקצת לו. הפונקציה לסגירת קוב מוגדרת כך: ;ק+* מתדע ; (ק5) 501086 בתהליך הסגירה של קוב פלט, נכתב המאגר לקוב, גם אס אינו מלא. פעולה זו מעדכנת את הקובצ, לפני ניתוק הקשר בינו לבין התוכנית. כאשר תוכנית מחשב מסתיימת באורח מסודר, כלומר ללא תקלה, נסגרים באופן אוטומטי כל הקבציס שנשארו פתוחים. נציג דוגמה פשוטה לפתיחת קוב על ידי פנייה אליו, בדיקה אס הוא פתוח, סגירתו ויציאה מהתוכנית. היציאה מהתוכנית הינה עס קוד 0 אס היא בוצעה כראוי. אס היתה שגיאה בפתיחה - יוצאיס עס קוד 1. <םמ.556010> 66ט610מ1+ (10סט) ת1את 1% | שו ו /* הבדיקה המוודאת כי פתיחת הקובץ תקינה חשובה ביותר ובלתי נמנעת */ ענסא == (("6ע" ,8%א116.6+עת")םתסקס1 = ם1)) 15 | ( וו 1 5 ןהו הס ותו 70 )) ו סוסו ור סושן ;(1) מעגו6%ע2 ] ; (ם101086)1 (0) ם2גו26% 8 המדריך השלם לשפת 6 שיס לב/ [ יש לבדוק את פתיחת הקובץ, מכיון שפתיחת קובץ לא מוצלחת עלולה 2 לגרוסם לתקלות חמורות, כמריחת זיכרון במקרה של כתיבה לקובץ. אסור לטפל בקובץ שלא נפתת כראוני. קריאה וכתיבה של תווים בודדים צמד הפונקציות הבסיסי לקריאה וכתיבה של תוויס (בתיס) בקובצ הן (106%60 ו-(%6)0טס+ בהתאמה. הפונקציה ()106%6 לקריאה מוגדרת כך: (ק+) 507660 מַהַםס ; ₪ש+* מתדק תפקיד הפונקציה להביא לתוכנית את התו הבא בקוב המוצבע על ידי טז. קידומו של המצביע יבוצע באחריות (96660), לאחר פעולת הקריאה. הפונקציה ()6ש0+ לכתיבה מוגדרת כך: (ק% ,6) ססס+ 7 מהתס ;ס+* מתדק תפקיד הפונקציה לכתוב את התו המוכל ב-6 אל הקוב המוצבע על ידי טף. קידומו של המצביע יבוצע לאחר הכתיבה. באמצעות ארבע הפונקציות (0ח6קס), (106060, 660טס ו-(1610560 ניתן לכתוב תוכנית מחשב קצרה המבצעת העתקה מקוב> לקוב>, בדומה לפקודה שְקְ60 של 05ס-5!ו. הפונקציות חס6סס1 ו-16!056 אינן הכרחיות. שס התוכנית יהיה שְק660 ונכתוב אותה בקובצ ששמו 01601.6ח60: 8 קובץ תקליטור: 0₪01601.6 *****/ <ת.5%6810> 66ט1סת1א (ס1סט) מנ1את ב1סט ןָ 16 וי ממ סו ₪ ₪ ; [20] 6ת8םת+% , [20] פתה8ת++ מַהַתס /* קליטת שמות קבצים */ ; ("-ץ000 60 פתהםת 1116 עססתם")+6ם1עס ; (6מַהת+5 ,"508%)"%5 ; ("- שתהת 1116 חסם עססתמםת")1>תו1צס ק 5 7 5 /*+ פתיחת קבצים */ ; ("ץ" גַתַת++) ם1006 = 1205116 ; ("ט" ,סַתַה8ת5)ם6ק0ס+ = 605116 פרק 16: קלט/פלט וקבצים 339 /* העתקה */ (₪02 =! ((5116ת0=106%0)120)) 16ג1גתט 65 6 15 /* סגירת קבצים */ לק 65 16565 6ב קל 2415 5655 הסבר: בתוכנית זו התעלמנו מהמקרה בו הקובצ סח אינו קייס כלל. אם הוא אינו קיים, תחזיר הפונקציה (0ח6קס1 את הערך 0 (או 11טא, כפי שהוא מוגדר בקובף ח.0ו500). כדי לבדוק אס קוב הקלט (חסזו) וקובצץ הפלט (60) קיימים, צריך לכתוב את הפקודות האלו, אשר מחזירות קוד שגיאה וגם מודיעות על כך. ;(1) מעו6%ע 2‏ כ ;("עסעפם")61ת1עס (עתטסא == 5116ַת520) 15 ;(1)םע6%0ע2 ; ("עסמפם")+פתנ1מס (םעתסא == 505116) +1 תרגיל השתמש בדוגמה זו לשיפור התוכנית 6001601.6, כך שתבדוק את מצב פתיחת הקבציס, ובמקרה של שגיאה תדווח הודעה מתאימה ותסיים ללא ביצוע העתקה. נסה לשפר עוד את התוכנית ולאפשר למשתמש להחליף קובצ פלט ולחזור על הפעולה. קובצי תמליל קובצי תמליל (65!ו1 16%%) מכיליס שורות של תוויס אשר מסתיימות בצמד התוויס = |/6₪. בספריית המערכת קייס צמד פונקציות, שנועד להקל על הטיפול בקבציס אלה. תפקיד הפונקציות 106150 ו-(150טס1 הוא לקרוא ולכתוב שורה שלמה בהתאמה (שיס לב, שמות הפונקציות מסיימים ב-5, ולא ב-6 כמו קודם). פונקציית הקריאה ()0918+ (ק+* מת1ע ,א83 %6םת1 ,6םת11* עהם0) 076068+* מהתס הפונקציה קוראת את השורה הבאה בקובץ המוצבע על ידי 10 ומכניסה אותה למחרוזת המוצבעת על ידי 6חוו. המחרוזת כוללת גם את התוויסם =68/1. המשתנה א8)! מגדיר את המספר המקסימלי של תווים שניתן לקרוא. תפקידו לדאוג שלא תהיה גלישה מאורך נתון, במידה וצמד התווים "68/1 אינו נמצא בקובץ. הפונקציה תחדל מקריאה כאשר תיתקל בצמד התווים :68/1, או כאשר תקרא אפ תוויס. המחרוזת שמוחזרת לתוכנית הקוראת מכילה 1!שא מסיים, שנוסף אוטומטית על ידי הפונקציה (06650/. הפונקציה (196050 מחזירה מצביע לתחילת 6חו!. כאשר מגיעיס לסוף הקוב (50₪) מחזירה הפונקציה 1 וא. 0 המדריך השלם לשפת 6 דוגמה להפעלת הפונקציה (196050 על הקוב 8001.04%א6 : <ת.5%010> 61006ם1 + (1) (ס1סט) פנאת 1סע (2) (3) ;0ק116+* מתדץק (4) ל 0 ]| ו 55 (5) ה (6) (נ1טא == 51160) +1 ן ו 1 1 טפ 66 וסוולי) שו סוו ‏ ספ ( 1 ו ] ;(ס116+ ,100 ,ת) 10665 (7) ] (8) למחרוזת ח ייקלטו הנתוניס הבאיסם: פונקציית הכתיבה ()15ט10: ; (ק+* 218 ,6ם11* עַםס) 465 הפונקציה כותבת את המחרוזת המוצבעת על ידי סחזו, אל הקוב> המוצבע על ידי ס)ז. היא מוסיפה את התווים :68/1 בסוף כל שורה. התו 011א הנמצא בסוף השורה אינו נכתב לקוב>. נציג את הפונקציה 196650 בשפת 6: .ו קובץ תקליטור: 0201602.6 ו (סק+* 218 ,אהת %6םמ1 ,6מ11* עַהַםת86%68)0+* עהםתס ן 6 0 7 0 = ₪ ((9ע₪0=! ((ס0=50680)1)) 66 --את) 16ג1גתט ('מ'== (0 = ++6ם11*)) 1% ; 68%עס א = וו ;(8 : תתטא ? (6==8םת11 68 60==₪05))םעט66ץ פרק 16: קלט/פלט וקבצים 341 הסבר: א. בלולאת 16וחש ממלאיס את המחרוזת 6חו! בתוויסם הנקראים מהקובצ באמצעות הפונקציה (196%60. ב תנאי העצירה של הלולאה הס: ויהוי מצב של סוף קובץ 0₪ם), או קריאת א8ח תוויס. ג. | אס נקלט תו סוף שורה (יח') יוצאיס מהלולאה על ידי משפט 686זם. ד לאחר סיום הלולאה משרשרים תו 11א לסוף המחרוזת. ה. הערך המוחזר הוא מצביע לתחילת המחרוזת, או 1ושא, אס התו הראשון היה סם. תרגיל כתוב באופן דומה את הפונקציה ()פוטט), והיעור בפונקציה (6טט+ (כפי שבדוגמת הקריאה נעזרנו בפונקציה ()96)). מסוף המחשב כקובץ סטנדרטי פונקציות הקלט/פלט של 6 מתייחסות למסוף המחשב כקובצ. בכל הרצת תוכנית נפתחים באופן אוטומטי שלושה קבצים מיוחדים. הפנייה אליהס נעשית באמצעות המצביעיס חו5%0 לקלט, 5%600% לפלט, 5906 לפלט שגיאות. קבציס אלה מוגדריס בקובף ח.0ו5%. באמצעות חו500 ניתן לקרוא תוויס המוקשיםס במקלדת, ובאמצעות 500001 ו-זז5%00 ניתן לכתוב תוויס למסך. פונקציות הקלט/פלט שלמדנו קודם, ישימות גם עבור שלושת הקבציס האלה: ניתן להשתמש בפונקציות (96060, (196150, 60וטס), ו-0פזטס). בנוסף לפונקציות )שחוזס ו-60ח568 קיימות בשפת 6 הפונקציות 860600 ו-()חסזטס המשמשות לקליטה וכתיבה של תוויס למסך. למעשה קיימת ההקבלה הבאה: (מם206650)5%01 - ()מ2ם0660 (66)60,560000ט50 - (6)םססטס נכתוב לדוגמה, תוכנית 606.6 עבור פקודת 05 להצגת תוכן קובצ על המסך: <שם קובץ> 6סקעץםס / אאא א קובץ תקליטור: 6 6516/05 *****/ <ת.5%810> 1066סת1א (ס1נסט) מנאת 1ס ָ שחת 616 ; [20 ] חַתַהַם+ מַהַתס ; ("--6סץ6 סם פתהת 5116 עססםתשע")5סתנגמס 2 המדריך השלם לשפת 6 ; (סַתַהם5 ,"5)"%5ת508 ; ("ץ" ,ַתַהַת+)תסקס+ = ס1 (ע₪0 =! ((6=26886)50)) 16נתחט ל ופוסו 2 ₪)) פסומופן (פ) 6 שיס לב! אין צורך לפתוח את הקבצים חו500 ו-+5000, כי הם נפתחים אוטומטית 7 בזמן הרצת כל תוכנית. 1 | תרגיל כתוב את התוכנית 8660/6.6, שתפקידה לקלוט שס של קוב ולהכניס לתוכו נתוניס באמצעות המקלדת. כיצד תסיים את התוכנית! תרגיל כתוב נוסח נוסף לתוכנית 61603.6 (המקבילה לפקודה 6כש של 05ס), אשר יתאיס לקוב מסוג %6%%. השתמש בפונקציות 150 ו-106150. הערה בוודאי שמת לב לעובדה, שיש שני מצביעים שוניס לביצוע פלט למסוף: 570001 (-7ו00ו5. הסיבה לכך תוסבר בהמשך, אך עתה נאמר, ש-5100 משמש לביצוע פלט תקין של תוכנית (-067ז5 משמש לפלט של הודעות שגיאה. קלט/פלט עם פורמט הפונקציות ((60ח508 ו-)שחוז מבצעות קלט ופלט למסוף. קיימות שתי פונקציות משלימות לעבודה עס קבצים, 156860 ו-()שחוזס], אשר זהות ל-00ח508 ו-()שחוזם, פרט לעובדה שהפרמטר הראשון שלהן הוא מצביע לקובצ שהן פועלות עליו. לאור זאת, אפשר לכתוב כך את המבנה הפורמלי של הפקודות האלו: ; (<משתנה> , <משתנה> , <מחרחת בקרה>) %>תנגעסק ; (<משתנה> , <משתנה> ,<מחרחת בקרה>) מ5661) +6>םתנמס+ הפונקציות ((%0ח508 ו-()1ח1568 מוגדרות באופן דומה. התוכנית הבאה תדגיסם את השימוש ב-(%0ח1568. התוכנית מדפיסה את שדות קובצ הנתוניס %חס.2קוחהאס : פרק 16: קלט/פלט וקבצים 343 ו קובץ תקליטור: 0201604.6 *****/ <ת.5%810> 61066סת1א (ס1נסט) מנ1נאת 1סע 8 מ 6 שומ 1 ;[20] פתהם ,[%0%]8ם0 תס ; ("2" ,"א%תס.2קתה8א6") ם6סס5 = ס5 ופ ; ("ם+026617-01-מ1 וגו 6 0% >6תטסססת") ,תטם%ם60,%ת680000," %8 %1 558 %6 ,%0" ,ס1) 1ם5508) 16גתט (₪0% =! (ספתהם ,מט69 ,%0%ם0 0% 6720 65 596 1)8תועס ; (שחהת ,תטפ ,0%א%ם6 ,תטתאתס ל (פף )3‏ 6 גישה אקראית לקבצים עם מאגר הפונקציה (186660, מאפשרת להציב את המצביע לקוב, כך שיצביע לכל בית רצוי. לאחר מיקוס המצביע ניתן להמשיך בגישה סדרתית מהמקוס בקוב> שבו הוא נמצא. כאשר המצביע מתקדם בקוב ומגיע לנתוניס שאינס נמצאים במאגר, הפונקציה מבצעת באופן אוטומטי קריאה של נתוניס חדשים מתוך המשך הקוב שלפניה. הפונקציה מוגדרת כך: ; (תנש1נעס %םת1 ,025866 שַםת0ס1 ,ק+* מתדע) 550% ם הוא מצביע לקוב. % כמות הבתים שיש לדלג (היסט חיובי או שלילי). חזףוזס | מקבל אחד משלושה ערכים 0, 1, 2: /*0/' ההיסט יימדד מתחילת הקובצ. יי ההיסט יימדד מהמיקום הנוכחי של ס]. י2יי ההיסט יימדד מסוף הקוב>. דוגמאות לשימוש בפונקציה: דלג לתחילת הקוב (0 ,01 ,0+) 506% דלג לסוף הקובצ (2 ,01 ,10) 566%] דלג | קדימה | 100 (1 ,1001 ,0+) 5606%] בתים דלג לבית ה-4 בקובצ (0 ,41 ,0+) 5566% 4 ההמדריך השלם לשפת 6 שיס לב/ ( ערך ההיסט 00560) הינו מטיפוס פָחסו. כאשר משתמשים בקבוע, יש , לציין את הטיפוס על ידי הצמדת / לסופו, כדי שהמהדר יתרגסם אותו -- כראוי לקבוע מסוג פחסו. פונקציות קלט/פלט ללא מאגר פונקציות קלט/פלט אשר אינן משתמשות במאגר, מספקות רמת שירות נוחה פחות למתכנת, אך מאפשרות לו לקבוע ביתר גמישות את אופן הפנייה לקבצים. מכיון שפונקציות אלו אינן פועלות באמצעות מאגר סטנדרטי אוטומטי, הן משתמשות בשיטת הגישה הישירה בלבד. על המתכנת לספק לפונקציה מאגר שיוגדר בתוכנית הקוראת, כדי שאפשר יהיה לקלוט לתוכו את הנתוניס מתוך הקוב בדיסק, או להכין בו את הנתוניס לשס כתיבה לקובצ. מאגר וה יכול לחיות מערך, מבנה או מחרוזת. פרט לכך, העבודה עם פונקציות אלו דומה לעבודה שהוצגה בסעיף הקודם: > פתיחה של הקוב לפני שמשתמשים בו. %> אפשרות להקפיצ את המצביע לכל מקוס בקוב>, וממקוס זה להתקדסם בגישה סדרתית. > הפניות לקובצ אינן נעשות באמצעות מצביע (*ם |1"), אלא על ידי מספר ערוצ המוגדר כמספר שלסם. הערוץ ((פחח8ח6) הוא מבנה נתוניס המכיל נתוניס על הקוב ובכללס המיקוס של המצביע בקוב. פתיחה וסגירה של קבצים הפונקציה ()ח6סס מיועדת לפתיחת קוב: (66סטע %ת1 , סַתַהםת+* עהם0ס) תספקס ‏ 16 6וחשז ‏ 0 קריאה 1 כתיבה 3 שילוב קריאה + כתיבה הפונקציה ()ח6ק0 מחזירה ערך שלס, שהוא מספר הערוצ שנפתת עבור הקובצ. הפניות לקובצ יבוצעו דרך הערוץ הזה. היא מחזירה ערך 1- כאשר יש תקלה במהלך הפתיחה של הקובץ, כמו למשל כשהקובצ אינו קייס, או כשיש תקלה בדיסק. כדי לפתוח קוב חדש לכתיבה, יש ליצור אותו. פונקציית הספריה ()1+0060 מספקת שירות זה באופן אוטומטי, כשמנסיס לפתוח קוב שאינו קיים. הפונקציה ()ח6קס מתייחסת לקובץ קיים או לקובצ שנוצר תחילה על ידי הפונקציה (6810ז : ; (סתהת+* ע8ם0) 02686 16 פרק 16: קלט/פלט וקבצים 345 <סוחח+> הוא שס הקוב שברצוננו ליצור. הפונקציה מחזירה את מספר הערוצ שנפתח לקוב לצורך כתיבה. הערך 1- מסמל תקלה כלשהי. שיס לב/ [ הפעלת 670810 על קובץ קיים תגרום למחיקתו ופתיחת קובץ חדש, בעל 1 שם זהה, לכתיבה. הפונקציה (6!0560 מיועדת לסגירת קוב: ; (ם+ %6םת1) 01096 16 פונקציות לקריאה וכתיבה הפונקציות הבסיסיות לקריאה ולכתיבה הן (6800ז ו-()6פוזשו והגדרתן היא : ; (עת 606ת16פתט ,8* עהם0 ,ם+ 6ם1) 168עח 6םת1 ; (2ת 66ם16פט ,58* ע8ם0ס ,ם5 6ם1) 686₪ע 6ם1 <ח)> מספר הערוצ לקובצ. <פ> מספר הבתיס המבוקש לקריאה/כתיבה. <5> מצביע למאגר המסופק על ידי התוכנית. הערך המוחזר הוא מספר מטיפוס זחו, המציין את מספר התוויס (בתים) שהועברו מהקובץ למאגר שבתוכנית, או מהמאגר אל הקוב>. הפונקציה ()16806 קוראת 9 בתיס מהקוב אל המאגר 5. היא אינה מוסיפה ‏ 11א בסוף המאגר, מכיון שקיימים יישומיסם רבים בהםס המאגר אינו מוגדר כמחרוזת תוויס, אלא כמבנה או כמערך. מספר הבתים בפועל (ח) יהיה שווה ל-9, פרט למצב של "50 לפני תוס הקריאה, שבו יתקיים 5 > ח. ערך מוחזר 1- מסמל תקלה בקריאת הקובצ, אשר יכולה לחיגרס מתקלה מכנית או אלקטרונית, או כתוצאה מפנייה לערוצ שאינו קשור עס קוב כלשהו. פעולת הפונקציה ()6פווש הפוכה: כותבים מן המאגר אל הקובא. אס לא היתה תקלה בפעולת הפונקציה, היא תחזיר תמיד את הערך פ, המציין את מספר הבתיס שנכתבו. הגודל של הערך פ וגודל המאגר נתוניס לשיקול דעתו של המתכנת, ואינס מוגבליס. אזהדה? אין לקרוא לפונקציה 769000 עם מספר 8 שערכו גדול מגודל המאגר 8, כי דבר זה עלול לגרום לפגיעה בזיכרון שמעבר למאגר. הפונקציה אינה כותבת 011 בסוף המאגר, ולכן יש לשים לב לעובדה זו, אס רוצים להתייחס ל-5 כמחרוזת. צמד הפקודות הבא מטפל בבעיה זו: ;(כ ,8 ,ם+) 26806 = םת 2 = [ם]5 6 המדריך השלם לשפת 6 בהפעלת הפונקציה (0פפואו מומלצ גםס כן, שערכו של 5 יהיה קטן או שווה לגודל המאגר, כדי שלא לכתוב לקוב תוויס לא רצוייס. כדי לקרוא תו בודד מהקוב לתוך משתנה מסוג ז8ח6, יש לפעול כך: "םס ;(1 ,806 ,ת1) 26806 = ת דוגמה: נכתוב תוכנית 6.ץ600] (ץ600 - 85%=) הדומה ל-6.ץ6000, שתעתיק מקובצ אחד לאחר במהירות גבוהה יותר, באמצעות שימוש בפונקציות ללא מאגר. נגדיר עבור הפונקציות מאגר בגודל מקסימלי. פתרון: ו קובץ תקליטור: 0201605.6 *****/ <ת.5%610> 61006ת1א <ת.10> 61006ת1א <ת.5%60110> 61066ם1+ (סנסט) מ1את 1סט ָ 1 1 06 כ שוב 20000 || 1605 5 ; [20] 6ת8ם+% ,[20] 6ת8ת++ מַהַתס ; ("-ץ000 60 פתהת 1116 ע6סםתם")65תנ1עס ; (סמַהת+5 ,"%5")%ת508 = ₪ 51.15 קמ 5 הפי רסב 6 ל( 67 (1- == ((6,0ת8ת1+)םתססס = 1116ַת120)) 15 | (( ו כ 5 ₪ ור 50266 300 שן ו )שר טוט ובטוסן 2 0 5 ] (1- == ((%5+1א6,08ת8ת0268%)%1 = 5011186)) 15 ן ; (6ת8ת51 ,"םת%5 6820666 026866 60 6םת1ץע6 מסעעט")61תנעס ; (6%16)0 ] (0< ((%116,500%,32000ת0ס?+)2680=ם)) 16נ1תשט ה (0==ם) 1% ; ("ת 6ת1שקסס 6מסכע")61תנ1נעס 5 ו ; (5116ת0ע5) 01086 ((ב 6‏ פ6ו) 65 פרק 16: קלט/פלט וקבצים 347 הסבר: ()6%1% הינה פונקציית ספריה מיוחדת, שתפקידה לסיים תוכנית בצורה מסודרת: לסגור את הקבצים הפתוחים ולהודיע על סיום, או על מצב שגיאה, בהתאס לצורך. המהדר קורא לפונקציה וו לאחר סיוס הפונקציה הראשית ()חופחח. גישה אקראית לקובץ ללא מאגר הפונקציה ()15666 הפועלת על קוב פתוח ללא מאגר, מאפשרת להציב את המצביע לקוב על בית מסויס. ; (ם101עס %6ם1 ,05556% 8ם10 ,ת5 6ם1) 1866% 8םס1 <ח)> מספר הערוצ לקובצ. 6% מספר הבתים לדילוג. > חופוזזס> הנקודה ממנה נמדד ההיסט: <‏ "0" מתחילת הקוב. 'י1יי מהנקודה הנוכחית. 'י2יי מסוף הקוב. שיס לב/ / 6% מוגדרת בצורה זהה 506400-2, למעט העובדה שהערך הראשון / | שלה הוא מספר ערוץ לקובץ. הפעולה של 506%0/ מהירה יותר לעומת 0 כיון שאינה מחדשת תוכן מאגר בעקבות פעולת הדילוג. קבצים ללא מאגר ומסוף המחשב בעת עיבוד של קוב כלשהו, אין לערב בין פונקציות קלט/פלט הפועלות עס מאגר לבין הפונקציות הפועלות ללא מאגר. למגבלה זו יש יוצא דופן אחד והוא מסוף המחשב ((50ח60). הזכרנו קודס, שהמסוף הוא קוב לכל דבר, וכל הפעלה של תוכנית 6 מלווה בפתיחת שלושה קבציס המוצבעים על ידי חו5%0, 55000 ו-5000677. במקביל למצביעיס אלה ניתן לפנות לקבציס באמצעות הערוצים 0, 1, ו-2 בהתאמה. לקבציס שיפתחו באופן מפורש על ידי התוכנית יוקצו הערוציס ממספר 3 ומעלה. בעת השימוש במסוף אפשר להשתמש בשתי שיטות הגישה, ואך ורק במקרה זה. נכתוב תוכנית בשס 66000.6 (הד, 0ח56), אשר תקרין על המסך כל תו שנקיש במקלדת, עד לקבלת התו 6 (03 45611). התו 96 מתקבל על ידי החזקת מקש |0ס לחוצ - והקשת התו 6. 8 המדריך השלם לשפת 6 <ת.5%810> 4161006 <ם.10> 61066םת1א (ס1נסט) מנאת 1ס ו 5 (03 =! ((ם0=506%0)5%01)) 16ג1גתט ופ 60) ו תוכנית וו מקבילה לתוכנית הבאה: / א*%%א קובץ תקליטור: 60₪01606.6 ה <ת.5%8₪10> 61066ת1? <ם.10> 66ט10סת1א (ס1נסט) מ1את 1סע ן ב (3 =! 6 ,(2686)0,60,1) 16ותט ה הסבר: א. שיס לב שתנאי לולאת 6!וח מכיל ביטוי הכולל פסיק, ולכן תתבצע תחילה קריאת המשתנה 6 באמצעות הפונקציה (6800ז. ב. השוואת המשתנה 6 ל-03 קובעת את המשך ביצוע הלולאה. ניתוב מחודש של קלט/פלט סטנדרטי (חסו)66ז001) הערוציס 0, 1 ו-2 והמצביעיס חו500, 5%000% ו-ז5%06 מאפשריס להתייחס למסוף כקובץ, כדי לקרוא ממנו תוויס (מקלדת) ולכתוב עליו תוויס (מסך). מערכות ההפעלה התומכות בשפת 6, כדוגמת אא או 05ס-15, מאפשרות לנתב ערוציס אלה בזמן הפעלת התוכנית לקבצים ממשייס הנמצאים בדיסק. כאשר מפעילים את התוכנית, על ידי הקלדת שמה, היא גורמת לכך שהערוציס הסטנדרטייס לקלט ופלט יקושרו למקלדת ולמסך בהתאמה. פרק 16: קלט/פלט וקבצים 349 אס נכתוב בשורת ההפעלה 8!6ח1 > יקושר ערו 0 (מצביע חו500) לקוב 6!חו, במקוס למקלדת. בצורה דומה ניתן לפתוח קובץ פלט בדיסק על ידי כתיבת 6!ושטס <. העדה! אין צורך להדר את התוכנית פעם נוספת, כי מערכת ההפעלה מכוונת כראוי את הערוצים באופן חיצוני. ערוץ השגיאות זז5%06 מיועד לניתוב של פלט הודעות השגיאה אל המסך. אס נבצע ניתוב מחודש לקוב הפלט 50000%, נמשיך עדיין לקבל הודעות אלו על המסך. רק קריאה מפורשת באמצעות הפקודה 6!ושטס*< תנתב את שני ערוצי הפלט לקובצ 6. אין דרך לנתב את 50000 ו-1ו5%06 לשני קבצים שונים. דוגמה לשימוש בניתוב מחדש, ניתן להציג באמצעות 6600.6. הפעלת התוכנית מתבצעת על ידי הקשת 0ח660. כל תו שנקיש יופיע על המסך עד הקשת 6* כעת ננתב מחדש את הפלט: 11.5% < 0ם60 כעת, כל תו שנקיש ייכתב לקוב 666.04. ניתוב מחדש של הקלט מאפשר להציג פתרון נוסף של התוכנית 6קש המשמשת להדפסת תוכן קוב: %%%.116תס > 0ם60 הקלט ינותב מהקוב> ויוצג על המסך. יש להכין מראש את התו 6* בסוף הקובצ % כדי שהתוכנית תסתיים. ניתוב משולב של קלט/פלט מאפשר להשיג בעזרת 660, פתרון שונה לתוכנית 600 להעתקת קוב>: %% << ₪א1116.0ת1 > סםת60 הקלט מקובץ 10866.0 ייכתב לקובצ 06.0% שמוצבע על ידי הערוץ 50000%. גם כאן חשוב להכין את התו 6 בקוב> 8!6.04ח1. ניתוב קלט/פלט שימושי מאוד כאשר כותבים תוכניות עזר, והוא מאפשר לנצלן בגמישות מרבית. 0 המדריך השלם לשפת 6 מבנה קובץ 005 לאחר שלמדנו את נושא מבניס ועקרונות הטיפול בקבצים, נלמד על מבנה קובא כפי שמערכת 05 מתייחסת אליו. 8% 0₪גע5% ן שמור עבור 05 ; [206802060]21 55 85ם0 תכונות הקובץ 2 15 שאתס זמן יצירת הקובץ תאריך יצירת הקובץ גודל הקובץ ;סנס 55 סשת1 62 55 כ סת1 7 55 שַם10 שם הקובץ ;[13]סתהת 55 85ם0 5616 +16:5 סיביות שניות2/ דקות 6 16:55 סיביות שעות יום חוד +66: תכונות קובץ שנה מ-1980 תיאור קבוע צזאספת תע אפפפזט תס אמץפצפ תע זממהז תס מתזת תע אסתת תע מוחזר: בהצלחה ערך 0. בכישלון ערך (1-). קריאה בלבד קובץ נסתר קובץ מערכת תווית ספריה ארכיב פרק 16: קלט/פלט וקבצים 351 בתוכנית הבאה נלמד כיצד ניתן להגיע למידע אודות קובץ, אשר נוצר במערכת 05. / אאא קובץ תקליטור: 11162688₪.6 א /+* הצג מידע אודות קובץ הנוצר ב- 05 */ <ת.56010> 610₪6םמ1 <ת.10םסס> 01066ם1 6 6 =6ו | 6 א( ₪ ₪ 0 ₪ 2 = ₪ 2 2 ₪ 2 (10סט) ת1נאת 1% ל 16 וו 1 2 קש חח 6660 > ובס שוב ל( 1565606 ; ("מםהצג אינפורמציה על הקובץ : 8%כ.ססא6ססטה%1)"8ת1עק /* חפש את הקובץ על הדיסק */ 8( ₪38 ו 0556 וטו 68 ) פופ סוס = |6 סו /* אם מצאנו */ ה ן /* חשב תאריך וזמן יצירת הקובץ על פי נוסחאות קבועות */ /* חשב חודש */ 090 ₪ (5 5 68 ₪ 4וש) = הוה /* חשביום ‏ */ ₪ שששהם שרפה = ₪₪ /= הטוב פמשהק 79 ₪07 > (0578 ₪ (₪ << 686ש 85 )6 = שש /* חשב שעה ‏ */ ₪ (11 << פמנשה 9552ם) = ₪8 /* חשב דקה ‏ */ ₪ (5 5 5פקשה 5 -פ) = ווה /* חשב שניה */ 8( % (0%918 ₪ הצפח ₪9505) = 55 /* הדפס תוצאות במבנה דומה לפקודת | 61% ב- 05 */ ₪ 571% 6 פומווהו ד למס 085 כ ששה 00050 0602 0 2 (558 ו ₪ קש כ ₪60 ] ; ("מץ%6 שת8 56558קם")%1ת1עס ; () 9660 ; (0) םת2ו26% 2 המדריך השלם לשפת 6 תוצאות ריצת התוכנית: הצג אינפומציה על הקובץ : 606.08%6א606גט8 4 09-12-96 858 7לתם. סמאמסצטת צסא צם8 6858-כ תרגילים 1 כתוב תוכנית שתבנה קובצ סטודנטיס המכיל את הרשומות שלפניך: ממוצע מספר שעות מין מספר זהות שם 5 120 א 25200 עסאם 6תפסת 2 10 ש 2201 1 מסגוע 75 00 א 21 1סמעהס תהאסהתסץ 03 10 א 5 בתהם5 טאנסת 5 00 ש 4 תסע הצהת הגדרת הנתונים: מחרוזת של 30 תוויס. מספר ת.ז. : שלס מטיפוס פחסו. מין: תו בודד. מספר שעות: מספר שלם. ממוצע: מספר שלס. 2 כתוב תוכנית שתסרוק את הקוב שבשאלה 1 ותדפיס את כל הרשומות שממוצע הציוניס בהן גבוה מ-90. כתוב תוכנית שתסרוק את הקובצ שבשאלה 1. כאשר התוכנית תגיע לרשומה המכילה מספר שעות גבוה או שווה ל-100, היא תעדכן בקוב את מספר הזהות ל-0. א. ב. ג. ד. כתוב תוכנית שתבצע בעזרת פונקציות מתאימות את הפעולות הבאות: העתקת קוב לשני קבציס במקביל. הוספת קוב בהמשך של קובץ אחר. השוואת קבציס והדפסת ההבדלים ביניהס. חיפוש מחרוזצת כלשהי בקובצ. כתוב את התוכנית הזו פעמיים: בעזרת פונקציות עס מאגר ובעזרת פונקציות ללא מאגר. השווה בין ומני הביצוע של הפעולות השונות. פרק 16: קלט/פלט וקבצים 353 הנחיה/ עליך למדוד בעזרת שעון שמות או שעון עצר את זמני ההתחלה והסיוסם של התוכנית ולחשב את ההפרש בשני המקרים. שים לב שעליך לבחור למטרה זו קובץ גדול, אחרת לא תהיה משמעות למדידה שקך. 5 נתון קובצ המכיל מלל מוצפן לפי השיטה הבאה: +> הסימן לשינוי שיעור ההיסט הוא ''8", ולידו מספר דו-ספרתי המציין את השיעור 806). %> לדוגמה: 502 מציין ששיעור ההיסט ממקוס הציון ועד למקוס הציון הבא הוא 2 (4=2)). > התו הבא שייך למלל. > מספר שלם דו-ספרתי ח המציין את מכפלת ההיסט. > תו המלל הבא נמצא במרחק ח*:%860 מהתו האחרון. דוגמה לקובצ המצפין את המילה יי600₪*י: ₪1 5020610020 כתוב תוכנית שמתרגמת קוב המוצפן בשיטה זו, ומדפיסה את המלל המפוענח בקובץ אחר. השתמש בפונקציות 15608010 ו-()חוזס+ כדי לפתור את התרגיל. את הקוב המוצפן ניתן להכין באמצעות כל עורך-תמלילים. 5 , 7-9 ( , % משימות ר(-- 2 תרגיליס 51-48. 4 המדריך השלם לשפת 6 פסיקות ועבודה עם 0!05 כפי שלמדנו על מבנה המחשב (ראה נספח) המשימה הראשונה שעליה צריכות תוכניות ואס לפקת, היא הפעלת המחשב. בעת ההפעלה, מפעילות הפונקציות שב-₪0% תוכניות לבדיקת היחידות ההיקפיות, גורמות להפעלתן, טוענות ערכיס ראשונייס בטבלת הפסיקות. בדיקת תקינות הציוד ההיקפי נקראת ד05 650ד ]|56 חס זוסשוסם), ולאחר מכן מגיע תהליך האתחול טססם), שלאחריו עובר הפיקוח למערכת ההפעלה (05 או 595אוס0חו/). 5 ₪0 הוא חלק ב-₪0% שנמצא בשימוש כל זמן שהמחשב פועל, ותפקידו לתת שירותיס בסיסייס להפעלת המחשב ולבצע משימות שונות הקשורות ליחידות ההיקפיות. כלומר, 8105 נמצא בין החומרה לבין מערכת ההפעלה, ומעליו נמצאת התוכנית שלנו. 5 פועל בצורה דו-סיטרית: מצד אחד יש פסיקות (פזקטזוסזחו), שהן בקשות שירות שונות הנשלחות על ידי התוכנית שלנו, ומצד שני יוצר 8105 קשר עס התקני החומרה השוניס למשל, דיסק כדי לטפל בבקשתנו. כדי לקרוא לפסיקה של 805 עלינו לטעון את האוגריס אשר ביעיימ במידע הנדרש כדי לבצע את השירות. והו תהליך פשוט, המתבצע על ידי מספר פונקציות שבספריה ח.005. הנה כך נראה קטע בתוכנית למילוי משימה זו: 5 תסנגנתט ;א פסמתכתסא ‏ 6סגת5% | 60 הפ | 66 ל פנע תת צם 6סטת%פ | 17 8 ₪1 ₪ 656 ב תה 61 6 612 6 666 פוש ;ן פרק 17: פסיקות ועבודה עם 8105 355 0-5 0גות56 7 6% 59| 6 שו 650 תו 7 ,051860 ,01 ,81 סת1 66ת16פתט ;ן שיס לב/ האיגוד 8565 מכיל שני מבנים שכל אחד מהס מכיל את האוגרים של / המעבד. נוכל להבחין במבנה 65אמדט המכיל אוגרים בעלי 8 סיביות ובמבנה 565אכא0/ המכיל אוגריס בעלי 16 סיביות. הצבת ערכיס מתאימים באוגריס אלו והפעלת הפונקציה (6860חו יוצריס פסיקת תוכנה טסטזס לח 876 507). הפונקציה ()86+ח1 הפונקציה ()860ח! יוצרת ממשק פסיקות תוכנה המותאם למעבד 8086. תבנית הפונקציה 8 תמסנבנתט ,665ע2םת1* 65עת תסנתט ,0ססם1 6ם586)1ת3 6םת1 ; (162608וס* נקודת ציון/ לפני ביצוע פסיקת תוכנה, הפונקציה מעתיקה את תוכן מבנה האוגרים אל האוגריס עצמם. - אחרי ביצוע הפסיקה, הפונקציה מחזירה את הערך של האוגר אג. לצורך הדגמת כתיבת קוד היוצר פסיקה נבחר בפסיקת המסך ונערוך עמה היכרות קצרה. בטבלה הבאה נוכל להבחין בפסיקת המסך ח10 ובפונקציות הקשורות לפסיקה זו. שים לב! אין הבדל בין 108 לבין 10אס. זו פשוט דרך שונה לכתוב מספר הקסדצימלי. תוכנית 6 מבינה את 010 כמספר הקסדצימלי. 6 המדריך השלם לשפת 6 טבלה 171: פסיקת המסך 108₪ 5 סמו :100 דאז .05 לעכ 060ו/0זק 5617/1665 ס6סוע 6 01 5%ו! 8 15 פחושסווס+ סחד % |6אוק 65וחקבזס 680 00 6 60סוץ 56% 007 זזה 6 6וזצ 067 26 זספזט6 56% 017 6 ס6סוע 680 ח01 חסטופסק זס5זט6 56% 0211 6 56% 107 חסטופסק זס5זט6 680 ח03 זה ז0ל80הח6 117 חסכ 00%ו! 680 04 05 םסח |8ו5066 120 6 ץ0150!3 360/6 56!66% 057 0חו50 ססלחצו 13 קט אוססחוצו |ו0ז56 ח06 %ופ שופחססחו קוח /זחס? 60 | הס 147 חצש00 אוססחוצו |ו0ז56 ח07 זפ שופחססחו קפ /%חס? 6 | הס 147 636 680 ח08 (0|6ז6/חס 6ק) פחחזוהכ ץ0150!3 96% 157 36 /7ז8600הה6 6סוזאו ח09 6 6000 עְ3וספוכ 56%/ץזסוס חה1 6 6סוחעע 08 5 סוט ץזסט0 187 ס/6 360 זס|ס6 561666 חס0 6 0660 65076 /6ע58 167 % |סאוק 65וחק8ט ססוחעצו 06 טבלה 17.2: טבלת פונקציות לטיפול בסמן .5אחו|פ 85| זספזו6 ,6|סופוט הסח .(0065ו %א%6) 06ק5126/508 זס5זט6 56% 0174 ח01 = חה סטסחז (61507 0ח=20 ;0-117) 6חו] 508 = 67 (0-110) 6חו| 0ח6 = ]6 6 וח זספזו6 866 0ס 6חו| החסאספ 5%הכ 56% :שחו | .הסטופסק זספזט6 56% 027 020 = חה סטסחז (0-28560) 0806 ס6סוט = חם (0-28560) חוחט!60,אוסז = וס,חס 6 סח חסטופסק זספזט6 680 ח03 03 = חה סטסחז (0-28560) 0806 ספוט = חם זספזט6 +0 חהותט!0ס6,אוסז +ה6זוט6 = 1כ,חפ שטססטס זו +0 6חו| 60ח5%071,6 %ח6זזט6 = 6,61 מטבלאות אלו אנו למדיס שיש להתייחס לפסיקה עצמה, ולאוגריס המתאימים כדי להפעיל את פונקציית 8105 המתאימה. במסגרת התוכנית הבאה נלמד כיצד ליצור פסיקת תוכנה. פסיקה זו תחביא את הסמן על ידי פונקציית 8105 שעליה ניתן ללמוד מהטבלאות. פרק 17: פסיקות ועבודה עם 8105 | 357 / א א א קובץ תקליטור: 66%.6ם1 *****/ /* יצירת פסיקת תוכנה */ <ת.608> 66ט10סת1+צ+ ; (0010)ע502ע00 055 16סט ו וט 8 ₪ סי ₪ ל = ₪ 1 2 ₪ 2 /* הההההההההההההההההההההההההההההההההההההההההההההה7ה7---- ; (106סט) מ1את %ם1 ן 5 555 0 ( ; (0) מ6682: ] ו ₪ א 1 ₪ ₪ א שש 7 /* הההההההההההההההההההההההההההההההההההההההההההההה7-7---- ; (8502)0010ע002 055 ב1סט ָ ;פ5ט6תט 5סמת מסנמו הערך 1 באוגר פה מורה על התייחסות לגודל הסמן וצורתן* / /* ומתייחס לפונקציית 5105 היודעת להסתיר את הסמן. ;1 = הת8.ם.6098תט /*+ הערך 20א60 מורה על הסתרת הסמן*/ ₪ 9 עפשו ו (5 % כא] 6 ו /* הערך 7 מציין את סוף השורה */ ;7 = 601.ת.פטסתט /* הפעלת פסיקת מסך 0%10 (108) */ ; (603605 ,602609 ,10א686)0ם1 הטבלה הבאה מפרטת את מערך הפסיקות ושירותי 8105 |זס₪. במסגרת ספר זה לא נפרט את הפונקציות המוכללות בכל פסיקה ופסיקה, כי קצרה היריעה לכך. 8 המדריך השלם לשפת 6 טבלה 17.3: טבלת מערך הפסיקות ושידותי 8105 אסא 5 401-8105 30 66קט סח[ 5זססחוסק 5זק סססו/ 10 דאז 5הק 56%66וכ 16 דאז 65 05וחק8ז6 1%7 דאז 0 אפום 13 דאז 0 זזסק |568 147 דאז 5% 6זהח 41 דאז 1% סח 467 דאז 0 זסשחחחזק 17 דאז 5זה8ח6 אוחקהזף ה6ם 437 דאז סה זסססם 197 דאז הזבו זספט 487 דאז %חו ווח 605 50 דאז %חז סח 567 160 דאז טיפ/ וחפ3 מציין למהדר 6 שלפניו כי מדובר בפקודת אסמבלר. 5/5 5 סססוצ 1070 דאז 5% %חסותקוטסם 117 דאז ץזסוח16! 0580!6 127 דאז 6 +הוסקא68זם 037 דאז צוסו1ופצס 04 דאז 5 דג 15 דאז 0 סזה8ססץ6א 167 דאז (765067/60) 07 דאז 6 ,187 דא 0זסטץ6א 09 דאז 0 סחוד 180 דא אהסזם 0זה0סץ6א 17 דאז סחו זשסת) 0% דאז 5 200-211 דאז טס הז סק 5 6פטס 33 דאז חקא 677 דאן ץזסוח6 ו +חז פקודת ביצוע של פסיקה באסמבלר. 5 פסיקת הדפסת מסך (ח66ז560 סחוזכ). זז 0 עס חסופוצוס 007 דאז 8!6-500חו5 01 דאז 6 5הו-חסא 027 דאז ח50766 זחוזק 0574 דאז (76507/60) ה06 דאז זסחוד 08 דאז 03-00 דאז (פסחו זצוסח) 6 06 דאז מיתן להפעיל פסיקה על ידי פקודת האסמבלר : 6חו. נניח שאנו רוצים להפעיל פסיקה 57 (ח66ז50 זהחחט). התוכנית הבאה תבצע זאת : (10סט) מ1את 18ס | 5 סת1 תפה פרק 17: פסיקות ועבודה עם 8105 | 359 הספריה ח.5סו בספריה .8105 נמצא מספר פונקציות הפועלות ברמה נמוכה ופונות ישירות לפונקציות שנמצאות ב- 8105 |סף. פונקציות אלו מטפלות בעזרת פסיקות בתקשורת טורית, הדפסה, עבודה בדיסק, ועבודה במקלדת. ל ' ₪ -4₪ סדרת פונקציות אלו אינן שייכות לתקן 4//51. נקודת ציון/ הפונקציה ע5>66סום מטפלת ישירות בממשק המקלדת. תבנית הפונקציה: ; (סתס %6ם1) צ105%6מ %6ם1 הפונקציה מחזירה את הערך אשר הוקלד במקלדת. על הפרמטר 66 ניתן ללמוד מהטבלה הבאה. טבלה 17.4 : הפרמטר הזוס בס | תיאור ערך הקשה %פ15םת5 6ם16ת 1% ₪=65 0-1 שות מס 206% 5602011 תס 206% חטא מס 6808 תס 6ע6פתך עבודה עם ה-5% 51 סטטוס 1601% הקשה 1 2656 080100 8 1% 616 80200א0 9 1 6מם 318‏ 0400א0% 10 % ₪ם218 0800א0 11 6% 502011 1000א0 12 5% תג 20000 13 8% 0808 4000א0 14 8צ 5‏ 8000א0% 15 הפונקציה /910566 ממתינה לבקשת מקלדת. 0 המדריך השלם לשפת 6 כיצד אם כך נוכל לקלוט הקשת מקש במקלדת, ולבצע פעילות מונחית מקשים! באמצעות התוכנית הבאה נלמד כיצד לקלוט מקש אחד מהמקלדת בעזרת הפונקציה (00)ץ0105%6. / ה קובץ תקליטור: 7.6ץ10585%6 *****/ /* קליטת מקשים דרך ה- 108 */ <ת.108כ> 010₪6םמ1 <ת.585%010> 01066ם1 ב ו /* הגדרת ערכי מקשים */ 0 סמ 210 6מם3651 0 6565 6ם4611 0 ₪850 6ם0611 ; (16סט)%08 פנסט 2 1 ש) 5% פוש סופב ל המ חק ל רהל ה תוא שו ה ה ב רואה ורויה או הצרש ה 0 הל 8 וה שו ו ו / 2 (ס1סט) מנ1את 1ס7 | ; () סא ] ו 8 ו ₪ ₪ ץש שיפ 75 / * וו וו וו וו וו ורוו ורוו טור (10סט)00א טנסט ָ ;ץ6א 6ם1 (₪80 =! ( ()ץ%86 865 = שָ66 )) 16נבט (צ%6) 1602ש5 ןוניי )) פסוסוב פופ 3 ₪ה]בת כ₪56 ;2% ; ("מ55ב")5פמוחס : - ₪096 0886 ;2% / פרק 17: פסיקות ועבודה עם 8105 361 )אס (₪80 == צש6א) 15 == (7)1ץ0105%6) 116נתט ] (10סט)ץ6א% 66 6ת1 זָ %7 ,66 סם1 /* המתנה להקשת מקש */ ; (0) ץ0108%6 = צָ6א% ; (80ם == צץ86) || (26₪56 == צש6א8) || (6ם10ת == צ6א) = 0% 6 ו כ 000 5% 5 (( 16 ) סנו ] ; (16)!0%נ1תשט ; (ץ6א) מת2ו6%ע ] לאחר שלמדנו לקלוט מקש מהמקלדת, נתקלנו בבעיה קטנה: מהס הקודים של המקשים! גס נבדוק כיצד נוכל להשתמש בצירופי מקשים, כמו 1=+601 למשל. תוכנית הדוגמה הבאה תלמד אותנו כיצד לקבל את קודי המקשיס במקלדת, וגם צירופיס שוניס של מקשי פונקציה. מומלצ להעתיק קודים אלה על נייר ולאחר מכן להעבירס לקוב הכרזות מסוים, נניח בשס ח.5ץ6א, כדי שלא נבזבז את זמננו בייגילוי מחדשיי של הקודים השונים. / שיס לב/ לשליפת הקודים של צירופים מיוחדים, נעזרנו בטבלת הפרמטר 600 ) שבתחילת פרק זה. ו קובץ תקליטור: 06600866.6 *****/ /* שליפת הקודים של צירופי כל המקשים */ <ת.108כ> 010₪6םמ1 <ת.8%6010> 01066ם1 <ת. 06ץ0%6> 01066ם1 1 108 6מם0611 2 צתםן 6ם0611 0-04 תס 6ת06+1 08 תת 6מ0611 2 המדריך השלם לשפת 6 = / 5 / 20/ א 2 ₪ ₪ 0 ₪ ₪ = ₪ 2 2 ₪ (16סט) מ1את %ם1 516087נ1ססת ,7ץ6א% סםת1 הפונקציה מחזירה 0 כל עוד לא הוקלד מקש */ (0 == (7)1ץ2105%6) 16נתט הפונקציה מחזירה את המקש שהוקלד */ ; (0) ץצ0105%6 = צ%6 הפונקציה קובעת את הצירופים המיוחדים */ ; (2) ץ0108%6 = 8ש1116%בסת (61110628סת) 11 בודקים איזה צרוף מיוחד דלוק אם בכלל */ ל 67 ו 116 65 פב ב סוה)) בוב 7 פונס | ( 08077 ₪ 26 פאה 0 ה ק ( ו ו פס (17ת 8 1+10%8בסת) +1 0 הצגת התווים/הקודים המתאימים */ ((9ע9א0 6 צְ6א%)תטם1581) 11 65 ו 6 לי חן 6 ל( 00 וס תעגו6%ץ ָ פרק 17: פסיקות ועבודה עם 8105 | 363 משימות בפרק גה נתרגל מספר רב של נושאים, אשר הוצגו במהלך הלימוד בפרקי הספר הקודמים. פרק 4 1 קובץ תקליטור: 0401.6זא6 העצרת של מספר כלשהו ח מחושבת על פי הנוסחה הבאה: 5% 3% 2 1 ות משימה: כתוב תוכנית הקולטת את ח, מחשבת ומדפיסה את העצרת שלו. שיס לב/ א. 1= 0 ב. עצרת של מספר שלילי אינה חוקית. ג. | המחשב אינו מסוגל לחשב עצרת של מספריס מעל 170/ 2. קובץ תקליטור: 0402.0זא6 מתמטיקאי איטלקי בשם פיבונציי, המציא וחקר סדרת מספרים הנקראת על שמו: סדרת פיבונצ'י. יש לה תכונות מעניינות, אשר לא נפרט כאן. הסדרה מורכבת כדלהלן: הערך של שני האיבריס הראשוניס הוא 1, וכל אחד משאר האיבריס הוא סכוס של שני האיבריס הקודמים לו. דוגמה למספריס הראשוניס בסדרה זו: פרק 18: משימות | 365 משימה: כתוב תוכנית הקולטת את מספר האיבריס מתוך סדרת פיבונצ'יי, שיש לחשב ולהדפיס. 3 קובץ תקליטור: 0403.0זא6 ברצוננו להפעיל לולאות להדפסת צורות גיאומטריות שונות. לדוגמה, כדי להדפיס קו אופקי ניצור לולאה המדפיסה את התווים ''*יי זה אחר זה, ונקבל: א. ב. ג. 3 פרק 5 א א א א א א א א % א א * א * א % א א משימה: כתוב תוכנית המדפיסה צורות גיאומטריות הבנויות מתוול "*": ישר אופקי. ישר אנכי. מלבן מלא. משולש ישר-זווית. משולש שווה-שוקייס. מעגל מלא (שיס לב לכך שהמסך אינו סימטרי ב-א וב-ץ, ולכן צריך לתקן עיוות הגורס למעגל להיראות כאליפסה). 4. קובץ תקליטור: 0501.6זא6 הערך חא כידוע, הוא מספר הפעמים בו נכנס קוטר של מעגל בהיקפו. בתרגיל זה נכתוב תוכנית לחישוב מקורב של הערך ת. השיטה שנציג, מתבססת על שיקוליס סטטיסטייס. 6 המדריך השלם לשפת 6 קייס ריבוע במידות 1*1 שבתוכו חסוס מעגל בעל רדיוס 2/1 (ראה שרטוט). אנו ייזורקיסיי לתוך הריבוע '"'אבניס קטנות'"י מספר רב של פעמים. נבדוק עתה כמה מהן נופלות בתוך שטח המעגל וכמה מחוצ לו, בשולייסם שבין היקף המעגל להיקף הריבוע. אס נבצע מספיק זריקות, ותוך הנחה שפיזורן על פני שטח הריבוע אחיד, אפשר להסיק, שהיחס בין מספר ה''אבניס'י הכללי שנזרק לבין מספר הייאבנים'י שנפלו בשטח המעגל - יהיה והה ליחס שבין שטח המעגל לבין שטח הריבוע. כלומר, ל > 2 1 / ה + * הח שטח המעגל מספר אבנים שנפלו במעגל * ה = - - - 1 1*1 שטח הריבוע מספר אבנים כללי ומכאן, מספר אבנים שנפלו במעגל מספר אבנים כללי * 4 = תא תוכנית המחשב שנכתוב צריכה לבצע סימולציה של ייזריקת אבניסיי לתוך הריבוע ולספור כמה מהן נפלו בתחוס שטח המעגל. נשתמש לשם כך בפונקציה לייצור מספריםס אקראיים, בשס (00ח8ז, שנמצאת בספריה ח.0ו!5%0. קריאה לפונקציה זו פעמיים עבור כל וריקה, מאפשרת לקבל את ערך הנקודה (ץ, א), המבטא את המקוס של נפילת 'יהאבן שזרקנו'י. מהאמור לעיל ניתן לסכם, ש'יוריקהיי פירושה חישוב נקודת נפילה (ץ, א) אקראית באמצעות הפונקציה (00ח8ז ונירמול התוצאות, כך שנקבל 1 > ץ, 06%. מכיון שמרכז המעגל נמצא בקואורדינטות (0.5, 0.5), ניתן לחשב על פי נוסחת פיתגורס את מרחק נפילת הייאבן'' מהמרכז (ראה שרטוט). נקל לראות שאס ספ קטן, או שווה לרדיוס המעגל (2/1), אזי הייאבןי נופלת בתוך שטח המעגל. משימה: כתוב תוכנית הקולטת את מספר הוזריקות הרצוי ומחשבת בשיטה זו את ערכו המקורב של אח. שיס לב/ בזמן הרצת התוכנית - ככל שמספר הזריקות רב יותר - כן תהיה התוצאה קרובה יותר לערך הנכון. פרק 18: משימות | 367 כדי להשתמש בפונקציה (00ח8ז, יש לרשוס בתחילת התוכנית את ההוראה הבאה: <ת.מ5%0110> 66ט610מ1+ לאחר מכן, ניתן לכתוב ()1800 = <משתנה> כדי לקבל מספר אקראי. 5. קובץ תקליטור: 0502.6זא6 בתרגיל הקודס חישבנו את ערכו המקורב של הערך ₪ באמצעים סטטיסטיים. בתרגיל זה נערוך חישוב מדויק יותר בטכניקה מתמטית הנקראת ייפרישת טור לייבניציי (על שס המתמטיקאי שהמציא שיטה זו). לא נפרט כאן כיצד ולמה פיתוח טור לייבניץ נותן ערך מדויק יותר של ח, אלא נסתפק בהצגת הטכניקה, כדי שניתן יהיה להשתמש בה לצורך החישוב. טור לייבני: כלומר, ערכו של ו מתקבל על ידי הסיכוס ההופכי של המספריס הטבעיים האי-זוגיים, תוך חילוף הסימן מחיובי (+) לשלילי (-) עבור כל איבר בטור. כדי לקבל ערך מדויק של יש לסכם את האיבריס עד נקודה מסוימת ולכפול ב-4. ככל שנסכם יותר איברים - כך תתקבל תוצאה טובה יותר. קיימת הוכחה מתמטית לכך שהשגיאה בתוצאה תהיה קטנה מהאיבר הבא, לאחר האיבר האחרון שחישבנו. כלומר, אס נסכס עד לאיבר החמישי שערכו 9/1, אזי השגיאה תהיה קטנה מהאיבר השישי, שערכו 11/1. משימה: כתוב תוכנית הקולטת את מספר האיברים שיש לסכס מתוך טור לייבניץ ומחשבת את ערכו של ואת ערך השגיאה המקסימלית. פרק 6 6. קובץ תקליטור: 0601.6זא6 נתוו מערך של שלמיס טחו) המכיל מספריס בסדר כלשהו, ונרשוס את גודלו בקבוע 6%. נמייו את הערכיס שבמערך בסדר עולה, מהקטן לגדול בשיטת מיון בועות. בתחילה, המערך הינו בלתי ממוין. נסרוק אותו מלמטה למעלה, כלומר מהאיבר האחרון, שהאינדקס שלו הוא 1-4% כלפי איבר 0 (הראשון). בכל פעס נשווה שני ערכים צמודים, ואס הס בלתי ממוינים - נחליף ביניהם, ונמשיך בסריקה כלפי האיבר הראשון. 8 המדריך השלם לשפת 6 סריקה זו גרמה לייהצפהיי של הערך הקטן ביותר עד לאינדקס 0, ולכן המערך נשאר במצב בלתי ממוין החל מאינדקס 1 (האיבר השני) עד לסופו. נחוור על פעולת הסריקה שוב - מאינדקס 1-1%, אבל הפעם נמשיך רק עד אינדקס 1 (ולא 0). לאחר פעולה וו האיברים 0 ו-1 יחיו ממוינים. עלינו לתזור על הפעולה שוב - מסוף המערך ועד לאינדקס 2. בכל סריקה אנו "מציפיסיי את הערך הקטן ביותר מבין האיבריס הנותריס ושומריס ציון של האיבר האחרון הממוין. כאשר ציון זה יגיע לאיבר האחרון במערך (אינדקס 1-1%) - יהיה כל המערך ממוין כראוי. פעולת הייהצפה'יי של הערכים הקטניס מזכירה בועות עולות במים, ומכאן נגזר שמה של השיטה. משימה: . ו כתוב תוכנית, שבה מוגדר הקבוע אגוא. התוכנית קולטת אגא ,ו ערכים לתוך מערך שלמים בסדר כלשהו, ממיינת את המערך בשיטת הבועות, ומדפיסה את המערך הממוין. 7 קובץ תקליטור: אין ראה הסבר של שיטת מיון-בועות שבתרגיל הקודס. רו 7, 2 0 ( משימה: כתוב תוכנית דומה לתוכנית שבתרגיל הקודס. בתוכנית זו יבוצע ו / המיון בשיטה הפוכה: סריקות חוזרות ונשנות של מערך השלמים, תוך כדי ייהשקעתיי הערכיס הגדולים כלפי מטה, אל עבר האיבר האחרון. שיס לב/ | סדר הסריקה צריך להיות הפוך : מאינדקס 0 כלפי אינדקס 1-04%. 8 קובץ תקליטור: 0602.0זא6 בתרגיל זה נציג שיטת מיון המשלבת את טכניקת יימיון-בועות'' בטכניקת 'יהשקעת הכבדיםי. שיטה וו יעילה יותר משתי קודמותיה ונקראת יימיון-הלוך-ושוביי. נשתמש בה כדי להציג מיון של מערך בסדר עולה. סורקיס פעס אחת את מערך השלמים מלמעלה (ראש המערך) כלפי מטה (סוף המערך). בכל פעס שמגלים איבר לא מסודר מבצעיס החלפה, ומיד לאחריה סורקיס מנקודת ההחלפה כלפי אינדקס 0 בשיטת מיון-בועות. לאחר מכן, חוזריס לנקודה בה בוצעה ההחלפה וממשיכיס בסריקה כלפי מטה. בשיטה זו שומריס את המערך ממוין עד לנקודה בה מגיעיס. לכן, כשנסייס את הסריקה יהיה המערך כולו ממוין כפי שנדרש. פרק 18: משימות | 369 משימה: כתוב תוכנית, אשר קולטת ערכים בלתי ממויניס למערך שלמים, מבצעת מיון-הלוך-ושוב ומדפיסה את המערך הממוין. 9. קובץ תקליטור: אין משימה: כתוב תוכנית המבצעת מיון בסדר יורד של מערך שלמיסם בשיטת מיון-בועות: סדר הערכיס יהיה מהגדול לקטן. שיס לב! כדי לבצע מיון בשיטה זו, מתייחסים לבועות כאילו הן שוקעות ולא צפות. משימה זו תוכל למלא על ידי ביצוע שינוייס קליס בתוכנית שלתרגיל 6. 0. קובץ תקליטור: 0603.0זא6 תרגיל זה הינו משחק סימולציה של התפתחות אוכלוסיית יייצוריםיי, אשר נקרא 'ימשחק התיים'י (16 | +06 6וח8 6ח17). מחקרים רבים בביולוגיה מנצלים שיטות סימולציה כאלו לבדיקת תיאוריות שונות. המשחק מוגדר כך: קייס מערך תווים (זהּה6) דו-מימדי, המתאר תחוס מחיה של יצורים. כל איבר במערך נקרא תא, והוא יכול להיות מאוכלס ביצור או להיות ריק. המשחק מתחיל בהגדרת מצב ראשוני במרחב המחיה כלומר, מי מהתאים אכן מאוכלס. התוכנית מחשבת כיצד ייראה תחוס המחיה בדורות הבאים, על פי מספר חוקיס: א. בתא מאוכלס היצור ימות מצפיפות, אס מספר שכניו גדול מ-3, או שהוא ימות מצער ושעמוס אס מספר שכניו פחות מ-2. ב בתא ריק ייוולד יצור חדש, אס מספר השכניס של התא הריק שווה בדיוק ל-2. ניתן לשנות חוקיסם אלה ולהוסיף חוקיס אחריס, בהתאס לרצונך. לדוגמה, התוכנית שבתקליטור מכילה מספר חוקים הנוגעים לפריצת מגיפה בקרב היצוריס אס מספרס הכולל עולה על 200. הגדרת השכניס של תא: 0 המדריך השלם לשפת 6 נסמן בכוכבית (יי*יי) תא המכיל יצור חי, ותא ריק נסמן בתו רווח (י '). שים לב לנקודות הבאות!/ כאשר התוכנית מחשבת דור חדש, יש צורך לתחזק שני מערכיםם: אחד מיועד לדור הקודם ואחד לדור החדש, כדי שתוצאות הדור החדש לא יייקלקלויי את היימצביי של הדור הקודם. בסיום חישוב הדור החדש, יש להעתיק את המערך אל מערך הדור הקודם. אס מצב האכלוס הראשון הימו סימטרי, סביר שלפחות 20 הדורות הראשונים *וצגו בתמונות סימטריות מרהיבות עין (דוגמה מצורפת). משימה: כתוב תוכנית הקולטת את מצב האכלוס של הדור הראשון, מבצעת סימולציה של משחק החיים ומציגה את תחוס המחיה של כל דור חדש. ניתן לשכלל ולהוסיף חוקיס כדי לבחון את השפעתם, ולאפשר למשתמש להקיש בכל פעס על כמה דורות לדלג כדי להציג את תמונת האכלוס. :5 :11 8 ת8%10 066 4: 895ת016120 1: ת628%10ת00 * א * .אא א א *צ*צ אא אאא צצאאא *צ* ** אאא אא +( * *( |* *** *צ*צ א*א אאא **א* צא*א*א* אאאא* *** *א* רא< * * רא א** *** *** 7: 8ת016126 9: מ628%10ת00 * * * * צצ** * * (אא** * - א א * * * >* * * * * *י< * *א*אצ*א**** אאאאא*** א*צ*א* א*צ*א* **א* *** * **א* ** ** * (* * * * * * * *> * *> * *> * > * *> *<* * ** כ * ** ** *** ** ** * * * * * * *אר*א* *אר*א * **א* * *א** *א** *> * * פרק 18: משימות | 371 1. קובץ תקליטור: 0604.6זא6 לעיתים יש צורך במהלך התוכנית לחפש איבר מסויס במערך, כדי לדעת אס הוא קיים או אינו קייס, ואם הוא קיים - היכן הוא נמצא במערך. כאשר מערך הנתוניס ממוין, על פי סדר עולה או יורד, ניתן לבצע חיפוש כזה בצורה יעילה ביותר בטכניקה הנקראת ייחיפוש בינארליי. החיפוש הבינארי חוסך את הצורך לסרוק את המערך מתחילתו עד למציאת הערך (באס הוא קיים), או עד סופו (באם האיבר איננו קיים). נוהל החיפוש הבינארי: > תחילה בודקים את האיבר האמצעי במערך (ולכן צריך לדעת מראש את מספר האיברים במערך). כאן ייתכנו שלושה מקרים: א. זהו האיבר שמתחפשים - במקרה זה סיימנו. ב. | האיבר שמחפשים גדול בערכו מאיבר זה. ג. = האיבר שמתחפשיס קטן בערכו מאיבר זה. במקרה ב' נסמן את אמצע המערך (האינדקס של האיבר שבדקנו) כסוף תת-מערך. במקרה ג' נסמן את אמצע המערך כתחילת תת-מערך. > נחזור לשלב הבדיקה של אמצע תת-המערך המתקבל ושוב נבצע פעולת בדיקה וניתוח של שלושת המקריס האפשריים. באופן כּה, בכל שלב נקבל את האיבר הרצוי, או שנחלק את תת-המערך לחצי, ונחזור על הפעולה. כאשר גודל תת-המערך הנותר יהיה 1, נוכל לדעת בוודאות אס האיבר נמצא בו, או לא. מספר הבדיקות המקסימלי שנצטרך לבצע עבור מערך בגודל 11% איברים, יחיה: א/ וז כְפָס|. והו המספר המקסימלי של החלוקות לחצי שניתן לבצע. את מספר הבדיקות המקסימלי נעשה, כאשר האיבר הרצוי הינו האיבר האחרון שנבדק, או כאשר האיבר הרצוי אינו נמצא במערך. משימה: השתמש באחת התוכניות לקליטה ומיון של מערך שלמיס לצורך הכנת מערך ממוין. הוסף קטע תוכנית הקולט מהמשתמש מספר שלס ומבצע חיפוש בינארי במערך הממוין. התוכנית תקבע אס האיבר קיים, או שאינו נמצא במערך. אס הוא נמצא, היא תדפיס את האינדקס שלו. שים לב/ התוכנית צריכה לטפל במערך בעל מספר איברים זוגי או אי-זוגי. 2 המדריך השלם לשפת 6 2. קובץ תקליטור: אין משימה: .| כתוב את תוכנית החיפוש הבינארי (תרגיל 11) מחדש, כדי למצוא - איבר במערך הממוין בסדר יורד. לשס הכנת מערך כזה השתמש באחת מתוכניות המיון שכתבת למיון מערך שלמים בסדר יורד. פרק 11 3. קובץ תקליטור: 1101.6זא6 נתון מערך של מחרוזות. גודלו נתון על ידי הקבוע 18% ואורך מחרוזת מקסימלי - על ידי הקבוע א515. ברצוננו למיין את מערך המחרוזות על פי סדר מילוני (לקסיקוגראפי). כדי להשוות מחרוזות, קיימת בספריית <ח.0ח501> הפונקציה 00ח576, אשר דומה לפונקציה שהצגנו בפרק 11. פונקציה וו מקבלת שני מצביעים למחרוזות ומחזירה ערך השוואתי: המחרוזת הראשונה גדולה מהשנייה 0< המחרוזות והות 0 המחרוזצת הראשונה קטנה מהשנייה 0> נשתמש בטכניקת מיון-בועות למיון מערך המחרוזות. לביצוע החלפה בין שתי מחרוזות יש להסתייע בפונקצית הספריה (5%60/0, המעתיקה מחרוזת הנתונה על ידי המצביע השני ברשימת הארגומנטיס שלה, אל המחרוזת הנתונה על ידי המצביע הראשון ברשימה. ראה בהמשך הסבר של הפונקציות לביצוע פעולות אלו. משימה: כתוב תוכנית הקולטת מחרוזות בלתי ממוינות לתוך מערך מחרוזות, מבצעת מיון-בועות ומדפיסה את המערך הממוין. כדי להשתמש בפונקציות 50600 ו-0ק0ח5₪6 יש לכלול בתתילת התוכנית את ההוראה: <ת.6ת1ע56> 1066סת1+ אופו ההפעלה: > השוואה בין מחרוזת 5 למחרוזת ז: (ס* 82ם0 0086 ,58* פה8םת0 ספתסס) קת5620 > העתקת המחרוות 5 לתוך +: (8* 0282 ,5 ספםתסס* עם0) ץ56200 פרק 18: משימות | 373 4. קובץ תקליטור: אין משימה: כתוב תוכנית הדומה לתוכנית בתרגיל 13, כדי לבצע מיון לקסיקוגראפי יורד למערך מחרוזות. 5. קובץ תקליטור: 1102.6זא6 בשני התרגיליס הקודמיס התבקשת לבצע מיון-בועות של מערך מחרוזות. השיטה בה נקטנו לא היתה יעילה, כי כל פעולת החלפה בין מחרוזות גרמה למספר רב של הזזות נתוניס בזיכרון המחשב. כדי להתגבר על בעיה זו, משתמשים בדרך-כלל במיון-אינדקסים למיון מערכי מחרוזות. נציג את השיטה: מכינים מערך מקביל למערך המחרוזות, שבו יש בכל איבר מצביע לאחת המחרוזות שבמערך המחרוזות. מבצעיס מיון-בועות של מערך המצביעים. הקריטריון לביצוע ההחלפה נעשה על ידי הפעלת הפונקציה 566000 על המחרוזות עצמן, אולס ההחלפה, במידה שישנה כזו, מבוצעת במערך המצביעים בלבד. בדרך זו חוסכיס בהזזות של נתוניס ומתקבל מערך מצביעים שכל איבר בו מצביע בסדר ממוין לעבר המחרוזות. שיס לב/ המחרוזות עצמן נשארות במערך המחרוזות בסדר המקורי, אולם אס נדפיס אותן באמצעות מערך המצביעים, יתקבל סדר המיון כנדרש. משימה: כתוב תוכנית הקולטת מחרוזות לתוך מערך, ללא סדר מיון כלשהו. התוכנית תכין מערך מצביעיס ותמיין אותו לפי הסדר הלקסיקוגראפי של המחרוזות. לאחר מכן, התוכנית תדפיס את המחרוזות לפי סדר המיון שבמערך המצביעים. 6. קובץ תקליטור: 1103.6זא6 נתון מערך מחרוזות בעברית, אשר יש למיין אותו בשיטת מיון-אינדקסיס על פי סדר לקסיקוגראפי. כאן אנו נתקליס בבעיה טכנית הקשורה במיון תמליל בעברית: הפונקציה ()0ח56, בה אנו משתמשיס לצורך השוואות, פועלת על המחרוזות משמאל לימין כמקובל באנגלית ובשפות אחרות. בשפה העברית יש צורך לבצע השוואה לקסיקוגראפית מימין לשמאל. פתרון אחד לבעיה זו, הוא כתיבת פונקציה הנקראת ()זסזזווח, אשר מקבלת מצביע למחרוזת בעברית והופכת אותה לתמונת ראי. לאחר מכן, ניתן להפעיל עליה את (00הח56, ולאחר קבלת התוצאה - להפוך אותה חזרה למצב הראשוני באמצעות הפעלה נוספת של הפונקציה )זסזזווח. 4 המדריך השלם לשפת 6 משימה: כתוב תוכנית הקולטת מחרוזות בעברית לתוך מערך מחרוזות וממיינת אותו בשיטת מיון-אינדקסיס, באמצעות הפונקציה (0)זסזזווח. בעבודה ב-856 אנו מניחיס שהפעלת את התמיכה /5ח8םח של יבמ, או תוכנה אחרת המיועדת לתמיכה בעברית, כמו 8שח. 7. קובץ תקליטור: אין בתרגיל הקודס תרגלת מיון אינדקסיס של מחרוזות בעברית. פתרון נוסף לבעיית מיון מחרוזות בעברית הוא כתיבת מהדורה חדשה של הפונקציה 00וח506, כך שתפעל על מחרוזות בעברית. קרא לפונקציה זו ()קוח6ס6ח. | משימה: - ו ] כתוב את הפונקציה ()מוח606ח ובדוק אותה במצבים שונים. שלב את ()0וח806ח בתוכנית של תרגיל 11 למיון אינדקסיס של מחרוזות בלועזית. השתמש ב-(80600)0ח בכל מקוס בו השתמשת ב-5600. כעת תקבל תוכנית למיון אינדקסיס של מחרוזות בעברית! 8. קובץ תקליטור: 1104.6זא6 לפניך מספר נוסחאות ידועות לפיתוח בינוס: ₪ ₪ ₪ ש כ ם ₪ אס נסמן רק את המקדמים של האיברים, נקבל: 4 ב] 2 2] יי המשולש של מקדמי המשוואות קרוי משולש פסקל, על שס המתמטיקאי שחקר אותו. אחת התכונות המעניינות של משולש זה היא, שכל איבר בו מתקבל על ידי סיכוס של שני איבריס מהשורה הקודמת: האיבר שמעליו והאיבר הקודס לו. פרק 18: משימות | 375 ניתן לנצל תכונה וו לקבלת השורה הבאה במשולש פסקל: נחשב את השורה הבאת: הדרכה: 1 11 1 1 1-3 4% 0+1=1; 1+3=4; 3+3=6; 3+1=4; 1+1>1 =< נקבל: 14 6 1 ואכן % + 48 + 68222 + 4830 + 41 = 1 (ס+ב) | משימה: .ה ., כתוב תוכנית הקולטת את מספר השורות שרוציס לבנות במשולש 7 פסקל, מחשבת ומדפיסה את משולש פסקל עד השורה המבוקשת. התחל מהשורה הראשונה המכילה 1, כנקודת מוצא. השתמש בתכונה של משולש פסקל לחישוב כל שורה נוספת, כפי שהדגממו. מיתן לכתוב תוכנית זו בדרכים אחדות. התוכנית המצויה בתקליטור מתותכמת למדי, ומטרתה ללמד שימושיסם מתקדמים בשפת 6 ומספר טכניקות תכנות מעניינות. 9. קובץ תקליטור: אין יי יר, משימה: - 5 0 . | כתוב תוכנית להפקת משולש פסקל והדפסתו במבנה של משולש יי שווה-שוקייס, במקוס משולש ישר-זווית. לדוגמה: 1 ג 1-21 4 3 103 6 המדריך השלם לשפת 6 0. קובץ תקליטור: 1105.6א6 בתרגיל 18 הצגנו את הפיתוח הבינומי לנוסחה 8+9(3). ברצוננו להסתייע בתוכנית לחישוב המקדמיס של משולש פסקל, כדי לכתוב תוכנית המדפיסה את הפיתות הבינומי המלא עבור ערך ח נתון. לדוגמה: 3 + 38710"2 + 3*8720"%1 + 1*873 = 3(כ+ב) שים לב/ בכל איבר, סכום החזקות של 8 ו-8 הוא ח, כאשר האיבר הראשון הינו 8 וחזקת 8 פוחתת ב-1 בכל איבר. הנוסחה הכללית לפיתוח הבינוס היא : תם + ... + 807101 + 1מ1*0-ה8 + בה = ה(ס+ב) מ משימה: כתוב תוכנית הקולטת את הערך ח, מחשבת את השורה המתאימה ל-ח במשולש פסקל ושומרת את המקדמים במערך. באמצעות מערך וה התוכנית מדפיסה את הפיתוח הבינומי המתאים. 1. קובץ תקליטור: 1106.6זא6 משימה: כתוב תוכנית לחיפוש בינארי (ראה תרגיליס 10 ו-11) במערך של מחרוזות הממוין במיון אינדקסים. לשס הכנת מערך כוה השתמש בתוכנית שכתבת למיון אינדקסיס (ראה תרגיל 15). 2. קובץ תקליטור: 1107.6זא6 נגדיר פונקצית עזר לטיפול במחרוזות: ; (ת16 סת1 ,58% 6ףם1 ,פ* עַהַםת62)60פסגופ* מַַםס מחרוזת 8* עהתס אינדקס התחלה של תת-מחרוזת % 6ת1 אורך תת-מחרחת ם16 %ם1 מטרת הפונקציה להחזיר מתוך המחרוזת 5 תת-מחרוזת המתחילה בתו המצוי באינדקס 5% ואורכה חפ! תווים. הפונקציה צריכה לדעת לטפל במקרי קצה כמו למשל, כאשר 5% גדול מאורך המחרוזת 5, או כאשר תת-המחרוזת ארוכה מאשר המחרוזת 5. הפונקציה (5005₪0 תחזיר את התוצאה במחרוזת 5 עצמה (כלומר ניתן ''להרוס'י את 5 המקורית). מותר להשתמש בפונקציית הספריה (0ח50716, המחזירה אורך של מחרוזת. לדוגמה: "פמתס" <- (4 ,2 ,"6עמקסםת")ע56סטפ פרק 18: משימות | 377 משימה: כתוב את הפונקציה (500540 ושלב אותה בתוכנית ראשית ()חו8חח, הבודקת אס היא פועלת כראוי. 3. קובץ תקליטור: אין עיין שוב בפרק 11, בהסבר על הפונקציה 0/ץ51760, המעתיקה מחרוזת למחרוזת. בספריית <ח.8ח501> קיימת פונקציה 0ץ50%₪60 המעתיקה, בדומה ל-5060/0, את המחרוזת + למחרוזת 5. הפרמטר השלישי ח מציין שהיא תעתיק לכל היותר ח תווים. הגדרת הפונקציה: ;(תף 2186 ₪ם* 028% 8%6ם00 ,8* פַַַם0) צשְססםת562 | 99 | משימה: 3 | 0% - כתוב את הפונקציה (0ץ60ח5₪ ושלב אותה בתוכנית ראשית ג כ ()חווח, כדי לבדוק אס היא פועלת כראוי. 4. קובץ תקליטור: 1108.6זא6 | 2 משימה: ..- ₪ : 5 כתוב גירסה נוספת לפונקצית הספריה (505900, שתפקידה למצוא | ₪ ו קיוס של תת-מחרוזת במחרוזת. הגדרת הפונקציה: ; (%* ע8ת0 ,8* ע8םת05)0סק %6ם1 כאשר 5 מצביעה על מחרוזת, שבתוכה צריך לחפש תת-מחרוזת המוצבעת על ידי +. הפונקציה מחזירה את מספר התו הראשון במקרה של מציאת תת-מחרוזת, או 1 אם לא קיימת כזו תת-מחרוזת. 5. קובץ תקליטור: אין בשפה האנגלית כידוע, קיימיס שני סוגי סדרים לאותיות: אותיות גדולות (0/%53|5ק68) ואותיות קטנות. כאשר עורכיס השוואה בין שתי מחרוזות ייתכן שנקבל ערך שקרי בגלל הבדל בסוג האותיות. לדוגמה, השוואת ייס|קקפיי, יי6|ססם" ו-ייס!קְקהיי תיתן תוצאה שקרית בכל מקרה, למרות שלמעשה מחרוזות אלו מייצגות את אותה המילה. כדי להתגבר על בעיה זו ניתן לתרגם את המחרוזות לסוג אותיות אחיד, לפני ביצוע ההשוואה. כלומר, להפוך את כל האותיות לגדולות או לקטנות. בדיקה בטבלת 45611 מראה שההפרש בקוד 5611( בין אותיות גדולות לקטנות הינו 32, כאשר אותיות קטנות מקבלות את ערך 45611 הגדול יותר. 8 המדריך השלם לשפת 6 משימה: כתוב שתי פונקציות המבצעות איחוד גודלי אותיות במחרוזת 5. הפיכת כל האותיות ב-5 לגדולות (5) ע6ססגוס הפיכת כל האותיות ב-5 לקטנות (8) 6010₪62 שיס לב/ י*יתכנו במחרוזת תווים שאינם אותיות, ואותם יש להשאיר כמות 1 שהם. 6. קובץ תקליטור: 1109.6זא6 משימה: כתוב שתי פונקציות המתרגמות ערך הנמצא במשתנה מטיפוס - ז6, למחרוזת הקסדצימלית ומחרוזת דצימלית, בהתאמה. משתמשיס בפונקציות אלו כדי להדפיס (או להקרין) ערכיס המצוייס במשתנים. פעולתן דומה ופשוטה יותר מפעולת פונקציית הספריה ()שחוזס. הפונקציות יוגדרו כך: ; (8* 08% ,0 ע8םת85)0א060% הפיכת ערך המשתנה 6 למחרוזת הקסדצימלית שתישמר במצביע 5, שנמסר על ידי המתכנת. ;(8* 08% ,0 פַַַם0) 060098 הפיכת ערך המשתנה 6 למחרוזת דצימלית שתישמר במצביע 5, שנמסר על ידי המתכנת. שים לב/ התוצאה המתקבלת עבור כל תו המצוי ב-6 הינה למעשה ערך 1 של התו. 7. קובץ תקליטור: 1110.6זא6 משימה: 2 % כתוב שתי פונקציות, כדוגמת הפונקציות שבספריית המערכת של 6, כדי לבצע את הפעולות הבאות : א. תרגוס מחרוזת ספרות למספר שלס טחו): ;(5* %ע8ת6 5%ת8%601)00 פרק 18: משימות | 379 .8 .9 .0 הפונקציה מחזירה ערך שלם על פי מחרוזת הספרות המוצבעת על ידי 5. היא מפסיקה את תהליך התרגוס כאשר המחרוות מסתיימת, או כאשר נתקלים בתו שאיננו ספרה. תרגוס מספר שלס למחרוות ספרות : ; (8* 06282 ,1 6ם1) 1608* מַַַםס הפונקציה מתרגמת את הערך השלם שב-| למחרוזת ספרות מתאימה בתוך המצביע 5 שסופק, ומתזירה מצביע לתחילת המחרוזת הצו. לדוגמה, פונקציה אשר תחזיר את הערך שב-ן: ;((5 ,1) 1608) 8601 קובץ תקליטור: אין משימה: כתוב פונקציה (0ו00א8 הדומה ל-(0ו860, אשר מחזירה ערך שלםס מתוך מחרוזת המכילה ספרות הקסדצימליות. קובץ תקליטור: 1111.6זא6 בתרגיל וה נכתוב תוכנית מחשב המשחקת ייבול-פגיעהי' כנגד המשתמש. המחשב בוחר מספר בן 5 ספרות, על ידי הפעלת פונקציית הספריה (00ח8ז, המחזירה מספר אקראי. המחשב דואג שספרה מסוימת תופיע פעם אחת לכל היותר. על המשתמש לנחש את הספרות, והמחשב בודק את מספר היבוליםי' (הספרות מופיעות במקוס הנכון) ומספר הייפגיעות'' (הספרות הנכונות שאינן במקוס הנכון). למשתמש מוקצביס 10 נסיונות. אס הוא לא מצליח - התוכנית מדפיסה הודעת השתתפות בצער ומציגה את התוצאה הנכונה. כדי שפונקציית ()00ח8ז תחזיר מספר אקראי שונה בכל הפעלה חדשה של התוכנית, צרף את השורות הבאות: בתחילת התוכנית (קוב המקור): <(. %186> 01066ם1 % בתחילת ()חופות : ;זוסם שַם0ס1 ; (%37 (זוסם6) 6ת61) 08ם528 כדי שהפונקציה (/60ח8ז תחזיר ספרה בודדת (9-0) בכל פעם, כתוב: 72 ()00ם8ע2 = 41416 קובץ תקליטור: 1112.6זא6 תרגיל זה מכוון לכתיבה של תוכנית המשחקת דמקה כנגד המשתמש. התרגיל מורכב יותר מכל התרגיליסם האחריס עד כה, אולס החלטנו לכלול אותו, מכיון שהוא מכיל מרכיבי תכנות מעניינים ביותר. אנו ממליציס בפני הקורא להתאמ), להבין ולבצע את התרגיל. 0 המדריך השלם לשפת 6 כדי לפשט את הבעיה בשלב הראשון של לימוד העקרונות, הטלנו מגבלה על חוקי המשחק המקובלים: בכל תור מותר להוריד כלי בודד בלבד. כלומר, לא ניתן לבצע הורדות מרובות, כפי שנהוג בדמקה. מגבלה וו חלה גם על המלך. המלך יכול להוריד באלכסון בכל הכיווניס, אולס עליו להתייצב במשבצת הצמודה מייד לאחר הכלי הראשון שהוא מוריד. הנה הסבר קצר על הטכניקות בהן השתמשנו בכתיבת התוכנית שבתקליטור. עיון מדוקדק בתוכנית עצמה בוודאי יוסיף היבטיס נוספיס להבנת הנושא. תוכנית זו הינה יישחקניתיי דמקה ברמה בסיסית, אשר הקורא מוזמן להכניס בה שינוייס ושיפוריס. מבנה הנתוניס בו בחרנו לייצוג מצב לוח הדמקה, הוא טבלה דו-מימדית בגודל 10*0. במרכזה מצוי לוח הדמקה במימדיס 8*8 ומסביבו שוליים ברוחב אחד (בדומה לטבלה של יימשחק החיים'י, ראה תרגיל 10). בכל מקוס בטבלה יכול להימצא אחד מתוך 6 ערכים : 11 חייל מחשב 2 מלך מחשב 1 חייל משתמש 2 מלך משתמש 0 מקוס פנוי לנוע אליו 0 מקוס שאסור לנוע אליו, כדוגמת השוליים או משבצות שאינן על אלכסוניס מותריס. התוכנית מכילה פונקציות בסיסיות לסידור ראשוני של הלוח והצגתו בכל שלב במשחק. ראה תרשים : <-- מהו צעדך הבא ? פרק 18: משימות | 381 כאן מסומנים הכלים של המחשב ב-ייאיי, הכלים של המשתמש ב-יי0יי והמקומות הפנויים ב-'י.י". שים לב למספור השורות בספרות 1 עד 8 ומספור הטורים באותיות 8 עד 4 (בדומה לשחמט). חלק אחד של התוכנית מוקדש להזזת הכלים של המשתמש על פי הנחיות שהוא מזין במקלדת. על המשתמש להקיש את זוג הקואורדינטות בו נמצא הכלי ואת זוג הקואורדינטות של היעד. על המחשב לבדוק את חוקיות התזוזה, או חוקיות ההורדה שהמשתמש מגדיר, לבצע עבורו את המהלך ולהציג את מצב הלוח החדש. ראה תרשים: 1 2 3 4 5 6 7 8 <-- מהוצעדך הבא ? חלק אחר של התוכנית נועד לבחירת מהלך המחשב. הו החלק המורכב בבעיה. לצורך ה המחשב סורק את כל משבצות הלוח ומאתר את הכליס שלו. עבור כל כלי המחשב בודק את כל אפשרויות התזוזה. חייל יכול לנוע צעד אחד קדימה ולהוריד צעד אחד בכל כיוון. מלך יכול לנוע על פני ארבעת האלכסוניס, במידה ומסלול התנועה פנוי, ולהוריד כלי אחד בקצה כל מסלול כזה. 2 המדריך השלם לשפת 6 עבור כל תנועה אפשרית, התוכנית מחשבת ניקוד המביע את מידת ההצלחה של המהלך. תוך סריקת הלוח התוכנית ווכרת את המהלך הטוב ביותר שנמצא עד לאותו רגע, כדי שתוכל לבחור בו לשס ביצוע בסוף הסריקה. לכל אחד מהקריטריונים שנבחרו נקבע ניקוד. במהלך הסריקה התוכנית בודקת את כל הקריטריוניס וצוברת נקודות בהתאם. מצבים ייטוביםיי למחשב הס בעלי ניקוד חיובי, ומצבים ייגרועיסי' למחשב הס בעלי ניקוד שלילי. הקריטריונים הנבדקים בתוכנית המצורפת הם: א. ט. תזוזת חייל קדימה מזכה בניקוד השווה למספר שורת היעד. כך נמשכיס חיילי המחשב לעבר שורת ההמלכה (השורה הנגדית הקיצונית). תזוזת מלך אחורה מזכה ב-(<שורת היעד>-8). כך נמשכים מלכי המחשב חזרה לתוך לוח המשחק. הורדה של חייל אויב מזכה בנקודות. הורדה אפשרית של האויב בחזרה בעקבות המהלך הנבדק מפחיתה נקודות. מהלך של חייל הנמצא במצב סכנת הורדה מקבל נקודות דרבון כדי שיהיה לו כדאי לזוז ולחינצל. למהלך של חייל המגן על חייל אחר מפני הורדה מפחיתיס נקודות, כדי לגרוס לו להישאר במקוס ולהמשיך להגן. מהלך של חייל, שלאחר ביצועו הוא יגן על חייל אחר, מזכה בנקודות נוספות כדי לדרבן אותו להגן על החייל החשוף. תזוזה של חייל לטורים הקיצוניים (טור 4 או טור 3) מוכה בנקודות, שכן שס הוא מוגן יותר. תזוזה של חייל לשורה 8 מזכה בנקודות נוספות כדי להמריצו להיות למלך. כדי לבדוק קריטריונים אלה, משתמשת התוכנית באלגוריתם הבא עבור בל בלי: א. ב. ייצור מהלך אפשרי וחוקי. ניקוד המהלך על פי נתוניס גיאוגרפיס (מספר שורה ומספר טור). ניקוד מקוס הימצאות החייל לפני המהלך - האס מגן על חייל אחר, האס בסכנה. ניקוד כתוצאה מהורדה על ידי חייל אויב. ביצוע המהלך הנבדק באופן ומני. בדיקת הקריטריוניס הנותרים לאחר ביצוע המהלך: האס כעת התייל מספק הגנה לחייל אחר, האס כעת הוא בסכנת הורדה. החזרת המהלך הזמני אחורה. פרק 18: משימות | 383 כאמור, המהלך שיבוצע למעשה יהיה גה שצבר את מירב הנקודות. התוכנית עורכת מחדש את מצב הלוח. ראה תרשים: 9% 600 פרת) 00 41 00 ₪1 ו 9% 600 פרת) 00 41 00 שים לב/ בתוכנית המצורפת כללנו בפלט גם את הניקוד שקיבל המהלך הנבחר. התוכמית בודקת לאחר כל מהקך אס קיים מצב מצחון של אחד הצדדים, בכך שהוריד את כל התיילים של האויב. כמובן שבמקרה כזה המשחק מסתיים. משימה: על סמך ההנחיות שקיבלת, כתוב תוכנית דמקה משלך, והשווה אותה אל התוכנית הנמצאת בתקליטור המצורף. אס לא תצליח בעצמך, למד בעיון את התוכנית המצורפת כדי להוסיף לה שיפוריס במשימה הבאה. 4 המדריך השלם לשפת 6 .1 .3 קובץ תקליטור: אין משימה: שפר את תוכנית הדמקה שכתבת במסגרת המשימה הקודמת, או את זו המצויה בתקליטור המצורף, על פי הרעיונות הבאים ו/או רעיונות אישייס שלך: הסרת המגבלה של הורדה בודדת בכל תור. ניתוח מעמיק יותר של תזוזות המלך, כך שאפשר יהיה לנצל אותו טוב יותר, כמו למשל להכנת מלכודות. שיפור הפונקציה הבודקת אם חייל נמצא בסכנת הורדה, כך שתבדוק גם סכנה ממלך אויב. בדיקה של יותר ממהלך אחד קדימה - משימה לא פשוטה! הוספת שיקולים של הקרבת חייל למען שיפור המצב. למשל, הקרבה של חייל, כך שאפשר יהיה להמליך מלך כתוצאה מכך. . קובץ תקליטור: אין אחת הנקודות הקריטיות בהצלחת תוכנית משחק, כגון דמקה, היא קביעת הניקוד שמקבל כל קריטריון. שינוי הניקוד מניב אסטרטגיות משחק שונות. משימה: שנה את תוכנית הדמקה, כך שהמחשב ישחק נגד עצמו, כלומר פעס יבחר המחשב מהלך עבור חיילי ייאיי ופעס עבור חיילי 'י0יי. עבור כל סוג שחקנים, הנח למחשב להשתמש בניקוד שונה של הקריטריונים. על ידי עריכת משחקי מחשב-נגד-מחשב, תוכל לבחון אילו קריטריוניס טובים יותר, ואותס לשלב בתוכנית הדמקה שלך. קובץ תקליטור: 1113.6זא6 במערכת ההפעלה א1א(! קיימת תוכנית בשסם ייץזסספוחיי. לאחר הפעלתה ניתן להמשיך להזין פקודות למערכת ההפעלה כרגיל. ץזסספוח צוברת את הפקודות המוזנות ב'יימאגר היסטורייי ומאפשרת להפעיל פקודות שכבר הוקשו ושמורות במאגר בצורה מקוצרת, על ידי שימוש בתו "!יי, אשר ניתן להצמיד לו מספר פקודה או רצף אותיות שהן חלק מהפקודה. כאשר מזיניס את הפקודה המיוחדת ץזסספוה, | מופיעות | על | המסך ‏ כל הפקודות | המצויות | במאגר. התוכנית תפעל רק כאשר מבצעים הידור לקובצ 5אם. כלומר, לא ניתן לביצוע עס התוכנה המצורפת 6פו|6ד. פרק 18: משימות | 385 טיפ/ במערכת 005 יש תוכמית דומה בשם //00546//. משימה: כתוב תוכנית ץזסזפוח הפועלת בדומה לתוכנית ץזסספוח של אזאש. התייחס לכללים הבאים : א. המאגר ההיסטורי יאפשר שמירת 30 הפקודות האחרונות שהוקשו. ב הקשת התו !יי תגרוס להפעלה נוספת של הפקודה האחרונה שנשמרה במאגר. ג. | הקשת חח! (חח - מספר פקודה בתוך המאגר) תגרוס להפעלת פקודה מספר חח מתוך המאגר. ד הקשת 606..6! (66...6 הינו רצף-תוויס כלשהו) תגרוס להפעלת הפקודה במאגר המתחילה ברצף התווים 606...6. לדוגמה, אם נקיש: |6! תופעל הפקודה: 6.* 08 בהנחה, שקיימת | פקודה כזו במאגר. ה. הקשת הפקודה /סספות תגרוס להופעת הפקודות שבמאגר ובצמוד להן מספרס הסידורי. ו אם מקישים הוראה להפעלת פקודה מהמאגר ואין פקודה תואמת, תופיע על המסך הודעת שגיאה מתאימה. לצורך כתיבת התוכנית היעזר בפקודות הספריה (5/5%0₪00, המוגדרת כך: (5) ת66 578 8* עפתס פונקציה וו מפעילה פקודה של מערכת ההפעלה, המצויה במחרוזת המוצבעת על ידי 5, כאילו הפקודה הוקשה ישירות במקלדת. התוכנית שתכתוב תקלוט פקודות לתוך מחרוזות ותפעיל פקודות נבחרות באמצעות ()0ח5/506. עליה לבדוק תתילה אס הפקודה מתחילה ב-יי!יי או שהינה הפקודה ''ץזסספות'י. 6 המדריך השלם לשפת 6 פרק 12 4. קובץ תקליטור: 1201.6זא6 אחת התכונות של תוכנה לעיבוד-תמליליםס היא לאפשר למשתמש ליינועיי על-פני שורות הטקסט במסמך לפניס ולאחור. מכיון שמספר השורות במסמך אינו ידוע מראש, יש להשתמש במבנה נתוניס מסוג רשימה מקושרת כפולה. ברשימה זו, כל איבר יכיל שורת טקסט (מחרוזת) ושני מצביעים: אחד לאיבר הבא ברשימה, ואחד לאיבר הקודס ברשימה. באופן זה ניתן יהיה לנוע על-פני שורות הטקסט בשני הכיווניס. שורה שורה שנייה ₪ ראשונה העוגן מצביע לאיבר הראשון הזנב מצביע לאיבר האחרון. שורת טקסט אחרונה .ב */ משימה: + , . 1 כתוב תוכנית מחשב, הקולטת באמצעות הפונקציה (0ח8616 שורות קייה טקסט (באורך מוגבל ל-60 תוויס), ומאחסנת אותן ברשימה מקושרת כפולה. סיוס הקלט יסומן על ידי שורה המכילה תווי רווח בלבד. לאחר סיוס הקלט, התוכנית תגיב בהצגת שורות הטקסט בזו אחר זו. תחילה על-פי סדר ההזנה שלהן ואחר כך בסדר הפוך לסדר ההזנה. השתמש בפונקציות הספריה ((060ו|08 כדי להקצות זיכרון לכל איבר חדש. זכור להוסיף בתחילת התוכנית ''ח.6סו|668ט|סחו'י 6סטוסחו +. פרק 18: משימות | 387 5. קובץ תקליטור: אין משימה: בצע שינוייס בתוכנית שבתרגיל 34 לבניית רשימה מקושרת כפולה, כך שבסיוס הקלט יופיעו שורות הטקסט בסדר ההזנה שלהן ובצמוד לכל שורת טקסט יוצג מספרה הסידורי. כדי לנהל את הרשימה, נשתמש בהוראות שונות להזנת שורות חדשות, ביטול שורות וסיוס העיבוד. נשתמש לשם כך בתווי הבקרה 1, פ ו-0: חח[ הזנת שורה חדשה למקוס כלשהו ברשימה. חח מציין את מספר השורה שלאחריה יש להוסיף את השורה החדשה. חח ביטול שורה מהרשימה. חח מציין את השורה שיש לבטל. סָ סיוס. זכור לטפל במצבים השוניס תוך התייחסות לעוגן ולזנב. פרק 13 6. קובץ תקליטור: 1301.6זא6 כפי שלמדנו, קיימת היררכיה בסוגי המשתניס, אשר מתבטאת בכך שהמספריס מהסדר הנמוך מוכלים בתוך המספריס מהסדר הגבוה: %> טיפוס ז608, המורכב מבית בודד ומכיל טווח מספרים 127 +. > טיפוס זחו, המורכב משני בתים ומכיל טווח 32565 +. > טיפוס פַחסו, המורכב מ-4 בתיס ומכיל טווח |=------7א0 + (בהקסדצימלית) של ערכים שלמים. > טיפוס 8086, המורכב מ-4 בתיס ומכיל מספרים הכוללים נקודה עשרונית בטווח 3.37*10+25 + +- 8.84*10727 +, > טיפוס 6פטס0, המורכב מ-8 בתים ומכיל מספרים עס נקודה עשרונית בטווח 8 + 2.225*107308 +. כאשר כותבים תוכנית מחשב, בוחריס למשתנים את סוג הטיפוס הרצוי על פי השימוש שאנו מייעדים לו, וטיפוס זה ידוע לכל אורך התוכנית. בשטחי תכנות מסוימים ובפרט באינטליגנציה מלאכותית, לא מטפלים בדרך כלל בקביעה של סוג הטיפוס של משתנה במהלך כתיבת התוכנית. לכן, כדי למנוע במקריס אלה תקלות בהמשך העבודה וההרצה, יש לאפשר למשתנה להיות מכל טיפוס שהוא. לשס כך יש לכתוב פונקציות כלליות מספיק, כדי שיידעו לטפל בצורה נכונה במשתנים בעלי טיפוס משתנה. 8 המדריך השלם לשפת 6 שפת 6 אינה מאפשרת (כחלק מהשפה) הגדרות כאלו, אולס ניתן באמצעות תכנות להגיע לתוצאה הרצויה תוך שימוש במבנה האיגוד (חסוחש). בתרגיל זה נציג את הנושא ונאפשר לקורא להתמודד עס הבעיות שמתעוררות, להתוודע לאופן הטיפול בהן, ולאפשרויות השימוש בשיטה זו. משימה: הגדר באמצעות איגוד (חסוחע) משתנה רב-טיפוסי המכיל: 6שטססף, 51086₪, 6ת10, 6ם1, עַַַםתס כתוב את הפונקציות הבאות: חיבור שני משתניס רב-טיפוסייס ()800 0 חיסור שני משתניס רב-טיפוסייס ()סט5 ף הכפלת שני משתניס רב-טיפוסייס ()1טת ףש חלוקת שני משתניס רב-טיפוסייס ()טגם 6 בכל מקרה, התוצאה המתקבלת אף היא משתנה רב-טיפוסי. כדי לראות את התוצאות, הכן פונקציה המדפיסה את ערכו של משתנה רב-טיפוסי בלווית הטיפוס שלו. הפונקציות צריכות לטפל במצביס הבאיס: 1 ביצוע הפעולה בין שני משתניס מטיפוסים שוניס. 2 מעברים לטיפוסים גבוהיםס יותר שבהיררכיה, כאשר הטווח דורש וזאת, או כאשר הדיוק דורש ואת. לדוגמה, חלוקת שני שלמיס טחו) תיתן מספר עס נקודה עשרונית. אס יש שבר עשרוני בחלוקה. מכפלת שני מספריס שלמיס טחו) יכולה לתת מספר מסוג פַחסו, כאשר גודל התוצאה מחייב זאת. 3 מעבריס לחיררכיה נמוכה יותר, כאשר הדבר מתאפשר. לדוגמה, משתנה מטיפוס 508% יהפוך למשתנה שלם, אם אינו מכיל שבר עשרוני. 7. קובץ תקליטור: אין משימה: שכלל את התרגיל הקודם, כדי שיכיל את הפונקציות הנוספות : ערך מוחלט של משתנה רב-טיפוסי ()805 6 ערך שלס של משתנה רב-טיפוסי ()51002 6 העלאת מספר רב-טיפוסי בתזקת מספר רב-טיפוסי ()אסס 6% פרק 18: משימות | 389 8. קובץ תקליטור: אין פרק 15 משימה: עדכן את הפונקציות של שני התרגיליס הקודמים, כדי שתפעלנה עבור טיפוס נוסף מסוג נקודה. טיפוס נקודה מורכב משני ערכיס המגדיריס שיעורי קואורדינטות במרחב דו-מימדי (קואורדינטות קרטזיות). נקבל את טיפוס הנקודה, אס נוסיף שיעור שני של 0 לכל הטיפוסיס הקודמים. כלומר, הערך מטיפוס 808 של 5.5 מוגדר במרחב הדו-מימדי כ-(0 ,5.5). בתרגיל זה נסתפק בעדכון הפונקציות האלו: ()11002 6, ()805 6, ()סג5 6, ()800 6 שיס לב/ חיבור וחיסור של משתנים מטיפוס נקודה מתבצע לחוד על כל שיעור. כדי לחבר או לחסר משתנה מטיפוס נקודה במשתנה מטיפוס אחר, יש להפוך את המשתנה האחר למשתנה מטיפוס נקודה עם שיעור שני 0. 9. קובץ תקליטור: 1501.6זא6 נתון מערך שלמיס בלתי ממוין בעל מספר איבריס המוגדר על ידי הקבוע אח₪ו. נשתמש בטכניקה רקורסיבית: קריאה רקורסיבית של 1-8% האיבריס האחרוניס (למעט האיבר הראשון), והכנסת האיבר הראשון למקוס המתאיס בתהליך של סריקה. בסיוס נקבל מערך ממוין בסדר עולה. משימה: כתוב תוכנית, הקולטת ערכים לא ממוינים למערך שלמים בעל גודל אגו. התוכנית תבצע מיון רקורסיבי למערך ותדפיס אותו בתוס המיון. 0. קובץ תקליטור: אין משימה: כתוב תוכנית, אשר דומה לתוכנית בתרגיל 39. בתוכנית זו תבצע מיון רקורסיבי של מערך שלמים בסדר יורד, במקוס בסדר עולה. 0 המדריך השלם לשפת 6 1. קובץ תקליטור: אין 5 ל | משימה: 5 0 1 0 (ראה הסבר לתרגיל 17). | .₪ ל כתוב תוכנית הקולטת את הערך ח, מחשבת את ערך העצרת שלו באופן רקורסיבי, ומדפיסה את התוצאה. 2. קובץ תקליטור: 1502.6זא6 יש לחשב את סדרת פיבונציי באופן רקורסיבי (ראה תרגיל 2). בדרך כלל, בתכנון פונקציות רקורסיביות מגדיריס את משתני העזר כאוטומטיים, כדי שתתבצע הקצאה חדשה של משתנים בכל קריאה רקורסיבית. הדפסת סדרת פיבונצ'י ברקורסיה הינה מקרה קלאסי, בו רצוי להגדיר את המשתנים כסטטיים, כדי שישמרו את ערכס בכל קריאה רקורסיבית. הנוסחה הרקורסית של האיבר ה-ח היא: 1 + 2-ם5 * מ1 לכן, ניתן לכתוב פונקציה רקורסיבית, ללא משתניס סטטיים, לחישוב האיבר ה-ח באמצעות שתי קריאות רקורסיביות עבור (2-ח) ו-(1-ח) - נסה זאת. הפתרון הנתון בתקליטור מנצל אפשרות הגדרה של משתנים פנימייס סטטייס בפונקציה רקורסיבית. פתרון זה יעיל יותר. משימה: כתוב תוכנית הקולטת את הערך ח, מחשבת באופן רקורסיבי ח איבריס ראשוניס של סדרת פיבונצ'י ומדפיסה אותם. 3. קובץ תקליטור: 1503.6זא6 עיין בהסבר שבפרק 15 על עצ בינארי ממוין. משימה: כתוב תוכנית הקולטת מהמשתמש ערכים שלמים ובונה עצ בינארי ממוין. התוכנית תבצע הקצאת מבניס דינמית באמצעות פונקציית הספריה (₪8/!060, המקבלת כפרמטר את גודל המבנה ומחזירה מצביע למבנה שהוקצה. תוך כדי בניית העצ, התוכנית תדפיס את המהלך על פני העצ, עד למציאת המקוס המתאיס להצבת האיבר החדש. בכל פנייה לאורך ענף שמאלי תודפס האות יישיי, ובכל פנייה לאורך ענף ימני תודפס האות יייי. ניתן יהיה לעקוב אחר התהליך של בניית העצ על ידי שרטוטו באמצעות נייר ועפרון. כדי להשתמש ב-8|!060ח כתוב בתחילת התוכנית את ההוראה: "ת.0681106ט61םת1" 66ט610ם1+ פרק 18: משימות ‏ 391 4. קובץ תקליטור: 1504.6זא6 עיין בהסבר על עץ בינארי, שנמצא בפרק 15. משימה: כתוב תוכנית המבצעת ייטיוליי על פני עצ בינארי ממוין, ומדפיסה את הערך של כל צומת ועלה על פי סדר מיון עולה. התוכנית תפעל ברקורסיה. לבניית העץ הבינארי היעזר בתוכנית של תרגיל 43. 5. קובץ תקליטור: אין = | משימה: ג עדכן את תוכנית הטיול וההדפסה של ע בינארי ממוין, מהתרגיל הקודם, כדי שתדפיס את האיברים בעצ על פי סדר מספרי יורד. 6. קובץ תקליטור: אין משמה: - כתוב מחדש את קטע התוכנית לבניית עץ בינארי ממוין (ראה תרגיל 43), כדי שתהליך הבנייה יתבצע ברקורסיה. 7. קובץ תקליטור: 1505.6זא6 משימה: עדכן את התוכנית מתרגיל 44, המבצעת טיול והדפסת עצ בינארי ממוין, כדי שתדפיס רק את העלים של העצ. זכור, כי העלים הס המבניס חסרי-בניס, בקצוותיהם של ענפי העא. פרק 16 8. קובץ תקליטור: 1601.6זא6 לעיתיס ברצוננו לראות בצורה נוחה את תוכנו של קוב כלשהו. אס קוב הינו קובצ טקסט, ניתן להשתמש בפקודת 06/% בסביבת העבודה של 205 כדי להציג את תוכנו על המסך. אולם, אם זהו קוב נתונים המכיל ערכים בינאריים שאינו ניתן לייצוג כטקסט, פעולה זו תגרוס קרוב לוודאי להשמעת צפצופיםס והצגת 'יפרצופים מחייכים'י על המסך. במקרה כזה יהיה נוח יותר להציג את תוכן הקובצ בצורה דצימלית, או הקסדצימלית. תוכנית השירות שעושה זאת נקראת במערכות רבות קופ. בדרך כלל היא מציגה את תוכן הקובצ בקבוצות של 256 בתים (י'סקטוריי). היא משתמשת להצגת תוכן הקוב בווג ספרות הקסדצימליות לכל בית ובמקביל היא 2 המדריך השלם לשפת 6 מציגה את התווים עצמם, אם קיימים. דוגמאות לכך ניתן לראות בהפעלת האופציה /15/ בתוכנת 610015ק, או על ידי הפעלת תוכנית הדוגמה שבתקליטור המצורף. קובץ צנמ דף 1 04ח1" 81701066 | 64 75 60 63 65 69 22 20 65 64 75 60 63 65 69 23 : 09080008 סח%1.."ה.%1ה0+8 | 63 65 69 23 08 00 22 68 25 60 74 65 63 66 50 65 : 0000016 0100810ח1" 10686 | "6 69 50 65 64 75 60 63 65 69 22 20 65 64 75 66 : 0900032 רס ו 909 72 61 68 63 04 00 04 00 04 00 04 00 22 68 25 : 9000048 ..(5 ,0) %0%0%8 | 20 08 00 29 73 20 20 63 28 20 73 78 65 74 63 2 : 9900064 ..; %8 ,0 00879 04 00 38 20 73 23 20 20 63 20 72 !61 68 63 20 20 : 0000080 [] שש תהחס | ...6 50 58 74 75 60 20 72 !61 68 63 20 20 20 04 00 78 : 8990096 3 = 2 ן4 39 38 37 36 35 34 33 32 31 30 22 20 30 20 : 00080112 "הס - ..; ":005 | 72 61 68 63 20 20 20 04 00 38 20 22 46 45 44 43 : 0000128 ..; 5 = ש%58 90 20 20 04 00 38 20 73 20 30 20 76 61 73 2 20 : 0000144 ...,; 01+56% %ה1 | 0 00 04 00 38 20 74 65 73 66 66 "6 20 74 65 69 : 0000160 8 6) = 586%++0 6 20 63 28 20 30 20 74 65 73 66 66 "6 20 20 20 : 0000176 ..; 4 << (50א0 909 04 00 38 20 34 20 35 35 20 29 30 46 78 30 20 : 0000192 + = ++%5 6 66 6% 58 74 75 60 20 30 20 28 28 73 2 20 20 : 80000208 %5++‏ ..; [56% - 20 28 28 73 2 20 20 20 04 00 38 20 50 74 65 73 : 0900224 [07א0 8 6]%ט = | 20 50 46 30 78 30 20 26 20 63 58 74 75 660 20 30 : 0000249 קובץ 1.6 דף 2 0000256 : 38 00 04 20 20 20 24 73 20 30 20 30 20 38 00 03 ;.. %8 = 0 ;. צ58) התש%+8ה ...| 76 61 73 28 20 66 72 75 74 65 72 20 20 20 03 00 : 0900272 3 ו 1 60 04 00 04 00 04 00 04 00 70 04 00 38 20 29 : 0000288 "008 - ..6(..)6)ה1 | 72 61 68 63 20 20 20 04 00 78 04 00 29 28 65 69 : 9000304 ח1] ,[20]תאהו1+ 5 69 60 20 26 50 30 32 58 60 !6 65 60 69 66 20 : 0000320 .; [4]+טם ,[6]18 | 00 38 20 50 34 58 66 75 62 20 20 50 38 31 58 65 : 0000336 משימה: כתוב תוכנית הקולטת מהמשתמש שם של קוב ומבצעת קוחטס שלו על המסך. הצג קבוצות של 256 בתיס בצורה הבאה: 6 שורות מכילות 16 בתיס שכל אחד מהס מיוצג על ידי זוג ספרות הקסדצימליות. בהמשך השורה מוצגיס אותס 16 הבתיס כתוויס (אם אפשר). לאחר הקרנת כל קבוצה תמתין התוכנית ללחיצת מקש לפני שתציג את הקבוצה הבאה. 9. קובץ תקליטור: אין משימה: בצע שינוייסם מתאימיס במשימה הקודמת, כך שנתוני הקובצ יוצגו בספרות דצימליות במקוס הקסדצימליות. פרק 18: משימות 393 שים לב/ ערכו הדצימלי של בית הוא בתחום שבין 0 לבין 255, וערכו ההקסדצימלי הוא בתחוס שבין 00 לבין =. לכן, במשימה זו יש להציג כל בית באמצעות 3 ספרות דצימליות, במקוס 2 ספרות הקסדצימליות. 0. קובץ תקליטור: 1602.6זא6 אחת הבעיות, שמתחבטים בהן לא מעט בעולסם המחשבים, היא סודיות המידע והגנה עליו. נאמר, שקייס במחשב שברשותך קובצ נתונים, או תוכנית מחשב, שאינך מעונייו שלאחריס זולתך תהיה גישה אליהם. אחת השיטות הנפוצות להגן על מאגר הנתונים, הנכס שלך או של הארגון, היא להצפינו על פי צופן הידוע רק לבעליו. הפעולות להצפנת נתוניס ופענוח ההצפנה יכולות להיעשות בצורה פשוטה וממוכנת באמצעות תוכנית מחשב. גם שבירת צופו יכולה להיעשות באמצעות מחשב, אולס באפשרות זו לא נדון כאן. אנו נתייחס להצפנה פשוטה של קובצ נתוניס כחסימת ייפתח הקורא לגנביי. כדי להצפין קובץ נתונים, עלינו לפתח פונקציה המקבלת כארגומנט בית (או תו) ומשנה את ערכו באופן כזה, שהתהליך יהיה הפיך (כי עלינו גס לבצע פתיחת הצפנה) באופן חד-חד-ערכי. קיימות לכך שיטות רבות המוגבלות למעשה רק על ידי דמיונו של האדם. בתוכנית הדוגמה המצורפת בתקליטור, בחרנו בשיטה פשוטה שנועדה להדגיס עקרונות בסיסייס של הצפנה. אנו ממליציס שהקורא ישתמש בדוגמה זו כדי לפתח שיטת הצפנה ייאישיתיי עבור הקבציס שלו. משימה: תכנן פונקציית הצפנה כפי שתואר בהסבר למעלה. הכן תוכנית מחשב הקולטת שם קוב ומצפינה אותו באמצעות פונקציית ההצפנה. | שים לב/ רצוי למחוק את הקובץ המקורי לאחר ביצוע ההצפנה, כי אחרת ע לא יהיה טעם בפעולה זו. אזהדה? אל תמחק קובץ מקור לפני שהינך בטוח שפעולת ההצפנה בוצעה כראוי ושבידך הכלים לפתוח את ההצפנה. ועצה נוספת: שמור העתק של הקובץ המקורי בנפרד, במקום מוגן. 4 המדריך השלם לשפת 6 1. קובץ תקליטור: 1603.6זא6 משימה: כתוב תוכנית מחשב הקולטת שם של קוב שהוצפן באמצעות תוכנית ההצפנה של התרגיל הקודם, ומפענחת את ההצפנה, כדי לשחזר את הקוב> המקורי. טיפ!/ רצוי להשאיר את הקובץ המוצפן כפי שהוא, כדי שיהיה אפשר למחוק את הקובץ המשוחזר לאחר סיוסם העבודה איתו (אלא אם בוצעו בו שינויים), ופהשאיר את הגירסה המוצפנת בלבד. במקרה של שינוי הקובץ, יש להצפינו מחדש, כמובן. פרק 18: משימות | 395 מבנה המחשב הקורא המעוניין להרחיב את ידיעותיו בנושא, יוכל לעשות ואת באמצעות הספר המדריך השלם לטכנאי 56 - חומרה ותוכנה מאת דורון סיון, הוצאת הוד-עמי. שפת תכנות והידור שפת תכנות הינה מתווך בין המתכנת לבין המחשב, והיא מאפשרת לו להורות למחשב מה ואיך לבצע. הוראות אלו מתורגמות לשפת מכונה, לשס הפעלת המחשב. תרגוס ההוראות נעשה באמצעות תוכנית מהדר (6!וקוחס6), בתהליך הקרוי הידור (חסטה!וקוחס6). לפניך תיאור סכימטי של התהליך בן שלושת השלבים: פקודות התכנית מהדר תרשים א.1: איך מתקבלת תוכנית בת- ביצוע לכל שפת תכנות ולכל מחשב קיים מהדר מיוחד להם, שכן המהדר חייב להכיר את שפת התכנות מחד, ואת שפת המכונה של אותו מחשב מאידך. תרגוס ההוראות אינו חייב להיעשות מראש בתהליך הידור, אלא יכול להתבצע בעת ביצוע ההוראות, בזו אחר זו באמצעות תוכנית מפרש (ז6)6זטזסשח1). דוגמה לכך הינה שפת 8516. נספח א': מבנה המחשב 397 הגדרות בסיסיות 108 סיבית 0ו8) - היחידה הקטנה ביותר לאחסון מידע, אשר מסוגלת לייצג שני מצבים בלבד: אפס (יי0יי) ואחד (יי1'י), שחור ולבן וכו'. בַית (טוץפ) - סידרה של 8 סיביות, אשר מייצגות בית אחד (לדוגמה אותיות, ספרות, סימני פסוק). בית מייצג למעשה תו (ז06ז866ז608). כל פעולה המתבצעת במחשב על תו, מתבצעת בפועל על סדרות הסיביות האלו, ורק כאשר מבקשים מהמחשב להציג את המידע, נעשה ייתרגוס" לצורה הגרפית של התו שאנו מכירים. ראה בהמשך הצגת תווים במסך וטבלת 45011 לייצוג תוויס במחשב. שיס לב שתווי קוד 45611 מיוצגיס בבית אחד. מילה (6זס/) - סידרה של 16 סיביות (2 בתים) המייצגות יחידת מידע גדולה יותר מבית אחד. מילה כפולה (טזסווס) - סידרה של 32 סיביות (4 בתים). אוגר (₪6015001) - התקן שיכול לאחסן סדרת סיביות שלמה (בית או מילה). כאשר מאחסנים בתוכו סדרת סיביות, הוא מחזיק את ערכה, עד אשר משנים את תוכנו. זיכרון (ץזסוחסוא) - הויכרון הינו התקן אלקטרוני המאחסן בתוכו מידע לוגי בצורה ספרתית, כלומר - סיביות. המידע יכול להיות הן תוכניות והן נתוניס. מאפיינים עיקריים לרכיבי ויכרון חינס : 0 כתיבה/קריאה או קריאה בלבד (שץוחס ₪680 זס שוז//₪680) - ניתן להבחין במספר סוגים של התקני זיכרון הנבדליס וה מזה בתכונה זו ובטכנולוגיה שבה הם בנויים. כ |אספחם/ואסא - התקני ויכרון המאפשרים פעולת קריאה בלבד. כ הח סטטי/דינמי (ואח-ס//אח-5) - התקן ויכרון המאפשר פעולות קריאה וכתיבה. המידע האגור ברכיבי ויכרון אלה נשמר כל עוד ההתקן מחובר למקור מתח. כ רוחב הזיכרון (ה0%ו/ ץזסוח6וא) - מספר הסיביות שכותביס או קוראיס לרכיב הזיכרון בפעולה אחת. כ גודל הזיכרון (26ו5 עזסוח6ו) - מספר תאי הזיכרון, הבתים, ולמעשה - הכתובות, שקיימות לאחסון נתוניס ותוכניות. גודל הויכרון נמדד אס כן, במספר הבתיס שהוא מכיל. כ זמן גישה (6חו1 60655) - משך הזמן הדרוש לזיכרון כדי לקבל, או למסור מידע מתא זיכרון (כתובת). ערך זה קובע אם הזיכרון מסוגל למסור או לקבל את הנתוניס מהמעבד הראשי בקצב שבו המעבד פועל, או שהמעבד נדרש לפעול במהירות נמוכה יותר כאשר הוא ניגש לזיכרון. שימוש בזּיכרון אשר זמן הגישה אליו ארוך יותר מהזמן הנדרש על ידי המעבד המרכני לביצוע הפעולה, מאט את קצב המערכת ומקטין את ביצועי המערכת כולה. המדריך השלם לשפת 6 מרחב זיכרון - מושג זה מתייחס תמיד למרחב זיכרון 84%. המרחב הזה מוגדר בבתיס בני 8 סיביות כל אחד, אשר את הראשון נסמן ייבית 0'י. מיפוי זיכרון - בתהליך גה מחלקים את הזיכרון לקטעיס שלכל אחד מהס מוגדר תפקיד, או ייעוד. כל פנייה של המעבד לקטע זיכרון ווה תשמש לייעוד וה בלבד. מקטע (%ח6ו5647) - אזור בזיכרון בגודל של 64%8. בתוך המעבד קייס אוגר מקטע המצביע על כתובת התחלתית של המקטע ומאפשר לו לגשת לכל כתובת במרחב של 8א64 מכתובת הבסיס והלאה, בלי לשנות את ערכו של אוגר המקטע. היסט (056) - הערך שיש להוסיף לערך של ייכתובת בסיסיי כדי להגיע לכתובת הפיסית שבה מאוחסן נתון כלשהו. מיעון ישיר (0ח|007655// 606זום) - צורת גישה לזיכרון בפקודה מתוך אוסף הפקודות של המעבד. מיעון עקיף (0חו2007655 605זו0ח1) - צורת גישה לויכרון בפקודה מתוך אוסף פקודות של המעבד. הכתובת שאליה מתייחסים לצורך הבאת נתון מזיכרון או כתיבה של נתון לזיכרון, איננה מוזכרת בתוך הפקודה עצמה. בפקודה מווכר רק המקום בו נמצאת הכתובת, שאליה יש לרשוס או שממנה יש לקרוא את הנתון. מעבד, יחידת עיבוד מרכזית - יע'ימ - 690 טוחש 0(חו06655:ק |₪3ח600) - התקן המכיל בתוכו רכיבים אחדים : 0 אוגרים - משמשים לאחסון ביניים של נתוניסם, לשמירת מידע על מצב המערכת וניהול הכתובות. כ יחידה אריתמטית/לוגית - 410 טוחש 1086 606חסטוזה) - מאפשרת להעביר נתוניס בין האוגריס השוניס ולבצע פעולות מתמטיות ולוגיות על נתוניס שנמצאים באוגרים ובציכרון. 0 יחידת בקרה - מאפשרת לשלוט על העולס התיצוני, לקרוא נתוניס ולרשוס נתוניס לעולס חיצוני וה. מעבד עזר מתמט* (ז066550ז60-0 6וַהח06ז18) - התקן עזר אשר מתחבר כתוספת למעבד (ובמעבד חדש - כחלק ממנו), ומאפשר לו לבצע פעולות מתמטיות על נתוניס ממשייס טחוסס פחספסו=). מרחב קלט/פלט (0/) - המעבד שולט על שני מרחבי כתובות - מרחב ציכרון ומרחב קלט/פלט. במרחב קלט/פלט ממופיס התקני הקלט והפלט של המחשב כדי לאפשר למעבד גישה נוחה. כלומר, הוא דומה למרחב הציכרון מבחינה זו שגס ממנו יכול המעבד לקרוא ולכתוב. ההבדל הוא שמרחב זה קטן בהרבה ממרחב הזיכרון, ואין בו מקטעיס והיסטיס (ראה להלן). לכן הגישה אליו נוחה ומהירה. הבאת פקודה (ח6₪") - מתוור המכונה המאפשר הבאה של הפקודה ליחידת הבקרה כדי שהמעבד יוכל לבצע אותה. נספח א': מבנה המחשב 399 יחידת העיבוד המרכזית - יע"מ - !6 בפרק וה נתאר בצורה סכימטית מחשב פשוט, אשר מתאים למיקרו-מחשביס, מחשבים אישייס ואף לסוגים מסוימיס של מחשבים קטניס (מיני-מחשביס). בהמשך, נלמד לבצע פעולות שונות באמצעות הוראות של שפת התכנות. יחידת העיבוד המרכזית טוח 0ח06655זק |₪8ח66) של המחשב מורכבת ממספר רכיבים, אשר לכל אחד מהס תפקיד מוגדר. הס קשוריסם ותלויים וה בזה, וביחד מהוויס יחידה אחת מורכבת ומאוזנת. המסכם - 40061 בקרה מספר 1 בקרה מספר 2 ₪ < 0/0 תוצאה (1+2) תרשים א.2: המסכם יחידה זו מאפשרת למחשב לבצע פעולת חיבור בין שני מספריס ובאמצעותה ניתן גס לחסר מספר מחברו (על ידי חיבור מספר שלילי) ולכפול מספר במספר (על ידי חיבור חוזר של מספר לעצמו). קו בקרה יימאותת'י למסכס כאשר מוכנים 2 מספריס בפתח המסכס. כאשר מסתיימת פעולת הסיכוס, התוצאה מועברת הלאה. האוגרים הכלליים - 601154015 56סכן[זט: |613ח6) האוגריס הפנימייס הס רכיבים אלקטרונייס המשמשים לאחסנת מספרים לביצוע חישוביס שוניסם, ובהס מאוחסנות תוצאות הבינייסם של החישוביס האלה. הס משמשיס גס לאחסנה זמנית של נתוניסם בעת העברה ממקוס למקוס בזיכרון. יכולת הגישה הישירה לתוכן האוגריס, היא המקנה להס את תכונותיהס וחשיבותס. בנוסף לאוגריס הכללייס קיימיסם מספר אוגריס נוספים, בעלי תפקידיס מיוחדיס. את האוגריס במעבד מסמניס לפי תפקידיהם. כל האוגריס הינס בגודל 16 סיביות. 0 המדריך השלם לשפת 6 אוגרים לשימוש כללי - 86050615 56סקוק /6/9ח66 צובר וס א אוגר בסיס 6 אם מונה יי 6% נתוניס 8 אפ אוגרים ייעודים - ₪60/506/5 56סקטק /50609. מצביע מחסנית וס 5%80% מצביע בסיס 856 4 ₪ | מצביע מקור 5066 מצביע יעד הסחההו65כ אוגר דגלים ₪ 805 אוגר דגלים אוגר הדגליס (601506 80=) מכיל יידגליםיי לשימוש התוכנית. דגליס אלה מושפעיס מביצוע פעולות במעבד. על כן, התוכנית יכולה לבדוק את מצבס ולהגיב למצביס משתנים על ידי ביצוע קטע תוכנית שונה בהתאס למצב של כל אחד מהדגליס שבאוגר. מבנה האוגר: סיביות 1-0 2 3-0 4 050 060 1120090807 1512 14 15 0 צזז3ס- = דגל הנשא. 0" וזב - זפ דגל הזוגיות. = ץזהּווואטה - + דגל נשא עזר. 04|" 0ז20 - 2 דגל אפס. 4 ח0ו5 - =5 | דגל סימן. ₪0 הזד - ד דגל מלכודת. 9 6וטהח= +קטזזס%ח1 - =1 דגל פסיקה. = הסח6פזום - =ש | דגל כיוון. 0 שוסווזםשס - ]0 דגל גלישה. נספח א': מבנה המחשב 401 אוגר מצב - ז36015%6 6006 הסו+ו0חס6 בא[ ] *]+] 6 אוגר וה קשור למסכם. לאחר כל פעולת סיכוס הוא מתאר בכל אחד מהמדוריס שלו את התכונות של התוצאה שהתקבלה בעזרת ערכי 0 או 1. מדור 2 מציין על ידי י'1" אס תוצאת הסיכוס הייתה אפס (0ז20). ווהי שיטה חסכונית במיוחד, כי בדיקת תוצאת המסכם הינה בדיקת מדור בודד. דוגמה לניצול תכונה זו תהיה בדיקת שוויון בין זוג מספרים כלשהו: במקוס להשוות כל ספרה בשני המספרים, נחסר מספר אחד מחברו ונבדוק את מדור 2. אס המספרים היו שוויס, תוצאת החיסור תהיה אפס וערכו של 2 יחיה '1'י. תא א למשל, מסמן על ידי "1" אס תוצאת המסכס הייתה שלילית (608006א). אוגר הפקודה - ז₪6015%6 חסו6%ש+5ח! נציג לדוגמה מחשב, שהפקודות בו נראות כך: <אוגר נתונים> <אוגר יעד> <קוד הפעולה> 8 ו 615562ע | 26818662 18 (2) (2) פעילות המחשב מונחית על ידי פקודות בשפת מכונה, אשר הוא מבצע אותן זו אחר זו לפי הסדר המוכתב על ידי התוכנית. לפני הביצוע, נטענת הפקודה לתוך אוגר הפקודה. במחשב הדמיוני שלנו הוא מחולק לשלושה שדות: בשדה השמאלי מופיע קוד הפעולה (0006 05). זהו מספר המציין למחשב מהי הפקודה. שני השדות הנוספים מכיליס בדרך כלל מספרי אוגריס כללייסם המשתתפים במהלך ביצוע הפקודה. אס נניח שהקוד לביצוע פעולת סיכוס (ססג) הינו 14, וברצוננו לסכס תוכן אוגר 3 עם אוגר 1 - תהיה הפקודה בשפת מכונה: 2 1 פס פס במחשב שלנו, תוצאת הסיכוס תוכנס לאוגר י"יהראשוןיי - ובמקרה זה אוגר מסי 3. אם ברצוננו להעתיק תוכן אוגר 2 לאוגר 4, ובהנחה שקוד פקודת ההעתקה המתאימה הינו 5, נקבל: 2 1 [עסס 05 ו פוה ₪1 2 ההמדריך השלם לשפת 6 מונה הפקודות - ז40חט60 וחגּוףסזוק ב- 0 א תוכנית מחשב מורכבת מרצף של פקודות, אשר נמצאות במערך הויכרון שלו. לאחר סיוס ביצוע הפקודה שבאוגר הפקודה, ממשיך המחשב באופן אוטומטי לפקודה הבאה העוקבת בזיכרון, ומעביר אותה לאוגר הפקודה לביצוע. מונה הפקודות מאפשר למחשב לעקוב אחר רצף הפקודות ומציין מהי הפקודה הבאה בתור לביצוע. הערך המצוי בו גדל באופן אוטומטי מיד לאחר העברת פקודה לאוגר הפקודה. באמצעות מונה הפקודות מיישמיס את מנגנון הדילוג, אשר מאפשר את הגמישות והתתכוס של שפת המחשב על ידי דילוג ממקוס אחד בתוכנית למקוס אחר, כדי לבצע חלקיס שוניס שלה על פי תנאיס מסוימים. הדילוג בפועל נעשה על ידי העברת המיקוס החדש (כתובת תא הזיכרון) את מונה הפקודות, במקוס כתיבת הפקודה הנמצאת בו ומיועדת לביצוע. בקרה - |0ז6004 במרכז הפעילות שתוארה עד כה נמצאת פעולת הבקרה. תפקידה לכוון, לאותת ולתזמן את פעולת הרכיביס השוניס במחשב. ביחידת הבקרה נמצא המפרש/מפענח (6067זקז%6ח1) - רכיב שאחראי לפענוח קוד הפקודה שבאוגר הפקודה ותרגומו לרצף של אותות בקרה המחולליסם את ביצוע הפקודה בפועל. אוגרים כלליים 111 למסכם?- + אוגר + פקודה אוגר מצב-> -> צ מונה פקודות תרשים א.3: הבקדה - צומת העצבים במעבד ניהול הזיכרון, ולמעשה הגישה לזיכרון המחשב הינה באמצעות קבוצת אוגרי מקטע, אשר נציג להלן. הסבר על פעולתס יינתן בהמשך, בסעיף הדן בזיכרון. נספח א': מבנה המחשב 403 אוגרי מקטע (מצביעי כתובת) - ₪60/500/5 +ח5606 מצביע מקטע תוכנית 50 06 מצבוע מקטע נוסף 0 מצביע הוראות זססחוסק 15070600 פסיקות (2+5שזו6+ח!) כאשר המעבד עסוק בביצוע תוכנית מסוימת, אין באפשרותו לבדוק כל הזמן אס התקן מסוים מבין כל ההתקניס המחוברים אליו מבקש ממנו שירות כלשהו. כדי לקלוט בקשות שירות מההתקנים שמחו ליעיימ, משתמש המעבד במנגנון הפסיקה טסט ז6זח1). זוהי 'יהפרעהיי למעבד במהלך הפעילות על ידי סימון מוסכם. המעבד מפסיק (ומכאן המונח יפסיקה'י) את הפעילות שבה עסק בומן שזיהה את בקשת הפסיקה ופונה לטפל בבקשה. עליו לשמור את מצב האוגריס ושאר הערכיס הדרושים, כדי שיוכל לחזור בצורה תקינה ואמינה לפעילות שהופסקה. האוגריס הנשמריס אוטומטית הינס 65 ו-ק1, המצביעיס על ההוראה הבאה שהמעבד יבצע בסיוס הטיפול בפסיקה. גס אוגר הדגליס נשמר. את הפסיקות ניתן לחלק לשני סוגיס: פסיקות חומרה (פקטזוסשח1 6זְהּ/והזה) ופסיקות תוכנה (קטזוס)ח1 6ז50). פסיקות חומרה נחלקות לשני סוגים: פסיקות שניתנות למיסוך (85%080|60!₪) ופסיקות שאינן ניתנות למיסוך (85%880|6ו₪ חסא). במשפחת המעבדים 86 ניתן להגדיר עד 256 פסיקות שמספרן ח-ח-00. השלם מורכב מחלקיו - היע"מ יחידת העיבוד המרכזית (היעיימ) הינה מכלול המורכב מהיחידות שהכרנו, ובנוסף - אוגר זיכרון. לעיתים כולליס בה גם את הזיכרון. עוצמת המחשב ויכולתו תלוייס רבות בעוצמת חיעיימ והמהירות בה היא מבצעת את הפקודות. לפניך שרטוט סכמטי שמכיל את הקשרים ויחסי הגומלין בין הרכיבים השוניס. הקוויס הכהיס בשרטוט מייצגיסם אפיקי נתונים, או אפיקי מידע (₪0565 פּזְהכ, או 5, אשר דרכם מועבריס ערכיס מספריים בין רכיבי היעיימ. הקוויס הדקיס הינס אפיקי הבקרה, או קווי הבקרה (80565 |סשח0ס6, או 65חו1 וסשחס6) המאותתים לרכיביס השוניס מתי להיכנס לפעולה. ביו טבלת האוגריס הכללייס למסכס קיים אפיק נתוניס המאפשר להעביר אל המסכםס שני ערכים המאוחסנים באוגריס. תוצאת הסיכוס מועברת לאחד האוגרים באמצעות אפיק המידע שנמצא ביציאת המסכם. בין אוגר הפקודה למונה הפקודות מצוי אפיק 4 המדריך השלם לשפת 6 מידע המאפשר טעינת מספר פקודה ישירות מפקודת דילוג. אפיק המידע בין אוגר הפקודה ליחידת הבקרה מאפשר מעבר קוד הפקודה למפענח הנמצא ברכיב הבקרה. \ וצצ ////// בקרה תרשיס א.4: סכימה של היע/מ מערך הזיכרון תרשים א.5: הזיכרון נספח א': מבנה המחשב 405 היעיימ בלבד אינה מספיקה כדי שהמחשב, ולמעשה - מערכת המחשב - תפעל כראוי, כי היא אינה יכול להחזיק את התוכנית הפועלת וגם את אוספי הנתוניס הדרושיס לעיבוד. היכן, אס כן, שומריס את התוכנית, הנתוניס ותוצאות החישוביסם! התשובה לכך היא, מערך הזיכרון (ץזסוח6!] או 5607806 |8חז6זח1). המחשב יכול לטעון אל היעיימ ערכים מתוך תאי הזיכרון. הס דומיס במבנה לאוגריס הכלליים שביעיימ, אך איו קשר ישיר ביניהס לבין המסכם, או לשאר חלקי היעיימ. כדי לבצע פעולה בין שני ערכיס בזיכרון, יש צורך לטעון את שניהסם לתוך אוגריס ביעיימ ואו לבצע את הפעולה. התוצאה מועברת מאוגר התוצאה לזיכרון. כאשר מציגיס למחשב פקודת 84516 כמו זו, לדוגמה: 0 5-4 = ג למת , 8 ו-6 הס שמות סמליים (כתובות) של תאיס בזיכרון. ביצוע פקודה וו מתבטא בטעינת ערכי 8 ו-6 לאוגרים ביעיימ, ביצוע הסיכוס והעברת הערך שבאוגר התוצאה אל הזיכרון. כיצד מנתב המחשב את הערכים מהזיכרון ליעיימ ולהיפך! לכל תא זיכרון יש כתובת (1007655), והמחשב ייפונה'' אליו על ידי ציון כתובתו, שהיא מספרו הסידורי. לדוגמה: ספירת הכתובות במחשב מתחילה בערך אפס (0). לכן, כדי י'לפנות'" לתא 10,000, צריך לצייו למחשב את הכתובת 9,999. המספור הזה הוא לפי י'בסיס 0' (8856 0ז20), והוא אופייני לטיפול במערכי וזיכרון. נפגוש בו רבות כשנעסוק בשפת 6. אוגר כתובת זיכרון - ז46015%6 4007655 ע'וסחחוסוא מערך זיכרון ערוצ כתובת אוגר כתובת זיכרון - ואאת ערוצ מידע תרשים א.6: אוגד כתובות הזיכרון 6 המדריך השלם לשפת 6 ניהול הפניות לכתובת בזיכרון מתבצע באמצעות אוגר הנמצא ביעיימ - אוגר כתובת הזיכרון. כדי לפנות לתא מסוים בזיכרון, המחשב טוען לאוגר וה את כתובת התא. הקשר בין מערך הזיכרון ליעיימ מתבצע באמצעות שני אפיקים (פס5ט). אפיק הכתובת ("805 4007655") - מוליך את הכתובת הנמצאת באוגר הכתובת למערך הויכרון; ואפיק הנתונים ('805 ז8כ") - מוליך את הערכיס בין האוגריס לבין תאי הויכרון. כבר הזאכרנו שמונה הפקודות ביעיימ מציין את מספר הפקודה הבאה שתיטען לתוך אוגר הפקודה. למעשה, טוען בו היעיימ את כתובת הפקודה. מערך הזיכרון של המחשב מכיל את פקודות תוכנית המחשב ואת הערכים (הנתוניס) המשתתפים בחישובים. כאשר המחשב מוכן לביצוע פקודה נוספת, מעלה היעיימ על אפיק הכתובת את תוכן מונה הפקודות (המכיל כתובת של פקודה) ועל אפיק הנתוניס המידע הוא מעביר את תוכן הפקודה מתא הזיכרון לאוגר הפקודה. לפעולה כזו קוראים מחזור זיכרון (6|6ץ6 /ץזסוחסוא). המעבד מספק אפיק כתובות (805 4007655) של 20 סיביות ובכך הוא מאפשר גישה למרחב ויכרון של 1 מגה-בתים %*2). זה הוא תחוס כתובות הזיכרון (בייצוג הקסדצימלי): ת""--"000000-0. המעבד רואה את הזיכרון כרצף אחד (אח8) של מיליון בתיס, אשר לכל בית ברצף זה יש כתובת המגדירה אותו. התוכניות המתבצעות במעבד רואות את הזיכרון בצורה לוגית כמחולק למקטעים בני 8, אשר השליטה בהס הינה על ידי אוגר מקטע ברוחב של 16 סיביות. כל מקטע כוה יכול להימצא בכל כתובת שהיא במרחב הזיכרון. כל כתובת במרחב הציכרון מחושבת באופן יחסי לאוגר המקטע בהתאס לסוג הפעולה. כך למשל, הוראות המתייחסות לתוכנית תשתמשנה באוגר מקטע 65, הוראות המתייחסות למחסנית תשתמשנה באוגר מקטע 55 וכוי. המעבד יכול לאחסן מילה (סזסשו) של 16 סיביות בוּיכרון בכתובת זוגית או אי-זוגית לחילופין, ללא מגבלה כלשהי. קיימת חשיבות לאחסון מיליס בכתובות זוגיות, כי הדבר מאפשר למעבד לקרוא נתון ברוחב 16 סיביות בגישה אחת לאפיק הנתוניס במחשביס החדשים הגישה היא ל-32 סיביות. בגלל מבנה החומרה אחסון הנתון בכתובת אי-ווגית יחייב שתי גישות של המעבד לאפיק הנתוניס ויאריך את ומן הביצוע של ההוראה. נראה עתה כיצד משתמש המעבד באוגרי המקטע לחישוב של כתובת אמיתית. כתובת אמיתית במרחב של 188 מורכבת משני אוגריס של 16 סיביות: אווגר מקטע 0800 500) ואוגר היסט (066660). לצורך חישוב הכתובת האמיתית המעבד מחבר את התוכן של שני האוגריסם בחיבור הזוזה: המעבד לוקח את אוגר המקטע, מזיזּ אותו שמאלה בספרה הקסדצימלית אחת ומחבר אליו את אוגר ההיסט. הבית התחתון (658 של מילה יאוחסן בכתובת ראשונה והבית העליון (58!) של המילה יאוחסן בכתובת הבאה. אחסון של כתובת בזיכרון בתוך משתנה המשמש כמצביע לכתובת תתבצע באופן דומה. נספח א': מבנה המחשב 407 סוגי זיכרון על הלוח הראשי במחשב האישי נמצאים שני סוגי זיכרון עיקריים: ויכרון התקני ואס 5, וזיכרון ראשי - ואגח. %יכרון סא מותקן בלוח הראשי של כל מחשב אישי ומאפשר קריאה בלבד. הוא מכיל את תוכנית ההפעלה הראשונית של המחשב האישי, הקרויה 8105 ואסף. הוא משמש למחשב האישי לפעולת האתחול 8000) ולהפעלת התקני חומרה וכרטיסי תיאוס המחוברים אליו. זיכרון אס אינו נמחק עס כיבוי המחשב, בניגוד לזיכרון ₪4. הוא קטן יחסית לזיכרון ₪ וגודלו בדרך כלל 8א16 ועד 25688 במחשבים המבוססים על מעבדי 80286 ומעלה. הזיכרון הראשי, הקרוי 84%, משמש את המחשב האישי בפעילות השוטפת. הוא מאפשר למעבד פעולות קריאה וכתיבה תוך כדי פעילות המערכת. תוכנית המתבצעת במחשב חייבת להימצא בויכרון הראשי, כדי שניתן יהיה לבצע אותה. התקשורת בין המעבד להתקנים ההיקפיים מתבצעת בחלקה באמצעות אזורים בזיכרון הראשי. זיכרון ₪ נדיף, כלומר בכיבוי המתח הוא נמחק והתוכן שלו אובד. זיכרון גח שעל הלוח הראשי נקרא ‏ ₪ דינמי (וזהחס), מכיוו שדרוש רענון (0חוח₪6/765) שוטף של תוכנו כדי שלא יימחק. הפעולה נעשית בחומרה והמשתמש אינו מעורב בה. רכיבי הזיכרון נמצאיס על הלוח הראשי במחשב ואס נדרש, גם על כרטיסי הרחבה המתחברים ללוח הראשי. במחשבים האישיים מותקניםס רכיבי זיכרון מסוג וזוא51 הנראים כמו כרטיס מתאס קטן ומכילים נתוניס בקיבולת של 18 ועד 16%8. רכיביס אלה מאפשרים גישה לזיכרון (בהתאם לסוג הרכיב) ברוחב 8, 16, 32 סיביות. ארגון הזיכרון "שקוף" לתוכניות מערכת ההפעלה ולתוכניות היישום השונות, ולמשתמש אין אפשרות לשנות דבר. מרחב הזיכרון המירבי שניתן לגישה על ידי המעבד מחולק לשני אזורים עיקריים: מרחב התוכנה (0-6408) ומרחב החומרה ([א1-640%). הזיכרון שמעל זא1 הוא זיכרון הרחבה (0ַש6ַמ6וא₪), שבו יכולה מערכת ההפעלה להשתמש כאזור זיכרון נוסף. אפיק הנתונים והעולם החיצון יחידות קלט/פלט - +ט0+שט0/+שסח! בין המחשב לבין העולס החיצון קיים קשר רב-גווני באמצעות מסופים, מדפסות, עכברים, עטי אור, מקלדת ועוד. הדרך בה מקושר המחשב להתקנים אלה מורכבת למדי, ולא נדון בכך. במחשבים שוניס השיטות שונות. בדרך כלל משתמשים ברכיבים אלקטרוניים נוספיס כמתווכים בין המחשב לבין התקניס אלה. ברוב המחשבים מסוג מיקרו ומיני מנוצלים אפיקי הנתוניס של מערך הויכרון בתוספת קווי בקרה לצורך עבודה עס ההתקנים. הפעולות להבאת הנתוניס לתוך היעיימ ולתוך הזיכרון נקראות קלט ופעולות הוצאת נתונים מהיעיימ ומהזיכרון נקראות פלט. 8 המדריך השלם לשפת 6 התקני קלט/פלט חיצוניים כונן תקליטונים ציב =( 8 ָ א ה 6 י ָ 5 א 8 א א 8 5 ו צ ג 8 8 א 8 א 5 א ָ צר א / / / / / אה ' א / יש ₪ 7. /% מערך זיכרון תרשים א.7: מעדך קלט/פלט בשרטוט ניתן להבחין בחיבור בין היעיימ לבין מערך הזיכרון וההתקניס החיצונייס באמצעות שני ערוציס עיקרייס: אפיק הכתובות ואפיק הנתוניס. אפיקיס אלה משותפים לזיכרון ולהתקניס שסביבו. הנתוניס עובריס במחשב באמצעות אפיק הנתונים (₪05 הזהכ). מבנה האפיק משפיע על העברת הנתוניס בין ההתקניס אל הלוח הראשי והזיכרון. אנו מכיריס מספר סוגי אפיקים: > אפיק 154 > אפיק ₪154 > אפיק ה5םצ (8005 |1068) > אפיק 061 > מיקרו-אפיק גישה למרחב הקלט/פלט מרחב הקלט/פלט (1/0 - %שסלטס/זטסח1) הוא תוספת למרחב הזיכרון במעבד. המעבד ניגש למרתב זה על ידי הוצאת כתובת אל אפיק הכתובות. המעבד מאפשר למתכנת לשלוט על מרחב זיכרון וה באמצעות שתי פקודות מיוחדות השייכות לאוסף הפקודות של המעבד: הפקודות א1 ו-ז00 מאפשרות להעביר נתוניס מהמעבד למרחב הקלט/פלט ולהיפך. בפעולות אלו משתתף אוגר 41 להעברת נתוניס ברוחב 8 סיביות, או אוגר א להעברת נתוניס ברוחב 16 סיביות. אל כתובות 0 עד ה"=-00 במרחב הקלט/פלט ניתן לגשת במיעון ישיר. גישה לכתובות ח100 ואילך במרחב הקלט/פלט נעשית באמצעות אוגר אס שערכו מציין כתובת במרחב הקלט/פלט. נספח א': מבנה המחשב 409 שיטות לייצוג נתונים בשפת 6 המחשב האלקטרוני מיטיב לטפל בחישוביס מספריים ובביצוע פעולות מתמטיות. יכולת זו נגזרת מיכולת האחסון הגבוהה שלו וממהירות פעולתו. יחידת המידע הבסיסית במחשב הינה הסיבית טום). ערכה של סיבית בודדת יכול להיות 0 (אפס) או 1 בלבד. כדי לייצג מידע מגוון יותר מ-1 ו-0, צריך לקבצ יחדיו מספר סיביות. לדוגמה, באמצעות שתי סיביות ניתן לייצג ארבעה ערכים : 00, 01, 10 ו-11 (0, 1, 2 ו-3). יחידות המידע במחשב מיוצגות באמצעות קבוצה של 8 סיביות הקרויות בית (ס6ץ) או תו, או בקבוצות גדולות יותר הקרויות מילה (זס/). גודל המילה המקובל הינו 32 סיביות. 16 סיביות הינן חצי-מילה (סזס/-]/38). באמצעות הבית ניתן לייצג 256 ערכים (מ-0 עד 255), שהס מספר הצירופיס שניתן להרכיב מ-8 סיביות (2%8=256). מספריס אלה קרוייס מספרים בינאריים (פזססוחטח עזהּחו8). ניתן לקבץ יחדיו סיביות רבות יותר כדי לקבל מספריס בערכים גדולים יותר. למשל, אם נתייחס לזוג בתים, כלומר 16 סיביות - נוכל לייצג את הערך 2.16-1=65,535. שפת 6 מאפשרת למתכנת לציין ערכים בשלוש שיטות ייצוג שונות: עשרונית, אוקטלית והקסדצימלית. לא קיים ייצוג ישיר של מספרים בינארייס. ייצוג עשרוני: | כל מספר, בו מצוינות הספרות 9-0, נחשב ב-6 למספר בייצוג עשרוני. ייצוג אוקטלי: כל מספר, המתחיל בספרה 0, ייחשב למספר בייצוג אוקטלי. שפת 6 מחייבת ששאר הספרות במספר תהיינה 0 עד 7. לדוגמה: 072, 025, 017. ייצוג כל מספר בעל הקידומת א0 (אפס והאות הקטנה א) ייחשב למספר הקסדצימלי: | בייצוג הקסדצימלי. לדוגמה : 20א0, 55א0, ב=א0, ס6א0, 42א0. שפת 6 מאפשרת למתכנת לבצע פעולות ברמה של סיביות ולטפל גם במספרים בינאריים, אך בדרך עקיפה. בנספח זה נציג תיאור של שיטות הייצוג של מספרים בינארייס ואריתמטיקה במספרים בינאריים. אנו ממליצים ללמוד חומר וזה, במידה ואינך שולט בו כראוי, כדי שתוכל להפעיל טוב יותר את שפת 6, בנושאים מורכבים. ייצוג דצימלי (עשרוני) נפתח בהסבר של הייצוג הדצימלי (עשרוני) שבו אנו משתמשים. נתבונן במספר 473 המיוצג בבסיס 10. נוכל לרשוס : 143 4*100:% 7*10 + 31 או: 30 + 7*101 + 4*102 143 0 ההמדריך השלם לשפת 6 במספריס עשרונייס קיימות לרשותנו 10 ספרות (כי מספר הספרות הוא כסדר הבסיס). הספרה הראשונה הינה 0 ולכן עשר הספרות של הבסיס העשרוני הינן 9-0. כאשר מחבריס שני מספרים נרשוס אותס וה תחת זה באופן שטורי היחידות יהיו מכווניס בימין. נחבר כל טור בנפרד. בכל מקרה בו יתקבל סכום שתי ספרות הגדול מ-9 ייווצר נשוא (ץזז63), אשר נעביר לטור הבא, השמאלי יותר. לדוגמה, נחבר 1053 + 13: <---- נשוא = = ב] 62 :| ת) ת) 41| כ 60| ו ייצוג בינארי מספרים בינאריים מכילים את הספרות 1 או 0 בלבד, ועל כן נאמר שהם מיוצגים בבסיס 2. נחשב את ערכו של מספר בינארי: = 01101011 = 1*20 + 1*21 + 0*22 + 1*23 + 0*2% + ל1*2 + 1*26 + 0*27 = = + 1*64 + 1*32 + 0 + 1*8 +0 + 1*2 + 1*1 = 7 = 64+32+8+2+1 בייצוג עשרוני נקבל: 10710 = 011010112 נחבר שני מספריסם בינארייסם בדרך דומה לחיבור של שני מספריס עשרוניים. כלומר, נרשוס את שני המספריס כך שהספרות המייצגות את היחידות תהיינה זו מעל זו, ונחבר כל טור בנפרד. אס התוצאה גדולה מ-1, נעביר נשוא לטור הבא. לדוגמה, נחבר 1 + 1011 : 1 1 1 1 <---- נשוא 1 0 1 1 0 בדוק בעצמך את ערכי המחובריס ואת התוצאה, ובחן את עצמך. שיס לב/ כללי החיבור בבסיס 2: 0 פס ₪ = 3 ' + 5 3 ₪ 3] ו - ס נספח א': מבנה המחשב 411 הפיכת ייצוג עשרוני לייצוג בינארי בכדי לקבל ייצוג בינארי של מספר עשרוני, עליך לבצע את התהליך הבא: חלק את המספר העשרוני ב-2 ורשוס את המנה ואת השארית. כעת חלק את המנה ב-2 ורשוס את המנה החדשה והשארית החדשה. המשך בתהליך זה עד לקבלת מנה "אפסיי. המספר בייצוג הבינארי הוא סדרת השאריות, בסדר כתיבה הפוך. לדוגמה, נבצע את התהליך עבור המספר העשרוני 107 : שארית 3 = 2 / 107 מנה סדר 1 6 = 2 / 53 קריאת 0 3 = 2 / 26 11 10 10 1 0 <= = המספר 1 6 2 / 13 בייצוג 0 3 2 / 6 הבינארי 1 = 2 / 3 1/2 = 0 1 0 0 ייצוג מספרים בינאריים שליליים כאשר עוסקים במספרים עשרוניים, אנו מצייניס מספר שלילי על ידי הוספת סימן מינוס (''-'י) משמאל למספר. כדי לחבר מספר שלילי עשרוני למספר עשרוני חיובי, אנו נוקטיס בתהליך חיסור במקוס בתהליך חיבור. הסימן 'י-יי הוא סימן גרפי חמורה לנו כיצד לנהוג. העדה/ במקרה של מספרים בינאריים וייצוגם במחשב באמצעות סיביות, משתמשיס בסיבית השמאלית ביותר לסימן. אם היא בעלת ערך 0 - המספר חיובי, ואם 1 - המספר שלילי. כלל זה גורס לכך שטוות המספרים שנוכל לייצג על ידי בית או מילה, יהיה קטן ממספר הסיביות: טווח הערכים שאפשר לייצג בבית הוא (27) 128- עד 7. כדי לחבר שני מספרים בייצוג בינארי עלינו לבדוק תחילה את ערך סיבית הסימן, ובהתאס לכך לחבר או לחסר את המספרים. אולם, כדי שאפשר יהיה לחבר מספריס בינארייס חיוביים ושליליים באמצעות אותו התהליך, נשתמש בשיטת ייצוג שונה למספרים שליליים. שיטת ייצוג זו הינה שיטת משלים-2 טחסוח6!קוח 60 5'סאוד), אשר נתאר אותה בקצרה. שיטת משלים-2 מספר בינארי חיובי הוא מספר שהסיבית השמאלית שלו היא 0. לדוגמה, במספר בינארי חיובי בעל 8 סיביות, שבע הסיביות הימניות מייצגות את הערך והסיבית השמאלית - את הסימן 0. בכדי לקבל ייצוג של מספר בינארי שלילי בשיטת משלים-2 2 המדריך השלם לשפת 6 (?ח6וח6!קוחס6 5'סצוד) נרשוס אותו תחילה כמספר חיובי, נחליף כל ספרה 1 ב-0 וכל ספרה 0 ב-1 ונוסיף לתוצאה 1. דוגמה: המספר הנתון (49) 7 החלפת 1 ו-0 0 0 1 הוספת 1 1 1 1001 1 11 התקבל המספר הבינארי שערכו 49- בשיטת משלים-2. נחבר מספר וה למספר 83 (בייצוגו הבינארי) ונקבל: 0-.- = 110011112 1 = 010100112 1.141 5%=== תוא 3 1100 1 11 4 = 2 + 32 = 1*21 + ל1*2 = 0 1 0 0 0 1 0 0 ואכן, 4 = 49 - 83 = (49-) + 83 לסיכום, כדי לחסר מספר מחברו, הופכיס אותו למספר שלילי בשיטת משלים-2 ומחברים אותו. שים לב, שבמספר בינארי שלילי בייצוג משליס-2 הסיבית השמאלית ביותר הינה 1. כאשר החיבור גורס לכך שהתוצאה תהיה מחוצ לטווח הייצוג האפשרי לפי מספר הסיביות מקבליס מצב שגיאה, או אובדן מידע. לדוגמה, טווח ייצוג באמצעות בית בודד הוא 128- עד 127+ וטווח הייצוג באמצעות שני בתיס הוא 32,768- עד 32,767+. מצב שגוי ה נקרא גלישה (שוסוזפטס). תכונות של מספרים בינאריים לסיכום, נציג רשימת תכונות של מספרים בינארייס. א. במספר בינארי כלשהו, הסיבית הימנית ביותר קובעת אס הוא זוגי או אי-זוגי: 0 מספר זוגי. 1 מספר אי-זוגי. ב. במספר בינארי המיוצג בשיטת משלים-2 הסיבית השמאלית ביותר קובעת את הסימן : 0 מספר חיובי. 1 מספר שלילי. נספח א': מבנה המחשב 413 ג. | אם נסיט את כל הסיביות של מספר בינארי מקוס אחד שמאלה ונוסיף סיבית 0 מימין, יהיה ערכו של המספר הבינארי המתקבל גדול פי 2 מהמספר המקורי (דומה לכפל ב-10 בשיטה העשרונית). ד אם נסיט את כל הסיביות של מספר בינארי מקוס אחד ימינה ונמחק את הסיבית הימנית ביותר, תהיה זו חלוקה של המספר המקורי ב-2. ה. את הערך 1- נציג כך בשיטת משלים 2: ייצוג בינארי 112 ייצוג הקסדצימלי 6 1 ו המספר הבינארי בן 8 סיביות: 10000002 הינו בעל מעמד מיוחד. ייצוגו בשיטת משלים-2 תיתן את אותו מספר עצמו. מסיבה וו, במערכות מחשב מסוימות מוגדר צירוף וה כבלתי חוקי, ובמערכות אחרות מוגדר הצירוף כבעל הערך 128- וכך מורחב התחוס המותר עד 128-. בדומה, נקבל עבור מספר בינארי בן 16 סיביות את הטווח עד 32,768-. ייצוג הקסדצימלי ואוקטלי בכדי לקבל ייצוג הקסדצימלי של מספר עשרוני עליך לבצע את התהליך הבא: חלק את המספר העשרוני ב-16 ורשוס את המנה ואת השארית. חלק את המנה ב- 16 ורשוס את המנה החדשה ואת השארית החדשה. המשך בתהליך זה עד לקבלת מנה שקטנה בערכה מ- 16. המספר בייצוג הקסדצימלי הוא סדרת השאריות, בסדר כתיבה הפוך. לדוגמה, נבצע את התהליך עבור המספר העשרוני 1234 : שארית 2 דר - 6 / 1234 מנה 15 4 = -16/ 77 | 4 0 = 6 / 4 סדר קריאת המספרים בייצוג הקסדצימלי: 6ן(402). אך יש שיטה פשוטה יותר. קריאה של מספרים בינארייס הינה מסורבלת בגלל מספר הספרות הרב. נוח יותר להשתמש בשיטת ייצוג הקסדצימלית או אוקטלית, כדי לייצג מספרים בינארייס, בגלל התאמה בבסיס. בשיטה ההקסדצימלית, לפי בסיס 16 (2*4), טווח המספרים הוא 0 עד 15. בשיטה זו נשתמש במספרים 0 עד 9 ו- עד =, עבור 16 הספרות. בשיטה האוקטלית, לפי בסיס 8 (23), טווח המספרים הוא 0 עד 7. כאשר רוציס לייצג סידרה של ספרות בינאריות על ידי מספר אוקטלי או הקסדצימלי, יש לחלק את הספרות הבינאריות לקבוצות של 3 ספרות או 4 ספרות בהתאמה. אס מספר הספרות אינו מתאים, יש להוסיף אפסים משמאל. אס המספר הוא שלילי בשיטת משלים-2 יש להוסיף ספרות 1. הוספת ספרות משמאל נקראת הרחבת הסימן (0ח₪6 ח0ו5) ראה טבלה א.1. 4 ההמדריך השלם לשפת 6 טבלה א.1: הצגת מספרים ב-4 בסיסים שונים מספר | מספר מספר בינאוי עוך אוקטלי הקסדצימלי עשרוני 6 6 6 יכ 6 +66 .65 ₪ 3 3 ₪ ₪ ₪ ₪ ₪ 4|ס ₪ א % %כ6 = = 65 > = ]> 61 5 = 6.6 | = ₪ = :60 הי 62 לש6י. יב || 6 לי 6 שק = 65 :וב > "יב ₪ ₪ ₪ ₪ ב0|4 9 0 ₪ ₪ ₪ ₪ ש| כ( 0ס 0 0 0 0 0 ס|ס 0 0 0 0 0 0 ש|₪ ₪4 3] 72 3 63 000690 0 0 כ 63 כ = ₪ 7 4 || 620 6-כ כ ב .ור ₪ := | 62 ₪ ₪ ₪ ₪ כ |[ פ < שש ₪ ש ₪ פ|כ 20 0 (*) אפשר לכתוב את האותיות ג עד = כאותיות ייקטנות'": 8, פ,... 1. 2 ₪ ב נבחן עתה את הערכים העשרוניים של מספריס בבסיס אוקטלי והקסדצימלי. לדוגמה, נהפוך את המספר הבינארי הבא לייצוג אוקטלי: 01011010. נחלק את המספר (החל מימין) לקבוצות בנות 3 סיביות : 010 011 001 ָ 0 0 נקבל את המספר האוקטלי: 2 3 1 כלומר, 1328 = 01011010 לדוגמה, נתון מספר בינארי בן 8 סיביות: 01101101. נפצל אותו לשתי קבוצות בנות 4 סיביות כל אחת ונקבל: ליצוג בינארי: 11 210 ניתן בדרך דומה להציג מספר הקסדצימלי כמספר בינארי: מחליפים כל ספרה ב-4 סיביות מתאימות. ערכו העשרוני של המספר ההקסדצימלי הוה הוא : 40 = 13 + 96 = 2*160 + 6*161 = 6ן60 נספח א': מבנה המחשב 415 חיבור מספרים אפשר לחבר מספריס בבסיס הקסדצימלי או אוקטלי כמו שמחבריס מספרים בכל בסיס אחר. כאשר מחברים מספריס הקסדצימליםס הנשוא מחושב עבור תוצאות סיכוס הגדולות מ-=. בחיבור של מספריס אוקטליים, הנשוא מחושב עבור תוצאת סיכוס הגדולות מ-7. טבלה א.2: סיכום כללי ההמדה מבסיס לבסיס למספר | סדר הפעולות בבסיס חלק את המספר בבסיס 10 בבסיס היעד א, עד אשר החלק השלס שווה ל- 0. התוצאה המתקבלת היא סדרת השאריות בסדר כתיבה הפוך. העבר תחילה את המספר בבסיס א למספר בבסיס 10, ולאחר מכן העבר אותו למספר בבסיס +. א 10 ץ ו חלק את המספר בבסיס 2 לקבוצות של 4 החל מימין. | ו חלק את המספר בבסיס 2 לקבוצות של 4 החל מימין. 2 2 16 10 2 2 8 העבר את המספר בבסיס א למספר בבסיס 10, ולאחר 16 מכן העבר אותו למספר בבסיס ץ. 10 16 קוד ייצוג תווים המחשב מקבל מהמשתמש את הקלט מהמקלדת ומאמצעי קלט חיצוניים, כמו סורק, למשל, ומוציא פלט מוקרן על מסך, או מודפס על נייר במדפסת. המחשב בעצמו מתרגס את התווים, מספרים ותמונות לשפה שהוא יימביןיי (פעולה זו מאיטה את פעולות המחשב). הנתונים מיוצגים ברכיבי המחשב בשיטה הבינארית הפועלת לפי בסיס 2, שבה קיימים רק שני צירופיס שונים (0, 1). בעזרת צירופים אלה יוצריס את התבניות של כל התוויס האפשריים. כלומר, סדרות של מספרים בינארייס. כפול את הספרות במספר א בחזקות עולות של א מהסוף להתחלה, החל בתזקה 0. נקודות ציון? > כל ההתקנים של המחשב פועלים בשיטת הייצוג הבינארית. > מטעמי נוחות אנו מציגים את סדרת הסיביות בחלוקה ל-4, בשיטה ההקסדצימלית. 6 המדריך השלם לשפת 6 תקן ו|50 6 66+ח! הסו+3 וה זוס+ח] זס+ 6006 0370ה5+3 ה3סווסחו תקן 45611 או קוד 45611, הוא תקן בינלאומי לייצוג תוויס, כגון: אותיות, ספרות, תוויס גרפיים על בסיסי טקסט, תוויס בקרה מיוחדים. תקן זה נפוצ בעיקר במיקרו מחשבים. על פי שיטה זו כל תו מיוצג על ידי 8 סיביות (בית אחד) ומזוהה באופן חד ערכי. בעזארת שיטת ייצוג זו ניתן לייצג 256 תוויס שוניס (המסומניס בערכיס הדצימליים 0 עד 255), או 25. כאשר נדליק את כל הסיביות בבית אחד נקבל: 25(8) > 1(2 1 1 1 1 1 1ב 1) לכן, המספר הגבוה ביותר שיכול להכיל הטיפוס ז8ח6 60חטופחט הוא 255. יחד עס הערך 0, לפנינו 256 אפשרויות שונות. האס זכור לך מדוע בית אחד יכול להכיל מספר בעל סימן בטווח 127- עד 127+ בלבד! אם כך, כיצד נייצג את התו "4" נבדוק בטבלת 85611 המצורפת, וניווכח שערכו המספרי של התו ייהי' הוא 65 בבסיס 0. נמיר את הערך הזה מבסיס 10 עשרוני לבסיס 2 בינארי, ונקבל: 0 1000000000 1 27 2% 25 2% 23 22 21 0 0-64 0000000001 4 + 1 = )65(10 מכאן, שהתו 4 מיוצג בבית כך: ;(2 0 00 100 0). נקודת ציון/ משפטים /מחרוזות), נתונים שונים, ותוכניות מיוצגות על ידי סדרות ארוכות מאוד של ספרות 0, 1. | שיס לב/ טבלת 456011 מכילה תווים שונים בסדר הבא: תווי בקרה, תווים מיוחדים, ספרות, אותיות אנגליות גדולות, אותיות אנגליות קטנות, אותיות עבריות, תווי גרפיקה על בסיס טקסט. תקן 5500/65 6), 306 667+ח! 661 60060 עזהּחום 060ַח0+א= תקן 586016 הוא תקן בינלאומי לייצוג תוויסם כגון: אותיות, ספרות, תווי בקרה מיוחדים. התקן נפוץ בעיקר במחשבי 18% גדולים. על פי שיטה זו, בדומה לתקן 5611, כל תו מיוצג בעזרת 8 סיביות, ולכן ניתן לייצג 25 תוויס שוניס, כלומר 256 תוויס (0-255). נספח א': מבנה המחשב 417 טבלת קוד ||450 זן:35 צזהּחהוע 1 א16ן 661 (וטא) 1נזצד 0020( 000 00 0 1 01 001 "0 56211 )519811 01 168061( (1א16 01 ז5131) 5% ס(ס0" 002 02 2 (1א6 01 6םם) אד [0 03 033 3 (5ת8ז 01 6תם) 007 0000 04 4 4 (עזוטףמם) את 00000 055 55 5 (46%00/10086 6צו0511ק) 0006 00" 006 06 6 (₪611) .51 0 007 07 7 (806ק5 880%) 35 ס0 00 08 8 (80] [19תס2וזס11) ד11 1 וו 09| 9 (1660 6תו/1) ת,1 סק[ 012 04 10 (180 [68וזז6ש) דצ 001 03 08 וו (1666 נחסזת) עת 00 04 00 12 (תזטז6ז 28771880)) 2) 01( 05 כס 3 (זטס 5018) 860 00 06 05 14 (םו 80ות5) 51 01 07 02 5 (76ק6568 א%ח1] 0818) טס 000( 020 10 16 (1 01ז1ת60 06106) 01 [000 021 ו 7 (2 01ז1ת60 26%166) 02 0001( 2 12 8 (3 601101 6%106) 03 1 03 13 9 (4 1101מ60 064106) 604 00000 025 14 20 (16086שו0ת486% 6צ7465811) א צך 0001 024 15 21 (1416 פ5טסתסזת6תץ5) וצ 00 26 6 22 (01008 17805 01 6םם) מיד וו01וססס 277 7 233 ([028266)) צן/0) 000 000 8 24 (ותטו166/א 01 6תם) ואם 0 11 9ן 25 (5₪0511016) 5118 00 2 א | 26 (06ק2508) ₪56 00011 33 8ן 27 (ז810ז8ק56 7116) שק 00( 4 סן 28 (ז810ז8ק56 קט0סזנ)) 25) [[ 5 סן 29 (ז8:810ק56 63460076 ₪5 0 56 מן 10 (ז80ז8ק56 זוח[1) 15 21 27 שן 31 (860ק5) 55 0000 00 20 32 8 המדריך השלם לשפת 6 60 ד 25 % + ₪ ₪ = תס 0-1 ס 0 ש ₪ ש ₪ [' ₪ 3 ₪ את צעהפת1ם 1 1-0 1 00 "1 0 "1 0 1 09 1 0 "1 0 "1 "00 "1 090 "1 0 "1 80 "1 "])"090 "1 0 1 0 "1 80 "1 "0 "(1 "90 "(1 "0860 "(1 "(80 "(])1 "(0 "(1 "90 "1 "090 6% 1 211 3 2 34 23 355 21 36 25 7 26 38 27 19 28 0 29 1 24 2 23 3 20 8 25 5 28 6 20 7 30 48 21 9 2 50 33 1 33 2 55 3 36 3 37 55 8 66 159 57 34 8 38 9> 30 9> סב 1 מב 02 שב 3 0 8 1 5 2 6 3 7 8 08. 5 9 6 09 47 1 48 12 9 3 4 7% מּף 75 0 76 נספח א': מבנה המחשב 419 0-11 צסעפתנם 01 6% 11| א 1 15 סף 77 א 0 116 כ 8 0 12" 117 שף 9 כ 000" 129 0 00 = 1 121 1 1 8 0.0 12 2 12 5 1(" 3 3 3 / 90 12 4 חן ט 11 15 5 55 צּ 0(" 156 56 66 ₪ 1" 127 57 87 א 000 139 58 08 צ 01" 131 9 9:ּ 2 80" 112 4 90 ו 1" 13 83 1 9 13 0 2 ן 01 15 525 3 2 0(" 156 5₪פ 8 " 1" 13177 5 55 000 19 9 6 8 1" 11 1 97 ס 10" 12 2 08 6 1 13 3 9(> 5 989 18% 8 | 6 1 15 5 11 4 80 1%6 6 12 ₪ 1" 17 7 13 מ 0" 19 8 108 1 1 11 9 155 1 0 12 4 16 א 1 13 68 17 1 989 14 60 108 ג 1" 15 פ6 19 מ 0(" 16 65 190 ס 1" 157 67 11 ס 1090[ 9[ 9 112 - 1" 11 71 13 ע 90 12 2 11% 9 1 13 3 15 6 0 18 1% 116 גו 1 15 175 117 צּ 90 16 76 18 ש 1" 157 7 19 א 00" 179 8 120 0 ההמדריך השלם לשפת 6 11 צעהּתנם 1 אס 1 צַ 1" 11 19 121 2 8080" 112 78 12 ן 1" 13 18 13 / 0890" 1% 70 121 / 1" 15 פך 5 - 0" 176 7% 16 11" 117 שך 127 א 1000 200 100 18 0 11 201 41 129 ג 10 202 02| 130 ד 11 203 33 11 ה 0860 208% ז: 12 : 11 25 5 13 ז 10 206 66 13 ח 11 207 17 15 ט 6989 210 08 16 , 11 21 9. 137 ד 180 212 2 158 כ 111 213 08| 1399 ל 10686 21% 0 10 ס 11 25 80 11 מ 108 216 כן:) 112 ו 11 217 ב 13 נ 0 220 90 18 ס 11 221 91 15 ע 10 222 2" 1%6 ף 101 223 3 17 פ 8989 22% 4 158 . 11 225 55 19 צ 18980 26 %6 1%0 ק 11 227 97 11 ר 0868 220 08 12 ש 11 21 9> 13 ת 1890 22 94 18 90 11 23 98 15 פ 1200 2% 90 156 0 1 205 ספ 17 8 980 276 כ 1588 1 11 237 קפ 1599 8 10 200 0 100 + 11 21 1 11 6 10 22 2 12 6 11 23 3( 13 8 1686 2 3 18 א 1 275 55 15 נספח א': מבנה המחשב 421 11 צעהּתנם 1 6 1 5 190 26 46 16 6 11 27 27 17 / 89 2009 38 1=8 5 1011 21 39| 19 8 90 202 4ב 19 9 11 23 פה 171 מ 1989 2% 46 112 1 11 205 פג 13 3 1890 206 כ/ 1% מ 11 27 בו 15 2 189 200 0 176 - 11 201 21 17 / 08 202 2 18| - 1101 203 3 1439 16 208 4 10 11 205 55 11 190 206 56 12 ך 11 207 57 13 189 270 8 1% | 11 21 9: 15 090 272 4 16 ן 11 23 18 17 1689 273 ספ 1=88 . 11 205 פם 1399 1 18090 206 מ 1% 1 11 277 שם 11 1189 2400 09 12 + 1111 2401 01 13 110 202 2 1 / 111 23 03 15 - 119689 208 04 1% 11 2055 5 17 110980 206 6 1%(8 1111 207 07 19 189 20 8 200 111 21 9> 201 0 22 04 202 111 23 08 203 ן 1189 2% 00 2084 - 11 255 פס 205 ז 1090 2416 5 206 1 1 217 ₪ס 207 1+ 10890 2420 520 208 ד 111 221 21 209 2 המדריך השלם לשפת 6 1 6% 11 | םגתהעצ‎ 0511 ז 790 111 22 252 210 1 111 223 3 211 5 11989 421 % 212 ז 11 5 55 213 21% 56 226 180 111 227 דפ 25 216 8 30 "90 217 59 431 111 11,898 432 ₪ 28 8 111 3 ם 219 229 0 248 189 111 45 פפ 221 90 24566 ספ 222 11 2437 שס 223 6 11869 240 0 28 6 1131 31 1 205 ת 1190 242 2 206 ח 1111 23 3 227 מ 1186868 3 מ 208 ס 11 25 5 209 גן 10 26 6 220 . 111 37 7 21 9 111890 2409 8 222 9 1111 21 9 223 פ 111808 2 כ 23% 6 111 3 פופ 205 - 168908 2584 סם 26 ס 111 255 פם 217 6 110 256 מם 208 ח 111 27 שם 209 - 11% 2400 09 209 + 111 401 1 21 > 1180 22 2 22 - 111 43 3 23 11090 208 םע 2% ] 111 5 5 25 + 180 26 6 26 - 111 2407 7 27 . 11189 270 8 28 / 111 271 9 29 . 11108080 4712 ו 20 ך 11 3 פע 21 ה 11989 247% סש 202 2 111 5 פק 23 . 1150 276 מע 2% 11 277 בע 205 נספח א': מבנה המחשב 423 נהלים לכתיבת תוכנית ב-6 באדיבות סיון מחשבים נספח זה מתאר נוהל לכתיבה תקנית בשפות ++6/6, ומבוסס על חומר אשר מקובל במכללת סיון מחשבים. הכלליס המתוארים כאן הס קוויס מנחיס כלליים, והשימוש בהס כפוף לשכל הישר של המתכנת בשפת 6 או ++6. מטרה הרגלי כתיבה נכוניס צריכיס לתרוס להשגת המטרות הבאות: + תוכניות קלות לקריאה, הבנה, ותחזוקה. > הקטנת כמות השגיאות (פפט5). > פישוט תהליך הניפוי (8חו90ט060). > כתיבה ממושמעת ומבוקרת, על פי כללים קבועיס. > מניעת מגבלות מיותרות להרחבת התוכנית בעתיד. %> יתר יעילות בהידור התוכנית. > כתיבת קוד יביל (8006זסס). > מודולריות ותמיכה בשימוש חוזר בקוד. גופן הכתיבה והבחנה בין סוגי אותיות העבודה על המסך נעשית בעורך מסטו60) מסוג 5611, שבו הגופן מייצר תוויס אחידיס בגודלס (לעומת תוויס יחסייס כמקובל בטקסט). לשפת 6 יש מהדריס רביס. יש מהדריס שבהס יש הבחנה בין אותיות גדולות וקטנות (באנגלית) ולכן, 396 אינו שווה ל-8486. לעומתם, יש מהדרים שאינס עושיס את ההבחנה הזו ועבורס 36 שווה ל-286. אנו משתמשיס באותיות גדולות וקטנות לשס נוחות קריאת הקוד, השמות וכדי. עס ואת, ההמלצה היא להימנע מהתייחסות למשתנים כשונים, בגלל שוני בסוג האות שלהס. 4 המדריך השלם לשפת 6 סוגי קבצים ושמות קבצים קובצי קוד (66זט0ס5) קובצ קוד 6 יקבל סיומת יי6יי ושס המתאר את תפקידו. אין הבחנה בין אותיות קטנות וגדולות. על כן, אפשר לכתוב 800060.6, או 800651.6, למשל. על כן, שני השמות האלה זְּהים, למרות שהם כתוביס באותיות שונות. קובצי כותרת (1ז6306ח) - קובצי 6!006חו פרטיים קוב כותרת פרטי, המשמש קוב קוד מסויס בלבד, יקבל את הסיומת ייח'י, ושס כשס קוב הקוד שלו, בתוספת קו תחתון (סחו|ז6סחט). כך למשל, יש לכתוב ה. /א1. אולס, אס שס קובצ הקוד כבר כולל 8 תווים, יוחלף התו האחרון בקו תחתי. קובצי כותרת (ז6806ח) - קובצי 06ט!6חו לשימוש הכלל קובץ כותרת שנועד לאפשר לקובצי קוד אחריס שימוש בקובצ קוד מסוים (מכיל הכרזות לפונקציות גלובליות וכדי) יקבל סיומת ייחיי, ושס כשס קובצ הקוד שלו. למשל: 5.0 ונדע. שמות מזהים (11675/+660!) שמות משתנים מכל סוג חייבים להיות שמות משמעותיים, המתארים את המטרה לה משמש המשתנה, הפונקציה, הקוב וכו'. משתנים מקומיים שס משתנה מקומי (בתוך פונקציה) יורכב מאותיות קטנות, ספרות, ותו קו-תחתון (6חו!ז06חט) להפרדה בין מיליס. למשל, 6וחהּח ₪6 6טסחו. יש מקריס שבהס מקובל לתת שס קצר למשתנה מקומי. %> משתנה המשמש כאינדקס פשוט ללולאה, יכול להיקרא ו, [, > וכדומה. > כשפונקציה מחזירה ערך המציין הצלחה או כישלון, ניתן לשים את הערך בתוך משתנה בשם / (סטן8/ חזטססז), בתנאי שהשימוש במשתנה מוגבל לאזור קטן בתוכנית. משתנים גלובליים שס משתנה גלובלי יורכב מאותיות מעורבות (אותיות קטנות וגדולות), כאשר אות גדולה מציינת תחילת כל מילה. למשל, 66006ח6011. ניתן להשתמש בקו-תתתון להדגשת ההפרדה בין המשמעות הכללית של המשתנה, למשמעות המסוימת שלו. למשלק, 5ז056!| 06ס₪. נספח ב': נהלים לכתיבת תוכנית ב-6 425 מאקרו - הגדרות 6ח0611 שס מאקרו יורכב מאותיות גדולות, ספרות, קו-תחתון להפרדה בין מיליס. למשל, =6אה א דאזגאוא פאזן פאס. פונקציות מקומיות - 6ו5%8 שס פונקציה המיועדת לשימוש פנימי של קוב קוד יחיד יינתן לפי אותס כלליס של משתנה מקומי. למשל, ()6 66ץ0|כוח6 680ז. פונקציות גלובליות שס פונקציה המיועדת לשימוש גס מחוץ לקובץ הקוד בו היא מוגדרת, יינתן לפי הכלליס לכתיבת שס של משתנה גלובלי. למשל, (5% ו60אחו |ץח6סז=. איברים ב-+6ש5%7 או חסוחט שמות איבריס במבניס יינתנו לפי הכלליס לכתיבת שס של משתנה גלובלי. למשל, .ות שיס לב לנקודה המפרידה בין שס המבנה (משמאל) לבין שס השדה שנמצא בו (מימין). איברים ב-וחטח0 שמות איבריס באנומרטור יינתנו לפי כללי הכתיבה של שס מאקרו - אותיות גדולות ומיליס מופרדות בקו-תחתון. הזחת הקוד הקוד נכתב משמאל לימין, וכל ההזחות מתייחסות לשולייס השמאלייס של המסך. פקודה התלויה בפקודת (אס טת=! 20) 15 תנאי, או לולאה, תוסט 3 ; (טש) םשגוס26 רווחיס ימינה. אס בלוק של קוד תלוי (++1 ;מם16 צץ1>8228 ;1=0) בפקודת תנאי או לולאה, הסוגרייס המסולסלים ;[1]צ8228=+ - 8ת510 (פתיחה וסגירה) יוסטו 3 [1] צ1[*8228] ץ8228=+ 505 51008 רווחיס ימינה, והפקודות בבלוק יוסטו 3 רווחיס נוספים ימינה. 6 המדריך השלם לשפת 6 בפקודה ח6זוא5, (ע628%0ק0) 50156062 הסוגרייסם המסולסליס (פתיחה וסגירה) יוסטו 3 רווחיס ימינה, שורות ; 1 ,8065016) 61020200 8% :]'*' 0886 1 ,826801%) 1גותת62+02ק = טע הפקודה 6856 יוסטו 3 רווחיס נוספים ימינה, הפקודות עצמן יוסטו 3 רווחיס נוספיס ימינה. ; 268% :1 ;תס[תתטפס כסתם טת בפקודה ח6ו/ו5 הפקודות (ע628%0ק0) 581602 לביצוע קצרות מאוד, [ ולכן מותר להציב אותן קל ;6ג1בט 26851 בהמשך ל-6856. זהו גם ו המקרה היחיד בו מותר ;עס ;78106 = 1גו68ע לכתוב שתי פקודות בשורה אחת (פקודה כלשהי ולאחריה הפקודה א :018 ; (7089תאמפס כ22 עת) םעגט66ע בהגדרת פונקציה אין () 60628ם126606 סנ1נסט צורך להסיט את ו הסוגרייס המסולסלים 2 6ם1 התוחמיסם את הקוד. כשיש קינון של פקודות, ('/'== 8602ע6ק0) כל פקודת בקרה התלויה ָ בקודמת תוכנס לבלוק (0=! 6ט81ט) 15 התחוס בסוגריים 2 =/ 68016ע2 מסולסלים, גם אם זוחי פקודה בודדת. נספח ב': נהלים לכתיבת תוכנית ב-6 427 כשיש שימוש במבנה ('/'=! ע00628%0%) 15 +ו-6!56-ז1, והפקודה זו ; (מ628%10ק0) מ28100628610 סאתץ 6+0ק השנייה שונה לחלוטין 56 מהראשונה, הקינון יהיה רגיל. הפקודה 6|56 תוסט כמו הפקודה + שקדמה לה. (0=! סגו| ;8106ט =/ 6| כשיש שימוש במבנה (0 == ("808" , מ628%10ק0) קת6? זו-6!56-ז1, והפקודה + 7 = השנייה דומה (0 == ("1טת" , תס2861ס6סס) קת5626 לראשונה, הקינון = יכול להיראות ("ט1הף" ,ת628610סס) קת5626) יימקבילייי. (0 =! 6ו81ץ) ;6מ1פט =/ 68016ת2 בהגדרת משתנים ייווצרו (010ט) ת81ת ס1סע שתי עמודות: עמודת ו 6 ועמודת שמות. תווי ;%ת06ת86ק₪6 6606 6סטעמ56 נקודה-פסיק (;) ייכתבו 0 בעמודה נוספת, כדי שלא , ו 2 טע %ם1 יפריעו לקריאת השמות. בהגדרת פונקציה, , 0תעאס 52108%) 081001866 11086 יירשמו הפרמטריס ,בתעהק 11086 בדומה להגדרת משתנים. ( 6006 קס 8%ם0 ריווח בין פקודות > שורת הגדרת משתנה תגדיר משתנה אחד בלבד, אלא אס היא מגדירה מספר משתניס פשוטיס המשמשים לאותה מטרה (למשל, אינדקס פשוט ללולאה). ₪2 ,כ ,1 סם1 > בין שורות של הגדרת משתניס לא יהיה רוות. + בין הגדרת המשתניס לפקודות הביצוע יהיו שתי שורות רווח (אין זו חובה, כמובן ואפשר להסתפק ברווח של שורה אחת). 8 המדריך השלם לשפת 6 > שורת קוד תכיל פקודה אחת בלבד (חוץ ממקרים מסוימים ב-ח566). + ביו שתי פקודות שאינן חלק מאותה הפעולה תהיה שורת רווח אחת. > מותר להצמיד שורות קוד אס הן חלק מפעולה או מטלה אחת. ; (6תהת 5128% ,סתאת 11גו1) ץ56260 ₪ "" , סתאת 11גו1) 562686 ;( סתאת עגפ , סתאת 11:ג10) 562686 + פקודה התלויה בפקודת בקרה תיכתב בשורה שאחרי פקודת הבקרה. (0 =! 6ט810ט) +1 7 =/ 68016₪ץ > ההפרדה הוויוואלית בין פונקציות מתקבלת על ידי תיעוד הפונקציה, כמתואר בהמשך. פקודות בתוכנית 0 6 וזח 60 > בפקודות אלו רצוי להשתמש במקרים נדירים ומיוחדיס בלבד. כזכור, אנו רוציס בתכנות מבני, שבו אין מקוס לפקודות אלו. רצוי לתת הסבר קצר, לצורך העתיד. ו %> מותר לשימוש בתוך חסטואו5 (ראה להלן). > אין להשתמש ב-א68ז0 מחוצ ל-חסאואו5, אלא במקריס מיוחדים. רצוי לצרף הסבר קצר, שמא נרצה להבין מדוע עשינו זאת. ה6+ו/צ5 > בסוף כל 6856 שאינו אמור להמשיך ל-6856 הבא, יש לכתוב את הפקודה 68%זפ; גם בסוף ה-6856 האחרון. > בכל ח6וו5 צריכה להיות שורת %/06]80. זסז + רצוי לחימנע מריבוי הוראות אתחול או קידוס, חוץ מבמקריס פשוטים ביותר. לולאות 6!וח/ש..00, 6ווחצו, זס1 %> רצוי להימנע משימוש בלולאות ללא גוף. במקוס ;('()' =! [++]50) 6)|וחשש יש לכתוב: ('()' =! [562]1) 16נגתשט ;++1 נספח ב': נהלים לכתיבת תוכנית ב-6 429 קינון פקודות בקרה - 6!וחץו..ס0, 6!וחש, זס1, 0156, זו . % רצוי לחימנע מקינון של יותר מ-3 רמות. הגדרת משתנים רצוי להשתמש במשתנים מקומיים-אוטומטייס בלבד, ולא במשתניסם מסוג 55806 או |9|089 (אס משתמשיס במשתניס מסוגים אלה, רצוי לצרף הסבר קצר, למען הבנה טובה יותר בעתיד). ניתן להשתמש במשתנה גלובלי או סטטי, אס המשתנה מוגדר כקבוע 50חס6). כשיש צורך ברור במשתנה שאינו מקומי, עדיף להשתמש בסוג 50806, כדי להגביל את טווח ההכרה (50006) של המשתנה לקובצ יחיד. הגדרת קבועים . 0 קבועיס מספריים (למשל גודל מערך) יוגדרו בעזרת 6ח406. קבוצות של קבועיס (למשל קודי שגיאה של פונקציה) יוגדרו בעזרת וחטח6. קבוע תו - המתייחס לקוד 45611 - יוגדר כקבוע תווי, ולא מספרי. למשל, ייח'י. קבועיס שאמורים להיות בעלי סוג פָחס! ירשמו עם הסיומת 1, למשל: 501. קבועים שאמוריס להיות בעלי סוג 60ח9ופחט ירשמו עס סיומת 0, למשל: 9 קבועים שלמים שאמורים להיות בעלי סוג )08 ירשמו עם סיומת 0., למשל: 50.0 (כלומר נקודה ואפס). קבועיס בהס יש משמעות לערכיס של סיביות בודדות יינתנו בבסיס 16, כשמספר הספרות תלוי בסוג הקבוע (2 ספרות ל-ז608, 4 ספרות ל-+וסח5, 8 ספרות ל-פחסו). הקידומת תהיה א0, ולא א0 (רצוי א קטנה). הספרות =-8 תהיינה 'יגדולות". למשל, 00 אחי 1 8 11007 תדדת 6ם86+1+ אין להניח דבר לגבי הערך המספרי של קבועים - מלבד משתניס בוליאנייס, המקבלים ערכי 55/15 |ג=. למשל, במקרה של בדיקת הקבוע 1ווא, במקוס (שס %6%0)ו יש לכתוב: (ע12סא =! עסק 6א66) 15 0 המדריך השלם לשפת 6 הגדרות מאקרו - 6חו061א > יש להשתמש במאקרו בכל מקוס בו השימוש ישפר את הקריאות ואת התחזוקה של התוכנית. > מאקרו צריך להכיל ביטוי בודד בלבד: 0 מותר להשתמש בביטוי מותנה בתוך מאקרו. אין לקרוא לפונקציות מתוך מאקרו. כ אין לכלול פקודת השמה (%ח5%9%6706 %ח76ַח0ו855) בתוך מאקרו. 0 אין לכלול פקודת מורכבות (כמו + או 6!וחו) בתוך מאקרו. כ אין לכלול יותר מפקודה אחת במאקרו. > כשערך המאקרו איננו קבוע פשוט (למשל: מספר), יש להקיף את הערך בסוגריים (שס של מאקרו אחר אינו נחשב קבוע פשוט). למשל, ( (שפאמצאך התדעת) | (פטתם ההלצת)) טסתם 21087 תצצת 6ת6651+ %> כשמאקרו מקבל פרמטרים, חובה להקיף כל פרמטר בסוגרייס בכל פעם שיש שימוש בו. למשל, ((א)*(א)) (א)מתת02ס500 6ם4611+ כתיבת ביטויים + בתנאיס מורכבים, יש להשתמש בסוגריים, גם אס אין צורך טכני בכך (גס אם הסוגרייס לא משניס את סדר הקדימויות הרגיל). לדוגמה, ((ס<8) || (ס<8)) 15 % אין להשתמש בערך של ביטוי השמה, חוצ מהמקריס הפשוטים ביותר, למשל: (11ות == (81106)50ת = ע6ס)) +15 > יש להימנע משימוש בביטויים מותנים (::) בתוך הקוד. עדיף להשתמש בפקודה 81. > מותר להשתמש בביטוי מותנה בתוך הגדרת מאקרו. כתיבת פונקציות הגדרת פונקציות > פונקציות המשמשות לצרכיס פנימיים של קוב קוד יחיד, יוגדרו כסוג 5%806. > אס פונקציה אינה מחזירה ערך, יש להגדירה כ-סוסצ. % אם פונקציה מחזירה זחו, יש לציין גאת במפורש, ולא לסמוך על ברירת המחדל. נספח ב': נהלים לכתיבת תוכנית ב-6 431 > אם פונקציה לא מקבלת פרמטרים, יש לכתוב שוסט בין הסוגרייס בהכרות הפונקציה (6קשסטסזט). למשל, ; (10סט) ק6266ת50 נ1סט > בהכרזה על פונקציה המקבלת פרמטרים, יש לכתוב בהכרות הפונקציה את סוג הפרמטרים, וגם שמות משמעותיים. למשל, ;(8126 סם1 , 82287 * 7)1108%ץ56%2228 בנ1נסט ערך המוחזר מפונקציה %> כשמשתמשיס בפקודה חזושטז עס ערך, יש לכתוב את הערך בסוגרייס. > כאשר פונקציה מחזירה קוד המעיד על הצלחה או שגיאה, חובה לבדוק את הקוד ולהגיב בהתאס. %> כשיש אפשרות להתאושש ממצב השגיאה - יש לעשות ואת. לדוגמה, (1=! (6גו81ט6, "%06")+םת508) 16נ1תשט [ ;(" :ם8081 שֶע71 ...6ט1ט הַ65)"28ת1עס ; (ת5601) מ5ט1+1+ ] > כשאין אפשרות להתאושש ממצב שגיאה, יש לדווח על המצב במדויק ולצאת מהתוכנית. לדוגמה, ; (518₪ מפ0סא)81106ת = 2006 6266 (12סא == 2006 56266) 15 | ; ("מת.6טת1ףתסס 6'ם08 ...שעסתפת 0% סטס0")+6ת1צק ; (6%1%6)1 העברת פרמטרים לפונקציה > מבנים 60ט50) או איגודים (חסוחט) המכילים מבניס יועברו לפונקציות בעזרת מצביע, ולא במלואם, כדי לחסוך שימוש ב-5%86%. > כשפונקציה מקבלת מצביע לנתוניס שאין בכוונתה לשנות 50060 או מערך), היא תגדיר את הפרמטר כ-6005%. למשל, ;(פסתטסס פסת1 ,ץ8228 * 51086 86ם0ס0) צץ228תתט5 11086 > כל סוג אחר של ערך יועבר כמצביע, רק אס הפונקציה צריכה לשנות משתנה של הפונקציה הקוראת. אין להעביר מצביעיס שלא לצורך. 2 המדריך השלם לשפת 6 תיעוד קובץ קוד כתיבה בהתאס לכללים שפורטו מאפשרת לכתוב קוד 'מובן מאליויי 560 4 ח6והט006). יחד עם ואת, יש לזהות מקומות בקוד שאינם מובניס מאליהם, ולהוסיף הסבר בהערה. יש להשתדל לכתוב את ההסברים באנגלית ברורה, או בעברית ברורה - יש להימנע מכתיבת מילים עבריות באותיות אנגליות. גם רצוי להימנע מראשי תיבות שאינס מקובלים. בראש כל קוב יופיע בלוק הערה המתאר את הקובץ, תפקידו, הקשריםס עס קבצים אחרים, ומעקב אחר היסטוריית השינויים בו. ראה קוב 6.06!. > תיאור הקוב (ח050000) יכלול סקירה של תפקיד הקוב והפונקציות המסופקות לקבצים אחרים (פונקציות גלובליות). > בהערות (65זסא) יש לציין את האלמנטיס החיצונייס בהס תלוי הקובצ (פונקציות ומשתנים גלובליים, וכל מידע חשוב אחר. תיעוד פונקציה בראש כל פונקציה יופיע בלוק הערה המתאר את הפונקציה, תפקידה, הקשרים עם פונקציות אחרות, ומעקב אחר היסטוריית השינוייס בה. ראה קוב 8!6.06. > תיאור הפרמטרים יהיה קצר ויסביר את המשמעות של כל פרמטר. אין צורך לציין את שס הפרמטר או את הסוג שלו. > תיאור ערך ההחזרה יהיה קצר ו/או יכיל פירוט של הערכיס האפשריים. > בסעיף ייערך ההתחזרה'י יפורטו גם שינוייס המתבצעיס במשתניס של הפונקציה הקוראת. למשל, בתיעוד הפנימי של פונקציה כמו ()066, יש לכלול שורות אלו: % -0ם) 1811606 <++ תתשא - :78106 מעטפספם * * (1 תעאס) 1162טס סם עסס <++ תתטסא =! 2 9 6 פ5פת681םסס (1 תעק) ע116%טס 081162'8- * > בהערות (0%659א) יש לציין את האלמנטיס התיצונייסם בהס תלויה הפונקציה (פונקציות ומשתניס גלובליים), משתניס סטטיים בתוך הפונקציה, וכל מידע חשוב אחר. ו ו יי ו ו ; 1 סתהא 116ע / ; ל סט ; ; ו פמתעגוססת : נספח ב': נהלים לכתיבת תוכנית ב-6 433 0 שי 1 5סא ? ; | ת26₪81610/ם1+168%10בסא עסםסגות 6 , 5 מסנפעפעט 116181 / ס6סג1סתנ+ לבבב ב שב - 7% 05 ; *%/ +6 ו ו ו פמפצך ; */ ווי יו ו ו ו ו ו ו 5 צססתק ; */ יתנ ב ב + אתתססתתק-אזתא , 7 (10סט) מ81ת %ם1 ָ 4 המדריך השלם לשפת 6 וו ב ו ו */ ; > ג 006 - ; ל > 6פססגוס ; ; ות 55 5-ל , / א 5 תעג 50 ; , 8 5סא ; ; | ת26₪81610/ם1+168%10בסא עסםסגות 6 ; 0 מסנפעפעט 116181 ינ תיעוד של קטע קוד לעיתיס דרוש הסבר מפורט לקטע קוד כלשהו. לפני שורה או בלוק של קוד הדורשיס הסבר, אפשר לכתוב בלוק הערה: > גודל הבלוק יחיה לפי הצורך. + ההוזחה של הבלוק תהיה כמו זו של הקוד בו הוא נמצא. > יש לתעד אלגוריתמים מורכבים, או החלטות שאינן מובנות מאליהן. אס ההערה היא קצרה ומתייחסת לשורת קוד אחת, ניתן לכתוב אותה בסוף שורת הקוד, צמודה לימין העמוד. לדוגמה, (8106>0ט 188%6) 15 /* 6ט1הט 086 150828 */ ; --ם06%ם16 נספח ב': נהלים לכתיבת תוכנית ב-6 435 שימוש במשאבים > משאבים יוקצו רק בעת הצורך, וישוחררו כשמסתייס השימוש בהם, גס במצב של יציאת חירוס. במצבים קיצונייס אפשר להימנע מכך, כי המערכת עלולה לאבד את יציבותה, וכל פעולה נוספת עלולה להחמיר את המצב. > אין לסמוך על שחרור אוטומטי של משאבים בסיום התוכנית, אלא צריך לשחרר אותס במפורש. > רצוי שקטע קוד (פונקציה, קובץ, מודול) שביקש את הקצאת המשאב, יהיה גם האחראי לשחרורו. > אין לפנות אל משאב לאחר ששוחרר (למשל, זיכרון). > אין ליישחרריי משאב שלא הוקצה, או שכבר שוחרר. יש לשיס לב לכך בעיקר במהלך יציאת חירוס ושחרור מערכות שהקצאתן לא הושלמה. המשאבים שנמצאים בשימוש נפוץ: + ויכרון (הקצאה דינמית) %> קבציס (פתיחה/סגירה) + נעילות קבצים הידור > אס המהדר מפיק הודעות שגיאה, גם אס הן מסווגות כאזהרות (סחוחזּאו) ולא כשגיאות (זסזוס), חובה לתקן את הקוד. % יש להשתמש באופציות של המהדר כדי שיפיק את מירב ההודעות. > במקריס מיוחדים, מותר לבטל הפקת סוג הודעה וזה או אחר, במיוחד כאשר ההודעות צפויות בגלל שיטת התכנות. > יש להשתמש באופציות של המהדר, כדי שיאכוף כתיבה לפי תקן 51. 6 המדריך השלם לשפת 6 נספח ג פונקציות העכבר תוכנות לעיבודים גרפיים, תוכנות שירות רבות וגס תוכנות מסחריות (ולמעשה, מי לא) משתמשות בעכבר כאמצעי קלט/פלט. נציג בפניך תריסר פונקציות המשמשות לתמיכה בעכבר ונסביר את תפקידן, השימוש בהן ודרך הפעלתן. ניתן גס הסבר על הארגומנטיס הנמסריס 50| +ח6חט9זה) ועל ערך ההחזר (6טו8ע חזנססז). החומר בנספת זה נלקח באישור מתוך הספר: 6 / ההטסזטק 286% / (.₪0 0ח2) %וא!ססד 5'וסוהוחבּזטסזק 6 המסך הווירטואלי של העכבר לפני לימוד הפונקציות של העכבר, רצוי שתבין כיצד העכבר פועל בשילוב עס המסך. אפשר להשתמש במחשב במצבי מסך שוניס. במצב טקסט מוגדר המסך בתור 80 טורים ו-25 שורות. במצב גרפיקה יכולה הרזולוציה להגיע ל-640 על 480 פיקסלים. בגלל הרזולוציות השונות משתמש העכבר במה שנקרא בשם מסך וירטואלי (|₪זוצ ח5076), המורכב ממטריצה של 640 נקודות אופקיות מול 200 נקודות אנכיות (זוהי הרזולוציה!). כל מצב מסך אפשרי ממופה לתוך מרחב קואורדינטות של 200א640, כשהקואורדינטה (0,0) משמשת נקודה שמאלית עליונה של המסך. מצב- מסך ממש* (006 507660 |86₪08) קובע את צורת הגישה של העכבר אל המסך. לדוגמה, אס התוכנית שלך קיבלה מצב מסך לגרפיקה ברזולוציה של 200א640, תהיה התאמה של אחד לאחד בין המסך הווירטואלי למסך הממשי. פירוש הדבר, שתזוזה של נקודה אחת על המסך הממשי מתאימה לתזוזה של נקודה אחת על המסך הווירטואלי. ואולס, אס אתה משתמש במצב טקסט של 25א80 תהיה התאמה של שמונה לאחד בין המסך הווירטואלי למסך הממשי. לכן, תזוזה של יחידה אחת במסך המעשי נראית כמו תזוזה של שמונה יחידות במסך הווירטואלי. נניח שקבעת את מצב המסך ל-25א40. במקרה גה תנועה של טור אחד במסך הממשי מקבילה לתנועה בת 16 יחידות במסך הווירטואלי. עליך לטפל בתרגוס של ערכי המסך הממשי לערכי המסך הווירטואלי. נספח ג': פונקציות העכבר 437 לאחדות מפונקציות העכבר שיידונו בפרק זה יש ארגומנטים המצייניס את מיקוס העכבר במונחיס של שורות וטורים. ערכיס אלה של שורות וטורים נקוביס תמיד במונחיס של המסך הווירטואלי. פירוש הדבר, שאס המסך נקבע למצב טקסט 25א80, יצוינו הקואורדינטות של העכבר במכפלות של שמונה בגלל ההתאמה של שמונה לאחד ביו המסכים הווירטואלי והממשי. כדי לקבוע מהו המיקוס (שורה וטור) במסך הממשי, עליך לחלק בשמונה את הקואורדינטות של המסך הווירטואלי. תיווכח לדעת שהתכנות של העכבר יהיה הרבה יותר קל, אס תזכור שהעכבר ייחושביי תמיד במונחיס של מסך וירטואלי. קלוט את סטטוס העכבר: ()5+9%05 56טסוח אם אתה רוצה להשתמש בעכבר, ההיגיון מחייב שתתחיל בבדיקה אס קייס עכבר במערכת. כל פונקציות העכבר משתמשות בפסיקה 33א0 ומכיון שפסיקה זאת היא במידת מה בלתי רגילה, רוב המהדרים אינס מספקים פונקציה מוגדרת מראש עבורה (שלא כמו בפסיקה 21א0). לכן עליך להשתמש בפונקצית הפסיקה הכללית ((860זחו, המחייבת אותך להציג את מספר הפסיקה כאחד הארגומנטים של הפונקציה. הפונקציה הבודקת את הסטטוס של העכבר מוצגת בתדפיס הבא. / א א * א א 5 56סוח פונקציה ואת קובעת אס מותקן ז6שוז0 6פטסחח וכמה לחצניס יש בו. מספר הפונקציה (הערך 00א0) נטען ב-א8, ומתבצעת קריאה לפסיקה 33א0. 1 פססמתטת 6ם6 סם ע6סתנסס פמסססטס 6םת 1‏ :11856 ס6ת6תגסלת .6 פהםסספגטס 6פטסת 8 6ספגמוסת 8םת6 11 0ע26תסת 1% :סט1אט תעגופסת 6 .ססם 1% 0 ;5%81160ת1 ס 0811 6ם6 8166% 86ם6 6 1608סם אס 6םם ,()686ם1 . פתסססגוס שפגמוסת 05 מ6מחתטםת ו <ת. 005> 66מ1סתנ+ סופ פהטוס |" פומוב) פופו 3 טופ שוב ָ 7 פסמת תסנתט 8 המדריך השלם לשפת 6 8 ספטסת--00א0 מס1ססתטץ */ 002 = א%ב.א.1500 /; ; (61260 ,61260 ,33א%686)0ם1 /* פתסססטע 6פטסת 01 עססתטם 18 אס */ ;0%.א.1266 = פתסססטס* ;8%.%.1266 ממעטססץ / הפונקציה 00א0 מאפשרת לקבוע אם קיים עכבר במערכת. אחרי החזרה מקריאת הפונקציה (%860ח1, יהיו זמינות שתי יחידות מידע: 1 אם א8.א.60זו איננו אפס, פירוש הדבר שמותקן עכבר במערכת. 2 אם א8.א.60זו איננו אפס, אזי אפ.א.60זו יכיל את מספר לחצני העכבר הזמיניס. נסכם ואת כך: 5 = אף.א. | 1 - עכבר מותקן. 0 - אין עכבר מותקן. אפ.א.60זו | נותן את מספר הלחצנים של העכבר. לרוב העכברים השכיחים יש שני לחצנים ויש עכברים עס שלושה לחצנים. השימוש בלתצניס מוסבר מאוחר יותר בפרק זה. מכיון שאתה עשוי להשתמש מאוחר יותר בתוכנית במידע על מספר הלחצנים, יכיל המצביע אל יימונה הלחצניס'"י את התוכן של אס.א.60זו. הדלק את סמן העכבר: ()חס זספזוט6 6צסוח הפונקציה (56.5%8₪050סח קבעה את עובדת קיומו של עכבר, ועתה עליך להפעיל (להדליק) את סמן העכבר. / א א * א א ()חס זס5זט6 6טסוח פונקציה זו מאפשרת להדליק את סמן העכבר. הפונקציה מחזיקה מונה פנימי הקובע אס הסמן דולק; אס המונה הוא 0, הרי שהסמן דולק. על ידי קריאה לפונקציה זו ולפונקציה 02א0 אתה יכול לכבות ולהדליק את סמן העכבר. בס :11860 סת6תגסלת סט :סט1אט תעו%סת נספח ג': פונקציות העכבר 439 / א%*%%א* <ת.608> 66ט10סת1+צ+ (ס1סט)םתס עספעטס ס6פטסת ב1סט ָ 7 פשסמת תסנתגט 6 6 5 6 > ;0801 = א8%.א%.1200 ; (61260 ,61260 ,33א%686)0ם1 / קביעת המחדל של הפונקציה היא כיבוי הסמן של העכבר. בעת הדלקת הסמן של העבר הוא יופיע כברירת מחדל בצורת סמן-בלוק (זס5זט6 66-50/|6סו0). הפונקציה 01א0 של פסיקה 33א0 משמשת להדלקת סמן העכבר. כבה את סמן העכבר: ()11ס זוספזט6 56סחו סביר להניח שלא תרצה להחזיק את סמן העכבר דולק כל הזמן. אתה יכול לכבות אותו על ידי שימוש בקוד המוצג בתדפיס הבא. / א א * א א ()011ס ]60750 56סוח פונקציה גו מאפשרת לכבות את סמן העכבר על ידי הקטנה של המונה הפנימי שלו. עליך להפנות לסירוגין | קריאות | אל הפונקציה ()00 זספזטש 6טסח | ואל ()006/ 67501 6עסח, כדי שהפעולה תתבצע כהלכה. סש :11860 סת6תטסלת סט :פסטו1אט תעגוססת / א%*%%א* <ת. 005> 66גו1סתנ+ (055)0010 עספעגטס ס6פטסת 16סט ו 7 פסמת תסנתט כ = 0 56 ; (61260 ,61260 ,33א%686)0ם1 0 המדריך השלם לשפת 6 הפונקציה 02א0 של פסיקה 33א0 משמשת לכיבוי סמן העכבר. וכור שהעכבר פעיל גס כשהסמן כבוי. פירוש הדבר, שהפונקציות 01א0 ו02א0- אינו מכבות או מדליקות את העכבר עצמו. הן קובעות רק אס העכבר נראה לעין או לא. קרא את המיקום והסטטוס של העכבר: ()56טסוח 680 בתור התקן קלט, העכבר איננו מסוגל לומר הרבה למשתמש בו. ליתר דיוק, כל מה שאתה יכול להיוודע מהעכבר הוא המקוס שבו הוא ממוקס על המסך, ואס נלחצ אחד מלחצניו. הפונקציה ()6פטסוח 680ז תוכל לתת לך את שתי יחידות המידע האלו. / א א א א ()156סח 630 פונקציה וזו מאפשרת לקרוא את המיקום והסטטוס של העכבר. בעת התזרה מהפסיקה, יהיה ומין המידע הבא: אפ.א.60זו | סטטוס הלחצן, שבו סיביות 0 ו-1 מציינות את הלחצנים הימני והשמאלי. כאשר הלחצן לחוצ, ערך הסיבית הוא 1. אס יש לחצן אמצעי, הוא משתמש בסיבית 2. .זו | מצב אופקי של הסמן. %.א.זו | מצב אנכי של הסמן. מכאן, שערכי התחזרה ב-60זו מספקיס את המידע הדרוש. מס1ס1פסק חסע 6ם₪ סם ע6סת1סס אסע* סת 1‏ :118% סתסתגס?ת :1 ספטסת 01 מתט1סס 6ם6 0ם ע66םתנ1סק 1 ספת 1 ספטסת 05 ם1610פסק מסספטס 6ם6 מתעטס6ע 60 עססתנסס מסספטס* %ם1 . 5686108 סט :סו1אט תעגו%סת / אאא <ת. 008> 66ט1סת1+צ+ טושפו" 5 9601 פב > ותב ) פופו 5 ובס ָ פסמת תסנתט /* 858008 6ם8 תס1ס1פסק ספגוסת 26806 */ 003 = א3%.א.1500 ; (61260 ,61260 ,33א%686)0ם1 נספח ג': פונקציות העכבר 441 ;95.2.0%ת = תסססטס* ב ;/08.%.1260 = טסעל* / הארגומנט מועבר בשלושה מצביעים שלמיסם - אחד עבור כל מיקוס בשורה ומיקוס בטור, ואחד עבור סטטוס הלחצניס. בעת החזרה מהפונקציה 03א0, מכילים א6.א.ח6זו ו-א0.א.80זו את המיקוס הנוכחי של העכבר לפי השורה והטור. חשוב לציין שבעורת הפונקציה ()6פטסוח 1680 מתעדכן כל הזמן מיקוס השורה והטור של העכבר. המספר של הלחצנים אינו משפיע על המעקב אחר תנועות העכבר. לכן, אתה יכול להשתמש ב-()56ט0 1680 בכל פעס שאתה רוצה לדעת היכן העכבר נמצא, אך אינך מעוניין במספר הלחצנים. ראינו שמספר הלחצנים מוחזר ב-אפ.א.0זו. הסיבית 0 של ערך החזרה מתייחסת ללחצן השמאלי, סיבית 1 - ללחצן הימני וסיבית 2 - ללחצן האמצעי (אם ישנו). יחיה מן התועלת בכך שתגדיר את הסיביות האלו כקבועיס סימבוליים לשימוש בתוכנית בצורה זו: 0-01 אסתתטסטםת 6ת0611+ 0-2 אסיידטפת 6ת46%1 0-4 אסייזטפא 6ת1+86% מכיון שהמידע בדבר מספר הלחצנים משמש ב-חסטואו5 ובהודעות בקרה אחרות, מקיליס הקבועיס הסימבולייס על הבנת הקוד, מאשר אילו השתמשנו במיקומיס של הסיביות. קרא את לחצן העכבר: ()655ז 56סחח הפונקציה ()659ז 056 מאפשרת למצוא את המיקוס הנוכחי של העכבר על המסך. במקריס אחריס גס תהיה מעונין לדעת מתי נלחצ לאחרונה לחצן מסויס של העכבר. הפונקציה הניתנת בתדפיס קובעת את הסטטוס של העכבר בנסיבות כאלו. ] א א * א א ()655ז2] 56נוסוח פונקציה זאת מאפשרת לבדוק איזה לחצן של העכבר נלחצ לאחרונה ומה היה המיקוס (השורה והטור) של העכבר בעת הלחיצה. הלחצן שהמידע שלו מועבר לתוכנית הוא הלחצן הנבדק. 2 ההמדריך השלם לשפת 6 .תסנס1נפסק חאסע טסם 6ם6 אסע 6ת 1‏ :118% סת6תגסלת .תס1נפ1פסס מתט1סס חטסם 6ם6 1 סם1 .6% 0ם תסספטס תספפטס 6ם1 . 558608 תסספסטס 6ם6 1% :סט1אט תעגופפת / אא*%%א <ת. 608> 66ט10סת1+צ+ (מופפפושו* ₪0 9601 פב 266 שו ) פפפפפן פוה פופ ן 7 פ5סשמת תסנתט /* 6808 ס6פטסת 66% ₪0 מסנססמתטץ */ 0805 = 8%.א.1500 מסספטס = א0%.א.1560 5 ון 6 ופופוס ₪ פר 6 א וסוט‎ / ,33א%686)0ם1‎ 61260, 61260( ; 50ב = |[ 660 /08.%.1260 = חטסץ* /* 858008 תסספטס מעטססת */ ; (88.%.1268) ממעטססע / הפונקציה ()655זק 0056 שונה מהפונקציה ()680] 56טסח בבתינה אחת חשובה ביותר: ערכי שורה-טור משתנים רק כאשר נלתץ הלחצן הקשור עם הארגומנט השלישי של הפונקציה (לחצן). פירוש הדבר, שהערכיס שורה-טור אינס משתניסם, אלא אם לחצנו על הלחצן המאותסן ב-חסשטט. לדוגמה, נניח שקראת ל-()655ז 56גוסוח, כאשר הארגומנט השלישי הוא אסדדפ1א. לדוגמה נניח גסם, שלחצת על הלחצן האמצעי בשעה שהעכבר נמצא בשורה 50 ובטור 100. ערכי שורה-טור המוחזריס מהקריאה יהיו 50 עבור שורה ו-100 עבור טור. אם אתה מחליק את העכבר לאיושהו מיקוס אחר של שורה-טור, לא ישתנו ערכי השורה-טור, אלא אס נלתצ הלחצן האמצעי שנית. הפונקציה ()65%זק 56 מאפשרת לקרוא את מיקוס שורה-טור בתנאי שלחצן מסויס אכן נלתצ. קרא את שחרור לחצן העכבר: ()161!6356 56טסוח הפונקציה ()76!6856 056 מאפשרת לבדוק את המיקוס שורה-טור, כאשר משחרריס לחצן מסוים של העכבר. נספח ג': פונקציות העכבר 443 / א א * א א ()016356 56סוח פונקציה וו מאפשרת לראות אם לחצן העכבר שוחרר. ערכי השורה והטור הס אלה שהיו קיימיס בעת שהלחצן שוחרר. אף על פי שהוא איננה כלול בפונקציה וו, המשתנה אפ.א.69זו שומר את מספר השחרוריס של הלחצן אחר הפסיקה. אחרי הקריאה לחצן וה מתאפס. .תסנס1נפסק חאסע טסם 6ם6 אסע 6ת 1‏ :118% סת6תגסלת .תס1נפ1פסס מתט1סס חטספם 6ם6 1 סם1 .0% סם תסססגטס 6ם6 מסספסטס %ם1 6 15 1 :568608 תסספטס 6ם6 1% : סגו1אט תעגוססת .פס 15 0 ,26898960 18 מס66טס / אאא <ת. 608> 66ט61ת1+צ+ פופו וטופ" פופווב ‏ כ 6601 סוב 26" סוםו) 515 5 טסו סותוב ָ 7 פסמת תסנתגט /* 68068 ספטסת 66% ₪0 מתסנססמתטץ */ 006 = 8%.א.1500 66 6 ו הו 5 מסססטס = א0%.א.1560 ; (61260 ,61260 ,33א%686)0ם1 66([ = 050 ;/08.%.1260 = חטסץ,* /* 558008 מתסספטס מעטססת */ ; (88.%.12606) ממעגו6סע / הפונקציה מתנהגת במידה רבה כמו ()655זק 6פטסוח, אבל העדכון של שסז ושל 601 מתבצע רק כאשר הלחצן משוחרר, ולא בשעה שהוא נלת. לכן, אס המשתמש מעביר את העכבר בעוד חסטפ לחוצ, הערכים אוסז ו-/60 יחזיקו את מיקוס טור-שורה של העכבר בשעה שהלחצן משוחרר לבסוף. מידע זה יכול להיות חשוב במקרה שהמשתמש ייגורריי דבר מה (לדוגמה, צלמית כלשהי) על פני המסך. אס אתה רוצה לעקוב אחר מספר הלחיצות בלחצן, אתה יכול להעביר לפונקציה מצביע אחר. הפונקציה תכניס למצביע את הערך שנמצא ב-אפ.א.9פזו. המונה נמצא בתחוס הערכיס של שלס בעל-סימן (0 עד 32767) ומתאפס לאחר הקריאה. 4 המדריך השלם לשפת 6 קבע תחום אנכי לתנועת העכבר: ()46חבּועש 56וסוח ביישומיס מסוימיס אתה עשוי להגביל את התחוס שהעכבר יכול להשתמש בו. כשאתה כותב למשל, שורת תפריט עליונה (ז8פ טחסוח), סביר להניח שתרצה להגביל את תחוס המסע האנכי של העכבר עד לשורה המשמשת לתפריט. התדפיס הבא מציג את הקוד המשמש לקביעת התחומיס האנכיים לעכבר. / א א * א א ()06חבּוע 56סוח פונקציה ואת מאפשר לקבוע ערכי מינימוס ומקסימוס לתחוס מיקוס השורה. התחוס המותר הוא 0 עד 200. .תסנסנ1נפסק חאסע מתנת 6ם6 מנת 6ת 1‏ :118% ס6ת6תגסלת .תס1ף1פסס חסע אאת 6ם6 אאת 6םת1 סט : סוט מעגוססת / אא*%%א <ת.608> 66ט10סת1+צ+ (א8ת %םת1 ,תמגת %6ם6)1שתה8עט ספטסת ב1סט ָ פסמת תסנתט / 25066 [ פופ 56 6 וספת > 0808 = 3%.א.1500 ;תנחת = א0%.א.1560 ;אהת = א0%.א.1560 ; (61260 ,61260 ,33א%86)0ם1 ] שני הארגומנטיס הניתניס ל-86ח8ז/ 56טסוח הס ערכי מינימוס ומקסימוס של מיקוס השורה שהעכבר יכול להשתמש בהן. הפונקציה 08א0 משמשת לקביעת הגבולות האנכיים. נזכירך, שערכי המינימוס והמקסימוס מתייחסיםס למסך הווירטואלי. לדוגמה, אס אתה כותב רק את הפונקציה ;(0,7) 6שתה8עט ספגוסת בשעה שהמסך במצב טקסט, העכבר יכול להשתמש בשורה הראשונה של המסך בלבד. ואולס שיס לב לכך, שהקריאה לפונקציה בצורה זו (0,8) 66ת8עט-6פגוסת חייתה מאפשרת לעכבר להשתמש בשתי השורות הראשונות של מסך הטקסט. נספח ג': פונקציות העכבר 445 הגבולות האנכיים הס איפוא כוללנייס מבחינה זו, שהתחוס 0-7 מגביל את העכבר לשורה הראשונה של המסך הווירטואלי והתחוס 0-8 כולל את השורות הראשונה והשנייה כאשר נמצאיס במצב טקסט. דבר זה יכול להיראות מוזר, עד שתיוזכר שהפינה השמאלית העליונה של המסך הווירטואלי היא במיקום (0,0). שמונה השורות הראשונות של המסך הווירטואלי משתמשות לכן בערכיס 0-7 בהתאמה לשורה הראשונה (מס' 1) של מסך הטקסט הממשי. מכאן נובע גם, שמיקוס אנכי בעל ערך 8 במסך הווירטואלי חייב להימצא בשורה השנייה של מסך הטקסט הממשי. קבע תחום אופקי לתנועת העכבר: ()6שַח3זח 56טסוח את התחוס האופקי של העכבר קובעיס באותה דרך שבה נקבע התחוס האנכי. / א א * א א ()06 ה 3זה 56סוח פונקציה וו מאפשרת לקבוע ערכי מינימוס ומקסימוס עבור הקואורדינטות של הטור. התחוס המותר הוא בטווח 0-640. .םס1נ16פסק פמתט1סס מתנת 6ם6 מנת 6ת 1‏ :118% ס6ת6תגסלת .תס1נ16פסס מתתט1סס אאת 6ם6 אאת %6םת1 סט : סו1אט תעוססת / אאא <ת. 608> 66ט610ת1+צ+ (א8ת %םת1 ,תמגת %6ם6)1שםתאעת ספטסת ב1סט ָ 7 פשסמת תסנתט /* 06ת28 %881ם120ע0 5866 ₪0 מסנססםתטץ */ ;07א0 = א8%.א.1260 ;תנת = 0%.א.12607 ;אהת = א0%.א.15607 ; (61260 ,61260 ,33א%686)0ם1 ] ערכי מקסימוס ומינימוס המועבריס אל הפונקציה ניתנים במונחים של המסך הווירטואלי (כמו בפונקציות קודמות). דבר וה פירושו, שצריך לכפול בשמונה כל ערך המבוסס על המסך הממשי במצב טקסט, כדי שאפשר יהיה להשתמש בו בפונקציה זו. לדוגמה, הגבלת התנועה ל-40 הטוריס הראשוניס במצב טקסט פירושה שהערך של אוח המועבר לפונקציה יהיה 320. דבר וה נובע מהיחס 8:1 הקייס בין המסך הווירטואלי למסך הממשי. 6 המדריך השלם לשפת 6 קבע את מיקום העכבר: ()56טסוח 50% אתה יכול להציב את העכבר במיקום יישורה-טוריי כלשהו, על ידי שימוש בפונקציה זו. / א א * א א ()56סוח 50% פונקציה וו מאפשרת לך לקבוע את המיקום של העכבר. הערכים החדשים חייביס להימצא בתוך תחומי שורה-טור שנקבעו קודס. במצב טקסט, ערכיםס אלה מעוגליס לערכים הקרובים ביותר המותרים (בתוך התחומים). .תסנס1נפסק חאסע טסם 6ם6 אסע 6ת 1‏ :118% ס6ת6תגסלת .תס1נס1פסס מתט1סס חטסשם 6ם6 1 סם1 סט : סו1אט מעגוססת / אאא <ת. 608> 66ט610ת1+צ+ 61 ו 2 שמ ) ופוסו 650 |0 ופצ ָ 7 פסמת תסנתט /* ת1610פסק ספטסת 588% 60 תסנפסתטץ */ 42 = א8.א.1200 ו מ גחה ;חסע = א0%.א.1:060 ; (61260 ,61260 ,33א%686)0ם1 ] הערכים שוסז ו-|60 ניתניס במונחיס של המסך הווירטואלי והס חייביסם להימצא בתוך התחומיס האופקייס והאנכיים, אס נקבעו. פונקציה זו יכולה להיות שימושית כאשר אתה רוצה להציב את העכבר באיזשהו מיקוס מסוים (כגון בחירת מחדל של תפריט) כאשר התוכנית מתחילה. קבע סמן טקסט: ( זספזוט6 56טסח הפונקציה מאפשרת להגדיר את סוג סמן העכבר שבשימוש, ויש להשתמש בה רק כאשר המסך נמצא במצב טקסט. הפונקציה מאפשרת להשתמש בשני סוגי סמנים: סמן מוגדר-חומרה או סמן מוגדר-תוכנה. נסביר כיצד אפשר לקבוע את הסמניס האלה, לאחר הצגת הקוד של הפונקציה. נספח ג': פונקציות העכבר 447 / א א * א א ()+ זס5ז6 56וסח פונקציה וו מאפשרת להגדיר מחדש את סמן העכבר כאשר הוא נמצא במצב טקסט. שיס לב לכך שהפונקציה פועלת רק במצב וידיאו טקסט (לא גרפיקה), ומכאן נובעת האות ש' בסוף שס הפונקציה. 6 66 .תס 58 . העדה! אס בוחרים בסמן-חומרה, הוא יפרש את הארגומנטים 507060 (מסן) |-85%ח (מסכה) בתור שורות הסויקה ההתחלתית והסופית. 1 055 6סץם 6ם6 8% 6ם 1‏ :1186 סתסתגסלת 1 50167826 = 0 .0 ₪ם 1 82088260 = 1 ו עספעגטס 6ם6 68מם64611 ת50266 6ם1 עספעטס 6םת6 68מם4611 אפ סםת1 הסט : סו1אט תעטססת / א א א א <ת. 008> 66ט1סת1+צ+ 6 וו כ 50 סופוב כ שפןם ותו ) םר ₪25 וס פונס זָ 7 פטסמת תסנתט 0 שו /* ₪00-088 תסע "6מתפ" מם צפסא :א0ס1עטתס * / /* 60ע %ת5806006 686 */ ; (85) 5020200 /* 685606 ה16ח 658 2086 */ 7 = 5.685 = ללשה ₪ 75 2 = א8.א.1200 / ₪ שפשע 795 7 = א0.א.1206 / 5% 80260 */ ;ת66ת50 (060םת10פםט) = א0%.א.1200 / % 50ע00 */ ;א*פאת (66₪ת10פתט) = 0%.א%.12606 056 ה ₪ 5 ; (818 ,61960 ,33א%686)0%ת1 8 המדריך השלם לשפת 6 סמן מוגדר-חומרה הוא הסמן שנראה בדרך כלל בהנחייה של 05ס-5. אס רצונך להשתמש בסמן החומרה, אז הארגומנט הראשון 6קש) של הפונקציה ( ז50זט6 56סח ייקבע ל-1. סמן החומרה יכול להיות רק סמן מסוג ייבלוקיי ואפשר לקבוע את רוחבו בלבד. הרוחב מוגדר על ידי הארגומנטיס השני והשלישי של הפונקציה. התחומיס הס 0-7 עבור ז0ז0ק306 01508 668 ו-0-11 עבור 6וחסזהססחסוו 33 1503 המשתנה ח50766 משמש בתור שורת התחלה לסמן, והמשתנה 85% משמש בתור שורת סיוס. לכן, אס אתה משתמש ב-664, הקריאה הזו תגדיר ייבלוקי מלא : ;(7 ,0 ,6)1 מספעטס שפגטסת מאידך, הקריאה הבאה תציג את הסמן בצורת קו-תחתי, המוכרת לנו יותר: ;(7 ,6 ,6)1 מספעטס שפגטסת כאשר משתמשים בסמן מוגדר-תוכנה, האפשרויות מגוונות יותר. כדי לבחור בסמן-תוכנה חייב הארגומנט הראשון של () זספזט₪ 6פטסוח להיות - 0 (אפס). הארגומנטיס השני והשלישי מתפרשים אז כמסכות, שיש להחיל אותן על הנתוניס שבמסך. המסכות הן ערכים של 16 סיביות, כפי שמוסבר בתרשים ג.1. שמונה הסיביות הנמוכות מהוות את ייצוג התו על המסך. שים לב שגם המסכה של המסך וגם המסכה של הסמן הן בעלות אותו ייצוג. משהוגדרו שתי המסכות, מבצעת הפונקציה ( זספזטש 6פטסח קודס כל פעולת סאג לוגית, עס נתוני התו שעל המסך (זכור שכל תו על המסך מייצג שני בתים בזיכרון: אחד עבור התו, ואחד עבור התכונות שלו). על התוצאה של פעולת כאג זו מתבצעת פעולת 08 בעזרת המסכה, כדי לקבוע את סמן הטקסט של העכבר. סיביות : 15 0 ד יי ו תרשים ג.1: מסכות המסך והסמן 8 אס סיבית זו היא 1, יעבור הסמן להבהוב; 0 - ללא הבהוב. 6% קבע את דבר הרקע (0חט0ז086%9). הערכים 0 עד 7 קובעים את הצבע. | אס סיבית זו היא 1, נקבל עוצמה (שופחסשחו) גבוהה; ואס 0 - העוצמה נמוכה. 6 קבע את צבע החזית (טחטסזטסזס)). הערכים 0 עד 7 קובעים את הצבע. תו ייצוג התו שעל המסך. כדוגמה שכיחה נוכל לקבוע את מסכת המסך ל- 77%א0 ואת מסכת הסמן ל- 7700א0. הדבר מוצג בתרשים ג.2. נספח ג': פונקציות העכבר 449 מסך: 0 15 7 0 סמן: 0 15 7 0 תרשים 2,2: דוגמה של מסכות מסך וסמן מסכות המסך והסמן המוצגות בתרשים 2 יוצרות סמן עכבר ההופך את צבעי החזית והרקע. מכיון שערכי המסך והמסכה של סמן העכבר המוצגיס בתרשיס 2 הס בשימוש כה שכיח, מומלצ ליצור עבורס הגדרות קבועות (6חו%060) ולהשתמש בהס בתוכניות השונות. /* אממת50 0025058 שפטסא */ + אתתתספסא 1+ /* %פתא 002808 6שפטסא*/ 00 6% תעש מ1+ קבע סמן גרפיקה: ()9 זספזוט6 56טסחח אס אתה משתמש במסך במצב גרפיקה, תוכל להיות גמיש יותר בהגדרת סמן העכבר. בתדפיס הבא מוצגת דוגמה של פונקציה העושה זאת. / א א * א א ()0 זס5זט6 ₪056 פונקציה וו מאפשרת להגדיר מחדש את סמן העכבר. הקוד המוצג כאן מגדיר את הסמן בצורת חצ. שים לב לכך שפונקציה זו פועלת רק במצב וידיאו גרפיקה (לא טקסט), ומכאן נובעת האות 8 שבסוף שס הפונקציה. אס תדפיס את הסיביות הבינריות של המערך ‏ [856וח, תוכל לראות כיצד מתבצעת הגדרת הסמן. בס :11860 סת6תגסלת סט :פסטו1אט תעגטפסת << > / <ת. 608> 66ט610ת1+צ+ (10סט) עספעטס ס6פטסת ב1סט ָ ] = []85%ת %6ת1 60מם18פתט 568610 0 המדריך השלם לשפת 6 א יי 0-2 אי ב 0-0 0 0 רע סי 2 3-ה ,0 ,7600א0 ,0%7000 ,087800 ,0%7000 ,6000א0 ,0%4000 ,00א0 0 0000 000 0600 0760 760 6 פסמת תסנתגו ו 0065 /* ₪00-088 05ת "6מתפ" תם צפסא :אסדצלטתס * / / 850000 2686 */ ; (85) 5020260 / תם1ח 68 2086 */ 7 = 5.685 65 66 ו 5 92 = א8.א.1200 = % ססם מתט01ס */ 2 = א0.א.17006 /27 % סמססם אסת */ 12 = א0.א.1200 / %פפת 50 עססת1סק */ ;א%פאת (66₪ת10פתט) = 0%.א%.12006 | 6610060266 ₪11 ₪56 5/ ;689(7 ,81260 ,0%33)א%686%ת1 ] הפונקציה ()9 זספזטס 56טסח המוצגת בתדפיס מוגדרת עבור סמן ח. 16 הערכים הראשוניס שבמערך ₪856 דומיס במשמעותם לערכים המשמשים למסכת המסך. 16 הערכים האחרים מגדיריס את מסכת הסמן. שתי מסכות אלו חייבות להימצא בזיכרון רציף, וכך הן הופכות למערך שלס אחד. הקריאה ל-()5607680 דרושה כדי לאפשר לפונקציה למצוא את הנתוניס המגדיריס את סמן הגרפיקה. הכתובת של הקטע מועתקת לתוך 55 לפני הקריאה, ו-א0.א.69זו מצביע על המסכה. זכור שעליך לקרוא ל-()0 זספזט6 0056 לפני שתוכל לראות את סמן החצ, וכי הפונקציה פועלת רק במצב גרפיקה. ספור את תנועות העכבר: ()5ז60₪0+6 56וסוח על ידי השימוש בפונקציה ()9ז6)חטס6 6פטסוח, אתה יכול לספור את תנועות העכבר. תנועות אנכיות או אופקיות מוחזקות ביחידת מדידה הנקראת בשם ימיקייי (ץ666וח). כל יחידת מיקי מקבילה ל1/-100 האינצי של תנועת העכבר. מכיון שאנו משתמשיס ב-זחו בעל סימן, מוגבל התחוס מ-32768- ועד 32767. /* % * א % ()615+ 600 156סח פונקציה ו מאפשרת לקרוא את המונים שורה-טור. כל יחידה מייצגת 0.001 אינצי, ויש לה תחוס שלם בעל סימן (בערך פלוס/מינוס 32767). שיס לב לכך שהערכים המוחזרים מייצגיס את השינוי במוניס שחל מאז הקריאה האחרונה. נספח ג': פונקציות העכבר 451 .+תטסס חאסע 6ם₪ 60 עספסתנסס אסע* 6ת 1‏ :118% סת6תגסלת .%תגוסס מתתט1סס 6ם₪ 0ם עפ6תנ1נסק 41 סתג סט :סוט תעגו%סת / אאא <ת.608> 66ט61ת1+צ+ (6091* 25 5206 פופו ) ופוט פופו סנפ ָ 7 פ5סמת תסנתט /* 68תט0ס0 מתסנססת 6806ע2 60 מסנ1פסמטץ */ ;0800 = 8%.א.1500 ; (61260 ,61260 ,33א%686)0ם1 66 = 050 ;/08.%.1260 = חסל,* / אל הפונקציה מועבריס שני מצביעיס שלמיס בעלי-סימן. הפונקציה 08א0 של פסיקה 3 ממלאת במצביעים את הערכיס המתאימיס של המונים. ערך חיובי עבור |60 מציין תנועה לימין. ומכיוו שהפינה השמאלית העליונה של המסך היא הכתובת (0,0), מציין ערך חיובי של שסז את תנועת העכבר כלפי מטה. 2 המדריך השלם לשפת 6 נספח ד תקציר פקודות ופונקציות (461670006] א6וגוב)) מבוא בנספח וה כללנו את הפונקציות הבסיסיות בלבד, המהוות למעשה הרחבה לפקודות השפה. לתיאור המבנה התחבירי השתמשנו בכללי הכתיבה הבאים: < > תיאור כללי של פריט כלשהו. דוגמה: <משתנה>, <טיפוס>, <ביטוי>, <ספריה> וכדומה. 1 ] ציון של איברי מערך. [ ] איברים או ביטוייס שהופעתס אפשרית, אך אינה הכרחית (אופציונלית). דוגמה: ; [<ערך אתחול> =] <שם משתנה> <טיפוס> כלומר, הגדרת משתנה יכולה להיעשות עס אתחול, או ללא אתחול. [-.- ] כאשר האיבר המופיע בין סוגרייס מרובעיס יכול להופיע מספר פעמים, הוספנו אחריו נקודות *י...". לדוגמה, כדי להגדיר רשימה בלתי מוגבלת של משתנים כתבנו: ; [...<שם משתנה> ,] <שם משתנה> <טיפוס> ולמשל: ;? 6 52 ,01 ,0 דַבם6 נספח ד': תקציר פקודות ופונקציות 453 1[ ]] במקריס מסוימים השתמשנו בקינון של סוגריים מרובעיס. המשמעות: אם כוללים איבר הנמצא בתוך הסוגריים המרובעיס החיצוניס, ניתן עדיין להחליט אס לכלול במסגרת זו איבר שנמצא בסוגרייס המרובעיס הפנימיים. דוגמה: ; [. .. [<ערך אתחול>=] <שם משתנה>, ] | [<ערך אתחול>= ] <שם משתנה> <טיפוס> שימוש אפשרי: ; 5 ,'ת'=5 ,ם6 ,'ַ'=0 תס הגדרות כלליות: טיפוסים, משתנים, קבועים, מצביעים, מערכים טיפוסיים תו תס 0 מספר שלס קצר (2 בתים) סעסם5 מספר שלס ארוך (2 בתים) 1% מספר שלס (4 בתים) 10% מספר ללא סימן פטט מספר עשרוני (נקודה צפה) + מספר עשרוני (נקודה צפה בדיוק כפול) 6 קבוע 0 מבנה 50 איגוד מסנתט הגדרת טיפוס חדש 1 טיפוס לא מוגדר ו קבוצות אחסון | אוטומטי ססגוהּ אוגר 0 סטטי 15170 חיצוני מא קבוע תו <תו> - כל תו הניתן להדפסה "<תו>" הוראה לתחילת שורה חדשה 'ת' 4 המדריך השלם לשפת 6 קבוע שלם קבוע נקודה צפה קבוע מחרוזת הערה שם משתנה הגדרת משתנים ו הגדרת מערך הוראת דילוג לתחילת שורה ע' הוראת דילוג טבולטור ס' הוראת היסט תו אחורה מ' ציון של קו-נטוי גי ציון גרש בודד !א הוראת קפיצת דף "5 ציון תו בעל ייצוג 45011 '<מספר אוקטלי>' עשרוני [...<1-9<]>0-9>[-] הקסדצימלי [...<8-1,ע-ת,<0-9>] <+-8,ע-ת,0-9>א0% אוקטלי [...0>0-7<]>0-7 שלס ארוך 2 . <1-9<]>0-9>[-] רגיל ייצוג מעריכי = 0[ 0 = [<0-9<]>0-9>[<-,+>]₪[...<0-9<]>0-9<...[.]>0-9>[-ן] "[...<תו>] <תו>" /* ...<תווים כלשהם>... */ שס משתנה מורכב מאחד עד שמונה תווים. התו הראשון חייב להיות אות מקבוצת התווים הבאה: 8-2, 4-2 או .יי (קו תחתון). שאר התוויםס של השם יכולים להיות אותיות או ספרות : 8-2, 2-ג, "0 0. [<ערך אתחול>=] <שם משתנה> <טיפוס> [<קבוצת אחסון> ] . . [<ערך אתחול>= ] <שם משתנה>, ] ; [ | <רשימת ערכי אתחול>+=] [ [<מספר איברים>] ] <שם מערך> <טיפוס> ;[...<הגדרת מערך>, ] <הגדרת מערך> <טיפוס> נספח ד': תקציר פקודות ופונקציות 455 הגדרת משתנה מצביע ערך>=] <שם מצביע>*, ] [<ערך אתחול>= ] <שם מצביע>*<טיפוס> הגדרת מערך מצביעים ; [.. . [<אתחול ; [ [<רשימת ערכי אתחול>)= ] [ [ <מספר איברים> ] ] <שם מצביע>*<טיפוס> ; [ . . . [<הגדרת מצביע>, ] <הגדרת מצביע><טיפום> הגדרת מצביע לפונקציה ; [ <ערך אתחול>=] () <שם מצביע>*<טיפוס> אופרטור, ביטוי, מבנה, איגוד אופרטורים אונריים מצביע כתובת של- קידום עצמי הקטנה עצמית גודלו של- מספר שלילי שלילת ביטוי לוגי חילוף סיביות (דסא) קביעת טיפוס 685 אופרטורים זוגיים חיבור חיסור כפל חילוק מודולו הזות סיביות שמאלה (כפל) הזוזת סיביות ימינה (חילוק) קטן מ- (לוגי) גדול מ- (לוגי) קטן או שווה ל- (לוגי) 6 המדריך השלם לשפת 6 + 200% (<טיפוס>) >> << אופרטורים להצבה מקוצרת אופרטורים מיוחדים ביטוי ביטוי מורכב או או גדול או שווה ל- (לוגי) שווה (לוגי) לא-שווה (לוגי) וגם (לוגי) או (לוגי) אסא סיביות סאג סיביות 0% סיביות חיבור חיסור כפל חילוק מודולו הזות סיביות שמאלה הוות סיביות ימינה סאג סיביות 0% סיביות 0% סיביות ביטוי מותנה שרשור ביטויים (פסיק) או .[ <קבוע> <משתנה> [. . . <ביטוי><אופרטור זוגי> ] <משתנה> [ <אופרטור אונרר> ] . . <ביטוי><אופרטור זוגי> ] <ביטוי> <ביטוי> : <ביטוי> ? (<ביטוי>) מותר להשתמש בסוגרייס בתוך הביטוי, כדי לשנות קדימות של שיערוך חלקי הביטוי. נספח ד': תקציר פקודות ופונקציות 457 מבנה ] [<שם טיפוס המבנה>] 66ט552 [<קבוצת אחסון> ] . . . <הגדרת תבנית, באמצעות טיפוסים מוכרים>... [ (<רשימת אַתחול>)=] <שם משתנה מבנה> [ 1 ; [. . . [ (<רשימת אתחול>+=] <שם משתנה מבנה>, ] חייב להופיע לפחות אחד מתוך: <שם טיפוס המבנה> או <תבנית>. בהגדרת התבנית מוכריס כל הטיפוסים הבסיסיים וכל הטיפוסים שהוגדרו עד לנקודת הגדרת המבנה, כולל מבניס קודמים, איגודיס וטיפוסים שנקבעו באמצעות 06061/%. איגוד )] [<שם טיפוס איגוד>] םס1םמט [<קבוצת אחסון> ] . . . <הגדרת תבנית>. .. [ (<ערך אתחול>)= ] <שם משתנה איגוד> [ 1 ; [. . . [<ערך אתחול>= ] <שם משתנה איגוד>, ] החוקיס הנוגעיס למבנה תופסים גם לגבי איגוד. הגדרת טיפוס חדש ; [. . .<שם סימבולי>, ] <שם סימבולי לטיפוס> <טיפוס כלשהו> 66861 ערך שמאלי ערך שמאלי הוא ביטוי סימבולי המתפרש ככתובת בויכרון בו מצוי איבר, שבו ניתן לאחסן ערך. ביטוי וה יכול להיות: משתנה פשוט <שם משתנה> מצביע <שם משתנה>* איבר במערך [<איבר>]<שם משתנה> איבר במערך מצביעים [<איבר>]<שם משתנה>* משפטים משפט ריק ; או ; <ביטוי> או <משפט הצבה> או <משפט תנאי> או <משפט בקרה> 8 המדריך השלם לשפת 6 הצהרת משפט הצבה תנאי משפט זו (תנאי) משפטי בקרה משפט סווחעצ (לולאה) משפט 6וחצש.. 0 (לולאה) משפט יזוס1 (לולאה) משפט תווית משפט 90%0 (דילוג) משפט בודד: <משפט בשפת >6> או משפט מורכב: [ <משפט בשפת 6> [. . . <משפט בשפת >> ] ;<ביטוי> = <ערך שמאלי> ; <ביטוי>= [ . . . <ערך שמאלי>=] <ערך שמאלי> ; <ביטוי><אופרטור להצבה מקוצרת><ערך שמאלי> ביטוי כלשהו בעל המשמעות הבאה: 0 לא מתקייס שונה מ-0 מתקייס (<תנאי>) 1% <הצהרה> 6 [<הצהרה> כל עוד מתקיים <תנאי> (<תנאי>) 116תש בצע את ה<הצהרה> <הצהרה> 0 בצע <הצהרה> <הצהרה> אס מתקייס התנאי בצע פעם נוספת ; (<תנאי>) 116תש ( [ <ביטוי עדכון>] ; [<תנאי>] ; [<ביטוי אתחול>] ) 0%2ס+ <הצהרה> בצע <ביטוי אתחול>. כל עוד מתקייסם <תנאי> - בצע <הצהרה> ו-<ביטוי עדכון>. : <תווית> דלג למשפט <תווית>. : <תווית> 4060 נספח ד': תקציר פקודות ופונקציות 459 משפט אבּסיוט דלג קדימה, למשפט הראשון מחוצ ;268% (יציאה מלולאה) | למשפט הבקרה הנוכתי. משפט שטחוסחס6 דלג לתחילת הלולאה הנוכחית. ;סטם1סתסס (התחל לולאה) בלולאת זס) בצע קודס <ביטוי עדכון>, בלולאת 60 בצע קודם <תנאל>. משפט ח6+ועש5 1 (<ביטוי>) ם5₪160 (מיתוג) [...:<ערך שלם> 6886] :<ערך שלם> 68856] [. . . <משפט> ] 5+ ] [ 1.. . <משפט> ] בצע שיערוך של <ביטוי>. מצא <ערך שלס> מתאיס לתוצאת השערוך. בצע את המשפטיס החל מנקודה זו ואילך. במידה ואין <ערך שלם> תואם, דלג ל-/0690 (אם קיים) ובצע את המשפטים שאחריו. פונקציות רשימת פרמטרים [ [. . .<שם פרמטר>, ] <שם פרמטר> ] פורמלים כללי הכתיבה של <שם פרמטר> והים לכללים של <שס משתנה>. העדה! ראה שס משתנה. שים לב לאפשרות של רשימה ריקה. הגדרת פונקציה ( [ <הגדרת טיפוסי פרמטרים ופרמטרים פורמלים> ] ) <שם הפונקציה> [<טיפוס הפונקציה> ] ָ [<הגדרת משתנים פנימיים> ] [ <משפט> ] 0 המדריך השלם לשפת 6 משפט חוטסז] (חזרה מפונקציה) הצהרה על פונקציה קריאה לפונקציה ביטוי הביטוי <הגדרת טיפוסי פרמטרים ופרמטרים פורמליס> מכיל טיפוסים ופרמטריס אשר מקבלת הפונקציה. <טיפוס הפונקציה> מגדיר חד-ערכית את טיפוס הערך המוחזר מן הפונקציה. אס אינו מופיע - ברירת המחדל הינה טיפוס זחו. ; [ ([<ביטוי>]) ] תשט66ת חזרה מפונקציה אל התוכנית הקוראת. אס קיים <ביטוי> הוא ישוערך, יוסב לטיפוס הפונקציה ויהווה ערך מוחזר (לתוכנית הקוראת). ; () <שם הפונקציה> <טיפוס ערך מוחזר> ייקריאהיי לפונקציה הינה הוראה להפעלה שלה. נגדיר פעולה זו באמצעות הרחבת המושג <ביטול>. (<רשימת פרמטרים אקטואלים>) <שם פונקציה> (בנוסף למוגדר קודס לכן) רשימת פרמטרים אקטואלים קריאה לפונקציה באמצעות מצביע לפונקציה [ [.. .<שם משתנה> , ] <שם משתנה> ] ערך <ביטוי> במקרה זה יהיה הערך המותזר מהפונקציה. ניתן להשתמש בצורה זו של <ביטוי> בכל הגדרה בה מופיע <ביטוי> בהגדרות הקודמות. רשימת פרמטרים>]) <שם מצביע לפונקציה>*) ( [<אקטואלים פונקציות ספריה בגוף הספר הוצגו חלק מן הפונקציות הנלוות לכל מהדר של שפת 6, אוסף הפונקציות שמוסברות בנספח זה אינו ממצה, כמובן, את כל האפשרויות שהספריות מעמידות לרשות המתכנת. יש פונקציות תקניות רבות נוספות שנמצאות בכל ספריה, ואין צורך לפרט את כולן בספר שמיועד ללימוד השפה. ראוי לציין, שבנוסף לספריות התקניות, כל יצרן של מהדר מוסיף פונקציות, כדי להקל על המתכנת במלאכתו, בתחומיס שוניס. נספח ד': תקציר פקודות ופונקציות 461 כדי להשתמש בפונקציות שברשימה זו, צריך המתכנת לכלול בראש התוכנית שורה, מן הסוג <ח.אאאאאא> 1666 אשר בה, אאאאאא הוא שם של קוב כתוב ב-6 המסופק על ידי יצרן המהדר. קוב זה מכיל אבטיפוס (6קשסטסזס) של הפונקציה (תבנית). בהמשך נציין את שס הקוב המתאיס לכך קבוצת פונקציות. הסבר מפורט ראה בפרקים 5, 16... ובדוגמאות. פונקציות הספריה מקובצות למשפחות, ולכן נציג את הפונקציות בחלוקה זו. פונקציות קלט/פלט מהמסוף ל[ פונקציות לטיפול במחרוזת קריאת תו מהמקלדת מחזירה ()ם9650 ע8םס את התו שנקלט. כתיבת תו למסך. ; (מס %מ1) מססטס %םג ,%ת6ת8200 ,] 8%תע02+* עאםת0 8%ם00ס)61ת1עס %6ם1 ([...<ביטוי>, ] <מחרחת בקרה>) %6%םמ1ע2ס %ם1 פלט לפי תבנית. הדפסת מחרוזת הבקרה תוך שיבוצ הערכיס של <ביטוי>. 87 ,,] 8%תע0+* ע8ת0 8%ת1)00ת58508 6ם1 (1.. .<כתובת של משתנה>, ] <מחרחת בקרה>) +ם508 %6ם1 קליטה של נתוניס לפי תבנית. הפונקציה מחוירה את מספר הנתוניס שנקלטו. ;(0ע52* 0282 0086 ,065%* ע8םס0) ץק856020* שהםס העתקת המחרוזת המוצבעת על ידי 5 למחרוות המוצבעת על ידי +. ההעתקה נמשכת עד תו אפס המסיים את מחרוזת 5. תו האפס מועתק גם ל->. הפונקציה מחזירה מצביע למחרוזת + (המועתקת). ; (82*82ת0 008% ,81* ע8םת0 86ם0ס0) קתסל562 6ם1 השוואה לקסיקוגרפית בין שתי מחרוזות המוצבעות על ידי 51 ו-52. הפונקציה מחצירח : 0 המחרוזות והות ערך חיובי המחרוות 51 גדולה מ-52 ערך שלילי המחרוזת 52 גדולה מ-51 ; (8* ע8ת0 8%ם00 ,%* ע8ת5%208%)0* עהתס חיבור המחרוזת המוצבעת על ידי 5 למחרוזת המוצבעת על ידי % יש לוודא ש% מצביעה לאזור זיכרון גדול מספיק בכדי לקלוט את התוספת. הפונקציה מחזירה מצביע למחרוזת + (החדשה). 2 המדריך השלם לשפת 6 פונקציות כלליות פונקציות לטיפול בקבצים ללא מאגר ;(8* 0282 8%6ת00)ם8%210 6 5126 אורך המחרוזת נמדד בבתים, עד ולא כולל, התו המסיים (תו אפס). הפונקציה מחזירה את אורך המחרוזת המוצבעת על ידי 5. ; (8* 2ע8ת0 856ת8601)00 16סגו00 הפיכת המחרוזת המוצבעת על ידי 5 למספר עשרוני עס נקודה צפה. המחרוות 5 חייבת להכיל את התווים: ס'י-יי9, 5 + 'י-" ו-= בלבד. הפונקציה מחזירה את המספר העשרוני. ; (8* ע8ת0 86ת8801)00 6ם1 הפיכת המחרוזת המוצבעת על ידי 5 למספר שלם. המחרוזת 5 חייבת להכיל את התווים: '0'י-יי9יי ן-/י-* בלבד. הפונקציה מחזירה את הערך השלס. ; (8126 6 1106)85126הת* 16סע הקצאה דינמית של 5126 בתים בזיכרון. מחזירה את המצביע לאזור הויכרון שהוקצה. ; (5%58%08 %ת1%)1א6% 10סע סיוס של הרצת התוכנית וחזרה למערכת ההפעלה בקוד סיוס 5. סיוס תקין הוא כאשר 50805=0. ; (006ת8 %ם1 ,8%2ק* עא8םת0 8%ם0268%)00 6ם1 יצירת קובץ בשס המחרוזת המוצבעת על ידי סוחפחס!8. הערך 5 מגדיר את ההגבלות הכרוכות בגישה לקובא. משמעותו של ערך וה משתנה בהתאם למערכת ההפעלה והמהדר. אס הקוב כבר קיים, גודלו מכווצ ל-0. מחזירה מספר ערוץ של הקובץ אס הכל כשורה, או (1-) אס הייתה תקלה. ; ([06ס0ת 60ם18פם90 ,] 8000685 %ם1 ,ם86ק* ע8ם0ס 86םתסס)םתפקס %6ם1 פתיחת קוב בעל השס במחרוזת המוצבעת על ידי 6וחפחסו!!. סוג הפתיחה נקבע על-פי ערך המחרוזת 006ח : חי קריאה 0 כתיבה (מראשית הקובצ) ל כתיבה (מהסוף והלאה) מחזירה מספר ערו של הקוב שנפתח אם הכל כשורה, או 1- אס הייתה תקלה. נספח ד': תקציר פקודות ופונקציות 463 ; (16הת8םת %6ם6109856)1 %6ם1 סגירה של הקוב הפתוח על ערוא סו0ַחח. מחזירה 0 אם הסגירה בוצעה כהלכה, או (12-) במקרה של תקלה. ; (מ16 66ת16פםתט ,1טס* ב1סט ,פנַַָתת %ם2680)1 6ם1 קריאה מקובצ בערוץ 0|6ח8 68| בתיסם לתוך המתרוות המוצבעת על ידי אשפ. יש לוודא ש-)טפ מצביע למחרוות בגודל מספיק לקליטת ח6! בתים. מחזירה את מספר הבתיס שנקראו בפועל, או: 0 סוף הקובצ (ע-) תקלה בקריאה ; (ם16 66ת10פתט ,1טס* ב1נסט ,16ם8ם 6ם166)1עש 6ם1 כתיבה של ח6! בתים מהמחרוזת המוצבעת על ידי ופ לקובצ בערו 800|6ח. מחזירה את מספר הבתים שנקראו בפועל, או: ע) לציוו תקלה כאשר נכתביס בפועל פחות בתיס מ-5ססץם. ; (626ב1200% 6ףםת1 ,0+5586% 8ם10 ,פֶַָתםת %6ם1566%)1 6ם10 הצבה של המצביע לקוב בערוץ 0|6ח8ח לבית בעל ההיסט 6% מנקודת 6זסח/שוחסיו1. יוףיי מתחילת הקובצ 7 מנקודה נוכחית ל מסוף הקובצ וברי יכול להיות גס שלילי מחזירה את המיקוס הסופי ביחס לתחילת הקובצ. פונקציות לטיפול בקבצים עם מאגר - ; (6ססת* 0282 005% ,6ת(ת8ת1116* עאםת0ס 5856ם00)ם6ק0+* מתךק פתיחת קובץ בשס המצוי במחרוזת המוצבעת על ידי סוחפּחסו!. סוג הפתיחה נקבע על-פי ערך המחרוזת 46סוח : 7 לקריאה 4 המדריך השלם לשפת 6 7 לכתיבה (מראשית הקובץ) 7 לכתיבה (מהסוף והלאה - הוספה) מחזירה מצביע לקוב שנפתח או 0 אם הייתה תקלה. ; ((ת5%2068* ₪ת1ע)01056+ %6ם1 סגירת ערוץ הקוב וח5068. מחזירה את התו 505 אס הייתה תקלה, או 0, אם הקוב נסגר כשורה. ; ((ת8%62068* םת50680)21 %6ם1 קליטה של התו הבא מערוץ הקוב 50680, וקידוס של המצביע לקובצ. מחזירה את התו הבא, או 50, אס סוף הקוב או הייתה תקלה. - ; ((ת8%268* 8ת1ע ,0 6ם60)1סגמס5 6ם1 כתיבה של 6 לקוב 568₪0, וקידוס המצביע לקובא. מחזירה את התו 6 אס הכל כשורה, או 50 במקרה של תקלה. 2 ; ((ת5%268* ₪ת1ע ,ם 6סם1 ,5* עַַת186%8)0* עַַם0ס כתיבה של השורה הבאה מהקוב 68ש5. השורה מסתיימת בתו 'חי, או במידה ונקראו כבר 1ח תוויס. הפונקציה מוסיפה תו מסיים אפס (ווטוח) בסוף השורה בכל מקרה. מחזירה את המצביע ל-1טפ, או 0 במקרה של תקלה, או סוף הקוב>. ; ((ת58%208* 8ת21 ,5* עאםת0 8%ם65)00וס5 6ם1 כתיבה של המחרוזת המוצבעת על ידי 5 לקובף ‏ 57680. הפונקציה איננה מוסיפה ביוזאמתה את התו "י לסוף המחרוזת. היא מחזירה את התו האחרון שנכתב, או תו 50 במקרה שהתרחשה תקלה. 8%תעסת* עא8ת0 008% ,ת58%268* שתע1ע)61ת1עס+ %6ם1 ;([... ,6תסתגטסצה ,] ([...<ביטוי>, ] <מחרוזת בקרה> ,ת8%268* 12₪ת)51ם21ס+ %ם1 פונקציה זו זהה ל-()שחוזם, אלא שהפלט נכתב לקובצ 6ו8. 8% +* ע8%ם0 5%ם00 ,ת5%268* ₪ת1ע)%ם508+ %6ם1 ;([... ,860092658 ,] (1.. .<כתובת של משתנה>, ] <מחרחזת בקרה> ,ת8%268* 11₪ע)1ם508+ 6ם1 פונקציה זו זהה ל-(10ח568, אלא שהקלט מגיע מהקובצ 6ו8. נספח ד': תקציר פקודות ופונקציות 465 - ; (ם101עס פסת1 ,01186% 8ם0ס1 ,ת58%208* משת1ת)5566% %6ם1 קדם מעבד הגדרת <שם סימבולי> <ערך מוחל>([. הגדרת מאקרו הידור מותנה הידור מותנה בהגדרת <שם סימבולי> הצבה של המצביע לערוצ קוב ‏ 5768₪, כך שיצביע לבית שמיקומו נמדד ב-01/5%0 בתים מנקודת ה-חוףחזס. 7 מתחילת הקוב 0 מנקודה נוכחית בקובצ ל מסוף הקובצ % יכול להיות גם שלילי הפונקציה מחזירה 0 אם הביצוע נעשה כשורה או ערך שונה מ-0 במקרה שהתרחשה תקלה. <ערך מוחלף> <שם סימבולי>6ת0611+ בכל מקוס בתוכנית, בו מופיע <שס סימבולי> הוא יוחלף בביטוי <ערך מוחלף>. רק לאחר כל ההחלפות יתבצע תהליך ההידור. . . <פרמטר פורמלי> , ] <פרמטר פורמלי>) <שם סימבולי> 6ם4611+ בכל מקוס בתוכנית בו יופיע: (<רשימת פרמטריס אקטואליס>)<שס סימבולי> הוא יוחלף ב-<ערך מוחלף> תוך שיבוצ <פרמטריס אקטואליס> ב-<פרמטריס פורמליס> כפי שהס מופיעים ב-<ערך המוחלף>. רק לאחר כל ההחלפות יתבצע תהליך ההידור. <רצף פקודות 1> <תנאי> +41 [ <רצף פקודות 2> 6156+] + 01מ6+ כאשר מתקיים <תנאי> יבוצע חידור של <רצף פקודות 1>. אחרת - אם קייס 6!56, יבוצע הידור של <רצף פקודות 2>. <רצף פקודות 1> <שם סימבולי> +41186 [ <רצף פקודות 2> 6156+] + 1+ אם הוגדר <שם סימבולי> באמצעות 6ח4068, יהודר <רצף פקודות 1>. אחרת, אם קיים 6156, יחודר <רצף פקודות 2>. 6 המדריך השלם לשפת 6 הידור מותנה באי-הגדרת <שם סימבולי> הפסקת הגדרה של שם סימבולי> רשימת פרמטרים לתוכנית הראשית <שס התוכנית> <רצף פקודות 1> <שם סימבולי> +1+86+% [ <רצף פקודות 2> 6156+] + 1+ זהה ל-)4106, אלא בהיפוך משמעות התנאי. כלומר, רק אס לא הוגדר <שס סימבולי> יבוצע הידור של <רצף פקודות 1>. אחרת, אס קייס 6156, יהודר <רצף פקודות 2>. <שם סימבולי> +61בתג+ מנקודה וזו ואילך, <שס הסימבולי> אינו מוגדר לצורכי החלפה והידור מותנה. (([82000* ע8םת0 ,8260 6ם1) תנגאת כאשר תופעל התוכנית ניתן להקיש בהמשך לשס התוכנית מחרוזות המופרדות בתו רווח. כאשר התוכנית תופעל יתקבל מבנה הנתוניס הבא : <מס' המחרוזת> .םס <מחרוזת ראשונה> <מחרוזת אחרונה> תדשיס ד.1 נספח ד': תקציר פקודות ופונקציות 467 נספח התקליטור המצורף וסביבת העבודה 6+ו 61ד תקליטור וה מופעל באופן אוטומטי עס הכנסתו לכונן. אס התקליטור אינו מופעל באופן אוטומטי: 1 ודא שהתקליטור בכונן 2 בשולחן העבודה לחצ לחיצה כפולה על סמל המחשב שלי 33| לח לחיצה כפולה על סמל כונן התקליטוריס 4 לח לחיצה כפולה על הקוב 6א6.זוחבּסו התקליטור כולל: %> קטלוג ספרי מחשבים בהוצאת הוד-עמי + תוכנת 61196ד להרצת התוכניות שבספר > קוד מקור של כל הדוגמאות שבספר > תוכניות שירות מועילות + שאלות נפוצות - לגבי רכישת ספריס בהוצאה %> אודות החברה %> דרכי התקשרות להוצאת הוד-עמי הערה! אס מנהל התקן כונן התקליטוריס המותקן הוא 16 סיביות - ייתכן ותראה רק 8 תוויסם ראשוניס של שס הקוב (במקרה ובמקור הוא ארוך יותר). הסיבה: כונני תקליטוריס במהירות 4א עובדיס עס מנהל התקן שעבד בסביבת 05 ו-3.11 פאוססחו/ ויכול לעבוד גס עס א9 פושססחו/, למעט חהיכולת לוהות קבציס עס שמות ארוכיס. הפתרון: להתקין מנהל התקן 32 סיביות (אם קייס), או לקנות כונן תקליטוריס חדש ולוודא שמצורף אליו מנהל התקן 32 סיביות. קרא קובץ 065 שנמצא בתקליטור לגבי תכולת התקליטור ולהוראות התקנה של חלק מהתוכנות המצורפות. נספח ה': התקליטור וסביבת העבודה 6ז(61 469 התיקיות הרלוונטיות לספר התיקיות הרלוונטיות לספר זה הן: 9 א₪00 שמכילה את קובצי קוד המקור הנמצאים בספר 6 ד ס'ובעש+501 שמכילה את תוכנת 6פו61ד (מהדר) הפעלת התקליטור במשך כל זמן ההפעלה חייב התקליטור להיות בכונן. הוראות התקנה והפעלה מפורטות נוספות נמצאות בקובצ +1פק.פ6אס בתקליטור. כדי לקרוא את תוכן הקובצ =סק.פס6אס (הכולל פירוט מעוצב של תוכן התקליטור) עליך להתקין את תוכנת ז₪6806 +467008 10006 מהתפריט התקנת תוכנות. בנוסף, תשמש אותך תוכנה וו לקריאה והדפסה של הפרקים לדוגמה, אותס תמצא בקטלוג ספרי המחשביס בהוצאת הוד-עמי. התוכנה מאפשרת עיון והדפסת המסמך המוצג, כמו גס חיפוש בעברית ובאנגלית. בעזרת תוכנה וו תוכל גס לקרוא את המסמכיס אותם מפרסמת ההוצאה באתר האינטרנט. קטלוג ספרים בחלק זה תוכל לעיין בקטלוג הספריס בהוצאת הוד-עמי. עיוןו בקטלוג ספרי המחשביס של הוצאת הוד-עמי כולל: * תוכן ענייניס מלא של הספר > פרק לדוגמה * מגה-אינדקס לחלק מהספריס את כל המידע ניתן לראות וגסם להדפיס. לצורך זה יש להתקין את תוכנת 670086 מהתפריט התקנת תוכנות. כדי לצפות בקטלוג העדכני ביותר ולצפות במבצעיס המיוחדיס מומלצ לבקר באתר האינטרנט של ההוצאה בכתובת |ו.60.ווח0-8סח./ושושו. הקטלוג מומלצ לצפיה ברזולוציית מסך של 800א600. הקטלוג מומלץ לצפייה באמצעות 5 ז6זס|קא= 6%חזסזח1 ומעלה. הדפדפן מצורף בתקליטור. כדי להתקין אותו בחר בתפריט התקנת תוכנות ובחר באפשרות תוכנות נוספות. 0 המדריך השלם לשפת 6 קוד המקור בתקליטור נמצאים קובצי תוכניות. התוכניות נמצאות בשלוש ספריות נפרדות. 5 - התוכניות שנמצאות בספר ובדרך כלל מצוין שמס, 6000001.6 וכך הלאה, כאשר שתי הספרות הראשונות מציינות את מספר הפרק ושתי הספרות האחרונות את מספר התוכנית ברצף. - התשובות לשאלות המוצגות בפרק 18. שמות הקבציס מצויניס בהתאסם, 6+ וכדומה. וחו!ופָז? - תשובות לתרגיליס המופיעיס בששת הפרקיס הראשונים. למשל, 06161.6 - פרק 1 תרגיל 1. לכל ספר יש מספר ייחודי, הבנוי מה-דאנאקוד, המופיע על העטיפה האחורית של הספר, והוא מתחיל בספרות 59 (לדוגמה 59315). מספר הפריט של ספר זה הוא: 59159 התקנת קוד המקור פירושה העתקה (לא התקנה) של הקבציס מהתקליטור לדיסק הקשיח במחשב באישי שלך. לאחר שיועתק קוד המקור הוא יימצא בדיסק שבחרת, בתיקיה 8006559159חסה. שים לב: כאשר אתה עובד במהדר 1086 הכל מתבצע בסביבת המהדר. לא יוצרים קובץ ₪6 ולא יוצאים ל-005 כדי להריץ אותו. הספר נכתב לשימוש במהדר רגיל ולכן יש לשים לב לשינויים כאשר עובדיס ב-706. נספח ה': התקליטור וסביבת העבודה 6זו(61ז ‏ 471 תוכנת 6+ו 61ד תוכנת 61186ד (1/66 6 סטזטד), מהדר לשפת 6 של חברת |החסטאחז6שח1 סחאוזסם, אשר מיועד למחשבי 6 18% ותואמיסם, הפועליס תחת מערכת הפעלה 05ס-15!. אהו מהדר מהיר מאוד המסוגל, לפי דיווחי החברה, להדר מעל 7,000 שורות בדקה. התוכנה כוללת : > מהדר (סווקוחסס). > עורך (601ו60) המשמש לכתיבת ותיקון התוכניות. > מערכת תפריטים נוחה, לבחירת האופציות השונות במערכת. > מקשר (ש6אחוו). > מערכת איתור שגיאות בהידור. > מערכת לבניית תוכניות מקובצי מקור רביס. אם מותקן כבר מהדר 8073060 במחשב, אל תתקין את ו6ד אלא רק העתק את התוכניות מהתקליטור. ההתקנה וההפעלה פשוטים. הוראות התקנה והפעלה מלאות נמצאות בתקליטור בקוב /61.2600166.20 ד 61/56 ד סיזבּ/ע5010 התקנת התוכנה התהליך הבא מעתיק את קבצי התוכנה לכונן הדיסק הקשיח :6 שלך, לתיקיה בשם הנוצרת באופן אוטומטי. אס התקליטור לא הופעל אוטומטית בצע שלביס 1-4. אס הופעל - עבור לשלב 5. 41 2 3 4 ודא שהתקליטור נמצא בכונן התקליטורים. בשולחן העבודה לח לחיצה כפולה על הסמל המחשב שלי. לח לחיצה כפולה על סמל כונן התקליטוריס. לח לחיצה כפולה על הקוב 6א1.6וח03סח. לח על התקנת תוכנות. לחץ על לחצן האפשרויות ליד אני מאשר את תנאי השימוש בתקליטור. לח המשך. לח על וו וסד. התוכנה מותקנת בתיקיה 6וו!61+:6. 2 ההמדריך השלם לשפת 6 בסיוס שלב ההתקנה מועתק קובצ בשם 6.0% לתיקיית השורש של כונן 6. לנוחיותך ניתן ליצור קיצור דרך על שולחן העבודה (ראה ספרים בנושא פצוספחוצ/) הפעלת התוכנה .1 2 לחץ לחיצה כפולה על קיצור הדרך ששמו 6ו61ד על שולחן העבודה. סביבת העבודה של 066ו61ד מופיעה בחלון 6ד - 6קוחסזס 05ס-5, ובתוכה חלון (מסמך) בצבע כחול, ששמו: 7ק500.6ו הא סא (רק בפעס הראשונה שנכנסיס לתוכנה). כדאי לסגור את החלון ק00.62שא1אסא עייי במד המקשים <3">+<)|>, ומקבליס חלון אפור ריק, שבראשו רשימת תפריטים על רקע לבן. כרגע אתה מוכן להתחיל לעבוד בעזרת תוכניות הספר. שימו לב: ברירת המחדל של ה- "6/ומהזס6 היא לקרוא ולשמור קובצי קק6/6. אתם כמובן קוראים קובצי 6 וכותבים קובצי 6. בחר בתפריט 005שק0 באפשרות +חפוחחסזוטחם ולאחר מכן באפשרות ז0:60ם. בתיבת הדו-שיח 5ח0שק0 01501 בשדה חסו5ח6זאם %|6/30ס הקלד 6 במקוס קק6. לחץ א0. בחר בתפריט 0005 באפשרות 6ַצ53 כדי לשמור את השינוייס שביצעת. הרצת תוכניות 1 כדי לקבל תוכנית - יש להקיש <3">. הקשה זו פותחת ייחלון שיחהיי, שכותרתו הראשית : ₪6 8 1080 (ייטען קובציי) וכותרת משנה ראשונה הינה: 6וחּא! ואחריה, בתוך שורה כחולה עס הדגשה ירוקה כתוב: קק0.* . אס 5 תוויס אלה (ססס.*) אכן מופיעיס - הקש 886650866 פעמיים כדי שיישאר רק 6.*. אס אינך רואה דבר הקלד 6.*, ולאחר מכן הקש <זס0חם>. תעבור לחלון פנימי שכותרתו ₪65 (י'קבצים'י), ועל רקע בצבע תכלת מצויים 2 טוריס של שמות קבצים. באופן כללי, מקשי החיציסם מאפשרים לטייל עס הייסמןיי, שצבעו ירוק בהיר, לכל הקבצים. למעשה, מה שמוצג כרגע על המסך הוא שמות הקבצים/תוכניות שבספריה 5חזחסזק. הקשה על <ז06חם> תכניס אותך לתוכנית. כדי לבחור ספריה אחרת 6510001 או חחו!וטזפ)) הקש על .. שמופיע בסוף הרשימה של התוכניות. הקשת <007חם> על שס קוב תפתח חלון כחול, שכותרתו במרכז הינה: שס הקובצ, ובתוך החלון יופיע הטקסט של תוכנית זו (או של קובצ זה). כדי להריץ את התוכנית עליך להקיש על צמד המקשים: <9">+<]00>. המחשב יתרגם את התוכנית לשפת מכונה ויבצע אותה. כדי לראות את פלט התוכנית הקש <5=>+<|>. יש להקיש על מקש כלשהו כדי לחזור לחלון התוכנית. נספח ה': התקליטור וסביבת העבודה 6ז(61ד 473 .6 המשך ההרצה של תוכניות נוספות מומלץ באופן הבא: תחילה לסגור את חלון התוכנית הנוכחית עייי צמד המקשים <3">+<)|4>. אתייכ ניתן לתזור על השלבים 1 עד 5, כאשר בשלב 3 אפשר לבחור תוכנית אחרת. הערת: בכל שלב בסעיפי הרצת התוכניות אפשר לבטל שלב כלשהו ולחזור לשלב הקודם ע'יי המקש <₪56>. העדה חשובה/// אס המחשב שלכס מחובר לרשת, המלצתנו - בזמן אתחול המערכת להקיש ₪5 כדי לדלג על ביצוע הקבצים 66.081א30106 [-5/5.פַמחס6 אס לא תעשו כך, י*יתכן שבתוכניות תראו תווים לא מובמיס במקוס עברית. הרצת תוכנית עם 6+ 61ד 1 9 .10 כדי לקרוא לקובץ תוכנית קיימת יש לבחור בתפריט ₪116 באפשרות חסקס. נפתחת תיבת דו-שיח בשס : 116 3 1080. התיבה 8₪6 מכילה את הערך 6.* (או 695.*, בהתאם למה שבחרת בתפריט זסו0= ,%ה6הההסזוטח= ,פהסטק0). המשמעות היא שיוצגו בפניך כל התיקיות וכל הקבציס עס סיומת 6. (או הסיומת קק6.) אס קבצי התוכניות אינס נמצאיס בכונן 6, אלא בכונן 5, לדוגמה, יהיה עליך להקליד בתיבה פוחגּא את רצף התוויס הבא: 5:*.6 ולהקיש זססחם. בתיבה 1165= תוכל לראות את כל שמות התיקיות שבדיסק ואת שמות הקבציס לפי מה שרשוס בתיבה שוחהּא (סיומת 6 או סיומת קק6). היעזר בפס הגלילה האופקי כדי לשוטט בתיבה 6שוו=. כדי לעבור לתיקיה, סמן את התיקיה ולח ח6קס. כדי לחזור לתיקיה ממנה הגעת, סמן את רצף התוויס .. ולחצ חסקס. התו .. נמצא בסוף רשימת הקבצים. אס יש הרבה קבצים באותה תיקיה לא כולס מופיעיס בתיבה 1!65=. השתמש בפס הגלילה האופקי כדי להגיע לסוף הרשימה. כדי לפתוח קובץ, סמן את הקובצ ולח חסקס. לאחר פתיחת קוב תוכנית, תוכן הקוב יופיע בחלון על רקע כחול שכותרתו היא שס הקוב כולל נתיב התיקיות. להרצת הקוב יש לבחור בתפריט חט₪ באפשרות חטא. כדי לראות את פלט התוכנית הקלד 5=++!4 או בחר בתפריט /שסחו/ש באפשרות +זטקשטס. היעזר בפסי הגלילה האנכי והאופקי של חלון זשטזטס כדי לראות את תוכנו. 4 המדריך השלם לשפת 6 .1 .2 .3 .4 .5 .6 חלון פעיל הוא חלון שהינך רואה ובפינתו השמאלית העליונה מופיע ריבוע [8]. כדי לסגור את החלון יש לנקוט באחת מהפעולות הבאות: + בחירה בתפריט שספחו/ באפשרות 6!056. + לחיצה אחת באמצעות העכבר על הריבוע. מעבר בין חלונות (ח56766 ז56(! ,ח6ז8) טססטס ,₪1655806) באמצעות תפריט צוססחועו. ליצירת קוב תוכנית חדש יש לבחור בתפריט 1!6= באפשרות עשסא. לשמירת קוב יש לבחור בתפריט ₪16 באפשרות 6ע58. ליציאה ממהדר 16/66 בחר בתפריט ₪16 באפשרות פוט 0. סגור את החלון על ידי לחיצה על <. קרא קובץ /15660106.00 61 ד6זו 61 ד 50/06 שנמצא בתקליטור ללימוד עקרונות העבודה ב-6ו|6ד. נספח ה': התקליטור וסביבת העבודה 6ז(61 475 מה עוד בתקליטור? הוצאת הוד-עמי מפיצה תוכנות אלו כבונוס ללקוחות ההוצאה, ואינה מתיימרת לגבות תשלוס עבור התוכניות המצורפות ו/או לתמוך בהם. שים לב! השימוש בתקליטור וה הוא על אחריותו הבלעדית של המשתמש. המוצריס המותקניס בתקליטור וה מסופקים באחריות החברות המייצרות אותס. הוצאת הוד-עמי אינה אחראית, בכל צורה שהיא, לאופן ולטיב התוכנות המותקנות. בכל שאלה לגבי תוכנה הנמצאת בתקליטור, יש לפנות למפתחי התוכנה (כל תוכנה בנפרד) כפי שמצוין בקובצי העגרה של התוכנה המדוברת. הקבציס הס גרסאות 6זבּ)6זה8ח5 ו-6ז6/3סת . גרסת 6ז6/3ז3ח5 מאפשרת לך, המשתמש, לבדוק את יעילות התוכנה ואת תאימותה לעבודה אותה אתה מבצע. אס נמצאה התוכנה מתאימה לצרכיך, עליך לשלס למפתחיה תשלוס סמלי (לפי הרשוס בקובצי העזרה של כל תוכנה ותוכנה בנפרד) כדי לקבל רישיון מלא לשימוש בה. קבלת רישיון לשימוש בתוכנה יפתח בפניך מיגוון אפשרויות שלא עמדו לרשותך בהפעלת גרסת ה-6זה6)8ז8ח5. הוצאת הוד-עמי אינה תומכת בתוכנות המסופקות בתקליטור זה. קרא על התוכנות המצורפות בתקליטור בקוב =פש. פ6אס. התוכנות המומלצות להתקנה 1. תוכנת 468061 07008% 20006 כדי שניתן יהיה לעיין וגס להדפיס את הפרקיס לדוגמה ואת תוכן הענייניס של כל ספר בהוצאת הוד-עמי. 2. תוכנת 6טו 61ד. להתקנת שאר התוכנות יש ללחוץ על התקנת תוכנות, לאשר את תנאי השימוש בתקליטור וללחוצ על תוכנות נוספות. פירוט רחב יותר לגבי חלק מהתוכנות המצורפות בתקליטור תוכל לקרוא בקובצ =0ק. 060 אשר בתקליטור. 6 המדריך השלם לשפת 6 6 +003ז6 0006 1. ודא שהתקליטור נמצא בכונן התקליטוריס 2 בשולחן העבודה, לחצ לחיצה כפולה על הסמל המחשב שלי 3. לח לחיצה כפולה על סמל כונן התקליטוריס 4. לח לחיצה כפולה על הקוב 6א6.ווחה3 סה 5 לחץ על התקנת תוכנות 6. לח על לחצן האפשרויות ליד אני מאשר את תנאי השימוש בתקליטור 7 לח המשך 8 לח על [₪6806 67008% 9. אשף ההתקנה מתקין את הרכיבים הנדרשים. במהלך ההתקנה עליך ללחו על 666% ,%א6א ו-6%%א פעם נוספת כדי לבצע את ההתקנה. 0. בסיוס ההתקנה עשויה להופיע על המסך תיבת דו-שיח התנגשות בין גירסאות ומייד אחר כך להיעלם. על המסך תופיע תיבת הודעה של תוכנית ההתקנה. לחצ על אישור. בתיבת הדו-שיח התנגשות בין גירסאות לחי על כן, כדי לשמור את גרסת הקוב שלך. שאלות נפוצות בחלק ה של התקליטור תמצא אוסף של שאלות נפוצות ותשובות במיגוון נושאיס: איך מחפשיס בספר! כיצד מזמיניס ספר דרך האתר באינטרנט! למי פוניס בבקשת תמיכה! האם ניתן לבצע הזמנה טלפונית: וכדומה. נספח ה': התקליטור וסביבת העבודה 6ז(61ד 477 הערה חשובה! הוצאת הוד-עמי אינה תומכת בתוכנות המסופקות בתקליטור זה. התוכנות ניתנות ללקוח כבונוס, לשימושו האישי, והן מסופקות 45-15 כפי שסופקו להוצאת הוד-עמי על ידי יברו התוכנה. התמיכה ניתנת ללקוחות ההוצאה בנוגע לספריס הרואיס אור בהוצאה. ניתן לשאול שאלות, להציע הצעות ולבקש עורה בהפעלת קוד או קוב המוזכר בספר. מחלקת התמיכה של הוצאת הוד-עמי אינה תומכת ביישומים ובתוכנות המסופקות בתקליטור. צור קשר תוכל ליצור עמנו קשר באמצעי התקשורת הבאיס: טלפון: 09-9564716 פקס: 09-9571582 דואר אלקטרוני בנושא כללי: |ו.1.60ח06000-8ח1 דואר אלקטרוני בנושאי תמיכה: |6000-801.60.1+זססקט5 אנשי התמיכה שלנו ערוכים לתת לך את העזרה הדרושה לך בשימוש בספר. אין אנו נותניס תמיכה הקשורה בתוכנות המצורפות בתקליטור. בפנייתך אלינו לקבלת תמיכה, אנא הצטייד בנתוניס הבאים : 1. שמו המלא של הספר 2 מספר דאנאקוד, כפי שמופיע על הכריכה האחורית של הספר (למשל בספר זה 259-10159) 3 פרטים מדויקים של הבעיה (הכולליס מספר פרק, מספר עמוד, שס קובצ) 4. אמצעי קשר בו נוכל להשיג אותך: טלפון נייד, פקס, |וְב5-03. 8 המדריך השלם לשפת 6 אס יש לך שאלה או הערה בנוגע לספר מספרי הוצאת הוד-עמי, נשמח לשמוע ממך. יש מספר דרכיס בהן תוכל להעביר לנו את הערותיך: בדואר אלקטרוני: |ו.01.60ח00-8ח6זזססס5 בפקס: 2" בדואר: ת.ד. 6108 הרצליה 46160 בפנייתך אנא ציין את הפרטיס הבאים: שמו המדויק של הספר, מספר עמוד, מספר שורה מלמעלה/מלמטה, מה לא בסדר, מה לדעתך צריך להיות. תודה רבה שבחרתס הוד-עמי טלפון: 09-9564716 פקס: 09-9571582 אתר באינטרנט : |ו.60.וחה-0סח.צוצוצ/ /: קה דואר אלקטרוני: |(.1.60הח06000-8+ח1 פנה לקובץ .065 לפרטים נוספים על תכולת התקליטור. נספח ה': התקליטור וסביבת העבודה 6ז(61 479 0 המדריך השלם לשפת 6 אינדקס עברי 5 207 ספריה ח.5סום 200 שירותי 8105 ₪0 29 א אוגר 208 [ובוי-1 בקרה 3 600 דגלים 11 0 היסט 107 יכוי ייעודי 101 6 ספ |506618 כללי 100 זט |68 6 כתובת זיכרון 106 5 לסוח מונה פקודות 13 זז 60 הוההזססזם מצב 102 6 60 מקטע 4, 407 5 פקודה 102 חס6ט סח אופרטור 7, 456 ז וס ₪ לוגי בסיביות 205 סא לוגי בסיביות 2055 2 או לוגי 7, 46 [ אונרי 7, 456 ץזהחט אריתמטי 7 היררכיית פעולות 88 בינארי 77 הגדרה 56 הזות סיביות ימינה 2506 << הוות סיביות שמאלה 2506 >> וגס 255 8% וגם לוגי 6, 46, 304 6% זוגי 56 כתובת (של) 2, 205 8% לא 7, 46 ו לוגי 59 09168 ערך המוצבע עייי 204 5 קדס הגדלה עצמית/הגדלה מאוחרת עצמית 207 +1+ קדס הקטנה עצמית/הקטנה מאוחרת עצמית 207 = אינדקס עברי 481 שארית (מודולו) 00 אופרנד 7 איבר 129 איגוד 207 הגדרה של 7, 458 מצביע ל- 208 שיבוצ בתוך מבנה 29 אינדקס 1-19 אלגוריתס החיפוש המהיר 22 אפיק בקרה / קו בקרה 104 כתובת 107 נתונים/מידע (ביעיימ) 4, 407, 408, 409 אתחול מחשב 55 אתחול (מערך) 156 אתחול (משתנה) 20 ב בדיקת תקינות ציוד היקפי 5 ביטוי 0, 457 מותנה 14 ריק 97 בית (בתים) 2, 398 בלוק 20 ברירת מחדל 12 ג גופן כתיבת תוכנית 124 גלישה 13 גרשייס 55 ד דיסק, ארגון נתוניס 22 ה הבאת פקודה 209 הגדלה והקטנה עצמית (של משתנה) 71 הגדלה/הקטנה מאוחרת 71 הגדרה 8, 454 6 030 9+ איגוד 207 2 המדריך השלם לשפת 6 % 6% חסוחט 66/3780 זססחוסק או הח0שו3!407 +זס6=5וטף 5 6חו| |סשחס6 / 5טפ |סזטחס6 5 הזה 03%8 / 5ום 08%8 0% (180/6ז8/ 3 01) הססה2ו|הטוחו וב חסן655זקאס סו 60 ווטח (%6)5/ם או ורי צוסן6/ס ו +6 רזחו ססטה 6/0 רזחו 05% הוחו חסוחט טיפוס חדש מאקרו מערך מצביע משלימה משתנה קבועיס שמות משתניס הודעת שגיאה 60 ץופטסוטסזוס הזוה, אריתמטית לוגית הזחת קוד הידור (של תוכנית) מותנה תוכנית מהדר היסט הכללה של קוב הסבה בכוח הערות הפעלת מחשב הפעלת תוכנית, פרמטר פורמלי פרמטר פורמלי שורת פקודה הצגת מספריס הצהרה ריקה הרחבת סימן ז% יכרון ואסם גודל זמן גישה כתובת של כתיבה/קריאה הקצאה מורחב מחזור ויכרון מיפוי 454 ,264 9 41 454 ,9 56 38 454 ,430 ,0 454 ,0 1 56 1 308 08 +6 436 ,7 199 57 399 9 15 300 ,0 1 5 207 207 207 5 06 114 405 ,398 ,331 ,298 ,4 4068 1538 1538 46 1538 238 4068 47 599 0 06 ץפוה זססחוסם ווח 6 5% 66וחתזוזה אוח5 |68וףסו חססה !וקו ס6 60008 זו 60 יכוי 6 וסחו 69 60 5 6 צ"ָזהּ סחסוח זה 6חו| חפ וח 60 55% |וטח 60 חףו5 ץ סרח סרח 6 6חוז 866655 5 רסוח חסו63סו|8 0 6 ץז רסוח אינדקס עברי 483 מרחב משני (תקליטון/דיסק קשיח) סוגים ראשי דינמי רוחב זמן-אמת ח חיפוש (ראה גם מיון) אלגוריתס החיפוש המהיר בינארי (ייאריה במדבריי) חישוב אינטגרל (דוגמה) ט טיפוס והטחס בוליאני הגדרה משלימה הגדרת טיפוס חדש הסבה בכות חסר סימן ממשי (נקודה צפה) ממשי כפול מספרי שלס תו , ייצוג נתוניס בשפת 6 אוקטלי בינארי שלילי הקסדצימלי עשרוני/דצימלי עשרוני לבינארי יעיימ (יחי עיבוד מרכזית) כ כתובת ציכרון כתיבת תוכנית 4 המדריך השלם לשפת 6 99 332 ,1 408 408 ,1 1408 138 0 292 ,6 22 296 ,2 16 17 566 46 8 49 70 0 17 17 3 67 ,53 7 78 ,67 ,7 410 414 ,0 41 412 414 ,0 410 412 404 ,9 106 20 (ץזסר 16 466655 והססחב3) וזה אהחס ו וו 6וחו ך-|₪68 החרשו3/407 +זס6>5וטף סק ח8ס|ססם ווח 0 0ופחט 0% 6 (ז606חו) %חו (ז6ז8786ח6) 68 0 5 רסוח ל לוח הכפל (דוגמה למשפט זס)) לוח מקשים (ראה מקלדת) לולאה (ראה גס משפט) אינסופית מ מאקרו ביטול הגדרה הגדרה מבנה אתחול בתוך מבנה הגדרה של הוספה מחשב מצביע ל- משפט קובצ 05 רב אפשרויות רשומה רשימה מקושרת שדה תוכנית מגדלי האנוי מדריך (ראה ספריה) מהדר מחרוזת בקרה הגדרה מיון מיון (ראה גס חיפוש) בועות מהיר מילה חצי מילה כפולה מילים שמורות מילת-מפתח ו חסוחט 155 2 977 16 199 138 458 ,3 217 21 23 259 577 239 ,8 5 1 90 26 265 ,257 ,6 25 5 56 397 0 138 ,129 8 00 18 146 292 ,7 16 22 410 ,407 ,8 410 138 1 5 233 27 קססן הוחו ו 6 6 חס !וח הוחו סק 5060076 56+ 66וסח6 עְהאו-ח ו 60אחוו 56 וסח8 )0 5זסאוסד זו 60 59 600 + 0 0זסעו-?]הח סזסצוס 5 566 0זסצוץ6א אינדקס עברי 485 מיעון ישיר עקיף מנטיסה מסוף מחשב מסך מסכס מספר בינארי המרה הצגת מספריס חיבור מספריס מעבד יחידת עיבוד מרכזית - יעיימ עזר מתמטי תמליל מעריך חזקה מערך אתחול הגדרה חד-מימדי חיפוש מיון איבריס בועות רב-מימדי של מבניס של מצביעיס מערכת הפעלה 15-05 מפרש/מפענח מצביע ססצ אריתמטיקה היסט חיבור/חיסור כתובת בזיכרון לכתובת המסך למחרוזות למצביעיס לפונקציות לשלס מערך 6 המדריך השלם לשפת 6 29 29 .18 208 200 100 413 ,0 16 15 416 99 99 5 38 129 245 ,156 ,9 129 132 131 ,9 146 146 ,7 146 143 9 22 222 ,9 22 43 233 207 21 209 212 233 200 216 26 227 ,217 ,3 258 222 ,9 0ח!007655הּ ו זו הוח 66 ץְ150|8 ויוי זס טח ץזהחוס בי 6 60-00 3686 וח סו חח סקאס ץפוה חססה2לו|הטוחו 0 יוב ְהזזהּ הסופח6רחו ט!טוח 5 0 עְהּזְזֶה ץהזובּ זס%חוסס הה506ץ5 פחוסבזסקס שחו זססחוסק ותו 0% 5זסחוסק חסטססחטז רחוק מקטע מקלדת משפט בקרה ברירת מחדל דילוג לראשית לולאה הצבה מותנה מקוצר לולאת זס+ קינון לולאת 6!וחאו..60 לולאת 6!וח/ע מבנה מורכב מיתוג ריק שבירת לולאה תנאי זו מיוחד תנאי מורחב משתנה אוגר אוטומטי אורך חייס אפיון אתחול בוליאני בעל סימן גלובלי הגדלה והקטנה עצמית הגדרה טווח הגדרה טווח הכרה סטטי פונקציה שס 21 99 77 458 ,33 0 459 ,7 12 100 9 460 ,9 67 5 1046 72 459 ,95 ,8 %8 459 ,4 459 ,92 ,5 5 6 460 ,1 458 7 460 9 87 ,3 1 88 3 183 0 11 13 13 13 13 46 308 116 71 0 19 13 18 11 1 זז 5 600 5 600 ורי 10%0 6 חוז 60 חח 550 + 35510 |החסםוהס6 זסז 8 0-6 6וחו 6 או 60 ח6וו5 ווטח אהסזם + 6 זז 6 וניבי 6ב 16| חס !וח ח68|ססם שפח 58060 |הססוף רזחו ססטהּ הוחו 006 6 אינדקס עברי 487 : ניתוב מחדש נתוניס בדיסק (י סוגרייס מסולסלים סיבית סיומת םא= סימן ספריה .105 ח.0ו5%0 ספריה סטנדרטית ספריה (תכולת קבצים, מדריך) ע עורך תמליל עיצוב טכניקות מטה-מעלה מעלה-מטה מסכים תוכנית עכבר מסך וירטואלי מצב-מסך ממשי פונקציות הדלק סמן כבה סמן ספור תנועות קבע מיקוס קבע סמן גרפיקה קבע סמן טקסט קבע תחוס אופקי לתנועה קבע תחוס אנכי לתנועה קלוט סטטוס קרא לחצן קרא מיקוס וסטטוס קרא שחרור לחצן ע, בינארי 8 המדריך השלם לשפת 6 219 22 33 398 32 ,3 1764 .18 20 200 7 7 22 424 5 16 1.08 16 16 15 17 7 7 39 4020 41 417 +0 417 46 5 458 42 441 43 221 666 זו ץזהזטוון (0ו/560) ץזבזטו! 0ז08ח5%8 ו זו קט-וחססם חאוס0ם-קסץ 6 ח56766 |הטשזוצ 6 50766 |86008 ()חס זספזט6 6טסוח (ס ז50זו6 86גוסוח ()5ז%6חוס6 86גוסוח ()0056 56% ()0 ז50זו6 86גוסוח ( זס5זו6 6פגוסוח ()06ח8זח 6פגוסוח ()06חהז/ 6פטסוח ()5%81005 156סוח ()2655 156סוח ()₪0056 680] ()6!6856] 56גסוח 6 ץזהּחוס הדפסה 5 בינארי ממוין 3 בן ימני 224 בן שמאלי 24 עלה 21 צומת 211 אב 2 מנוון 2 שורש 211 ערוצ 25 ערך 213 אמת 3 ימני של מצביע 203 מוחזר מפונקציה 0, 121, 315, 432 מסומן 2008 שמאלי של מצביע 203 שקר 3 פ פונקציה 2, 40, 66, 111, 173, 453, 460 אורך מחרוזת 9, 140, 217 אקראי 156 גוף 20 דחיפת תו חזרה לאזור קלט 9 הגדרה 0, 113, 460 החזרת גודל של משתנה 209 הכרזה על שימוש בפונקציה 121 הסתרה 100 העברה לפי ערך 3, 213 העתקת מחרוזת 219 הקצאת זיכרון ואיפוס תוכנו 21 הקצאת משתנים/ויכרון 7, 300 השוואת מחרוזת 0, 141, 220 חילוק 5, 116, 214 טיפול בסמן 27 טיפוס שלס 121 יצירת קוב 25 כפל 4, 119 כתיבה לקובצ (ללא מאגר) 26 כתיבה לקובצ באמצעות תבנית 23 כתיבת מחרוות לקובצ 0, 341, 342 6 שחו 501060 חספ 10% חספ 6%! ו 6 0% 686 סה סטזד סט|פע 00% 6ט|ע הזז 0 6 6 6 החסטסחט+ (0ח50|6 ()הה00חפז ()ח6ז86חט 51260%0( שופ עס ||68 (0ץ50760 68|!06)( ()3|!06וח ()וח5076 ()צו0ט!טח / ()0עו ()6768% (וטוח ()6ם1 א (0)שחווסז ()5סוס1 אינדקס עברי 489 כתיבת תו למסך 4, 78, 342 כתיבת תו לקוב 9, 342 ללא שירותי מאגר 25 מדפיסה 1 מחזירה 22 מיקוס בקוב (ללא מאגר) 218 מיקוס בקוב (עס מאגר) 244 ממשק מקלדת 200 ממשק פסיקות תוכנה למעבד 8086 256 מקבלת 1 משתניס 11 סגירת קובץ (עס מאגר) 28 ספריה 3, 173, 461 עכבר (ראה עכבר) 17 עס מספר משתנה של פרמטריס 266 עם שירותי מאגר אוטומטי 5, 336 ערך מוחזר 0, 114, 121 פלט באמצעות תבנית 2, 79, 343 תווי בקרה 1 פרמטר 0, 287 אקטואלי 112 פורמלי 2, 287 פתיחת קובצ (ללא מאגר) 25 פתיחת קובצ (עס מאגר) 6, 345 קובצ כותר 27 קולטת 1 קלט/פלט עם מאגר 256 קליטה מקובצ באמצעות תבנית 23 קליטת מחרוזת (שורה) מקובצ 0, 342 קליטת נתוניס לפי תבנית 2, 85, 342, 343 קליטת תו 4, 78, 79, 342 קליטת תו מקוב 9, 342 קריאה ישירה/עקיפה 21 קריאה/קינון קריאות 112 קריאה מקוב (ללא מאגר) 256 רקורסיבית (ראה גם רקורסיה) 1, 315 תכנון 27 שארית 5, 117 שחרור בלוק מוקצה בזיכרון 21 שס הפונקציה 0, 66 שרשור/צירוף מחרוזת 2, 221 0 המדריך השלם לשפת 6 ()ח6סט0 / ()זהּח6זטוס ()66וס1 0 60ז6)טטחט ()5666] ()150066 ()ץ₪105%6 ()%86ח1 16!056)( = 0 60ז6אטם 6 60חז סז ()טחוזס בוב 86008 |החחזסז ()ח6כס ()ח6קסז .50010 ()16ח1508 10665)( (%0ח568 (06%600 / ()87ח06%6 ()106%6 0 00( ()0חחחז 1706)( 507086( תוכנית ראשית תיעוד תכונות פלט דיוק השדה לפי תבנית רוחב השדה פסיקה חומרה לא ניתן למיסוך ניתן למיסוך מסך מערך פסיקות תוכנה פקודה 6וחצו בתוכנית תקציר פקודות קדס-מעבד סוף תנאי, 01ח%6 תנאי 56| תנאי זו תנאי 7061וא תנאי 061חוא פרוצדורה פרויקט, יצירה תוכנית דוגמה פרמטר חס אקטואלי העברה לפונקציה פורמלי 06 "זה שורת פקודה 66 0 3 0 331 ,44 0 84 3 79 3 404 ,5 404 406 404 56 9 404 ,6 5 +9 3 6 199 19 1599 1599 199 6 175 ,3 158 00 00 112 412 460 ,2 27 27 27 ()חוהוח טס חסופו66זוס טס 60 סז ו וו %קטז סח 6 הח 6 הסה 356 וח 6 06 6 60[סזוס וב 86008| |הוח'וס+ 6חו! החרוח 60 אינדקס עברי 491 קִ קבוע אפס אוקטלי הקסדצימלי טיפוס ומטחס ממשי שלס תו קדס הגדלה/הקטנה קדם-מעבד קוב קלט קוד 0 6 קו-נטוי לאחור (ייי) קו-תחתון (יי ") קוב גישה אקראית גישה סדרתית הכללת קובצ בתוכנית כותר/כותרת (ח.00ו5%0) ללא מאגר מבנה (05) מקור פלט/קלט סטנדרטי פתיחה וסגירה קוד שס של תמליל (טקסט) קינון קישור קלט לפי תבנית קלט/פלט מסך מקלדת מרחב ניתוב מחדש סיוס פונקציות ללא שירותי מאגר 3 5 3 3 566 6 3 6 207 1 15 44 417 ,4 417 ,4 80 ,4 0 21 5 5 196 ,5 425 ,337 ,6 18 1 14 12 16 433 ,5 12 340 ,3 315 8 18 5 408 ,331 ,44 ,0 77 77 409 9 339 44 5 פונקציות עס שירותי מאגר אוטומטי 5 2 המדריך השלם לשפת 6 60 א 060 08ו8066א6ח |68ז] %חו זו 66/0606 סח 6וס 0-ו ח5|35א86 6 5 5 |56608 6 ן םחו וי 06 חו5%0677/5%000%/5%0 6 06 סוחפח סו 6 אל וח אחוו טס טס/זטקחו ץְ150!8 00 6 666 0 60ז6)טטפחט 0 6ז6וטום פונקציות ספריה קובצ תוויס רִ ריווח בין פקודות בכתיבת תוכנית רקורסיה דוגמאות ופתרונות הפעלה מגדלי האנוי מנגנון ערך מוחזר מפונקציה רקורסיבית תנאי עצירה רשומה רשימה מקושרת ש שגיאות שיגרה שיטת משלים ל-2 שס איבריס מאקרו מוהה משתנה גלובלי מקומי פונקציה שפת מכונה שפת תכנות ת תו, אחוז דלג שורה כוכבית (ראה אופרטור) נקודה-פסיק (;) סולמית סוף קובצ (50₪) קו-נטוי לאחור (י'י) קו-תחתון (יי ") 335 7 44 44 8 21 218 1 6 5 5 15 34 265 ,257 ,6 170 6 412 ,5 +6 +6 +5 1 +5 +5 426 6 0 17 00 233 0 15 222 80 ,4 0 חסון5זו66" וסח8 )0 5זסאוסד 0 ו 60אחוו 6חוטטסזס 6/5ח טס 6% קוחסס 2'5 זו 6 6חוחה86וח % (-1) 660= שחו | % זז 6 6!ן-+ס-0ח= 5|350א86 6 אינדקס עברי 493 קוד ייצוג רווח סיוס מחרוזת סיוס שורה (ייחיי) תוכנית דוגמה (הצגת תוויס מוקשיסם) דוגמה (העתקת קבצים מהירה) הגדרת מאקרו הגדרת משתניס הגדרת קבועיס הידור יצירה ממספר קובצי מקור כתיבה ביטוי פונקציה מבנה מוכנות להפעלה מפרש מקור נהליס לכתיבה גופן סיוס שורה (ייחיי) עיצוב פקודות פרמטר פורמלי - 6סָזּ פורמלי - צְזםּ שורת פקודה שגיאות תחביר תוכנת שו |6ד תיעוד תנאי מורכב משפט זו תקן 51 6 תקציר פקודות ופונקציות 4 המדריך השלם לשפת 6 +6 0 5 333 1 50 577 41 420 420 57 154 424 0 41 41 5 222 57 222 44 44 79 1 15 +9 27 27 27 27 170 +3 4099 11 3 6 87 ,3 17 17 3 %חהוס א (68) הזט6 68770886 ההאזטסזוס 6060 ץ60= 66 חססה !וקו ס6 6 יי שחו 06 הז 6 670806 6סחסוח זה 6חו| 0חהח וח 60 א%חץ5 6 אסוטף אינדקס לועזי לא (אופרטור) 7, 46 ו פ.ק.מ. הגדרת ערך לשס סמלי 11 6 פ.ק.מ. תנאי 1.9 6 פ.ק.מ. סוף תנאי 1.099 ]וח פ.ק.מ. תנאי 1.099 זוא פ.ק.מ. תנאי 1.099 בי פ.ק.מ. תנאי 1.099 זו הכללה של קובצ בתוכנית 5, 196 6 וסחו ביטול הגדרת מאקרו 108 זט שארית / מודולו (אופרטור) 00 % כתובת של (אופרטור) 2, 205 8% וגם 255 % וגס לוגי (אופרטור) 6, 46, 304 6% גרשייס 55 " סוגרייס מסולסליס 33 [ סולמית 155 . ערך המוצבע עייי (אופרטור) 204 : קדס הגדלה עצמית/הגדלה מאוחרת עצמית (אופרטור) ‏ 207 ++ קדס הקטנה עצמית/הקטנה מאוחרת עצמית (אופרטור) 207 7 נקודה-פסיק 20 ; שיטת משלים ל-2 5, 412 6 ו 60 2'5 הזוזת סיביות שמאלה (אופרטור) 2066 >> הזות סיביות ימינה (אופרטור) 206 << 0₪א לוגי בסיביות 205 א ₪ לוגי בסיביות 205 ייאוי' לוגי (אופרטור) 7, 46 1 4 זמן גישה 2028 6וחוז 866655 פרמטר אקטואלי 112 זכ |86008 מצב-מסך ממשי, עכבר 7 6 50766 |6%08ה מסכס 100 ויוי אפיק כתובת 107 5 007655 פרמטר פורמלי, מספר ערכים בהפעלת תוכנית ‏ 287 6זג אינדקס לועזי 495 פרמטר מצביע למערך מחרוזות של הפעלת תוכנית 287 הזוה אריתמטית 08| מערך 129 הגדרת מערך 9, 454 אתחול מערך 9, 156, 245 מערך של מבניס 22 קוד 45011 4, 417 משפט הצבה 5, 67 הגדלה/הקטנה עצמית (של משתנה) 71 משתנה אוטומטי 13 קו-נטוי לאחור (ייי) 4, 80 מספרי בינארי 0, 413 אופרטור בינארי 77 עצ בינארי 221 200 ממשק מקלדת 200 סיבית 3, 332, 398 תו רווח 0 בלוק 20 טיפוס בוליאני 6 משתנה בוליאני 6 אתחול מחשב 255 מטח-מעלה, עיצוב 1.08 הפסק לולאה (הוראה) 9, 460 קלט/פלט ממאגר אוטומטי 5, 336 אפיק 4, 407 בית (בתים) 2, 398 פונק' קריאה לפי ערך 3, 213 פונקי להקצאת זיכרון ואיפוס תוכנו 21 סיוס שורה (ייח'י) 1, 333 המרה של טיפוס 0, 300 ערו 5 טיפוס מסוג תו 7, 67, 78 קבוע מסוג תו 6 200 פרמטריס בהפעלה של תוכנית 207 הערה 1 6 המדריך השלם לשפת 6 זה + 6 תסווה ץפוה חסטוח06 ץפוה חסו28ו|הטוחו ץפוה 5 0 עְהּזְזֶהּ 1 508% +הסוהַחחו55הּ 66/6 חו-ססטהּ 6 וסט 8 36%5|350 זסטוהטח ץזהּחוס זססהזסקס ץזהחום 6 ץזהּחוס ח.5סום ()ץ105%6 זו %חהוס או (06/%) חהס|ססם (80!6וזהש) ח8ס!ססם 0% קט-וחססם אהסזם 0 60ז6אנוס 5 (5) %6ץם 6 שט|פע עס ||68 ()68|!06 (6₪) חהזס6ז 68771806 0% 66 (06/) זה8ח6 60 זהה6 60 סחסו זה 6חו| חהה וח 60 ו הידור (של תוכנית) מהדר משפט מורכב אוגר מצב הצבה מותנית הידור מותנה ביטוי מותנה מסוף קבוע דילוג לראשית לולאה אפיק בקרה משפט בקרה יעיימ (יח' עיבוד מרכזית) פונקי ליצירת קובצ נתוניס אפיק נתוניס הכרזה ברירת מחדל במיתוג הגדרה מיעון ישיר ספרייה (מדריך, תכולת קבציס) מסך פונקציה לדוגמה, חילוק לולאה מסוג 6!וחצו..00 טיפוס, ממשי כפול זיכרון ראשי דינמי קוד 586016 תוכנית דוגמה להצגת תוויס עורך תמליל תו סוף קובצ 50₪) סיומת =א= מעריך ביטוי זיכרון מורחב 436 ,7 397 ,0 6 402 14 199 1046 108 454 ,430 ,3 460 9 44 459 ,7 404 ,9 5 2 409 ,407 ,4 458 ,7 12 456 ,454 ,8 99 22 290 7 214 ,116 ,5 459 ,4 47 408 417 ,4 0 424 5 222 56 1568 48 457 ,0 408 חססה !וקו 60 וקו 60 5% 0 חהטסקו 60 אוו 60 6006 הסוח 60 + 35510 |החסםוהס6 חסו3 !ור 60 [ההסטוהס6 חסו655זא6 |החסטוהס6 0-6 60 6 וזח 60 5 |070ח60 5% |סזלחס6 6 6768%)( פ 1% 5 08%8 חסו80ז066|3 ורי הסטוחו 6 0חו8007655 01766% ו ץְ150|8 ()עו0ם1טח / ()0ע₪1 (קסס!) 6|וח/צ..00 (6ק/) 6|וס אהחס 5 6 600 ןי 6 6ן--0-01ח= 6 והטחס א סקאס חסן655זק[אס ץ רחסו 66060 אינדקס לועזי 497 שקר 33 פונק' לסגירת קוב (עס מאגר) 2108 תוכנית דוגמה להעתקת קבציס מהירה | 347 הבאת פקודה 209 פונקי קליטת תו מקובצ 9, 342 פונקי קליטת מחרוזת (שורה) מקוב | 340 342 שס קוב 222 אוגר דגליס 11 טיפוס ממשי (נקודה צפה) 7 פונק' לפתיחת קוב (עס מאגר) 6, 345 לולאה מסוג זסז 8, 95, 459 פרמטר פורמלי 2, 287, 460 פלט באמצעות תבנית 9 פונקי לכתיבה לקובצ באמצעות תבנית 243 פונקי לכתיבת תו לקובצ 9, 342 פונק' לכתיבת מחרוזת לקוב 0, 31, 342 פונקי לשחרור בלוק מוצקה בזיכרון 201 פונק' לקליטה מקובצ באמצעות תבנית - 343 פונקי למיקוס בקוב (עס מאגר) 244 פונקציה 2, 40, 66, 111, 173, 453, 460 פונקציה, עכבר 139 הכרות פונקציה 121 אוגר כללי 100 פונק' לקליטת תו 4, 78, 79, 342 משתנה סטטי גלובלי 4, 188 משתנה גלובלי 14 משפט דילוג 9, 100 מגדלי האנוי 26 פסיקת חומרה 14 כותר/כותרת (ח.0ו5%0) 6, 337, 425 קבוע הקסדצימלי 3 שס מזהה 15 תנאי 3, 87 תנאי מורחב 3 88 8 המדריך השלם לשפת 6 ] 6 16|056)( ץ60= 16% 106%6)( +06050( סוחפח סו 30 0% ()חסקסז (קססו) זס+ הזה |החזסז וס 60 סז (0)טחווסז ()6וס1 ()פזטס+ ()66ז1 ()1ח1508 150066)( חסטססחטז (056וח) הסססחט1 ח800ז066|3 הססטסחטז 6 6 56סכטכ |68ח06 (/8ח0600 / ()ח06%6 6 50806 |הססוף 6 |הססוף 0% ח 5זסאוסד וסחהר] + טס הו סז הת וי 605% |8ו066האסח 1 ב ז זו אינדקס 1-19 מיעון עקיף 209 לולאה אינסופית 7 אתחול (של משתנה) 20 קלט/פלט 0, 44, 331, 408 אוגר פקודה 1022 קבוע שלס 6 שלם (טיפוס) 7, 53, 67 ממשק פסיקות תוכנה למעבד 8086 256 מפרש/מפענח 13 פסיקה 5, 404 לוח מקשים, מקלדת 77 מילת-מפתח 5 עלה בע 221 בן שמאלי 24 ערך שמאלי של מצביע 203 ספרייה 20 אורך חיים (של משתנה) 13 דלג שורה 33 קישור 14 רשימה מקושרת 6, 257, 265 אופרטור לוגי 99 הזזה לוגית 208 לולאה 2 פונקי, מיקוס בקובצ (ללא מאגר) 218 שפת מכונה 20 פונקי תוכנית ראשית 0, 66 פונקי להקצאת ציכרון דינמי 7, 300 מנטיסה 48 ניתן למיסוך 14 מעבד עזר מתמטי 209 זיכרון 4, 298, 331, 398, 405 אוגר כתובת ויכרון 106 כתובת זיכרון 106 הקצאת ויכרון 2008 א6סחו 300765510 66%זו0ח1 קסס! 6שוחוחו חססהלו|הטוחו (1/0) +טמזטס/זטכחו 60 הסס6טס5חו 00% שחו (06061חו) %חו ()%86ח1 ויוי +קטז סח % 0זס 6 0זסצוץ6א 1 וב חספ 6% 6טן הצ 6 ץזהזטון 16| (-]]) 660 6חז! אחוו 5% 60>חוו סקס |ה6וטסו אוח5 |68ופסו קססן ]5666)( א 6 6חוחה86וח ()חוהוח ()3|!06וח הוח 356 וח 60-00 686 וח ץז רסוח זו 300655 ץזסוחסוח 5 ,רסוח חסו68סו!3 ץזסוחסוח אינדקס לועזי 499 מחזור גישה לציכרון משלים להגדרה עכבר ספור תנועות קבע סמן גרפיקה קבע סמן טקסט כבה סמן קבע תחוס אופקי לתנועה קרא לחצן קרא שחרור לחצן קלוט סטטוס קבע תחוס אנכי לתנועה הדלק סמן עכבר מערכת הפעלה 15-05 פונקציה לדוגמה, כפל מערך רב-מימדי מבנה רב אפשרויות קינון צומת קבוע אפס הצהרה ריקה/משפט ריק תוכנית יעד ייבוג אוקטלי קבוע אוקטלי היסט פונק' לפתיחת קוב (ללא מאגר) מערכת הפעלה (05ס-5ו) אופרטור פלט גלישה פרמטר מצביע (כללי) מצביעים, חיבור/חיסור מצביעיםס למצביעיס מצביעים למחרוזות 0 המדריך השלם לשפת 6 47 38 417 41 +0 417 420 46 42 43 458 5 39 222 119 ,4 143 ,9 00 315 8 1 5 458 ,97 ,6 222 414 ,0 3 407 ,399 ,9 5 2 456 7 331 ,44 0 3 460 ,287 0 454 ,3 212 26 216 6 ץז רסוח ויו 6 וח ()5ז%חס6 86גוסוח ()0 ז50זו6 86גוסוח ( זס5זו6 86גוסוח ()ס 67501 56גוסוח ()06ח8זח 86גוסוח ()655ז0. 156סוח ()6!6856] 56גוסוח ()5%8005 156סוח ()96חאזע 6פגוסוח ()חס זס5זט6 6טסוח 5-ו (וטוח ץהזזה הסופחהסרהו0-₪!טוח א 6וסח6 צהאו-4 וח 6 וטא %ח06ח55006 ||וח 0 החהזטסזק 66[טס ח0וז%8ח656זק !0658 + 600 |0608 יבכוןי ()ח6קס הה506ץ5 פחוסבזסקס סקס וס אוס!ו6/ס ס ובוב ו זססחוסם 6ו תזזה 5זססחוסס 5 תוסכ 60 5זסשחוסס 5 0 פ'ססחוסק אריתמטיקה של מצביעיס מערך של מצביעים מצביע לפונקציה בדיקת תקינות ציוד היקפי הגדלה/הקטנה מאוחרת קדס הגדלה/הקטנה דיוק השדה (פלט) קדם-מעבד פונקי להדפסה תחת תבנית פרוצדורה אוגר מונה פקודות מבנה תוכנית יצירת פרויקט פונקי לכתיבת תו למסך תקציר פקודות ופונקציות אלגוריתס החיפוש המהיר זיכרון ראשי פונקי, אקראי גישה אקראית פונק' לקריאה מקובצ (ללא מאגר) קרא מיקוס וסטטוס קבוע ממשי צמן-אמת רשומה רקורסיה ניתוב מחדש אוגר מילים שמורות ערך מוחזר בו ימני ערך ימני של מצביע פונקציה לדוגמה, שארית שורש (בעצ) שיגרה 21 222 ,9 227 ,217 ,3 5 71 207 1 84 3 15 343 ,79 ,2 6 +3 5 175 ,3 342 ,78 ,4 3 22 408 ,1 156 5 6 41 6 0 26 315 ,1 499 11 1 432 ,315 ,121 ,0 56 233 117 ,5 1408 1 6 6סוחתסוזהּ זס%הוסק ץהזזבּ זס%חוסס חסטס6חט] 8 0+ זס%חוסס וב 6/6 רזחו 05% 66/0607 סח 6וס חסופו66זוס 0-ו ()טחוזק 06 סח 60 התהזטסזס 56 וההזססזס 6 05סןסזק ()זהח6טו / ()ח6זטוס סְ 66 אסוט הח60ו3!407 +זס6>5וטף ₪ (ץזסר 16 466655 והססחב) וזה ()ה00חפז 5 חח ()680] ]680 ₪056)( |68ז‎ 60 6וחו ך-|₪68‎ 0 ח0סו5ז 66 06 וניבי 5 656760 6ט|ע חזטססז חספ 10% סט|פע זז ()0חוחז אסא 0% 6חוסטסז אינדקס לועזי ‏ 501 פונק' לקליטת נתוניס תחת תבנית טווח הכרה (של משתנה) סגמנט גישה סדרתית קבע מיקוס עכבר סימן הרחבת סימן ערך מסומן משתנה בעל סימן/ללא סימן פונקי, החזרת גודל של משתנה פסיקת תוכנה מיון פונקציה למיון עצ בינארי ממוין קוד קובצ מקור תוכנית מקור אוגר ייעודי ספרייה סטנדרטית משפט משתנה סטטי מבנה של משפט קובצ פלט שגיאות סטנדרטי קובצ קלט סטנדרטי הגדרת קלט/פלט סטנדרטי ספרייה סטנדרטית קובצ פלט סטנדרטי פונקי לשרשור מחרוות פונקי להשוואת מחרוזת פונקי להעתקת מחרוזת מחרוזת תוויס פונקי, אורך מחרוזת מבנה שדה במבנה אתחול מבנה מצביע למבנה תת-שיגרה מיתוג תחביר 2 המדריך השלם לשפת 6 343 ,342 ,85 2 13 407 ,404 ,9 5 2417 38 44 08 08 2.09 404 ,6 292 ,146 ,7 292 ,7 3 433 ,5 148 222 41 77 458 ,33 0 18 5 12 22 337 71 77 2 221 ,2 220 ,141 ,0 219 138 ,129 8 217 ,140 ,9 233 458 ,233 5 25 217 239 ,8 6 460 ,1 3 5 50801)( (6!סה הצ +0) 56006 5 5 |560060%8 ()0056ח 56% חפ 60 חףו5 6ט|פצ 514060 זה 60/5160 5 (512606% קזחו 5016 + חסססחט? +50 6 שחו 501060 06 500706 6 הח8זססזס 500706 6 6פסכוטוס !506613 ץזהזסו! 508008370 5 56 6 5 יוב חו5%0 50010. טוו50 יוב 507086( ()וח5076 ()ץ50760 58 (0ח56 ו 6 0 56 חס ה2ו|ה םוחו 560076 סק 5060076 סח טסזס 5 510 א%חץ5 קובצ תמליל (טקסט) 3, 340 מעלה-מטה, עיצוב 16 אמת 3 טיפוס 17 הגדרת טיפוס חדש 9, 264, 454 אונרי (אופרטור) 7, 456 קלט/פלט ללא מאגר אוטומטי 5 קו-תחתון (יי ") 0 פונקי, דחיפת תו חזרה לאזור קלט 9 איגוד 207 טיפוס חסר סימן 20 ערך 2|3 משתנה 0, 50, 430, 454 הגדרת משתנה 0 מערך חד-מימדי 9, 131 132 מסך וירטואלי, עכבר 117 לולאת 6!וחע 5 92, 459 רוחב השדה (פלט) 3, 398 מילה 8, 407, 410 מעבד תמליל 65 פונקי לכתיבה לקוב (ללא מאגר) 256 ז 6 אל חצוס0ם-0סץ סטזדך שק 0 ט סה סקס ץ הח 0 6760)טטחט 6 ()ח6ז86חט חסוחט 6 ססתףופחט צ סו 6 חסטוחו06 6|סהופּצ 0 50766 |הטסזוצ צ (קסס!) 6!וח/ו ו וו 0 זז סו ()6ם 1 אינדקס לועזי ‏ 503 ת.ד. 6108 הרצליה 46160 הזמנות באתר ||.60. וחובהּ- סח .טע |ו.0ס. והחה00-8חש6סזחו הוצאת כ הדע = ספרי מחשבים-- קטלוג ספטמבר 2015 ב בב || אעטנט מפתחיאתרים/רפיקה | | | | | | | | | אמא, אבא - בניתי אתר באינטרנט אד | | | |256| 29 | | הגדל את הכנסות העסק שלך באמצעות פרסום בגוגל וסוט 6ו 6008‏ | | |300| 249 | מב לתכנות בסביבת איטרוט -הכל כל בטפר אחד פא + פני אה 65-55 | מבוא לתכנות בסביבת אינטרנט - מבוא ו- 81116 - חלק 1 מתוך 3 - מהדי 3‏ | |320, | מבוא לתכנות בסביבת אינטרנט - 2845 - חלק 2 מתוך 3 | | |240| 49 | | מבוא לתכנות בסביבת אינטרנט - 889 - חלק 3 מתוך 3- מהד'3 | | | |192| 49 | 5 1101 המדריך לבניית אתרים ולמערכות 5=/\, הדור הבא - מהד'' 2 679 |384| 159 | 68| 179 0 סדנתלימוד 8 00 | |866| 189 מדריך 4 ₪6 ד₪א. 355 5 דש. 5 סדנת לימוד בשפות 6% ו-5/ -| 6 0 0006 - מדריך מעשי לפיתוח תוכנה לחפש באגים, מדריך מעשי לבודק תוכנה, מהד' 3 0 60% 15081 סדנת לימוד ללמוד 6 - מהד' 3 | יסודות התכנות ב-8/ לתוכנת וסם, מהד'4 0 | | 6 - חומרה, תוכנה ורשתות מדריך 06ח186%1 ואבטחת מידע, מהד' 2 מדריך חומרה ותוכנה לטכנאי 00 - מהד' 5 8 פעוסחוצ/ נושאים מתקדמים מדריך רשתות לטכנאי 6= ולמנהלי רשת - מהד' 4 ה פאסשתא 00000000 | 00881 מדרךלמשתמש || | 85| |544| 149 | 8 6098הו/ מדריךלמשתמש 5 | |488| 19 | | 60087הו/)צעד-אחר-צעד 5 | |272| 18 | * מחיר מומלץ לצרכן כולל מע"מ היכנס לאתר להתעדכן בספרים החדשים ומבצעים תוכן עניינים ופרקים לדוגמה |ו.60. והחה-סח. צעשו הר ףפל עמ'| מחיר'| ה 00| גפקה | | | תפמ -ספרהדרכהותרמלם | |122] 64 | אינדיזיין - ספר הדרכה ותרגילים 2 | 72 זס+₪58+78!!! - ספר הדרכה ותרגילים 0 | 64 00ח0+05ק צעד אחר צעד (צבע מלא, למתחילים), מהד' 3 | |200| 159 מדריך לתוכנת העיצוב והאנימציה 3 305 (2 כרכים) | 006א0 הה ה כ | || | יישומי סטטיסטיקה בגיליון אלקטרוני |006א₪ | | 86 | 69 | | טבלאות ציר- ניתו נתומם הכם 5 | |116| 87 | | יסודות התכנות ב-8/ לתוכנת 8%08, מהד'4 | | | |182| 95 | 00 סט צעדאחרצעד 0000 | ]60 הסנת ימד 0000000000 | |344| 129 | | 2010 סק צעד אחרצעד | | | |202| 69 | | 0000082000 צעד אחרצעד 8 | |190| 69 | עוד ספרים בגרסאות קודמות (2007 ו-2003) ניתן למצוא באתר הוד-עמי :| ניהול, כלכלה ושונות לחפש באגים, מדריך מעשי לבודק תוכנה, מהד' 3 ניהול ממוקד לעשות יותר עם מה שיש (כריכה קשה) - מהד' 4 לי זה עולה יותר (תמחיר) (כריכה קשה) - מהד' 3 מערכות מידע 1 280!69) יכולות מתקדמות | |626| 249 | 5 (5/5+07 5ו5ע!הח/ [5+891151168) -- ספר לימוד | |256| 169 | | בסיסי נתונים ושפת .801 - עקרונמת ועצוב | | |648| 149 | ניתוח מערכות מידע כולל מתודולוגיית ה- !וזש | |818| 209 המדריך העברי השלם !חש | |346| 09 ספרים דיגיטליים לרכישת ספרים לצפייה בפורמט = היכנס לאתר לקטגוריה "ספרים דיגיטליים" > קבציתגוללספים ה כ | | | | קבצי תרגול לספרים שונים תמצא באתר בקטגוריה "קבצי תרגול לספרים" זמחתו * מחיר מומלץ לצרכן כולל מע"מ. קטלוג 9/2015 היכנס לאתר להתעדכן בספרים החדשים ומבצעים תוכן עניינים ופרקים לדוגמה |ו.60. והחה-סח. צעשש