יסודות מדעי המחשב 1 בשפת C# PDF

Document Details

HonoredJasper8535

Uploaded by HonoredJasper8535

אוניברסיטת תל אביב

2007

תמר בניה וד"ר מיכל ארמוני

Tags

מדעי המחשב C# אלגוריתמים תחביר

Summary

This textbook, "יסודות מדעי המחשב 1 בשפת C#", details fundamental computer science concepts and algorithms. The book was published in 2007 and covers theoretical and practical aspects of C# programming and algorithm development. It's aimed at undergraduate-level students.

Full Transcript

‫יסודות מדעי המחשב ‪1‬‬ ‫בשפת ‪C#‬‬ ‫תמר בניה וד"ר מיכל ארמוני – ראשי צוות הכתיבה‬ ‫יעל בילצ'יק‬ ‫נעה גרדוביץ‬ ‫עדי גרין‬ ‫אתי מנשה )סעיפי התב...

‫יסודות מדעי המחשב ‪1‬‬ ‫בשפת ‪C#‬‬ ‫תמר בניה וד"ר מיכל ארמוני – ראשי צוות הכתיבה‬ ‫יעל בילצ'יק‬ ‫נעה גרדוביץ‬ ‫עדי גרין‬ ‫אתי מנשה )סעיפי התבניות(‬ ‫הילה קדמן )נספח(‬ ‫ייעוץ‪ :‬ד"ר דוד גינת‬ ‫עריכה‪ :‬לירון ברגר‬ ‫תשס"ח ‪2007‬‬ ‫אוניברסיטת תל‪-‬אביב החוג להוראת המדעים‬ ‫מטה מל"מ המרכז הישראלי להוראת המדעים ע"ש עמוס דה‪-‬שליט‬ ‫משרד החינוך האגף לתכנון ולפיתוח תכניות לימודים‬ ‫יסודות מדעי המחשב ‪ 1‬בשפת ‪C#‬‬ ‫תמר בניה וד"ר מיכל ארמוני – ראשי צוות הכתיבה‬ ‫יעל בילצ'יק‬ ‫נעה גרדוביץ‬ ‫עדי גרין‬ ‫אתי מנשה )סעיפי תבניות(‬ ‫הילה קדמן )נספח(‬ ‫ייעוץ‪ :‬ד"ר דוד גינת‬ ‫עריכה‪ :‬לירון ברגר‬ ‫כל הזכויות שמורות © ‪2007‬‬ ‫השראה הוצאה לאור‪ ,‬ת"ד ‪ ,19022‬חיפה ‪31190‬‬ ‫טל'‪ ,04-8254752 :‬פקס‪1534-8254752 :‬‬ ‫‪E-Mail: [email protected]‬‬ ‫‪www.hashraa.co.il‬‬ ‫השראה הוצאה לאור‬ ‫מהדורה שנייה ‪2007‬‬ ‫עיצוב העטיפה‪ :‬טל גרין‬ ‫אין לשכפל‪ ,‬להעתיק‪ ,‬לצלם‪ ,‬לתרגם‪ ,‬להקליט‪ ,‬לאחסן במאגר מידע כלשהו‪ ,‬לשדר או לקלוט בכל‬ ‫דרך או בכל אמצעי אלקטרוני‪ ,‬אופטי או מכני )לרבות צילום‪ ,‬הקלטה‪ ,‬אינטרנט‪ ,‬מחשב ודואר‬ ‫אלקטרוני(‪ ,‬כל חלק שהוא מהחומר שבספר זה‪.‬שימוש מסחרי מכל סוג בחומר הכלול בספר זה‬ ‫אסור בהחלט‪ ,‬אלא ברשות מפורשת בכתב מהמו"ל ומהגורמים המפורטים להלן‪.‬‬ ‫©‬ ‫כל הזכויות שמורות‬ ‫משרד החינוך‬ ‫מסת"ב ‪ISBN 965-90844-5-5‬‬ ‫פתח דבר‬ ‫יחידות הלימוד "יסודות מדעי המחשב ‪ 1‬ו‪ "2-‬מיועדות להקניית מושגי יסוד ועקרונות שעליהם‬ ‫מושתת תחום מדעי המחשב‪.‬פרקי יחידות הלימוד משלבים שני ערוצים – ערוץ תיאורטי וערוץ‬ ‫יישומי‪.‬הערוץ התיאורטי מתמקד בחשיבה אלגוריתמית ובפיתוח וניתוח של אלגוריתמים וכוללת‬ ‫התייחסות למושג עצמים‪.‬הערוץ היישומי כולל יישום של האלגוריתמים בשפת התכנות ‪ ,C#‬שפה‬ ‫מונחית עצמים‪.‬‬ ‫ספר זה כולל את היחידה "יסודות מדעי המחשב ‪."1‬היחידה מציגה בעיות ראשונות ואת‬ ‫פתרונותיהן המיועדים לביצוע למחשב‪.‬הבעיות נקראות בעיות אלגוריתמיות‪ ,‬ופתרונותיהן –‬ ‫אלגוריתמים‪.‬האלגוריתמים מיושמים בתוכניות מחשב‪.‬במהלך הלימוד מוצגים המרכיבים‬ ‫הבסיסיים של אלגוריתמים ושל תוכניות מחשב‪.‬ההצגה משלבת פיתוח וניתוח של אלגוריתמים‪,‬‬ ‫וכוללת התייחסות ראשונית ַלמושג עצמים‪.‬פיתוח האלגוריתמים נעשה בשלבים‪ ,‬תוך שימת דגש‬ ‫על ניתוח הבעיה ועל התייחסות להיבטים של נכונות ושל יעילות‪.‬כמו כן‪ ,‬מושם דגש על מבנים‬ ‫תבניתיים בפתרונות אלגוריתמיים‪ ,‬והם נקראים תבניות‪.‬פירוט מלא של התבניות מופיע באתר‬ ‫הספר‪.www.tau.ac.il/~csedu/yesodot.html :‬‬ ‫ספר זה פותח על בסיס ספר הלימוד "יסודות מדעי המחשב ‪ "1‬שפותח במכון ויצמן למדע בסוף‬ ‫שנות ה‪.90-‬בספר הקודם נעשה היישום של האלגוריתמים בשפת התכנות ‪ ,Pascal‬שפה‬ ‫פרוצדורלית‪.‬בספר זה נעשה היישום בשפת ‪ ,C#‬שפה מונחית עצמים‪.‬העקרונות האלגוריתמיים‬ ‫והנושאים בשמונת הפרקים הראשונים בספר זה זהים לאלה שפותחו בידי מכון ויצמן‪.‬בספר‬ ‫"יסודות מדעי המחשב ‪ "2‬מורחב המבט על עצמים‪ ,‬על אלגוריתמים ועל תבניות‪.‬לספר זה מצורף‬ ‫מדריך מעבדה מקוון‪ ,‬המופיע באתר הספר המצוין לעיל‪.‬‬ ‫תודות‪.‬ספר זה פותח בתמיכת מפמ"ר מדעי המחשב במשרד החינוך ד"ר אבי כהן וחברי שתי‬ ‫ועדות המקצוע האחרונות להוראת מדעי המחשב – הועדה בראשות פרופ' עמיהוד אמיר והועדה‬ ‫)הנוכחית( בראשות פרופ' יהודית גל‪-‬עזר‪.‬תודתנו נתונה להם על תמיכתם ועל הערותיהם‪.‬בנוסף‪,‬‬ ‫לאורך הספר משולבת התייחסות מפורשת לתבניות בפיתוח ובניתוח של אלגוריתמים‪.‬‬ ‫ההתייחסות מבוססת על הספר "תבניות במדעי המחשב" שפיתחו חברי הקבוצה להוראת מדעי‪-‬‬ ‫המחשב בחוג להוראת‪-‬המדעים באוניברסיטת תל‪-‬אביב בשנת ‪.2001‬ארנה מילר‪ ,‬אחת מחברות‬ ‫הקבוצה‪ ,‬אף חקרה את הנושא של הוראה מוכוונת תבניות‪ ,‬ושיתפה את חברות צוות הכתיבה‬ ‫בניסיונה‪.‬תודתנו נתונה לה על כך‪.‬‬ ‫תוכן עניינים‬ ‫‪0‬פרק ‪ – 1‬מבוא ‪179......................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪1..............‬‬ ‫‪80‬‬ ‫‪H‬‬ ‫‪ 1.11‬מהו מחשב? ‪................................................................................................‬‬ ‫‪H‬‬ ‫‪2.....................‬‬ ‫‪81‬‬ ‫‪H‬‬ ‫‪ 1.22‬חומרה ‪................................................................................................‬‬ ‫‪H‬‬ ‫‪5......................‬‬ ‫‪82‬‬ ‫‪H‬‬ ‫‪ 1.33‬תוכנה ‪................................................................................................‬‬ ‫‪H‬‬ ‫‪8...........‬‬ ‫‪83‬‬ ‫‪H‬‬ ‫‪ 1.44‬התפתחות המחשבים ומדעי המחשב ‪................................................................‬‬ ‫‪H‬‬ ‫‪8...‬‬ ‫‪5‬התפתחות הנדסית וטכנולוגית – חומרה ‪84................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪9....‬‬ ‫‪6‬התפתחות הנדסית וטכנולוגית – תוכנה ‪85................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪7‬סיכום ‪1186.........................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪8‬שאלות נוספות ‪1187.............................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪9‬פרק ‪ – 2‬פתרון בעיות אלגוריתמיות ‪138.........................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 2.110‬אלגוריתמים‪1389...........................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 2.21‬תבניות ‪2190..................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪12‬סיכום ‪2291.........................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪13‬שאלות נוספות ‪2292.............................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪14‬פרק ‪ – 3‬מודל חישוב בסיסי ‪2593..................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 3.115‬צעדים ראשונים‪ :‬הוראת פלט‪ ,‬הוראת קלט ומשתנים ‪2594.................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 3.216‬הוראת הֲ ָשׂמָ ה‪3395.........................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 3.317‬טבלת מעקב ‪3996...........................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 3.418‬החלפה בין ערכי משתנים ‪4497.........................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 3.519‬טיפוסים ‪4698................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 3.620‬קבועים ‪519..................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪21‬סיכום ‪5210.........................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪2‬סיכום מרכיבי שפת ‪ C#‬שנלמדו בפרק ‪5410......................................................................... 3‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪23‬שאלות נוספות ‪57102.............................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪24‬תבניות – פרק ‪61103........................................................................................................... 3‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫החלפת ערכים בין שני משתנים‪ ,‬היפוך סדר האיברים בסדרה‪ ,‬ממוצע של סדרת‬ ‫מספרים‪ ,‬הזזה מעגלית בסדרה‬ ‫‪25‬פרק ‪ – 4‬הרחבה בפיתוח אלגוריתמים ‪63104......................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 4.126‬מבט נוסף אל התהליך של פיתוח אלגוריתם ויישומו ‪63105...................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪27‬המחלקה המתמטית ‪67106............................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 4.228‬פעולות חלוקה בשלמים ‪68107...........................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪29‬עוד על פעולת השארית ‪73108.........................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪30‬המרת ערך שלם לממשי ‪75109........................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪31‬פירוק מספר דו‪-‬ספרתי לספרותיו ‪7710..........................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 4.332‬הטיפוס התווי ‪801........................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪3‬המרה מתו המייצג ספרה לערך מספרי מתאים ‪8412........................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 4.434‬בחירה אקראית ‪8513......................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪35‬סיכום ‪8814.........................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪36‬סיכום מרכיבי שפת ‪ C#‬שנלמדו בפרק ‪8915......................................................................... 4‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪37‬שאלות נוספות ‪9016.............................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪38‬תבניות – פרק ‪9217........................................................................................................... 4‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫חלוקת כמות פריטים לקבוצות בגודל נתון‪ ,‬פירוק מספר חיובי לספרותיו‪ ,‬בניית‬ ‫מספר‬ ‫‪39‬פרק ‪ – 5‬ביצוע מותנה ‪9518..........................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 5.140‬הוראה לביצוע‪-‬בתנאי ‪9519.............................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪41‬הוראה לביצוע‪-‬בתנאי במבנה ‪95120.................................................................úøçà...íà‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪42‬הוראה לביצוע‪-‬בתנאי במבנה ‪10112..........................................................................íà‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪43‬התניית ביצוע של שתי הוראות או יותר ‪10612................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪4‬ביטויים בוליאניים הכוללים תווים ‪108123......................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 5.245‬תנאי מורכב ‪111124.........................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫הק ָשר ‪112125......................................................................................................... íâå‬‬ ‫‪H‬‬ ‫‪ַ 46‬‬ ‫‪H‬‬ ‫הק ָשר ‪116126........................................................................................................... åà‬‬ ‫‪H‬‬ ‫‪ַ 47‬‬‫‪H‬‬ ‫‪48‬תנאים מורכבים מעורבים ‪122127...................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 5.349‬קינון של הוראה לביצוע‪-‬בתנאי‪122128...............................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 5.450‬הוראת שרשרת לביצוע‪-‬בתנאי ‪129129................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 5.551‬הוראת בחירה ‪133130......................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪52‬סיכום ‪13813.......................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪53‬סיכום מרכיבי שפת ‪ C#‬שנלמדו בפרק ‪139132....................................................................... 5‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪54‬שאלות נוספות ‪14013...........................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪5‬תבניות – פרק ‪143134......................................................................................................... 5‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫מציאת מקסימום ומינימום בסדרה‪ ,‬סידור ערכים בסדרה‪ ,‬ערכים עוקבים‪ ,‬זוגיות‬ ‫מספר‪ ,‬מחלק של מספר‬ ‫‪56‬פרק ‪ – 6‬נכונות אלגוריתמים‪147135................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪57‬סיכום ‪154136.......................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪58‬פרק ‪ – 7‬ביצוע‪-‬חוזר ‪155137..........................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 7.159‬ביצוע‪-‬חוזר מספר פעמים ידוע מראש ‪155138......................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 7.260‬מציאת מקסימום או מינימום ‪169139................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 7.361‬מציאת ערך נלווה למקסימום או למינימום ‪172140..............................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 7.462‬ביצוע‪-‬חוזר‪-‬בתנאי ‪17414................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪63‬ביצוע‪-‬חוזר בשימוש בזקיף ‪174142.................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪64‬ביצוע‪-‬חוזר עם תנאי כניסה כלשהו ‪180143......................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪65‬ביצוע‪-‬חוזר אינסופי ‪18714...........................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 7.56‬משתנים מטיפוס בוליאני ‪191145.......................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 7.667‬הקשר הלוגי ‪196146............................................................................................. (not) àì‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪ 7.768‬קינון הוראות לביצוע‪-‬חוזר‪198147.....................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪69‬סיכום ‪202148.......................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪70‬סיכום מרכיבי שפת ‪ C#‬שנלמדו בפרק ‪204149....................................................................... 7‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪71‬תבניות – פרק ‪205150......................................................................................................... 7‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫מנייה וצבירה‪ ,‬ממוצע של סדרת מספרים‪ ,‬מציאת מקסימום או מינימום בסדרה‪,‬‬ ‫מציאת ערך נלווה למקסימום או למינימום בסדרה‪ ,‬איסוף בקיזוז‪ ,‬פירוק מספר‬ ‫חיובי לספרותיו‪ ,‬בניית מספר‪ ,‬האם כל הערכים בסדרה מקיימים תנאי?‪ ,‬האם קיים‬ ‫ערך בסדרה המקיים תנאי?‪ ,‬מציאת כל הערכים בסדרה המקיימים תנאי‪ ,‬מעבר על‬ ‫זוגות סמוכים בסדרה‬ ‫‪72‬פרק ‪ – 8‬יעילות של אלגוריתמים ‪21315..........................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫‪73‬סיכום ‪222152.......................................................................................................................‬‬ ‫‪H‬‬ ‫‪H‬‬ ‫אינדקס‪223............................................................................................‬‬ ‫תוכן יסודות ‪2‬‬ ‫פרק ‪ – 9‬המחלקה מחרוזת )‪(String‬‬ ‫פרק ‪ – 10‬מערכים‬ ‫פרק ‪ – 11‬מחלקות ועצמים‪ :‬הרחבה והעמקה‬ ‫פרק ‪ – 12‬תבניות אלגוריתמיות )מערך דו‪-‬ממדי‪ ,‬מיון‪ ,‬חיפוש ומיזוג(‬ ‫פרק ‪ – 13‬פתרון בעיות‬ ‫פתח דבר למורה‬ ‫ספר זה פותח על בסיס ספר הלימוד "יסודות מדעי המחשב" שפותח במכון ויצמן למדע בסוף‬ ‫שנות ה‪ ,90-‬אך הוא שונה ממנו בכמה אספקטים‪.‬ראשית‪ ,‬בספר הקודם אלגוריתמים יושמו‬ ‫בשפה הפרוצדורלית ‪ ,Pascal‬בעוד שבספר זה הם מיושמים בשפת ‪ ,C#‬שפה מונחית עצמים‪.‬עם‬ ‫זאת‪ ,‬העקרונות האלגוריתמיים והנושאים בשמונת הפרקים הראשונים בספר זה זהים לאלה‬ ‫שפותחו בידי מכון ויצמן‪.‬כלומר‪ ,‬גם הספר הזה שם דגש על פתרון בעיות אלגוריתמיות ומתמקד‬ ‫בחשיבה אלגוריתמית‪.‬אמנם אין ניסיון להסתיר את מאפייניה הייחודיים של שפת ‪ ,C#‬כשפה‬ ‫מונחית עצמים‪ ,‬וכך המילה מחלקה והשימוש במחלקות‪-‬קיימות מופיע החל מפרק ‪ 3‬ובו מוצגות‬ ‫תוכניות ראשונות‪.‬לאורך כל פרקי הספר של "יסודות ‪ "1‬כתובות תוכניות המכילות רק מחלקה‬ ‫אחת‪ ,‬והיא מכילה פעולה אחת – הפעולה הראשית‪.‬בספר "יסודות ‪ "2‬מורחב המבט על עצמים‬ ‫ועל אלגוריתמים החל מפרק ‪ 9‬הדן במחרוזות‪ ,‬דרך פרק ‪ 11‬המהווה הרחבה והעמקה בנושא‬ ‫העצמים‪ ,‬וכלה בפרק ‪ 13‬המציג פתרון תרגילי בגרות ברוח התכנות מונחה העצמים‪.‬‬ ‫בנוסף‪ ,‬לאורך הספר משולבת התייחסות מפורשת לתבניות בפיתוח אלגוריתמים ובניתוחם‪.‬‬ ‫בסופם של כמה מפרקי הספר יש סעיף העוסק בתבניות הרלבנטיות לאותו פרק‪.‬סעיפים אלה‬ ‫מציגים את התבניות השונות ומפנים לאתר הספר הכולל הסבר מפורט ושאלות נוספות‪.‬אמנם‬ ‫לכאורה יש הפרדה בין החומר השוטף של הפרק לדפי התבניות‪ ,‬אך הכוונה היא שהם יילמדו‬ ‫באופן משולב‪ :‬מתוך הפרק עצמו‪ ,‬יש הפניות אל דפי התבניות‪ ,‬בכל פעם שבעיה או שאלה מציפה‬ ‫תבנית מסוימת‪.‬ההתייחסות לתבניות מבוססת על הספר "תבניות במדעי המחשב" שפותח בשנת‬ ‫‪ 2001‬בידי חברי קבוצת הוראת מדעי המחשב בחוג להוראת המדעים באוניברסיטת תל‪-‬אביב‪.‬‬ ‫את הספר מלווה אתר ובו מדריך מעבדה מקוון וקבצי התכניות המופיעות בספר לנוחיותם של‬ ‫תלמידים ושל מורים‪.‬כמו כן‪ ,‬בסוף הספר הוספנו אינדקס מפורט‪ ,‬אשר באמצעותו תלמיד יכול‬ ‫לנווט הלוך וחזור בתוך הספרים‪ ,‬ולמצוא חומרים במהירות לפי מילות מפתח‪.‬‬ ‫פרק ‪ – 1‬מבוא‬ ‫בפרק מבוא קצר זה נסביר מעט על המחשב‪ ,‬על תפקידיו‪ ,‬על מבנהו ועל אופן השימוש בו לצורך‬ ‫פתרון בעיות מסוגים שונים‪.‬ייתכן כי לאלה מביניכם הרגילים בשימוש במחשב‪ ,‬ואולי אף‬ ‫בתכנות‪ ,‬חלק מהמושגים יהיו מוכרים‪.‬בכל זאת‪ ,‬סביר שקריאת הפרק תאיר כמה מהמושגים‬ ‫האלה ואת הקשרים ביניהם באור מעט שונה‪ ,‬וסביר שכמה מהמושגים המוצגים בפרק יהיו‬ ‫חדשים גם עבור התלמידים שרגילים בשימוש במחשב‪.‬‬ ‫מחשבים מצויים במקומות רבים‪ :‬הם מנחים מטוסים‪ ,‬אוניות וספינות חלל; הם מפקחים על‬ ‫מיליוני טלפונים המחוברים ברשת ופזורים על פני מדינות שונות; הם משמשים לחיזוי מזג‬ ‫האוויר‪ ,‬לכתיבה ולהדפסה של מסמכים‪ ,‬לבקרה על מערכות ייצור אוטומטיות‪ ,‬להלחנת מוסיקה‪,‬‬ ‫למשחקים ולדברים רבים נוספים‪.‬‬ ‫ללא המחשב לא היה מתאפשר מבצע הנחתת אדם על הירח‪.‬המבצע דרש פתרון בעיות חישוביות‬ ‫קשות ומסובכות לקביעת מסלול חללית בהשפעת הירח‪ ,‬כדור הארץ והשמש‪.‬ביצוע החישובים‬ ‫האלה ללא מחשב היה מצריך עבודת צוות גדולה במשך עשרות שנים‪.‬בנוסף‪ ,‬כל שינוי במועד‬ ‫ההמראה או במסלול הטיסה חייב פתרון מחדש של בעיות חישוביות אלו‪.‬המבצע לא היה‬ ‫מתאפשר ללא מחשב‪.‬‬ ‫‪ 1.1‬מהו מחשב?‬ ‫מחשב )‪ (computer‬הוא מכונה אלקטרונית הקולטת נתונים‪ ,‬מעבדת אותם ופולטת מידע הנוצר‬ ‫בתהליך העיבוד‪.‬‬ ‫הנתונים שקולט המחשב נקראים קלט )‪ ;(input‬המידע שפולט המחשב נקרא פלט )‪;(output‬‬ ‫העיבוד המבוצע במחשב מונחה על ידי אוסף הוראות הנקרא תוכנית מחשב )‪computer‬‬ ‫‪.(program‬‬ ‫הנה כמה דוגמאות להמחשת ההגדרות האלו‪:‬‬ ‫♦ כשאנו מגיעים לקנות כרטיסים לסרט‪ ,‬הקופאי מקיש בלוח המקשים של המחשב שעל שולחנו‬ ‫את מספר הכרטיסים שאנו מבקשים לקנות‪.‬המחשב מעבד נתון זה בבדיקת המקומות‬ ‫הפנויים‪ ,‬בהקצאת מקומות כמבוקש ובסימון המקומות שהוקצו כתפוסים‪.‬המדפסת מדפיסה‬ ‫כרטיסים שעליהם מסומנים המקומות שהוקצו‪.‬במקרה זה הקלט הוא מספר הכרטיסים‬ ‫המבוקש‪ ,‬והפלט הוא הכרטיסים שעליהם מקומות מסומנים‪.‬‬ ‫♦ אמן אנימציה מציין כקלט על צג מחשב שתי נקודות לתנועה של דמות – נקודת התחלה‬ ‫ונקודת סיום‪.‬המחשב מעבד נתונים אלה יחד עם נתונים נוספים על הדמות‪ ,‬ומציג על הצג‬ ‫כפלט את תנועת הדמות מנקודת ההתחלה לנקודת הסיום‪.‬‬ ‫♦ מנהל חשבונות מקיש כקלט שם של עובד ואת מספר הימים שעבד בחודש האחרון‪.‬המחשב‬ ‫מעבד נתונים אלה יחד עם נתונים אחרים השמורים בו )כמו דרגת העובד(‪ ,‬ומדפיס כפלט את‬ ‫המשכורת שמגיעה לעובד עבור החודש האחרון‪.‬‬ ‫♦ מדען‪ ,‬המשתמש במחשב לצורך חישוב מסלול התעופה של טיל‪ ,‬נותן כקלט למחשב את נקודת‬ ‫שיגור הטיל‪ ,‬את זמן השיגור‪ ,‬את מהירות הטיל ונתונים על הרוחות במסלול מעופו הצפוי של‬ ‫הטיל‪.‬המחשב מעבד נתונים אלה בעזרת נוסחאות לחישוב תעופת טיל ובעזרת מידע השמור בו‬ ‫על כדור הארץ‪ ,‬ונותן כפלט את המקום שאמור הטיל לנחות בו‪.‬‬ ‫מדעי המחשב‬ ‫‪-1-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫שאלה ‪1.1‬‬ ‫הביאו דוגמאות מסביבת הבית ובית הספר לשימוש במחשב‪ ,‬וציינו עבור כל דוגמה את הקלט ואת‬ ‫הפלט‪.‬‬ ‫ייחודה של המכונה "מחשב" לעומת מכונות אחרות הוא במגוון השימושים הרחב שלה‪.‬בעוד‬ ‫שבמכונת כביסה אנו משתמשים כדי לכבס‪ ,‬במקרר כדי לשמור על מזון ובמכונית כדי להגיע‬ ‫ממקום למקום‪ ,‬הרי שבמחשב משתמשים בקשת רחבה של משימות‪.‬זה נובע מכך שהמחשב‬ ‫מבצע פעילויות שונות של עיבוד ואחסון מידע‪ ,‬פעילויות המונחות כולן על ידי תוכניות מחשב‬ ‫מתאימות‪.‬‬ ‫אמנם‪ ,‬קיימים כיום מחשבים אשר מסוגלים לבצע בצורה מוגבלת תפקודים אנושיים‪ ,‬כמו ראייה‪,‬‬ ‫שמיעה‪ ,‬דיבור ותנועה‪ ,‬אבל המחשב אינו כל יכול‪.‬הוא בסך הכול מכונה‪.‬הוא איננו יכול למשל‬ ‫לדמיין‪ ,‬לכאוב או לשמוח‪.‬למעשה‪ ,‬גם אם נגביל את הדיון למשימות שאינן מערבות רגשות‪ ,‬ישנן‬ ‫משימות רבות שאינן ניתנות לביצוע על ידי מחשב‪.‬‬ ‫יתרון בולט של מחשב הוא בכך שהוא מבצע פעולות חישוב ועיבוד מידע במהירות עצומה ובדיוק‬ ‫רב‪.‬למשל‪ ,‬מחשב יכול לקלוט אלף מספרים בני חמש ספרות כל אחד‪ ,‬ולחשב תוך שבריר שנייה‬ ‫את סכומם‪.‬מחשב יכול לקלוט טקסט בן אלף מילים‪ ,‬ולחשב תוך שבריר שנייה את האות‬ ‫השכיחה ביותר בטקסט‪.‬‬ ‫יתרון חשוב נוסף של מחשב הוא שניתן לאחסן בזיכרונו מיליוני נתונים‪.‬למשל‪ ,‬במחשב של משרד‬ ‫הפנים מאוחסנים נתונים על כל אחד מתושבי המדינה )שם‪ ,‬מספר זהות‪ ,‬תאריך לידה‪ ,‬מצב‬ ‫משפחתי ועוד(‪.‬במחשב של בנק מאוחסנים פרטים אישיים על כל לקוח של הבנק‪ ,‬והנתונים על‬ ‫התנועות בכל חשבונות הבנק‪.‬‬ ‫אמנם המחשב מבצע פעולות חישוב ועיבוד בדיוק רב‪ ,‬אך מאחר שהוא לא יותר ממכונה‪ ,‬המבצעת‬ ‫הוראות‪ ,‬לא מובטח שתמיד ייתן המחשב כפלט תוצאת עיבוד נכונה‪.‬פלט לא נכון יכול להתקבל‬ ‫כתוצאה מקלט שגוי או מתוכנית מחשב שגויה‪.‬‬ ‫מהי תוכנית מחשב שגויה?‬ ‫?‬ ‫תוכנית מחשב נכתבת על ידי בני אדם‪.‬ייתכן שההוראות הכלולות בה אינן מורות על העיבוד‬ ‫הדרוש‪.‬במקרה כזה התוכנית שגויה‪ ,‬וייתכן כי כאשר המחשב פועל על פיה הוא ייתן כפלט‬ ‫תוצאת עיבוד לא נכונה‪.‬למשל‪ ,‬ייתכן כי מתכנת יכתוב תוכנית לחישוב ממוצע של אלף מספרים‪,‬‬ ‫ובה יורה על סיכום המספרים אך יטעה וישכח להורות על חלוקת הסכום המחושב ב‪.1000-‬ברור‬ ‫כי עיבוד שיתבצע על פי תוכנית זו לא יבצע חישוב ממוצע כנדרש וייתן פלט שגוי‪.‬‬ ‫אנו מבחינים בין שני צדדים של מחשב‪ :‬חומרה ותוכנה‪.‬‬ ‫חומרה )‪ (hardware‬היא הרכיבים הפיסיים שמרכיבים את המחשב‪.‬‬ ‫תוכנה )‪ (software‬היא אוסף תוכניות המחשב‪.‬‬ ‫‪ 1.2‬חומרה‬ ‫בסעיף זה נתאר על קצה המזלג את הרכיבים הפיסיים של המחשב‪.‬במהלך לימוד היחידה‬ ‫"יסודות מדעי המחשב" תעבדו בוודאי על מחשבים אישיים )‪.(personal computer – pc‬‬ ‫מחשבים אישיים הם קטנים יחסית בממדיהם ומיועדים לשרת בו זמנית משתמש אחד בלבד‪.‬‬ ‫מדעי המחשב‬ ‫‪-2-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫קיימים גם מחשבים גדולים יותר‪ ,‬שיכולים לשרת בו זמנית משתמשים רבים‪.‬עם זאת‪ ,‬המבנה‬ ‫הכללי של מחשב אינו תלוי בגודלו‪.‬‬ ‫למחשב כמה יחידות בסיסיות‪:‬‬ ‫♦ יחידת עיבוד מרכזית )‪ ,(central processing unit‬ובקיצור יע"מ )‪ (CPU‬היא היחידה‬ ‫שאחראית על עיבוד מידע‪ ,‬מבצעת חישובים ומנהלת את כל התהליכים המתבצעים במחשב‪.‬‬ ‫♦ בזיכרון )‪ (memory‬נשמרים תוכניות המחשב‪ ,‬המידע שבו משתמש המחשב ותוצאות ביניים‬ ‫של תהליכי עיבוד‪.‬‬ ‫אמצעי קלט )‪ (input devices‬מתבצעת קליטת נתונים‪.‬‬ ‫ֵ‬ ‫♦ דרך‬ ‫אמצעי פלט )‪ (output devices‬ניתן הפלט של תוצאות העיבוד‪.‬‬ ‫ֵ‬ ‫♦ דרך‬ ‫איור ‪ 1.1‬מתאר את היחידות הבסיסיות של מחשב‪:‬‬ ‫מחשב‬ ‫יע"מ‬ ‫)‪(cpu‬‬ ‫אמצעי קלט‬ ‫אמצעי פלט‬ ‫זיכרון‬ ‫איור ‪ – 1.1‬יחידותיו הבסיסיות של מחשב‬ ‫נרחיב מעט על היחידות הבסיסיות‪:‬‬ ‫יחידת העיבוד המרכזית היא ה"מוח של המחשב"‪.‬היא מבצעת את ההוראות הכתובות בתוכניות‬ ‫המחשב‪ ,‬ביניהן הוראות לביצוע פעולות חישוב‪ ,‬פעולות השוואה ועוד‪.‬במהלך ביצוע פעולותיה‬ ‫פונה יחידת העיבוד המרכזית אל הזיכרון ואל אמצעי הקלט והפלט‪.‬‬ ‫הזיכרון מורכב מאוסף גדול מאוד של תאים‪.‬לכל תא בזיכרון מותאם מספר סידורי‪ ,‬הנקרא מען‬ ‫)כתובת‪.(address ,‬יחידת העיבוד המרכזית משתמשת במידע השמור בזיכרון ולעתים משנה‬ ‫אותו‪ ,‬תוך פנייה לתאי הזיכרון על ידי המען שלהם‪.‬יש שני סוגי פניות לזיכרון‪ :‬כתיבת מידע‬ ‫בזיכרון וקריאת מידע מהזיכרון‪.‬תהליך הכתיבה בזיכרון גורם למחיקת מידע ולשמירת מידע‬ ‫חדש במקומו‪.‬לעומתו‪ ,‬תהליך הקריאה מהזיכרון גורם להעברת המידע מהזיכרון אל יחידת‬ ‫העיבוד המרכזית‪ ,‬אך איננו גורם למחיקתו‪.‬הוא מזכיר את תהליך הקריאה שאנו מבצעים‪ :‬כאשר‬ ‫אנו קוראים ספר‪ ,‬השורות אינן נעלמות מדפי הספר‪ ,‬אלא רק "מועתקות" לזיכרוננו‪.‬‬ ‫המידע השמור בזיכרון מיוצג על ידי סיביות‪.‬סיבית )‪ – (bit‬קיצור של ספרה בינארית ) ‪binary‬‬ ‫‪ – (digit‬היא אחת מן הספרות ‪ 0‬או ‪ ,1‬כמו שספרה עשרונית היא אחת מן הספרות ‪.9 ,... ,0‬‬ ‫מדעי המחשב‬ ‫‪-3-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫תא בזיכרון המחשב מכיל סדרה של סיביות‪ ,‬בדרך כלל ‪ 32 ,16‬או ‪ 64‬סיביות‪ ,‬על פי תכנון החומרה‬ ‫של המחשב‪.‬מפתיע ומרשים שכל המשימות המורכבות המתבצעות על ידי מחשב הן בסופו של‬ ‫דבר אוסף של פעולות על סדרות המורכבות מהספרות ‪ 0‬ו‪ !1-‬המחשב מפרש סדרות של סיביות‬ ‫כמספרים או כאותיות‪ ,‬לעתים סדרות של סיביות מפורשות כהוראות לביצוע או כטיפוסי מידע‬ ‫אחרים‪.‬‬ ‫למעשה‪ ,‬יחידת העיבוד המרכזית‪ ,‬ה"מוח" של המחשב‪ ,‬מבצעת בסך הכול הוראות פשוטות כגון‬ ‫"קרא את סדרות הסיביות שנמצאות בתאי הזיכרון שמעניהם הם ‪ 13‬ו‪ ,37-‬התייחס לכל סדרת‬ ‫סיביות כאל מספר‪ ,‬חבר אותם וכתוב את התוצאה בתא שמענו ‪."116‬‬ ‫זיכרון המחשב מורכב למעשה משני חלקים נפרדים‪:‬‬ ‫זיכרון ראשי )‪ (main memory‬משמש לשמירת תוכניות בזמן ביצוען‪ ,‬ולשמירת נתונים‬ ‫ותוצאות ביניים של תוכניות שמתבצעות‪.‬‬ ‫)‪ (secondary memory‬משמש לאחסון לזמן בלתי מוגבל של מידע ושל תוכניות‬ ‫זיכרון משני‬ ‫מחשב‪.‬‬ ‫הזיכרון הראשי קטן משמעותית מן הזיכרון המשני‪.‬מהירות הקריאה ממנו והכתיבה אליו גדולה‬ ‫הרבה יותר ממהירותן של פעולות אלו בזיכרון המשני‪.‬הזיכרון הראשי ממוקם צמוד ליחידת‬ ‫העיבוד המרכזית‪ ,‬ואילו הזיכרון המשני נמצא באמצעי אחסון חיצוניים כמו דיסק ודיסק קשיח‪.‬‬ ‫במהלך ביצועה של תוכנית מחשב‪ ,‬יחידת העיבוד המרכזית מעתיקה את התוכנית מהזיכרון‬ ‫המשני אל הזיכרון הראשי‪.‬במובנים רבים‪ ,‬ניתן להתייחס לזיכרון הראשי כאל זיכרון לטווח קצר‪,‬‬ ‫ואל הזיכרון המשני כאל זיכרון לטווח ארוך‪.‬‬ ‫שאלה ‪1.2‬‬ ‫הביאו דוגמה מכיתת בית הספר לחפץ שניתן לדמות את השימוש בו לשימוש בזיכרון ראשי‪,‬‬ ‫ולעומתה דוגמה לחפץ שניתן לדמות את השימוש בו לשימוש בזיכרון משני‪.‬‬ ‫אמצעי קלט משמשים להעברת נתונים אל המחשב מן המשתמשים בו‪.‬למשל‪ ,‬בדרך כלל מחוברים‬ ‫למחשב אישי עכבר ולוח מקשים‪.‬שניהם אמצעי קלט המשמשים להעברת נתונים‪.‬גם סורק‬ ‫דיגיטלי‪ ,‬מצלמה דיגיטלית או מיקרופון המחוברים למחשב הם אמצעי קלט‪.‬‬ ‫אמצעי פלט משמשים להעברת מידע מן המחשב אל המשתמשים בו‪.‬למשל‪ ,‬בדרך כלל מחוברים‬ ‫למחשב אישי מסך ומדפסת‪.‬גם מקרן או רמקול המחוברים למחשב הם אמצעי פלט‪.‬‬ ‫שאלה ‪1.3‬‬ ‫מחשבון נועד לבצע פעולות חשבון‪.‬מהו אמצעי הקלט למחשבון? מהו אמצעי הפלט למחשבון?‬ ‫שאלה ‪1.4‬‬ ‫המחשב קולט מידע‪ ,‬מעבד אותו ונותן כפלט את תוצאת העיבוד‪.‬גם מוח האדם קולט מידע‪ ,‬מעבד‬ ‫אותו ופולט את תוצאת העיבוד‪.‬‬ ‫א‪.‬הביאו דוגמאות לאיברים קולטי מידע ולאיברים פולטי מידע בגוף האדם‪.‬‬ ‫ב‪.‬הביאו דוגמאות למידע השמור בזיכרון האדם‪.‬‬ ‫מדעי המחשב‬ ‫‪-4-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫‪ 1.3‬תוכנה‬ ‫תוכנה היא אוסף תוכניות מחשב‪.‬תוכניות מחשב מנחות את העיבוד המתבצע על ידי החומרה‪.‬‬ ‫קיימות תוכניות לביצוע חישובים מתמטיים‪ ,‬לניהול מאגרי מידע‪ ,‬לבקרה על תהליכים‪ ,‬להדמיית‬ ‫מערכות‪ ,‬לעיבוד תמלילים‪ ,‬למשחקים וליישומים שונים ורבים נוספים‪.‬‬ ‫בנוסף לתוכניות המיועדות ליישומים שונים‪ ,‬יש בכל מחשב תוכנית מיוחדת הנקראת מערכת‬ ‫הפעלה‪ ,‬והיא מהווה את הקשר בין התוכנה לחומרה‪:‬‬ ‫מערכת הפעלה היא תוכנית המנהלת את שאר התוכניות ומקצה לשימושן את משאבי‬ ‫החומרה השונים )יע"מ‪ ,‬זיכרון‪ ,‬אמצעי קלט ואמצעי פלט(‪.‬‬ ‫כל תוכנית מחשב )או בקיצור‪ ,‬תוכנית( נכתבת על ידי מתכנת בשפת תכנות‪.‬נסביר את שני‬ ‫המושגים האלה‪:‬‬ ‫שפת תכנות )‪ (programming language‬היא למעשה אוסף של כל הכללים הקובעים כיצד‬ ‫נכתבות ההוראות בתוכנית מחשב‪ ,‬ומה המשמעות של כל הוראה‪.‬‬ ‫מתכנת )‪ (programmer‬הוא אדם הכותב תוכניות בשפת מחשב‪.‬עבודתו של מתכנת – תהליך‬ ‫התכנות – כולל ניתוח של משימות המיועדות לביצוע במחשב‪ ,‬כתיבת מתכון לביצוע המשימה‪,‬‬ ‫ויישומו של המתכון בשפת מחשב‪.‬‬ ‫כזכור‪ ,‬הפעולות המתבצעות ביחידת העיבוד המרכזית הן פעולות על סיביות‪.‬לכן‪ ,‬בעצם‪ ,‬השפה‬ ‫שבאמצעותה ניתן לתקשר עם מחשב‪ ,‬או השפה שבה ניתן לתת לו הוראות שיוכל "להבין"‪ ,‬צריכה‬ ‫להיות שפה מאוד פשוטה‪ ,‬הכוללת הוראות לביצוע פעולות על סיביות‪.‬שפה כזאת נקראת שפת‬ ‫מכונה‪:‬‬ ‫שפת מכונה )‪ (machine language‬היא שפת תכנות הכוללת הוראות לביצוע פעולות פשוטות‬ ‫מאוד‪.‬כל הוראה בשפת מכונה מורה על ביצוע פעולות על סדרות של סיביות )למשל‪ ,‬חיבור שתי‬ ‫סדרות(‪.‬למעשה‪ ,‬גם ההוראות של שפת מכונה נכתבות בקוד המבוסס על סיביות‪ ,‬ולכן תוכנית‬ ‫בשפת מכונה היא בעצם סדרה ארוכה של סיביות‪ ,‬כלומר‪ ,‬רצף ארוך של ‪ 0‬ו‪.1-‬‬ ‫לכל סוג מחשב שפת מכונה משלו‪.‬‬ ‫התוכניות הראשונות שנכתבו עבור מחשבים )בסוף שנות ה‪ 40-‬של המאה העשרים( נכתבו בשפת‬ ‫מכונה‪.‬תהליך הכתיבה של תוכניות אלו היה מסורבל מאוד ולא נוח‪ ,‬בגלל החסרונות הרבים שיש‬ ‫לכתיבה בשפת מכונה‪.‬‬ ‫מהם החסרונות של כתיבה בשפת מכונה ?‬ ‫?‬ ‫♦ מאחר שתוכנית בשפת מכונה היא רצף ארוך של ‪ 0‬ו‪ ,1-‬קשה מאוד לכתוב אותה וקשה עוד‬ ‫יותר לקרוא אותה‪ ,‬לעקוב אחר מהלך ביצועה ולהבין את מטרתה‪.‬חשוב להבין שתהליך‬ ‫התכנות לא מסתיים בדרך כלל עם כתיבת התוכנית‪ :‬לעתים מתגלות שגיאות בתוכנית וצריך‬ ‫לתקנה‪ ,‬לפעמים צריך לעדכן אותה כדי להתאימה לדרישות חדשות של המשימה שהיא‬ ‫מדעי המחשב‬ ‫‪-5-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫מבצעת‪.‬לא תמיד התיקונים והעדכונים מתבצעים על ידי הכותב המקורי‪ ,‬ולכן לנוחות‬ ‫הקריאה וההבנה של תוכנית נתונה יש חשיבות רבה‪.‬‬ ‫♦ לכל סוג מחשב יש שפת מכונה שמתאימה בדרך כלל רק לו‪.‬לכן לא ניתן לקחת תוכנית‬ ‫שנכתבה בשפת מכונה של מחשב מסוג אחד‪ ,‬ולהריץ אותה כמו שהיא במחשב מסוג אחר‪.‬‬ ‫מעבר בין סוגי מחשבים דורש כתיבה מחודשת של התוכנית‪.‬‬ ‫חסרונות אלה הביאו לפיתוחן של שפות נוחות יותר לכתיבה‪ ,‬לקריאה ולשימוש‪.‬שפות כאלו‬ ‫פותחו החל מאמצע שנות ה‪ 50-‬של המאה העשרים‪ ,‬והן נקראות שפות עיליות‪.‬ביניהן למשל‬ ‫השפות פסקל )‪ ,(pascal‬ג'אווה )‪ ,(Java‬ו‪.C-‬‬ ‫שפה עילית )‪ (high level language‬היא שפת תכנות‪ ,‬אשר ההוראות בה דומות למשפטים‬ ‫בשפה טבעית )כמו אנגלית( או לנוסחאות מתמטיות‪.‬למרות הדמיון לשפה טבעית‪ ,‬ההוראות אינן‬ ‫נכתבות בכתיבה חופשית‪ ,‬אלא על פי כללים מוגדרים‪ ,‬שנקראים כללי התחביר )‪ (syntax‬של‬ ‫השפה‪.‬‬ ‫אם המחשב "מבין" רק שפת מכונה‪ ,‬כיצד ניתן לגרום לו "להבין" תוכנית הכתובה בשפה‬ ‫?‬ ‫עילית?‬ ‫תוכנית הכתובה בשפה עילית עוברת תהליך של תרגום לשפת מכונה‪.‬התרגום נעשה על ידי תוכנית‬ ‫מחשב מיוחדת‪ ,‬הנקראת מהדר‪:‬‬ ‫מהדר )‪ (compiler‬היא תוכנית המתרגמת משפה עילית לשפת מכונה‪.‬תהליך התרגום נקרא‬ ‫הידור או קומפילציה )‪.(compilation‬הקלט של המהדר הוא תוכנית בשפה עילית והפלט‬ ‫שלו הוא תוכנית בשפת מכונה‪ ,‬שהיא התרגום של תוכנית הקלט‪.‬‬ ‫אם כך‪ ,‬כדי לבצע תוכנית מחשב הכתובה בשפה עילית צריכים להתבצע שני שלבים‪.‬קודם כל‬ ‫מתבצע שלב ההידור‪ ,‬במהלכו התוכנית בשפה העילית עוברת תרגום לתוכנית בשפת מכונה‪.‬רק‬ ‫אחר כך יכול להתבצע שלב ההרצה‪ ,‬במהלכו מתבצעת המשימה עצמה‪ ,‬כלומר‪ ,‬המחשב מבצע את‬ ‫ההוראות הכתובות בשפת מכונה‪ ,‬ונותן את תוצאת העיבוד כפלט‪.‬‬ ‫לכל זוג של שפה עילית ושפת מכונה דרוש מהדר נפרד שיבצע את התרגום ביניהן‪.‬אם בכוונתנו‬ ‫להריץ במחשב מסוים תוכניות הכתובות בכמה שפות עיליות‪ ,‬עלינו לדאוג שבמחשב יהיה מותקן‬ ‫מהדר מתאים לכל אחת מהשפות העיליות האלו‪.‬גם ההיפך נכון‪ :‬אם בכוונתנו להריץ תוכניות‬ ‫בשפה עילית מסוימת בכמה מחשבים מסוגים שונים‪ ,‬עלינו לדאוג שיהיו ברשותנו מהדר עבור כל‬ ‫סוג מחשב‪.‬איור ‪ 1.2‬מדגים את הקשרים האלה‪.‬‬ ‫מחשב א‬ ‫תוכנית‬ ‫מהדר א‬ ‫בשפת מכונה‬ ‫של מחשב א‬ ‫תוכנית בשפה‬ ‫עילית‬ ‫מחשב ב‬ ‫תוכנית‬ ‫מהדר ב‬ ‫בשפת מכונה‬ ‫של מחשב ב‬ ‫איור ‪ – 1.2‬הידור של תוכנית בשפה עילית במחשבים מסוגים שונים‬ ‫מדעי המחשב‬ ‫‪-6-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫אם כך‪ ,‬שפה עילית איננה רק יותר נוחה לקריאה ולכתיבה‪ ,‬אלא היא גם מגשרת על פני ההבדלים‬ ‫בין סוגים שונים של מחשבים‪.‬בעזרת מהדר מתאים ניתן לתרגם כל תוכנית בשפה עילית לתוכנית‬ ‫בשפת מכונה של מחשב זה או אחר‪.‬‬ ‫תהליך ההידור מורכב משני שלבים‪:‬‬ ‫‪.1‬בדיקת תחביר התוכנית בשפה העילית‬ ‫‪.2‬תרגום התוכנית בשפה העילית לתוכנית בשפת מכונה‪.‬‬ ‫בשלב ‪ ,1‬נערכת בדיקה כי התוכנית בשפה העילית עומדת בכללי התחביר של השפה שבה נכתבה‪.‬‬ ‫אם כתיבת התוכנית לא נעשתה בהתאם לכללי התחביר‪ ,‬יש בה שגיאות תחביר )‪.(syntax errors‬‬ ‫הפלט של המהדר אחרי שלב ‪ 1‬הוא פירוט שגיאות התחביר שמצא‪.‬לפני שניתן יהיה לתרגם את‬ ‫התוכנית יש לתקן את כל שגיאות התחביר שבה‪ ,‬כלומר‪ ,‬לעבור בהצלחה את שלב ‪.1‬למשל‪,‬‬ ‫תוכנית בשפת ‪ C#‬חייבת להכיל בתוכה לפחות פעם אחת את המילה ‪.class‬אם ננסה לתרגם‬ ‫תוכנית בשפת ‪ C#‬שאינה מכילה את המילה ‪ class‬המהדר יודיע על שגיאת תחביר‪.‬‬ ‫כאשר שלב ‪ 1‬מסתיים בהצלחה‪ ,‬ואין בתוכנית שגיאות תחביר‪ ,‬מתבצע השלב השני ובו התוכנית‬ ‫מיתרגמת לשפת מכונה‪ ,‬ומתקבלת תוכנית שיכולה לרוץ במחשב‪.‬‬ ‫גם במהלך הריצה של התוכנית עלולות להתגלות שגיאות שיגרמו לעצירת הריצה לפני סיומה‬ ‫המיועד‪ ,‬או להודעות שגיאה‪.‬אלו הן שגיאות ריצה )‪ ,(run-time errors‬שאינן יכולות להתגלות‬ ‫בזמן ההידור‪.‬למשל‪ ,‬הניסיון לחלק ערך השמור בזיכרון המחשב ב‪ 0-‬יגרום לשגיאת ריצה‬ ‫ולהדפסת הודעה מתאימה‪.‬‬ ‫תהליך איתור שגיאות ריצה ותיקונן נקרא ניפוי )‪.(debugging‬מקורו של המונח באנגלית‬ ‫בשלבים המוקדמים של שימוש במחשבים‪ ,‬כאשר מחשבים היו כה גדולים עד כי מחשב אחד מילא‬ ‫אולם שלם‪.‬מחשב מסוים חדל לפעול‪ ,‬ולאחר זמן התגלה בין רכיביו חרק גדול שנתקע שם והפריע‬ ‫לפעולתו התקינה של המחשב‪.‬מאז נוהגים לקרוא לשגיאה בתוכנית באג )‪ – bug‬חרק באנגלית(‪.‬‬ ‫מאז תחילת פיתוח השפות העיליות‪ ,‬באמצע שנות ה‪ 50-‬של המאה העשרים‪ ,‬פותח מספר גדול‬ ‫מאוד של שפות‪.‬עובדה זו מעוררת את השאלות הבאות‪:‬‬ ‫♦ מדוע יש צורך בכל כך הרבה שפות?‬ ‫♦ האם לא עדיפה שפה אחת אחידה שבה ייכתבו כל התוכניות‪ ,‬ואשר אותה יוכל כל אחד ללמוד‬ ‫בקלות?‬ ‫♦ מה מבדיל בין השפות השונות?‬ ‫♦ מי משתמש באילו שפות ולאילו מטרות?‬ ‫לריבוי השפות שתי סיבות עיקריות‪.‬סיבה אחת קשורה להתפתחות שפות תכנות כתגובה לצרכים‬ ‫המתעוררים בשטחים חדשים ושונים של יישומים‪.‬לכל שפה מאפיינים ייחודיים משלה‪ :‬יש שפות‬ ‫המיועדות בעיקר לחישובים מדעיים‪ ,‬יש אחרות המתאימות יותר לעיבוד נתונים מנהלי )הפקת‬ ‫משכורות‪ ,‬הנהלת חשבונות וכו'(‪.‬הסיבה השנייה היא התקדמות המחקר המדעי העוסק בשפות‬ ‫תכנות ומסייע בשיפור השפות‪.‬‬ ‫את שפות התכנות ניתן לחלק לקבוצות על פי העקרונות המנחים את הכתיבה בשפות אלו‪.‬בספר‬ ‫זה ללימוד היחידה "יסודות מדעי המחשב" נשתמש בשפת ‪ ,C#‬השייכת לקבוצת השפות הקרויות‬ ‫מונחות עצמים )‪.(object oriented‬קבוצות אחרות‪ ,‬שאליהן לא נתייחס ביחידה זו‪ ,‬הן קבוצת‬ ‫השפות הפרוצדורליות )כמו פסקל או ‪ ,(C‬קבוצת השפות הפונקציונליות )כמו ‪ (scheme‬וקבוצת‬ ‫השפות הלוגיות )כמו פרולוג(‪.‬‬ ‫מדעי המחשב‬ ‫‪-7-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫‪ 1.4‬התפתחות המחשבים ומדעי המחשב‬ ‫ההתפתחות הקשורה למחשבים נעשתה בשני מסלולים‪ :‬ההתפתחות ההנדסית והטכנולוגית‬ ‫שאפשרה בניית מחשבים משוכללים יותר ויותר‪ ,‬וההתפתחות המדעית שניסתה להתמודד בצורה‬ ‫מדויקת‪ ,‬אפילו פורמלית לעתים‪ ,‬עם שאלות הקשורות לפתרון בעיות באמצעות מחשב‪.‬בסעיף זה‬ ‫ננסה לתת סקירה קצרה של שני מסלולי ההתפתחות‪ ,‬שכמובן אינם מנותקים זה מזה‪.‬‬ ‫התפתחות הנדסית וטכנולוגית – חומרה‬ ‫ציון דרך חשוב בהתפתחות ההנדסית הוא באמצע המאה ה‪.17-‬אז פיתח המתמטיקאי הצרפתי‬ ‫בלייז פסקל )‪ – (Pascal‬על שמו נקראת שפת התכנות פסקל – מכונת חיבור וחיסור‪.‬את המכונה‬ ‫בנה עבור אביו‪ ,‬כדי לסכם סכומי כסף לצורך גביית מסים‪.‬פסקל בנה את המכונה כדי לעזור‬ ‫לאנשים שביצעו בדרך כלל את החישובים הדרושים‪ ,‬ובמיוחד כדי להקטין את מספר הטעויות‬ ‫שנגרמו על ידי החישובים האנושיים‪.‬המכונה של פסקל מהווה ציון דרך חשוב משום שזו הייתה‬ ‫הפעם הראשונה ששולב מרכיב אוטומטי‪ ,‬באמצעות מכונה‪ ,‬בפעולת חישוב‪.‬‬ ‫המכונה של פסקל זכתה לשיפורים כמה עשרות שנים מאוחר יותר‪.‬המדען הגרמני וילהלם לייבניץ‬ ‫)‪ (Leibnitz‬בנה אף הוא מכונת חישוב‪.‬הוא העתיק את מנגנוני החיבור והחיסור של מכונתו‬ ‫מהמכונה של פסקל‪ ,‬אך הוסיף גם חלק שמבצע כפל וחילוק‪.‬לייבניץ בנה את המכונה שלו משום‬ ‫שלטענתו המדע אמנם לא יכול להתקיים ללא חישוב‪ ,‬אך חישוב הוא פעולה חוזרת על עצמה‪,‬‬ ‫משעממת ולא יצירתית‪ ,‬וצריך להעביר את ביצועה למכונות‪.‬‬ ‫בתחילת המאה ה‪ ,19-‬ב‪ ,1801-‬פיתח גם הצרפתי ז'וז'ף ז'אקאר )‪ (Jacquard‬מכונה לביצוע‬ ‫אוטומטי של משימות‪.‬בניגוד למכונות של פסקל ולייבניץ אלו לא היו משימות חישוב מספריות‪,‬‬ ‫אלא משימות אריגה‪.‬מכונתו של ז'אקאר היתה למעשה נול אריגה מתוחכם‪ ,‬שיכול היה לארוג‬ ‫במגוון של דוגמאות‪.‬הדוגמאות השונות תוארו על ידי כרטיסים מנוקבים‪ ,‬לכל דוגמת אריגה‬ ‫תבנית ניקובים משלה‪.‬מנגנון בקרה מיוחד בתוך המכונה חש את הנקבים בכרטיס‪ ,‬ובהתאם לכך‬ ‫פיקח על פעולות המכונה‪ ,‬כגון בחירת חוטים‪.‬‬ ‫התכנון של מה שנחשב היום המחשב הראשון הגיע כשלושים שנה מאוחר יותר‪.‬ב‪ ,1833-‬תוכננה‬ ‫לראשונה מכונה כללית יותר‪ ,‬שיכולה לבצע משימות מסוגים שונים‪.‬המתמטיקאי האנגלי צ'רלס‬ ‫בבג' )‪ (Babbage‬תכנן את "המכונה האנליטית" שלו‪ ,‬מכונה שהיתה אמורה לבצע תוכניות שונות‬ ‫מסוגים שונים למטרות שונות‪.‬התוכניות היו אמורות להיות מקודדות‪ ,‬בדומה למכונה של‬ ‫ז'אקאר‪ ,‬בעזרת כרטיסים מנוקבים‪.‬התכנון של בבג'‪ ,‬שכלל צירים‪ ,‬ידיות‪ ,‬גלגלי שיניים ורכיבים‬ ‫מכניים אחרים‪ ,‬לא מומש אף פעם‪.‬בניית חלקי המכונה דרשה דיוק טכני רב מדי‪ ,‬שלא ניתן היה‬ ‫להשגה באותו זמן‪.‬אבל‪ ,‬אף על פי שלא נבנתה‪ ,‬המכונה האנליטית היא בעלת חשיבות גדולה‪.‬‬ ‫למעשה‪ ,‬הרעיונות הגלומים בה הם הבסיס למבנה המחשבים של ימינו ולאופן פעולתם‪.‬אפילו‬ ‫בעצם נכתבה אז תוכנית עבור המכונה הלא‪-‬בנויה‪ ,‬תוכנית הראויה בהחלט להיחשב כתוכנית‬ ‫המחשב הראשונה בהיסטוריה! את התוכנית כתבה עדה לאבלייס )‪ – (Lovelace‬על שמה נקראת‬ ‫שפת ‪.Ada‬‬ ‫לאחר מותו של בבג' מרכז הפעילות בבניית מכונות חישוב נדד לארצות הברית‪.‬העיסוק המוגבר‬ ‫בכך בארצות הברית נבע בין השאר מהצורך שהתעורר מהשטח‪ :‬ב‪ 1880-‬נערך בארצות הברית‬ ‫מפקד אוכלוסין‪ ,‬המפקד הבא נועד ל‪ ,1890-‬וב‪ ,1886-‬ארבע שנים לפני המפקד הבא‪ ,‬ושש שנים‬ ‫אחרי המפקד הקודם‪ ,‬עדיין לא סיימו לסכם את תוצאותיו‪ ,‬ומועד סיום הסיכום לא נראה‬ ‫באופק‪...‬הרמן הולרית )‪ ,(Hollerith‬מהנדס שעבד כפקיד בלשכת מפקד התושבים‪ ,‬גילה יוזמה וב‪-‬‬ ‫מדעי המחשב‬ ‫‪-8-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫‪ 1886‬הוא הציע כמה מכשירים שפיתח כדי לפתור את הבעיה‪.‬סיכום המפקד של ‪ 1890‬כבר נעשה‬ ‫בעזרת פיתוחו של הולריק וארך לא יותר מחודש! גם פיתוחו של הולריק היה מבוסס על כרטיסים‬ ‫מנוקבים‪.‬בעקבות הצלחתו ראה הולריק כי טוב והקים חברה למכונות חישוב‪.‬מאוחר יותר‪,‬‬ ‫ב‪ ,1928-‬הרחיבה אותה חברה את פעילותה והפכה לחברה בינלאומית למכונות עסקיות‪ ,‬ושינתה‬ ‫את שמה בהתאם ל‪ ,International Business Machines-‬או בקיצור‪ ,IBM ,‬המוכרת לנו היטב‬ ‫גם היום‪.‬‬ ‫בשנת ‪ 1937‬החל המדען האמריקני הווארד אייקן )‪ ,(Aiken‬יחד עם חברת ‪ ,IBM‬לבנות את‬ ‫המחשב האלקטרו‪-‬מכני הראשון‪.‬למעשה‪ ,‬אייקן הגשים את חלומו של בבג'‪ :‬התכנון שלו התבסס‬ ‫על רעיונותיו של בבג'‪ ,‬ונעזר במכשירים החשמליים והאלקטרו‪-‬מכניים אשר בתקופתו של אייקן‬ ‫כבר היו זמינים‪.‬בניית המחשב הושלמה ב‪.1944-‬שמו היה ‪ MARK I‬וגודלו היה כגודל אולם‬ ‫התעמלות! למעשה‪ ,‬במקביל לבניית ‪ ,MARK I‬במהלך מלחמת העולם השנייה‪ ,‬בנו גם הבריטים‬ ‫מחשב‪ ,‬בשם אניגמה )‪ ,(Enigma‬שבעזרתו פיצחו צפנים של הגרמנים‪.‬אלא שעקב תפקידו הרגיש‬ ‫נשמר קיומו של ‪ Enigma‬בסוד במשך זמן רב‪.‬זמן קצר אחר‪-‬כך‪ ,‬ב‪ ,1946-‬כבר הושלמה בנייתו של‬ ‫מחשב מהיר בהרבה מ‪.MARK I-‬הוא נקרא ‪ ,ENIAC‬ותוכנן על ידי האמריקנים אקרט )‪(Eckert‬‬ ‫ומוצ'לי )‪.(Mauchly‬הוא היה הרבה יותר מהיר משום שלא התבסס בכלל על תנועות מכניות‪ ,‬ולכן‬ ‫נחשב המחשב האלקטרוני הראשון‪.‬אורכו היה שלושים מטרים‪ ,‬רוחבו מטר אחד‪ ,‬גובהו שלושה‬ ‫מטרים‪ ,‬והוא הכיל ‪ 18,000‬שפופרות ואקום‪.‬צריכת החשמל של ה‪ ,ENIAC-‬שהוצב בעיר‬ ‫פילדלפיה‪ ,‬הייתה כה גבוהה‪ ,‬עד שנהגו אז לומר שבכל פעם שהופעל התעממו האורות בעיר כולה!‬ ‫אותם מחשבים ראשונים השתמשו בסרטי נייר מנוקבים‪.‬עבור כל עיבוד קודדו על סרט כזה גם‬ ‫התוכנית לביצוע וגם נתוני הקלט עבורה‪.‬כלומר‪ ,‬אם ביצעו אותה תוכנית כמה פעמים‪ ,‬היה צריך‬ ‫להזין למחשב את סרט הנייר שעליו קודדה בכל פעם ופעם‪.‬ב‪ 1946-‬הציע המדען ההונגרי‪-‬‬ ‫אמריקני ג'ון פון‪-‬נוימן )‪ (von Neuman‬לשמור את התוכניות בזיכרון המחשב‪.‬כתוצאה מכך‪,‬‬ ‫מהירות תהליכי העיבוד השתפרה משמעותית‪.‬המחשב התעשייתי הראשון שפעל לפי עקרון זה‬ ‫נבנה ב‪ ,1951-‬ונקרא ‪.UNIVAC‬עקרון זה של פון‪-‬נוימן משמש למעשה גם במחשבים של ימינו‪.‬‬ ‫מכאן החלה האצה בקצב ההתפתחות הטכנולוגית‪.‬בשנות ה‪ 50-‬וה‪ 60-‬של המאה העשרים הוחלפו‬ ‫שפופרות הריק בטרנזיסטורים‪ ,‬ושינוי זה הביא להקטנה בממדי המחשבים‪ ,‬להקטנה בצריכת‬ ‫ההספק החשמלי שלהם ולהגדלה במהירות פעולתם‪.‬בנוסף למחשבים הגדולים )‪(mainframes‬‬ ‫שהיו עד אז‪ ,‬נבנו גם מחשבים בינוניים )שגודלם כגודל כוננית ספרים( שנקראו מחשבי מידי‬ ‫ומחשבי מיני )‪.(midi/mini computers‬זמן לא רב אחר‪-‬כך קטנו המחשבים אף יותר‪ :‬בסוף שנות‬ ‫ה‪ 60-‬ובתחילת שנות ה‪ 70-‬פותחה טכנולוגיית המעגל המשולב )‪ (integrated circuit‬ובעקבות כך‬ ‫ירד מחיר המחשבים‪ ,‬מהירותם עלתה ונבנו אפילו מחשבים זעירים‪ ,‬שגודלם לא עלה על גודל‬ ‫קופסת גפרורים – המיקרו‪-‬מחשבים )‪.(micro computers‬משום שהיו כה קטנים וזולים יחסית‪,‬‬ ‫החלו להשתמש בהם הרבה לצרכים מגוונים למשל כבקרים במערכות אלקטרוניות שונות‪.‬‬ ‫המחשב האישי‪ ,‬המוכר לנו היום‪ ,‬נבנה לראשונה בסוף שנות ה‪ 70-‬והוא היה מבוסס על מיקרו‪-‬‬ ‫מחשב‪.‬קפיצת הדרך הזאת‪ ,‬שנעשתה במשך תקופה קצרה יחסית‪ ,‬היא כמעט בלתי נתפסת‪ :‬היום‬ ‫יש מיקרו מחשבים שכושר העיבוד שלהם עולה בהרבה על זה של אותם מחשבי הענק הראשונים‪.‬‬ ‫התפתחות הנדסית וטכנולוגית – תוכנה‬ ‫במקביל להתפתחות הטכנולוגית של החומרה‪ ,‬המכונות עצמן‪ ,‬חלה התפתחות גם בתחום התוכנה‪.‬‬ ‫המחשבים הראשונים תוכנתו בשפת מכונה‪.‬כפי שהזכרנו‪ ,‬כתיבת תוכניות כאלו הייתה כרוכה‬ ‫באי‪-‬נוחות רבה‪.‬אי‪-‬נוחות זו הביאה באמצע שנות ה‪ 50-‬לפיתוחה של שפת התכנות העילית‬ ‫מדעי המחשב‬ ‫‪-9-‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫הראשונה‪ ,‬פורטרן )‪.(Fortran‬משום שבאותה תקופה הייתה עלייה בביקוש לתוכניות מחשב‬ ‫המבצעות חישובים מתמטיים‪ ,‬פורטרן הותאמה לכתיבה של חישובים כאלה‪.‬אבל היא לא הייתה‬ ‫נוחה לכתיבת תוכניות לניהול מאגרי מידע )ניהול כוח אדם‪ ,‬ניהול מלאי וכו'(‪ ,‬ומשום כך פותחה‬ ‫בעקבותיה‪ ,‬בתחילת שנות ה‪ ,60-‬שפת קובול )‪.(Cobol‬באותה תקופה פותחה שפה נוספת‪ ,‬ליספ‬ ‫)‪ (Lisp‬שהתאימה לצרכים אחרים‪.‬ממנה נגזרה מאוחר יותר שפת לוגו )‪ (LOGO‬המשמשת בדרך‬ ‫כלל כשפה לימודית לפיתוח הרגלי חשיבה בפתרון בעיות‪.‬‬ ‫מאז פותחו שפות עיליות רבות לצרכים שונים ומגוונים‪.‬למשל‪ ,‬שפת בייסיק )‪ (Basic‬פותחה‬ ‫באמצע שנות ה‪ ,60-‬למטרות לימודיות‪.‬פסקל )‪ (Pascal‬פותחה אף היא כשפה לימודית‪ ,‬בתחילת‬ ‫שנות ה‪ ,70-‬ובאותה תקופה פותחה גם שפת ‪ ,C‬שנועדה לכתיבת מערכות הפעלה‪.‬ב‪ 1970-‬פותחה‬ ‫שפת פרולוג )‪ (PROLOG‬שגישת התכנות בה מבוססת על כללים לוגיים‪.‬עם עליית הצורך בכתיבת‬ ‫תוכניות גדולות מאוד ומורכבות מאוד‪ ,‬פותחו בשנות ה‪ 80-‬שפות שנועדו במיוחד לפיתוח תוכניות‬ ‫גדולות‪ ,‬כגון ‪ Modula‬ו‪.Ada-‬בעקבותיהן פותחו שפות נוספות שהתמקדו בפיתוח תוכניות‬ ‫גדולות‪ ,‬והתבססו על מה שקרוי תכנות מונחה‪-‬עצמים‪.‬בין אלו ניתן למצוא את ‪ ,C++‬את‬ ‫‪ ,SmallTalk‬את ‪ ,Ada95‬את ‪ Eiffel‬ואת ‪.Java‬‬ ‫התפתחות מדעית‬ ‫כאמור‪ ,‬במקביל להתפתחות ההנדסית והטכנולוגית‪ ,‬הן בתחום החומרה והן בתחום התוכנה‪,‬‬ ‫חלה גם התפתחות מדעית‪.‬החל מאמצע שנות ה‪ 30-‬של המאה העשרים )עוד לפני שנבנה המחשב‬ ‫הראשון!(‪ ,‬נעשתה עבודה תיאורטית חשובה‪ ,‬שהניחה את הבסיס לתחום המדעי הקרוי היום מדעי‬ ‫המחשב‪.‬עבודה זו נעשתה על ידי מתמטיקאים‪ ,‬שניסו להגדיר בצורה מתמטית מהו תהליך של‬ ‫חישוב‪ ,‬ולנתח בצורה מתמטית‪ ,‬פורמלית ומדוייקת‪ ,‬את מגבלותיהם של תהליכי חישוב‪ ,‬ובפרט‬ ‫את מגבלותיהן של מכונות המבצעות תהליכי חישוב‪.‬בין המתמטיקאים האלה ניתן למנות את‬ ‫אלן טיורינג )‪ (Turing‬האנגלי‪ ,‬שהיה מעורב מאוחר יותר בפרויקט האניגמה‪ ,‬את קורט גדל‬ ‫)‪ (Gödel‬הגרמני‪ ,‬את אנדריי מרקוב )‪ (Markov‬הרוסי‪ ,‬ואת האמריקנים אלונזו צ'רץ' )‪,(Church‬‬ ‫אמיל פוסט )‪ (Post‬וסטיבן קלין )‪.(Kleene‬חוקרים אלה ידעו להצביע כבר אז על כך שיש בעיות‬ ‫חישוביות שלא יצליחו לעולם להיפתר על ידי מכונה חישובית‪ ,‬וזאת כאמור עוד לפני שנבנה‬ ‫המחשב הראשון‪.‬‬ ‫מאז חלה התפתחות מדעית עצומה‪ ,‬כאשר לעתים ההתפתחויות הטכנולוגיות הניעו וזירזו‬ ‫התפתחויות מדעיות ולעתים דווקא ההתפתחויות המדעיות גרמו להתפתחות טכנולוגית‪.‬כיום‬ ‫קיימת מחלקה למדעי המחשב כמעט בכל מוסד אקדמי‪ ,‬והפעילות המחקרית במדעי המחשב היא‬ ‫רבה ומגוונת‪ :‬תורת החישוביות העוסקת באפיון של בעיות שניתנות או לא ניתנות לפתרון; תורת‬ ‫הסיבוכיות העוסקת באפיון של בעיות על פי כמות המשאבים )זמן וזיכרון( הנדרשים לפתרונן;‬ ‫קריפטוגרפיה העוסקת בהצפנות מסוגים שונים; חישוב מקבילי ומבוזר‪ ,‬העוסק בפתרון בעיות‬ ‫שנועדו להתבצע במערכות שבהן כמה מחשבים עובדים ביחד לפתרון משימה אחת; תורת‬ ‫התקשורת העוסקת באפיונים של רשתות תקשורת )כמו האינטרנט( ופתרון בעיות הקשורות‬ ‫לרשתות תקשורת; בינה מלאכותית העוסקת במערכות שנועדו לדמות פעילות אנושית‪ ,‬ועוד‬ ‫תחומים רבים נוספים‪.‬‬ ‫במסגרת לימודי מדעי המחשב בבית הספר התיכון ניתן כמובן להציג רק מקצת מתחומי הפעילות‬ ‫השונים במדעי המחשב‪.‬בכל זאת תוכנית הלימודים התיכונית במדעי המחשב נוגעת במגוון רחב‬ ‫למדי של נושאים‪ ,‬גם בחלק מאלה שהוזכרו לעיל‪.‬‬ ‫מדעי המחשב‬ ‫‪- 10 -‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫סיכום‬ ‫בפרק זה תיארנו בקצרה מהו מחשב‪ ,‬מהן היחידות הבסיסיות שמהן הוא בנוי‪ ,‬וכיצד נכתבות‬ ‫ומתבצעות תוכניות מחשב‪.‬תיארנו גם את ההתפתחות ההנדסית והטכנולוגית של המחשבים ואת‬ ‫ההתפתחות המדעית של תחום מדעי המחשב‪.‬‬ ‫מחשב הוא מכונה אלקטרונית הקולטת נתונים‪ ,‬מעבדת אותם ופולטת מידע שנוצר בתהליך‬ ‫העיבוד‪.‬‬ ‫הנתונים שקולט המחשב נקראים קלט‪.‬‬ ‫המידע שפולט המחשב נקרא פלט‪.‬‬ ‫העיבוד המבוצע במחשב מונחה על ידי קבוצת הוראות הנקראת תוכנית מחשב‪.‬‬ ‫הרכיבים הפיסיים של המחשב נקראים חומרה ואוסף תוכניות המחשב נקרא תוכנה‪.‬החומרה‬ ‫מחולקת לכמה רכיבים בסיסיים‪ :‬יחידת עיבוד מרכזי‪ ,‬זיכרון‪ ,‬אמצעי קלט ואמצעי פלט‪.‬תוכנה‬ ‫של מחשב כוללת בין השאר את מערכת ההפעלה‪ ,‬את המהדרים ותוכניות ליישומים שונים‪.‬‬ ‫יחידת העיבוד המרכזית מנהלת את כל התהליכים המתבצעים במחשב‪.‬‬ ‫הזיכרון שומר מידע‪ ,‬תוכניות‪ ,‬ותוצאות ביניים של תהליכי עיבוד‪.‬הזיכרון מתחלק לזיכרון משני‬ ‫ולזיכרון ראשי‪.‬המידע השמור בזיכרון מיוצג באמצעות סיביות )סיבית – אחת מן הספרות ‪0‬‬ ‫או ‪.(1‬‬ ‫אמצעי הקלט אחראים על קליטת נתונים ואמצעי הפלט אחראים על פליטת מידע‪.‬‬ ‫תוכנית מחשב נכתבת על ידי מתכנת בשפת תכנות‪.‬לשפת תכנות כללים המכתיבים את אופן‬ ‫כתיבת ההוראות בתוכנית‪.‬כיום נכתבות תוכניות מחשב בשפה עילית‪.‬‬ ‫בשפה עילית המשפטים דומים למשפטים בשפה טבעית‪ ,‬כמו אנגלית‪.‬שפת מכונה היא השפה‬ ‫אותה "מבין" המחשב‪ ,‬וההוראות בה מקודדות על ידי סיביות‪.‬‬ ‫לפני ביצוע תוכנית בשפה עילית עליה לעבור שני שלבים‪ :‬הידור והרצה‪.‬הידור )קומפילציה( הוא‬ ‫התהליך של תרגום תוכנית בשפה עילית לשפת מכונה‪.‬תהליך זה מתבצע על ידי מהדר‬ ‫)קומפיילר(‪.‬‬ ‫שגיאות תחביר מתגלות בשלב ההידור‪.‬שגיאות ריצה מתגלות בזמן ההרצה‪.‬תהליך איתור‬ ‫שגיאות ריצה ותיקונן נקרא ניפוי שגיאות‪.‬‬ ‫שאלות נוספות‬ ‫‪.1‬מדוע אי‪-‬אפשר לכתוב תוכנית למחשב בשפה טבעית‪ ,‬כמו אנגלית או עברית?‬ ‫‪.2‬מדוע שפת תכנות עילית נקראת בשם זה?‬ ‫‪.3‬למה מתכוונים כאשר אומרים כי מחשב מבין שפת מכונה?‬ ‫‪.4‬כמה מהדרים דרושים להידור תוכנית בשפת ‪ ,C‬תוכנית בשפת פסקל‪ ,‬ותוכנית בשפת בייסיק‬ ‫בשלושה מחשבים מסוגים שונים?‬ ‫מדעי המחשב‬ ‫‪- 11 -‬‬ ‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬ ‫פרק ‪ – 2‬פתרון בעיות אלגוריתמיות‬ ‫פרק זה עורך הכרה עם הנושא שבו נעסוק למעשה במהלך כל לימוד היחידה‪ :‬פתרון בעיות‬ ‫אלגוריתמיות‪.‬נכיר את המושג אלגוריתם‪ ,‬מושג מרכזי וחשוב במדעי המחשב‪ ,‬שמשמעותו למעשה‬ ‫פתרון לבעיה‪ ,‬פתרון שאפשר אחר כך לתרגמו לתוכנית מחשב‪.‬לאחר מכן נערוך היכרות ראשונית‬ ‫עם מושג התבנית‪.‬גם תבנית היא אלגוריתם‪ ,‬כלומר פתרון לבעיה‪ ,‬אך היא יכולה גם לשמש כתת‪-‬‬ ‫פתרון לבעיות רבות בעלות מאפיינים משותפים‪.‬‬ ‫‪ 2.1‬אלגוריתמים‬ ‫המושג אלגוריתם שנתמקד בו בפרק זה‪ ,‬הוא מושג מרכזי במדעי המחשב‪.‬בפרק זה נכיר ונפתח‬ ‫אלגוריתמים ראשונים‪ ,‬אשר אינם מיועדים לביצוע במחשב‪.‬בפרק הבא ובפרקים הבאים אחריו‬ ‫נפתח אלגוריתמים המיועדים ליישום בתוכניות מחשב‪ ,‬לביצוע במחשב‪.‬‬ ‫קבוצת ההוראות שבדוגמה הבאה היא אלגוריתם‪:‬‬ ‫‪íéî úåñåë øùò çúøä‬‬ ‫‪.1‬‬ ‫‪çìî èøå÷ óñåä‬‬ ‫‪.2‬‬ ‫‪íéçúåøä íéîì íéúéúô åìé÷ éöç óñåä‬‬ ‫‪.3‬‬ ‫‪úôñåð äçéúøì íéîä úà àáä‬‬ ‫‪.4‬‬ ‫‪äðè÷ ùà ìò úå÷ã 20 êùîì íéúéúôä úà ìùá‬‬ ‫‪.5‬‬ ‫‪íéúéúôä úà ïðñ‬‬ ‫‪.6‬‬ ‫האלגוריתם שבדוגמה זו הוא מתכון לבישול חצי קילו פתיתים‪.‬‬ ‫הנה דוגמה נוספת לאלגוריתם‪:‬‬ ‫‪éáåéç íìù øôñî øçá‬‬ ‫‪.1‬‬ ‫‪øôñîä úåøôñ úà øáç‬‬ ‫‪.2‬‬ ‫‪3-á äàöåúä úà ÷ìç‬‬ ‫‪.3‬‬ ‫‪ä÷åìçä úéøàù úà áåúë‬‬ ‫‪.4‬‬ ‫שאלה ‪2.1‬‬ ‫מהי תוצאת ביצוע האלגוריתם שלעיל עבור המספר ‪?1977‬‬ ‫באופן כללי ניתן לומר כי אלגוריתם הוא מתכון אך לאו דווקא לבישול‪:‬‬ ‫אלגוריתם הוא מתכון לביצוע משימה‪.‬אלגוריתם מורכב תמיד מקבוצת הוראות‬ ‫חד‪-‬משמעיות ואפשריות לביצוע‪ ,‬אשר סדר ביצוען מוגדר היטב‪.‬‬ ‫המילים המודגשות בהגדרה שלעיל הן שלושת המאפיינים החשובים לאלגוריתם‪ :‬חד‪-‬משמעיות‪,‬‬ ‫אפשריות לביצוע וסדר ביצוען מוגדר היטב‪.‬‬ ‫חד‪-‬משמעיות‪ :‬הוראה המופיעה באלגוריתם חייבת להיות חד‪-‬משמעית‪.‬כלומר‪ ,‬כל ביצוע שלה‬ ‫צריך להסתיים תמיד באותה תוצאה‪.‬כך‪ ,‬למשל‪ ,‬ההוראה השנייה בדוגמה האחרונה‪úà øáç ,‬‬ ‫?

Use Quizgecko on...
Browser
Browser