Java - השראה הוצאה לאור

Transcription

Java - השראה הוצאה לאור
‫יסודות מדעי המחשב ‪1‬‬
‫בשפת ‪Java‬‬
‫חלק א'‬
‫ד"ר מיכל ארמוני – ראש צוות הכתיבה‬
‫יעל בילצ'יק )סופרין(‬
‫נעה גרדוביץ‬
‫עדי גרין‬
‫אתי מנשה‬
‫ייעוץ‪ :‬ד"ר דוד גינת‬
‫מהדורת עיצוב‬
‫תשס"ז ‪2006‬‬
‫אוניברסיטת תל‪-‬אביב החוג להוראת המדעים‬
‫מטה מל"מ המרכז הישראלי להוראת המדעים ע"ש עמוס דה‪-‬שליט‬
‫משרד החינוך האגף לתכנון ולפיתוח תכניות לימודים‬
‫יסודות מדעי המחשב ‪ 1‬בשפת ‪Java‬‬
‫חלק א'‬
‫ד"ר מיכל ארמוני‬
‫יעל בילצ'יק )סופרין(‬
‫נעה גרדוביץ‬
‫עדי גרין‬
‫אתי מנשה‬
‫ייעוץ‪ :‬ד"ר דוד גינת‬
‫כל הזכויות שמורות © ‪2006‬‬
‫"השראה" הוצאה לאור‪ ,‬ת"ד ‪ ,19022‬חיפה ‪34341‬‬
‫טל'‪ ,8254752-04 :‬פקס‪8254752-1534 :‬‬
‫‪E-Mail: books@hashraa.co.il‬‬
‫‪www.hashraa.co.il‬‬
‫השראה הוצאה לאור‬
‫מהדורה ראשונה ‪2006‬‬
‫אין לשכפל‪ ,‬להעתיק‪ ,‬לצלם‪ ,‬לתרגם‪ ,‬להקליט‪ ,‬לאחסן במאגר מידע כלשהו‪ ,‬לשדר או לקלוט בכל דרך או בכל‬
‫אמצעי אלקטרוני‪ ,‬אופטי או מכני )לרבות צילום‪ ,‬הקלטה‪ ,‬אינטרנט‪ ,‬מחשב ודואר אלקטרוני(‪ ,‬כל חלק שהוא‬
‫מהחומר שבספר זה‪ .‬שימוש מסחרי מכל סוג בחומר הכלול בספר זה אסור בהחלט‪ ,‬אלא ברשות מפורשת בכתב‬
‫מהמו"ל ומהגורמים המפורטים להלן‪.‬‬
‫©‬
‫כל הזכויות שמורות‬
‫אוניברסיטת תל‪-‬אביב ומשרד החינוך‬
‫פתח דבר‬
‫יחידות הלימוד "יסודות מדעי המחשב ‪ 1‬ו‪ "2-‬מיועדות להקניית מושגי יסוד ועקרונות שעליהם‬
‫מושתת התחום מדעי המחשב‪ .‬פרקי יחידות הלימוד משלבים שני ערוצים – ערוץ תיאורטי וערוץ‬
‫יישומי‪ .‬הערוץ התיאורטי מתמקד בחשיבה אלגוריתמית ופיתוח וניתוח אלגוריתמים‪ ,‬שהם מתכונים‬
‫לביצוע משימות‪ .‬הערוץ היישומי כולל יישום של האלגוריתמים בשפת התכנות ‪ ,Java‬שהיא שפה‬
‫מונחית עצמים‪.‬‬
‫ספר זה כולל את היחידה "יסודות מדעי המחשב ‪ ."1‬היחידה מציגה בעיות ראשונות ופתרונותיהן‪,‬‬
‫המיועדים לביצוע למחשב‪ .‬הבעיות נקראות בעיות אלגוריתמיות‪ ,‬ופתרונותיהן – אלגוריתמים‪.‬‬
‫האלגוריתמים מיושמים באמצעות תוכניות מחשב‪ .‬במהלך הלימוד מוצגים המרכיבים הבסיסיים של‬
‫אלגוריתמים ותוכניות מחשב‪ .‬ההצגה משולבת בפיתוח וניתוח אלגוריתמים‪ ,‬וכוללת התייחסות‬
‫מצומצמת למושג עצמים‪ .‬הפיתוח של אלגוריתמים נעשה בשלבים‪ ,‬תוך שימת דגש על ניתוח בעיה‬
‫והתייחסות להיבטים של נכונות ויעילות‪ .‬כמו כן‪ ,‬מושם דגש על מבנים תבניתיים בפתרונות‬
‫אלגוריתמיים‪ ,‬הנקראים תבניות‪.‬‬
‫ספר זה פותח על בסיס ספר הלימוד "יסודות מדעי המחשב ‪ "1‬שפותח במכון ויצמן למדע בסוף שנות‬
‫ה‪ .90-‬בספר הקודם נעשה היישום של אלגוריתמים באמצעות שפת התכנות ‪ ,Pascal‬שהיא שפה‬
‫פרוצדורלית‪ .‬בספר זה נעשה היישום בשפת ‪ ,Java‬שהיא מונחית עצמים‪ .‬העקרונות האלגוריתמיים‬
‫בשני הספרים זהים‪ ,‬וכך גם הנושאים בשמונת הפרקים הראשונים של שני הספרים‪ .‬שני הפרקים‬
‫האחרונים בספר זה מציגים מבוא ראשוני לעצמים )משולב בנושאים האלגוריתמיים של הפרקים‬
‫האחרונים בספר הקודם(‪ .‬בספר "יסודות מדעי המחשב ‪ "2‬מורחב המבט על עצמים‪ ,‬אלגוריתמים‬
‫ותבניות‪.‬‬
‫תודות‪ .‬ספר זה פותח בתמיכת מפמ"ר מדעי המחשב במשרד החינוך‪ ,‬ד"ר אבי כהן‪ ,‬וחברי שתי ועדות‬
‫המקצוע האחרונות להוראת מדעי המחשב – הועדה בראשות פרופ' עמיהוד אמיר והועדה )הנוכחית(‬
‫בראשות פרופ' יהודית גל‪-‬עזר‪ .‬תודתנו נתונה להם על תמיכתם והערותיהם‪ .‬בנוסף‪ ,‬לאורך הספר‬
‫משולבת התייחסות מפורשת לתבניות בפיתוח וניתוח אלגוריתמים‪ .‬ההתייחסות מבוססת על הספר‬
‫"תבניות במדעי המחשב" שפותח בשנת ‪ 2001‬על‪-‬ידי חברי קבוצת הוראת מדעי המחשב בחוג להוראת‬
‫המדעים באוניברסיטת תל‪-‬אביב‪ .‬ארנה מילר‪ ,‬אחת מחברות הקבוצה‪ ,‬אף חקרה בצורה מסודרת את‬
‫הנושא של הוראה מוכוונת תבניות‪ ,‬ושיתפה את חברות צוות הכתיבה מניסיונה‪ .‬תודתנו נתונה לה על‬
‫כך‪.‬‬
‫תוכן העניינים‬
‫פרק ‪ – 1‬מבוא‪11 ..................................................................................‬‬
‫‪ 1.1‬מהו מחשב?‪.........................................................................................‬‬
‫‪11‬‬
‫‪ 1.2‬חומרה‪.................................................................................................‬‬
‫‪13‬‬
‫‪ 1.3‬תוכנה‪16 ..................................................................................................‬‬
‫‪ 1.4‬התפתחות המחשבים ומדעי המחשב‪........................................................‬‬
‫‪20‬‬
‫התפתחות הנדסית וטכנולוגית – חומרה‪20 .......................................................‬‬
‫התפתחות הנדסית וטכנולוגית – תוכנה‪.......................................................‬‬
‫‪22‬‬
‫התפתחות מדעית‪....................................................................................‬‬
‫‪22‬‬
‫סיכום‪........................................................................................................‬‬
‫‪23‬‬
‫שאלות נוספות‪............................................................................................‬‬
‫‪24‬‬
‫פרק ‪ – 2‬פתרון בעיות אלגוריתמיות‪......................................................‬‬
‫‪25‬‬
‫‪ 2.1‬אלגוריתמים‪25 ..........................................................................................‬‬
‫‪ 2.2‬תבניות‪................................................................................................‬‬
‫‪36‬‬
‫סיכום‪........................................................................................................‬‬
‫‪37‬‬
‫שאלות נוספות‪............................................................................................‬‬
‫‪38‬‬
‫פרק ‪ – 3‬מודל חישוב בסיסי‪41 ................................................................‬‬
‫‪ 3.1‬צעדים ראשונים‪ :‬הוראת פלט‪ ,‬הוראת קלט ומשתנים‪....................................‬‬
‫‪41‬‬
‫‪ 3.2‬הוראת השמה‪51 .......................................................................................‬‬
‫‪ 3.3‬טבלת מעקב‪.........................................................................................‬‬
‫‪58‬‬
‫‪ 3.4‬החלפה בין ערכי משתנים‪65 ........................................................................‬‬
‫‪ 3.5‬טיפוסים‪...............................................................................................‬‬
‫‪68‬‬
‫‪ 3.6‬קבועים‪................................................................................................‬‬
‫‪73‬‬
‫סיכום‪........................................................................................................‬‬
‫‪74‬‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪77 .......................................................3‬‬
‫שאלות נוספות‪............................................................................................‬‬
‫‪80‬‬
‫תבניות – פרק ‪...................................................................................3‬‬
‫‪87‬‬
‫החלפת ערכים בין שני משתנים‪.........................................................‬‬
‫‪87‬‬
‫היפוך סדר האיברים בסדרה‪.............................................................‬‬
‫‪91‬‬
‫ממוצע של סדרת מספרים‪................................................................‬‬
‫‪93‬‬
‫הזזה מעגלית בסדרה‪......................................................................‬‬
‫‪96‬‬
‫פרק ‪ – 4‬הרחבה בפיתוח אלגוריתמים‪...................................................‬‬
‫‪99‬‬
‫‪ 4.1‬מבט נוסף אל התהליך של פיתוח אלגוריתם ויישומו‪.....................................‬‬
‫‪99‬‬
‫המחלקה המתמטית‪.................................................................................‬‬
‫‪105‬‬
‫‪ 4.2‬פעולות חלוקה בשלמים‪..........................................................................‬‬
‫‪106‬‬
‫עוד על פעולת השארית‪113 .............................................................................‬‬
‫המרת ערך שלם לממשי‪115 ............................................................................‬‬
‫פירוק מספר דו‪-‬ספרתי לספרותיו‪................................................................‬‬
‫‪118‬‬
‫‪ 4.3‬הטיפוס התווי‪123 ........................................................................................‬‬
‫המרה מתו המייצג ספרה לערך מספרי מתאים‪128 ..............................................‬‬
‫סיכום‪........................................................................................................‬‬
‫‪129‬‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪130 .......................................................4‬‬
‫שאלות נוספות‪............................................................................................‬‬
‫‪131‬‬
‫תבניות – פרק ‪...................................................................................4‬‬
‫‪135‬‬
‫חלוקת כמות פריטים לקבוצות בגודל נתון‪............................................‬‬
‫‪135‬‬
‫פירוק מספר חיובי לספרותיו‪.............................................................‬‬
‫‪138‬‬
‫בניית מספר‪...................................................................................‬‬
‫‪141‬‬
‫פרק ‪ – 5‬ביצוע מותנה‪145 ........................................................................‬‬
‫‪ 5.1‬הוראה לביצוע בתנאי‪145 ..............................................................................‬‬
‫הוראה לביצוע בתנאי במבנה ‪...íà‬‬
‫‪......................................... ...úøçà‬‬
‫‪145‬‬
‫הוראה לביצוע בתנאי במבנה ‪155 ...................................................... ...íà‬‬
‫התניית ביצוע של יותר מהוראה אחת‪..........................................................‬‬
‫‪162‬‬
‫ביטויים בוליאניים הכוללים תווים‪166 .................................................................‬‬
‫‪ 5.2‬תנאי מורכב‪..........................................................................................‬‬
‫‪171‬‬
‫הקשר ‪172 .....................................................................................íâå‬‬
‫הקשר ‪.......................................................................................åà‬‬
‫‪177‬‬
‫תנאים מורכבים מעורבים‪..........................................................................‬‬
‫‪185‬‬
‫‪ 5.3‬קינון של הוראה לביצוע בתנאי‪.................................................................‬‬
‫‪186‬‬
‫* ‪ 5.4‬הוראת שרשרת לביצוע בתנאי‪197 ..................................................................‬‬
‫* ‪ 5.5‬הוראת בחירה‪.......................................................................................‬‬
‫‪203‬‬
‫סיכום‪........................................................................................................‬‬
‫‪210‬‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪211 .......................................................5‬‬
‫שאלות נוספות‪............................................................................................‬‬
‫‪213‬‬
‫תבניות – פרק ‪...................................................................................5‬‬
‫‪219‬‬
‫מציאת מקסימום ומינימום בסדרה‪219 ......................................................‬‬
‫סידור ערכים בסדרה‪225 ........................................................................‬‬
‫ערכים עוקבים‪................................................................................‬‬
‫‪228‬‬
‫זוגיות מספר‪230 ...................................................................................‬‬
‫מחלק של מספר‪.............................................................................‬‬
‫‪232‬‬
‫פרק ‪ – 6‬נכונות אלגוריתמים‪...............................................................‬‬
‫‪235‬‬
‫סיכום‪........................................................................................................‬‬
‫‪245‬‬
‫פרק ‪ – 7‬ביצוע חוזר‪247 ...........................................................................‬‬
‫‪ 7.1‬ביצוע חוזר באורך ידוע מראש‪..................................................................‬‬
‫‪247‬‬
‫‪ 7.2‬מציאת מקסימום או מינימום‪....................................................................‬‬
‫‪267‬‬
‫‪ 7.3‬מציאת מקום מקסימום או מינימום‪............................................................‬‬
‫‪271‬‬
‫‪ 7.4‬ביצוע חוזר בתנאי‪..................................................................................‬‬
‫‪274‬‬
‫ביצוע חוזר עם זקיף‪.................................................................................‬‬
‫‪274‬‬
‫ביצוע חוזר עם תנאי כניסה כלשהו‪..............................................................‬‬
‫‪282‬‬
‫ביצוע חוזר אינסופי‪294 ...................................................................................‬‬
‫‪ 7.5‬משתנים מטיפוס בוליאני‪.........................................................................‬‬
‫‪299‬‬
‫‪ 7.6‬הקשר הלוגי ‪307 .............................................................................(not) àì‬‬
‫‪ 7.7‬קינון הוראות לביצוע חוזר‪310 ........................................................................‬‬
‫סיכום‪........................................................................................................‬‬
‫‪317‬‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪319 .......................................................7‬‬
‫תבניות – פרק ‪...................................................................................7‬‬
‫‪321‬‬
‫מנייה וצבירה‪.................................................................................‬‬
‫‪321‬‬
‫ממוצע של סדרת מספרים‪................................................................‬‬
‫‪332‬‬
‫מציאת מקסימום או מינימום בסדרה‪337 ...................................................‬‬
‫מציאת ערך נלווה למקסימום או למינימום בסדרה‪.................................‬‬
‫‪342‬‬
‫איסוף בקיזוז‪..................................................................................‬‬
‫‪347‬‬
‫פירוק מספר חיובי לספרותיו‪.............................................................‬‬
‫‪352‬‬
‫בניית מספר‪...................................................................................‬‬
‫‪354‬‬
‫האם כל הערכים בסדרה מקיימים תנאי?‪356 .............................................‬‬
‫האם קיים ערך בסדרה המקיים תנאי?‪................................................‬‬
‫‪359‬‬
‫מציאת כל הערכים בסדרה המקיימים תנאי‪363 ..........................................‬‬
‫מעבר על זוגות סמוכים בסדרה‪.........................................................‬‬
‫‪366‬‬
‫פרק ‪ – 8‬יעילות של אלגוריתמים‪369 ..........................................................‬‬
‫סיכום‪........................................................................................................‬‬
‫‪382‬‬
‫פרק ‪ – 9‬המחלקה מחרוזת )‪ (String‬ומבוא לעצמים‪.................................‬‬
‫‪383‬‬
‫‪ 9.1‬היכרות ראשונית עם המחלקה ‪.......................................................String‬‬
‫‪383‬‬
‫‪ 9.2‬ביצוע פעולות על מחרוזות‪.......................................................................‬‬
‫‪386‬‬
‫שרשור מחרוזות‪......................................................................................‬‬
‫‪391‬‬
‫ומה בפנים? פעולות המסתכלות אל תוך הקנקן‪.............................................‬‬
‫‪393‬‬
‫‪ 9.3‬השמת מחרוזות‪....................................................................................‬‬
‫‪396‬‬
‫סיכום‪........................................................................................................‬‬
‫‪408‬‬
‫רשימת פעולות על מחרוזות‪410 ...........................................................................‬‬
‫פרק ‪ – 10‬מערכים‪............................................................................‬‬
‫‪413‬‬
‫‪ 10.1‬מערך ואיברי מערך‪..............................................................................‬‬
‫‪413‬‬
‫‪ 10.2‬חריגה מגבולות מערך‪434 ...........................................................................‬‬
‫‪ 10.3‬קשרים בין מערכים‪..............................................................................‬‬
‫‪438‬‬
‫עיבוד מערכים במקביל ובקצב זהה‪438 ..............................................................‬‬
‫עיבוד מערכים במקביל‪ ,‬בקצב לא זהה‪439 .........................................................‬‬
‫‪ 10.4‬מערך מונים‪........................................................................................‬‬
‫‪442‬‬
‫‪ 10.5‬מערך צוברים‪......................................................................................‬‬
‫‪446‬‬
‫‪ 10.6‬יעילות מקום‪.......................................................................................‬‬
‫‪447‬‬
‫‪ 10.7‬בחירה אקראית‪...................................................................................‬‬
‫‪454‬‬
‫סיכום‪........................................................................................................‬‬
‫‪460‬‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪461 .....................................................10‬‬
‫תבניות – פרק ‪.................................................................................10‬‬
‫‪463‬‬
‫מערך מונים‪...................................................................................‬‬
‫‪463‬‬
‫מערך צוברים‪.................................................................................‬‬
‫‪466‬‬
‫חישוב שכיח‪471 ...................................................................................‬‬
‫הזזה מעגלית בסדרה‪......................................................................‬‬
‫‪474‬‬
‫הזזה של תת‪-‬סדרה‪........................................................................‬‬
‫‪477‬‬
‫היפוך סדר הערכים בסדרה‪..............................................................‬‬
‫‪479‬‬
‫פרק ‪ – 1‬מבוא‬
‫בפרק מבוא קצר זה נסביר מעט על המחשב‪ ,‬תפקידיו‪ ,‬מבנהו‪ ,‬ואופ השימוש בו לצור פתרו בעיות‬
‫מסוגי שוני‪ .‬ייתכ כי לאלה מביניכ הרגילי בשימוש במחשב‪ ,‬ואולי א בתכנות‪ ,‬חלק מהמושגי‬
‫יהיו מוכרי‪ .‬בכל זאת‪ ,‬סביר שקריאת הפרק תאיר כמה מהמושגי האלה ואת הקשרי ביניה‬
‫באור מעט שונה‪ ,‬וסביר שכמה מהמושגי המוצגי בפרק יהיו חדשי ג עבור התלמידי שרגילי‬
‫בשימוש במחשב‪.‬‬
‫מחשבי מצויי במקומות רבי‪ :‬ה מנחי מטוסי‪ ,‬אוניות וספינות חלל; ה מפקחי על מיליוני‬
‫טלפוני המחוברי ברשת ופזורי על פני מדינות שונות; ה משמשי לחיזוי מזג האוויר‪ ,‬לכתיבה‬
‫ולהדפסה של מסמכי‪ ,‬לבקרה על מערכות ייצור אוטומטיות‪ ,‬להלחנת מוסיקה‪ ,‬למשחקי‪ ,‬ולדברי‬
‫רבי נוספי‪.‬‬
‫ללא המחשב לא היה מתאפשר מבצע הנחתת אד על הירח‪ .‬המבצע דרש פתרו בעיות חישוביות‬
‫קשות ומסובכות לקביעת מסלול חללית תחת השפעת הירח‪ ,‬כדור האר והשמש‪ .‬ביצוע החישובי‬
‫האלה ללא מחשב היה מצרי עבודת צוות גדולה במש עשרות שני‪ .‬בנוס‪ ,‬כל שינוי במועד‬
‫ההמראה או במסלול הטיסה חייב פתרו מחדש של בעיות חישוביות אלו‪ .‬המבצע לא היה מתאפשר‬
‫ללא מחשב‪.‬‬
‫‪ 1.1‬מהו מחשב?‬
‫מחשב‬
‫)‪ (computer‬הוא מכונה אלקטרונית הקולטת נתוני‪ ,‬מעבדת אות‪ ,‬ופולטת מידע הנוצר‬
‫בתהלי העיבוד‪.‬‬
‫הנתוני שקולט המחשב נקראי‬
‫קלט‬
‫)‪ ;(input‬המידע שפולט המחשב נקרא‬
‫העיבוד המבוצע במחשב מונחה על ידי אוס הוראות הנקרא‬
‫פלט‬
‫תוכנית מחשב‬
‫)‪;(output‬‬
‫) ‪computer‬‬
‫‪.(program‬‬
‫הנה כמה דוגמאות להמחשת ההגדרות האלו‪:‬‬
‫♦ כשאנו מגיעי לקנות כרטיסי לסרט‪ ,‬הקופאי מקיש בלוח המקשי של המחשב שעל שולחנו את‬
‫מספר הכרטיסי שאנו מבקשי לקנות‪ .‬המחשב מעבד נתו זה על ידי בדיקת המקומות הפנויי‪,‬‬
‫הקצאת מקומות כמבוקש‪ ,‬וסימו המקומות שהוקצו כתפוסי‪ .‬המדפסת מדפיסה כרטיסי‬
‫שעליה מסומני המקומות שהוקצו‪ .‬במקרה זה הקלט הוא מספר הכרטיסי המבוקש‪ ,‬והפלט‬
‫הוא הכרטיסי שעליה מקומות מסומני‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-11-‬‬
‫מדעי המחשב‬
‫♦ אמ אנימציה מציי כקלט על צג מחשב שתי נקודות – נקודת התחלה ונקודת סיו – לתנועה של‬
‫דמות‪ .‬המחשב מעבד נתוני אלה יחד ע נתוני נוספי על הדמות‪ ,‬ומציג על הצג‪ ,‬כפלט‪ ,‬את‬
‫תנועת הדמות מנקודת ההתחלה לנקודת הסיו‪.‬‬
‫♦ מנהל חשבונות מקיש כקלט ש של עובד ואת מספר הימי שעבד בחודש האחרו‪ .‬המחשב מעבד‬
‫נתוני אלה יחד ע נתוני אחרי השמורי אצלו )כמו דרגת העובד(‪ ,‬ומדפיס כפלט את‬
‫המשכורת שמגיעה לעובד עבור החודש האחרו‪.‬‬
‫♦ מדע‪ ,‬המשתמש במחשב לצור חישוב מסלול התעופה של טיל‪ ,‬נות כקלט למחשב את נקודת‬
‫שיגור הטיל‪ ,‬זמ השיגור‪ ,‬מהירות הטיל‪ ,‬ונתוני על הרוחות במסלול מעופו הצפוי של הטיל‪.‬‬
‫המחשב מעבד נתוני אלה בעזרת נוסחאות לחישוב תעופת טיל ובעזרת מידע על כדור האר‬
‫השמור אצלו‪ ,‬ונות כפלט את המקו בו אמור הטיל לנחות‪.‬‬
‫שאלה ‪1.1‬‬
‫הביאו דוגמאות מסביבת הבית ובית הספר לשימוש במחשב‪ ,‬וציינו עבור כל דוגמה את הקלט ואת‬
‫הפלט‪.‬‬
‫ייחודה של המכונה "מחשב" לעומת מכונות אחרות הוא במגוו השימושי הרחב שלה‪ .‬בעוד‬
‫שבמכונת כביסה אנו משתמשי כדי לכבס‪ ,‬במקרר כדי לשמור על מזו ובמכונית כדי להגיע ממקו‬
‫למקו‪ ,‬הרי שבמחשב משתמשי בקשת רחבה של משימות‪ .‬זה נובע מכ שהמחשב מבצע פעילויות‬
‫שונות של עיבוד ואיחסו מידע‪ ,‬פעילויות המונחות כול על ידי תוכניות מחשב מתאימות‪.‬‬
‫אמנ‪ ,‬קיימי כיו מחשבי אשר מסוגלי לבצע בצורה מוגבלת תיפקודי אנושיי‪ ,‬כמו ראייה‪,‬‬
‫שמיעה‪ ,‬דיבור ותנועה‪ ,‬אבל המחשב אינו כל יכול‪ .‬הוא בס הכל מכונה‪ .‬הוא איננו יכול‪ ,‬למשל‪,‬‬
‫לדמיי‪ ,‬לכאוב או לשמוח‪ .‬למעשה‪ ,‬ג א נגביל את הדיו למשימות שאינ מערבות רגשות‪ ,‬ישנ‬
‫משימות רבות שאינ ניתנות לביצוע על ידי מחשב‪.‬‬
‫יתרו בולט של מחשב הוא בכ שהוא מבצע פעולות חישוב ועיבוד מידע במהירות עצומה ובדיוק רב‪.‬‬
‫למשל‪ ,‬מחשב יכול לקלוט אל מספרי בני חמש ספרות כל אחד‪ ,‬ולחשב תו שבריר שנייה את‬
‫סכומ‪ .‬מחשב יכול לקלוט טקסט ב אל מילי‪ ,‬ולחשב תו שבריר שנייה את האות השכיחה ביותר‬
‫בטקסט‪.‬‬
‫יתרו חשוב נוס של מחשב הוא שנית לאחס בזיכרונו מיליוני נתוני‪ .‬למשל‪ ,‬במחשב של משרד‬
‫הפני מאוחסני נתוני על כל אחד מתושבי המדינה )ש‪ ,‬מספר זהות‪ ,‬תארי לידה‪ ,‬מצב משפחתי‬
‫ועוד(‪ .‬במחשב של בנק מאוחסני פרטי אישיי של כל לקוח של הבנק‪ ,‬והנתוני על התנועות בכל‬
‫חשבונות הבנק‪.‬‬
‫אמנ‪ ,‬המחשב מבצע פעולות חישוב ועיבוד בדיוק רב‪ ,‬א מאחר שהוא לא יותר ממכונה‪ ,‬המבצעת‬
‫הוראות‪ ,‬לא מובטח שתמיד יית המחשב כפלט תוצאת עיבוד נכונה‪ .‬פלט לא נכו יכול להתקבל‬
‫כתוצאה מקלט שגוי או מתוכנית מחשב שגויה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-12-‬‬
‫מדעי המחשב‬
‫?‬
‫מהי תוכנית מחשב שגויה?‬
‫תוכנית מחשב נכתבת על ידי בני אד‪ .‬ייתכ שההוראות הכלולות בה אינ מורות על העיבוד הדרוש‪.‬‬
‫במקרה כזה התוכנית שגויה‪ ,‬וייתכ כי כאשר המחשב פועל על פיה הוא יית כפלט תוצאת עיבוד לא‬
‫נכונה‪ .‬למשל‪ ,‬ייתכ כי מתכנת יכתוב תוכנית לחישוב ממוצע של אל מספרי‪ ,‬ובה יורה על סיכו‬
‫המספרי א יטעה וישכח להורות על חלוקת הסכו המחושב ב&‪ .1000‬ברור כי עיבוד שיתבצע על פי‬
‫תוכנית זו לא יבצע חישוב ממוצע כנדרש ויית פלט שגוי‪.‬‬
‫אנו מבחיני בי שני צדדי של מחשב‪ :‬חומרה ותוכנה‪.‬‬
‫חומרה )‪ (hardware‬היא הרכיבי הפיסיי שמרכיבי את המחשב‪.‬‬
‫תוכנה )‪ (software‬היא אוס תוכניות המחשב‪.‬‬
‫‪ 1.2‬חומרה‬
‫בסעי זה נתאר על קצה המזלג את הרכיבי הפיסיי של המחשב‪ .‬במהל לימוד היחידה "יסודות‬
‫מדעי המחשב ‪ "1‬תעבדו בוודאי על מחשבי אישיי )‪ .(personal computer – pc‬מחשבי אישיי‬
‫ה קטני יחסית במימדיה ומיועדי לשרת בו זמנית משתמש אחד בלבד‪ .‬קיימי ג מחשבי‬
‫גדולי יותר‪ ,‬שיכולי לשרת בו זמנית משתמשי רבי‪ .‬ע זאת‪ ,‬המבנה הכללי של מחשב אינו תלוי‬
‫בגודלו‪.‬‬
‫למחשב כמה יחידות בסיסיות‪:‬‬
‫♦‬
‫יחידת עיבוד מרכזית )‪ ,(central processing unit‬ובקיצור יע"מ‬
‫)‪ (CPU‬היא היחידה‬
‫שאחראית על עיבוד מידע‪ ,‬מבצעת חישובי‪ ,‬ומנהלת את כל התהליכי המתבצעי במחשב‪.‬‬
‫♦‬
‫בזיכרו‬
‫)‪ (memory‬נשמרי תוכניות המחשב‪ ,‬המידע בו משתמש המחשב ותוצאות ביניי של‬
‫תהליכי עיבוד‪.‬‬
‫♦‬
‫דר אמצעי קלט‬
‫)‪ (input devices‬מתבצעת קליטת נתוני‪.‬‬
‫♦‬
‫דר אמצעי פלט‬
‫)‪ (output devices‬מתבצע הפלט של תוצאות העיבוד‪.‬‬
‫איור ‪ 1.1‬מתאר את היחידות הבסיסיות של מחשב‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-13-‬‬
‫מדעי המחשב‬
‫מחשב‬
‫יע"מ‬
‫)‪(cpu‬‬
‫אמצעי קלט‬
‫אמצעי פלט‬
‫זיכרו‬
‫איור ‪ – 1.1‬יחידותיו הבסיסיות של מחשב‬
‫נרחיב מעט על היחידות הבסיסיות‪:‬‬
‫יחידת העיבוד המרכזית היא ה"מוח של המחשב"‪ .‬היא מבצעת את ההוראות הכתובות בתוכניות‬
‫המחשב‪ ,‬ביניה הוראות לביצוע פעולות חישוב‪ ,‬פעולות השוואה ועוד‪ .‬במהל ביצוע פעולותיה פונה‬
‫יחידת העיבוד המרכזית אל הזיכרו ואל אמצעי הקלט והפלט‪.‬‬
‫הזיכרו מורכב מאוס גדול מאוד של תאי‪ .‬לכל תא בזיכרו מותא מספר סידורי‪ ,‬הנקרא מע‬
‫)כתובת‪ .(address ,‬יחידת העיבוד המרכזית משתמשת במידע השמור בזיכרו ולעיתי משנה אותו‪,‬‬
‫תו פנייה לתאי הזיכרו על ידי המע שלה‪ .‬יש שני סוגי פניות לזיכרו‪ :‬כתיבת מידע בזיכרו‬
‫וקריאת מידע מהזיכרו‪ .‬תהלי הכתיבה בזיכרו גור למחיקת מידע ושמירת מידע חדש במקומו‪.‬‬
‫לעומתו‪ ,‬תהלי הקריאה מהזיכרו גור להעברת המידע הנקרא אל יחידת העיבוד המרכזית‪ ,‬א‬
‫איננו גור למחיקתו‪ .‬הוא מזכיר את תהלי הקריאה שאנו מבצעי‪ :‬כאשר אנו קוראי ספר‪,‬‬
‫השורות אינ נעלמות מדפי הספר‪ ,‬אלא רק "מועתקות" לזיכרוננו‪.‬‬
‫המידע השמור בזיכרו מיוצג על ידי סיביות‪ .‬סיבית‬
‫)‪ – (bit‬קיצור של ספרה בינארית ) ‪binary‬‬
‫‪ – (digit‬היא אחת מ הספרות ‪ 0‬או ‪ ,1‬כמו שספרה עשרונית היא אחת מ הספרות ‪.9 ,... ,0‬‬
‫תא בזיכרו המחשב מכיל סדרה של סיביות‪ ,‬בדר כלל ‪ 32 ,16‬או ‪ 64‬סיביות‪ ,‬על פי תכנו החומרה‬
‫של המחשב‪ .‬מפתיע ומרשי שכל המשימות המורכבות המתבצעות על ידי מחשב ה בסופו של דבר‬
‫אוס של פעולות על סדרות המורכבות מהספרות ‪ 0‬ו&‪ !1‬המחשב מפרש סדרות של סיביות כמספרי‬
‫או כאותיות‪ ,‬לעיתי סדרות של סיביות מפורשות כהוראות לביצוע או כטיפוסי מידע אחרי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-14-‬‬
‫מדעי המחשב‬
‫למעשה‪ ,‬יחידת העיבוד המרכזית‪ ,‬ה"מוח" של המחשב‪ ,‬מבצעת בס הכל הוראות פשוטות כגו "קרא‬
‫את סדרות הסיביות שנמצאות בתאי הזיכרו שמעניה ה ‪ 13‬ו&‪ ,37‬התייחס לכל סדרת סיביות כאל‬
‫מספר‪ ,‬חבר אות וכתוב את התוצאה בתא שמענו ‪."116‬‬
‫זיכרו המחשב מורכב למעשה משני חלקי נפרדי‪:‬‬
‫זיכרו ראשי‬
‫)‪ (main memory‬משמש לשמירת תוכניות בזמ ביצוע‪ ,‬ולשמירת נתוני ותוצאות‬
‫ביניי של תוכניות שמתבצעות‪.‬‬
‫זיכרו משני‬
‫)‪ (secondary memory‬משמש לאיחסו לזמ בלתי מוגבל של מידע ותוכניות מחשב‪.‬‬
‫הזיכרו הראשי קט משמעותית מ הזיכרו המשני‪ .‬מהירות הקריאה ממנו והכתיבה אליו גדולה‬
‫הרבה יותר ממהירות של פעולות אלו בזיכרו המשני‪ .‬הזיכרו הראשי ממוק צמוד ליחידת העיבוד‬
‫המרכזית‪ ,‬ואילו הזיכרו המשני נמצא באמצעי איחסו חיצוניי כמו דיסק ודיסק קשיח‪ .‬במהל‬
‫ביצועה של תוכנית מחשב‪ ,‬יחידת העיבוד המרכזית מעתיקה את התוכנית מהזיכרו המשני אל‬
‫הזיכרו הראשי‪ .‬במובני רבי‪ ,‬נית להתייחס לזיכרו הראשי כאל זיכרו לטווח קצר‪ ,‬ואל הזיכרו‬
‫המשני כאל זיכרו לטווח ארו‪.‬‬
‫שאלה ‪1.2‬‬
‫הביאו דוגמה מכיתת בית הספר לחפ שנית לדמות את השימוש בו לשימוש בזיכרו ראשי‪ ,‬ולעומתה‬
‫דוגמה לחפ שנית לדמות את השימוש בו לשימוש בזיכרו משני‪.‬‬
‫אמצעי קלט משמשי להעברת נתוני אל המחשב מ המשתמשי בו‪ .‬למשל‪ ,‬בדר כלל מחוברי‬
‫למחשב אישי עכבר ולוח מקשי‪ .‬שניה אמצעי קלט המשמשי להעברת נתוני‪ .‬ג סורק דיגיטלי‪,‬‬
‫מצלמה דיגיטלית או מיקרופו המחוברי למחשב ה אמצעי קלט‪.‬‬
‫אמצעי פלט משמשי להעברת מידע מ המחשב אל המשתמשי בו‪ .‬למשל‪ ,‬בדר כלל מחוברי‬
‫למחשב אישי מס ומדפסת‪ .‬ג מקר או רמקול המחוברי למחשב ה אמצעי פלט‪.‬‬
‫שאלה ‪1.3‬‬
‫מחשבו נועד לבצע פעולות חשבו‪ .‬מהו אמצעי הקלט למחשבו? מהו אמצעי הפלט למחשבו?‬
‫שאלה ‪1.4‬‬
‫המחשב קולט מידע‪ ,‬מעבד אותו ונות כפלט את תוצאת העיבוד‪ .‬ג מוח האד קולט מידע‪ ,‬מעבד‬
‫אותו ופולט את תוצאת העיבוד‪.‬‬
‫א‪ .‬הביאו דוגמאות לאיברי קולטי מידע ולאיברי פולטי מידע בגו האד‪.‬‬
‫ב‪ .‬הביאו דוגמאות למידע השמור בזיכרו האד‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-15-‬‬
‫מדעי המחשב‬
‫‪ 1.3‬תוכנה‬
‫תוכנה היא אוס תוכניות מחשב‪ .‬תוכניות מחשב מנחות את העיבוד המתבצע על ידי החומרה‪.‬‬
‫קיימות תוכניות לביצוע חישובי מתמטיי‪ ,‬לניהול מאגרי מידע‪ ,‬לבקרה על תהליכי‪ ,‬להדמיית‬
‫מערכות‪ ,‬לעיבוד תמלילי‪ ,‬למשחקי וליישומי שוני ורבי נוספי‪.‬‬
‫בנוס לתוכניות המיועדות ליישומי שוני‪ ,‬ישנה בכל מחשב תוכנית מיוחדת הנקראת מערכת‬
‫הפעלה‪ ,‬ומהווה את הקשר בי התוכנה לחומרה‪:‬‬
‫מערכת הפעלה‬
‫היא תוכנית המנהלת את שאר התוכניות ומקצה לשימוש את משאבי החומרה‬
‫השוני )יע"מ‪ ,‬זיכרו‪ ,‬אמצעי קלט ואמצעי פלט(‪.‬‬
‫כל תוכנית מחשב )או בקיצור‪ ,‬תוכנית( נכתבת על ידי מתכנת‪ ,‬בשפת תכנות‪ .‬נסביר את שני המושגי‬
‫האלה‪:‬‬
‫שפת תכנות‬
‫)‪ (programming language‬היא למעשה אוס של כל הכללי הקובעי כיצד‬
‫נכתבות ההוראות בתוכנית מחשב‪ ,‬ומה המשמעות של כל הוראה‪.‬‬
‫מתכנת‬
‫)‪ (programmer‬הוא אד הכותב תוכניות בשפת מחשב‪ .‬עבודתו של מתכנת – תהלי‬
‫התכנות – כולל ניתוח של משימות המיועדות לביצוע במחשב‪ ,‬כתיבת מתכו לביצוע המשימה‪,‬‬
‫ויישומו של המתכו בשפת מחשב‪.‬‬
‫כזכור‪ ,‬הפעולות המתבצעות ביחידת העיבוד המרכזית ה פעולות על סיביות‪ .‬לכ‪ ,‬בעצ‪ ,‬השפה‬
‫שבאמצעותה נית לתקשר ע מחשב‪ ,‬או השפה שבה נית לתת לו הוראות שיוכל ל"הבי"‪ ,‬צריכה‬
‫להיות שפה מאוד פשוטה‪ ,‬הכוללת הוראות לביצוע פעולות על סיביות‪ .‬שפה כזאת נקראת שפת‬
‫מכונה‪:‬‬
‫שפת מכונה‬
‫)‪ (machine language‬היא שפת תכנות הכוללת הוראות לביצוע פעולות פשוטות‬
‫מאוד‪ .‬כל הוראה בשפת מכונה מורה על ביצוע פעולות על סדרות של סיביות )למשל‪ ,‬חיבור שתי‬
‫סדרות(‪ .‬למעשה‪ ,‬ג ההוראות של שפת מכונה נכתבות בקוד המבוסס על סיביות‪ ,‬ולכ תוכנית בשפת‬
‫מכונה היא בעצ סידרה ארוכה של סיביות‪ ,‬כלומר‪ ,‬רצ ארו של ‪ 0‬ו&‪.1‬‬
‫לכל סוג מחשב שפת מכונה משלו‪.‬‬
‫התוכניות הראשונות שנכתבו עבור מחשבי )בסו שנות ה&‪ 40‬של המאה העשרי( נכתבו בשפת‬
‫מכונה‪ .‬תהלי הכתיבה של תוכניות אלו היה מסורבל מאוד ולא נוח‪ ,‬בגלל החסרונות הרבי שיש‬
‫לכתיבה בשפת מכונה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-16-‬‬
‫מדעי המחשב‬
‫?‬
‫מה החסרונות של כתיבה בשפת מכונה ?‬
‫♦ מאחר שתוכנית בשפת מכונה היא רצ ארו של ‪ 0‬ו&‪ ,1‬קשה מאוד לכתוב אותה וקשה עוד יותר‬
‫לקרוא אותה‪ ,‬לעקוב אחר מהל ביצועה ולהבי את מטרתה‪ .‬חשוב להבי שתהלי התכנות לא‬
‫מסתיי בדר כלל ע כתיבת התוכנית‪ :‬לעיתי מתגלות שגיאות בתוכנית וצרי לתקנה‪ ,‬לפעמי‬
‫צרי לעדכ אותה כדי להתאימה לדרישות חדשות של המשימה שהיא מבצעת‪ .‬לא תמיד‬
‫התיקוני והעדכוני מתבצעי על ידי הכותב המקורי‪ ,‬ולכ לנוחות הקריאה וההבנה של תוכנית‬
‫נתונה יש חשיבות רבה‪.‬‬
‫♦ לכל סוג מחשב יש שפת מכונה שמתאימה בדר כלל רק לו‪ .‬לכ לא נית לקחת תוכנית שנכתבה‬
‫בשפת מכונה של מחשב מסוג אחד‪ ,‬ולבצע אותה כמו שהיא במחשב מסוג אחר‪ .‬מעבר בי סוגי‬
‫מחשבי דורש כתיבה מחודשת של התוכנית‪.‬‬
‫חסרונות אלה הביאו לפיתוח של שפות נוחות יותר לכתיבה‪ ,‬קריאה ושימוש‪ .‬שפות כאלו פותחו החל‬
‫מאמצע שנות ה&‪ 50‬של המאה העשרי‪ ,‬וה נקראות שפות עיליות‪ .‬ביניה‪ ,‬למשל‪ ,‬השפות פסקל‬
‫)‪ ,(pascal‬ג'אווה )‪ ,(Java‬ו&‪.C‬‬
‫שפה עילית‬
‫)‪ (high level language‬היא שפת תכנות‪ ,‬אשר ההוראות בה דומות למשפטי בשפה‬
‫טבעית )כמו אנגלית( או לנוסחאות מתמטיות‪ .‬למרות הדמיו לשפה טבעית‪ ,‬ההוראות אינ נכתבות‬
‫בכתיבה חופשית‪ ,‬אלא על פי כללי מוגדרי‪ ,‬שנקראי כללי התחביר‬
‫?‬
‫)‪ (syntax‬של השפה‪.‬‬
‫א המחשב "מבי" רק שפת מכונה‪ ,‬כיצד נית לגרו לו ל"הבי" תוכנית הכתובה בשפה עילית?‬
‫תוכנית הכתובה בשפה עילית עוברת תהלי של תרגו לשפת מכונה‪ .‬התרגו מתבצע על ידי תוכנית‬
‫מחשב מיוחדת‪ ,‬הנקראת מהדר‪:‬‬
‫מהדר )‪ (compiler‬היא תוכנית המתרגמת משפה עילית לשפת מכונה‪ .‬תהלי התרגו נקרא הידור‬
‫או‬
‫קומפילציה‬
‫)‪ .(compilation‬הקלט של המהדר הוא תוכנית בשפה עילית והפלט שלו הוא‬
‫תוכנית בשפת מכונה‪ ,‬שהיא התרגו של תוכנית הקלט‪.‬‬
‫א כ‪ ,‬כדי לבצע תוכנית מחשב הכתובה בשפה עילית צריכי להתבצע שני שלבי‪ .‬קוד כל מתבצע‬
‫שלב ההידור‪ ,‬במהלכו התוכנית בשפה העילית עוברת תרגו לתוכנית בשפת מכונה‪ .‬רק אחר כ יכול‬
‫להתבצע שלב ההרצה‪ ,‬במהלכו מתבצעת המשימה עצמה‪ ,‬כלומר‪ ,‬המחשב מבצע את ההוראות‬
‫הכתובות בשפת מכונה‪ ,‬ונות את תוצאת העיבוד כפלט‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-17-‬‬
‫מדעי המחשב‬
‫לכל זוג של שפה עילית ושפת מכונה דרוש מהדר נפרד שיבצע את התרגו ביניה‪ .‬א בכוונתנו לבצע‬
‫במחשב מסוי תוכניות הכתובות בכמה שפות עיליות‪ ,‬עלינו לדאוג שבמחשב יהיה מותק מהדר‬
‫מתאי לכל אחת מהשפות העיליות האלו‪ .‬ג ההיפ נכו‪ :‬א בכוונתנו לבצע תוכניות בשפה עילית‬
‫מסוימת בכמה מחשבי מסוגי שוני‪ ,‬עלינו לדאוג שיהיו ברשותנו מהדר עבור כל סוג מחשב‪ .‬איור‬
‫‪ 1.2‬מדגי את הקשרי האלה‪:‬‬
‫מחשב א‬
‫תוכנית‬
‫בשפת מכונה‬
‫של מחשב א‬
‫מהדר א‬
‫תוכנית בשפה‬
‫עילית‬
‫מחשב ב‬
‫תוכנית‬
‫בשפת מכונה‬
‫של מחשב ב‬
‫מהדר ב‬
‫איור ‪ – 1.2‬הידור של תוכנית בשפה עילית במחשבים מסוגים שונים‬
‫א כ‪ ,‬שפה עילית איננה רק יותר נוחה לקריאה ולכתיבה‪ ,‬אלא היא ג מגשרת על פני ההבדלי בי‬
‫סוגי שוני של מחשבי‪ .‬בעזרת מהדר מתאי נית לתרג כל תוכנית בשפה עילית לתוכנית בשפת‬
‫מכונה של מחשב זה או אחר‪.‬‬
‫תהלי ההידור מורכב משני שלבי‪:‬‬
‫‪ .1‬בדיקת תחביר התוכנית בשפה העילית‬
‫‪ .2‬תרגו התוכנית בשפה העילית לתוכנית בשפת מכונה‪.‬‬
‫בשלב ‪ ,1‬נערכת בדיקה כי התוכנית בשפה העילית עומדת בכללי התחביר של השפה בה נכתבה‪ .‬א‬
‫כתיבת התוכנית לא נעשתה בהתא לכללי התחביר‪ ,‬יש בה שגיאות תחביר )‪ .(syntax errors‬הפלט‬
‫של המהדר אחרי שלב ‪ 1‬הוא פירוט שגיאות התחביר שמצא‪ .‬לפני שנית יהיה לתרג את התוכנית יש‬
‫לתק את כל שגיאות התחביר שבה‪ ,‬כלומר‪ ,‬לעבור בהצלחה את שלב ‪ .1‬למשל‪ ,‬תוכנית בשפת ‪Java‬‬
‫חייבת להכיל בתוכה לפחות פע אחת את המילה ‪ .class‬א ננסה לתרג תוכנית בשפת ‪Java‬‬
‫שאינה מכילה את המילה ‪ class‬המהדר יודיע על שגיאת תחביר‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-18-‬‬
‫מדעי המחשב‬
‫כאשר שלב ‪ 1‬מסתיי בהצלחה‪ ,‬ואי בתוכנית שגיאות תחביר‪ ,‬מתבצע השלב השני בו התוכנית‬
‫מיתרגמת לשפת מכונה‪ ,‬ומתקבלת תוכנית שיכולה להתבצע )לרו ( במחשב‪.‬‬
‫ג במהל הריצה של התוכנית עלולות להתגלות שגיאות שיגרמו לעצירת הריצה לפני סיומה המיועד‪,‬‬
‫או להודעות שגיאה‪ .‬אלו ה שגיאות ריצה )‪ ,(run-time errors‬שאינ יכולות להתגלות בזמ ההידור‪.‬‬
‫למשל‪ ,‬הניסיו לחלק ער השמור בזיכרו המחשב ב&‪ 0‬יגרו לשגיאת ריצה ולהדפסת הודעה‬
‫מתאימה‪.‬‬
‫תהלי איתור שגיאות ריצה ותיקונ נקרא ניפוי )‪ .(debugging‬מקורו של המונח באנגלית בשלבי‬
‫המוקדמי של שימוש במחשבי‪ ,‬כאשר מחשבי היו כה גדולי עד כי מחשב אחד מילא אול של‪.‬‬
‫מחשב מסוי חדל לפעול‪ ,‬ולאחר זמ התגלה בי רכיביו חרק גדול שנתקע ש והפריע לפעולתו‬
‫התקינה של המחשב‪ .‬מאז נוהגי לקרוא לשגיאה בתוכנית באג )‪ – bug‬חרק באנגלית(‪.‬‬
‫מאז תחילת פיתוח השפות העיליות‪ ,‬באמצע שנות ה&‪ 50‬של המאה העשרי‪ ,‬פותח מספר גדול מאוד‬
‫של שפות‪ .‬עובדה זו מעוררת את השאלות הבאות‪:‬‬
‫♦ מדוע יש צור בכל כ הרבה שפות?‬
‫♦ הא לא עדיפה שפה אחת אחידה שבה ייכתבו כל התוכניות‪ ,‬ואשר אותה יוכל כל אחד ללמוד‬
‫בקלות?‬
‫♦ מה מבדיל בי השפות השונות?‬
‫♦ מי משתמש באילו שפות ולאילו מטרות?‬
‫לריבוי השפות שתי סיבות עיקריות‪ .‬סיבה אחת קשורה להתפתחות שפות תכנות כתגובה לצרכי‬
‫המתעוררי בשטחי חדשי ושוני של יישומי‪ .‬לכל שפה מאפייני ייחודיי משלה‪ :‬יש שפות‬
‫המיועדות בעיקר לחישובי מדעיי‪ ,‬יש אחרות המתאימות יותר לעיבוד נתוני מנהלי )הפקת‬
‫משכורות‪ ,‬הנהלת חשבונות וכו'(‪ .‬הסיבה השנייה היא התקדמות המחקר המדעי העוסק בשפות תכנות‬
‫ומסייע בשיפור השפות‪.‬‬
‫את שפות התכנות נית לחלק לקבוצות על פי העקרונות המנחי את הכתיבה בשפות אלו‪ .‬בספר זה‬
‫ללימוד היחידה "יסודות מדעי המחשב ‪ "1‬נשתמש בשפת ‪ ,Java‬השייכת לקבוצת השפות הקרויות‬
‫מונחות עצמי )‪ .(object oriented‬קבוצות אחרות‪ ,‬אליה לא נתייחס ביחידה זו‪ ,‬ה קבוצת השפות‬
‫הפרוצדורליות )כמו פסקל או ‪ ,(C‬קבוצת השפות הפונקציונליות )כמו ‪ (scheme‬וקבוצת השפות‬
‫הלוגיות )כמו פרולוג(‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-19-‬‬
‫מדעי המחשב‬
‫‪ 1.4‬התפתחות המחשבים ומדעי המחשב‬
‫ההתפתחות הקשורה למחשבי נעשתה בשני מסלולי‪ :‬ההתפתחות ההנדסית והטכנולוגית שאפשרה‬
‫בניית מחשבי יותר ויותר משוכללי‪ ,‬וההתפתחות המדעית שניסתה להתמודד בצורה מדויקת‪,‬‬
‫אפילו פורמלית לעיתי‪ ,‬ע שאלות הקשורות לפתרו בעיות באמצעות מחשב‪ .‬בסעי זה ננסה לתת‬
‫סקירה קצרה של שני מסלולי ההתפתחות‪ ,‬שכמוב אינ מנותקי זה מזה‪.‬‬
‫התפתחות הנדסית וטכנולוגית – חומרה‬
‫ציו דר חשוב בהתפתחות ההנדסית הוא באמצע המאה ה&‪ .17‬אז פיתח המתמטיקאי הצרפתי בלייז‬
‫פסקל )‪ ,(Pascal‬שעל שמו נקראת שפת התכנות פסקל‪ ,‬מכונת חיבור וחיסור‪ .‬את המכונה בנה עבור‬
‫אביו‪ ,‬כדי לסכ סכומי כס לצור גביית מיסי‪ .‬פסקל בנה את המכונה כדי לעזור לאנשי שביצעו‬
‫בדר כלל את החישובי הדרושי‪ ,‬ובמיוחד כדי להקטי את מספר הטעויות שנגרמו על ידי‬
‫החישובי האנושיי‪ .‬המכונה של פסקל מהווה ציו דר חשוב משו שזו הייתה הפע הראשונה בה‬
‫שולב מרכיב אוטומטי‪ ,‬באמצעות מכונה‪ ,‬בפעולת חישוב‪.‬‬
‫המכונה של פסקל זכתה לשיפורי כמה עשרות שני מאחור יותר‪ .‬המדע הגרמני וילהל לייבני‬
‫)‪ (Leibnitz‬בנה א הוא מכונת חישוב‪ .‬הוא העתיק את מנגנוני החיבור והחיסור של מכונתו מהמכונה‬
‫של פסקל‪ ,‬א הוסי ג חלק שמבצע כפל וחילוק‪ .‬לייבני בנה את המכונה שלו משו שלטענתו המדע‬
‫אמנ לא יכול להתקיי ללא חישוב‪ ,‬א חישוב הוא פעולה חוזרת על עצמה‪ ,‬משעממת ולא יצירתית‪,‬‬
‫וצרי להעבירה לביצוע של מכונות‪.‬‬
‫בתחילת המאה ה&‪ ,19‬ב&‪ ,1801‬פיתח ג הצרפתי ז'וז' ז'אקאר )‪ (Jacquard‬מכונה לביצוע אוטומטי‬
‫של משימות‪ .‬בניגוד למכונות של פסקל ולייבני אלו לא היו משימות חישוב מספריות‪ ,‬אלא משימות‬
‫אריגה‪ .‬מכונתו של ז'אקאר היתה למעשה נול אריגה מתוחכ‪ ,‬שיכול היה לארוג במגוו של דוגמאות‪.‬‬
‫הדוגמאות השונות תוארו על ידי כרטיסי מנוקבי‪ ,‬לכל דוגמת אריגה תבנית ניקובי משלה‪ ,‬ומנגנו‬
‫בקרה מיוחד בתו המכונה חש את הנקבי בכרטיס‪ ,‬ובהתא לכ פיקח על פעולות המכונה‪ ,‬כגו‬
‫בחירת חוטי‪.‬‬
‫התכנו של מה שנחשב היו המחשב הראשו הגיע כשלושי שנה מאוחר יותר‪ .‬ב&‪ ,1833‬תוכננה‬
‫לראשונה מכונה כללית יותר‪ ,‬שיכולה לבצע משימות מסוגי שוני‪ .‬המתמטיקאי האנגלי צ'רלס בבג'‬
‫)‪ (babbage‬תכנ את "המכונה האנליטית" שלו‪ ,‬מכונה שהיתה אמורה לבצע תוכניות שונות מסוגי‬
‫שוני‪ ,‬למטרות שונות‪ .‬התוכניות היו אמורות להיות מקודדות‪ ,‬בדומה למכונה של ז'אקאר‪ ,‬בעזרת‬
‫כרטיסי מנוקבי‪ .‬התכנו של בבג'‪ ,‬שכלל צירי‪ ,‬ידיות‪ ,‬גלגלי שיניי ורכיבי מכניי אחרי‪ ,‬לא‬
‫מומש א פע‪ .‬בניית חלקי המכונה דרשה דיוק טכני רב מדי‪ ,‬שלא נית היה להשגה באותו זמ‪ .‬אבל‪,‬‬
‫למרות שלא נבנתה‪ ,‬המכונה האנליטית היא בעלת חשיבות גדולה‪ .‬למעשה‪ ,‬הרעיונות הגלומי בה ה‬
‫הבסיס למבנה המחשבי של ימינו ולאופ פעולת‪ .‬בעצ‪ ,‬אפילו נכתבה אז תוכנית עבור המכונה‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-20-‬‬
‫מדעי המחשב‬
‫הלא&בנויה‪ ,‬תוכנית הראויה בהחלט להיחשב כתוכנית המחשב הראשונה בהיסטוריה! את התוכנית‬
‫כתבה עדה לאבלייס )‪ (Lovlace‬שעל שמה נקראת שפת ‪.Ada‬‬
‫לאחר מותו של בבג' מרכז הפעילות בבניית מכונות חישוב נדד לארצות הברית‪ .‬העיסוק המוגבר בכ‬
‫בארצות הברית נבע בי השאר מהצור שהתעורר מהשטח‪ :‬ב&‪ 1880‬נער בארצות הברית מפקד‬
‫אוכלוסי‪ ,‬המפקד הבא נועד ל&‪ ,1890‬וב&‪ ,1886‬ארבע שני לפני המפקד הבא‪ ,‬ושש שני אחרי המפקד‬
‫הקוד‪ ,‬עדיי לא סיימו לסכ את תוצאותיו‪ ,‬ומועד סיו הסיכו לא נראה באופק‪ ...‬הרמ הולרית‬
‫)‪ ,(Hollerith‬מהנדס שעבד כפקיד בלשכת מפקד התושבי‪ ,‬גילה יוזמה וב&‪ 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‬של המאה העשרי הוחלפו‬
‫שפופרות הריק בטרנזיסטורי‪ ,‬ושינוי זה הביא להקטנה במימדי המחשבי‪ ,‬להקטנה בצריכת‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-21-‬‬
‫מדעי המחשב‬
‫ההספק החשמלי שלה‪ ,‬ולהגדלה במהירות פעולת‪ .‬בנוס למחשבי הגדולי )‪ (mainframes‬שהיו‬
‫עד אז‪ ,‬נבנו ג מחשבי בינוניי )שגודל כגודל כוננית ספרי( שנקראו מחשבי מידי ומחשבי מיני‬
‫)‪ .(midi/mini computers‬זמ לא רב אחר&כ קטנו המחשבי א יותר‪ :‬בסו שנות ה&‪ 60‬ובתחילת‬
‫שנות ה&‪ 70‬פותחה טכנולוגיית המעגל המשולב )‪ (integrated circuit‬ובעקבות כ ירד מחיר‬
‫המחשבי‪ ,‬מהירות עלתה ונבנו אפילו מחשבי זעירי‪ ,‬שגודל לא עלה על גודל קופסת גפרורי –‬
‫המיקרו&מחשבי )‪ .(micro computers‬משו שהיו כה קטני וזולי יחסית‪ ,‬החלו להשתמש בה‬
‫הרבה‪ ,‬לצרכי מגווני‪ ,‬למשל כבקרי במערכות אלקטרוניות שונות‪ .‬המחשב האישי‪ ,‬המוכר לנו‬
‫היו‪ ,‬נבנה לראשונה בסו שנות ה&‪ 70‬והוא היה מבוסס על מיקרו&מחשב‪ .‬קפיצת הדר הזאת‪,‬‬
‫שנעשתה במש תקופה קצרה יחסית‪ ,‬היא כמעט בלתי נתפסת‪ :‬היו יש מיקרו מחשבי שכושר‬
‫העיבוד שלה עולה בהרבה על זה של אות מחשבי הענק הראשוני‪.‬‬
‫התפתחות הנדסית וטכנולוגית – תוכנה‬
‫במקביל להתפתחות הטכנולוגית של החומרה‪ ,‬המכונות עצמ‪ ,‬חלה התפתחות ג בתחו התוכנה‪.‬‬
‫המחשבי הראשוני תוכנתו בשפת מכונה‪ .‬כפי שהזכרנו‪ ,‬כתיבת תוכניות כאלו הייתה כרוכה באי&‬
‫נוחות רבה‪ .‬אי&נוחות זו הביאה באמצע שנות ה&‪ 50‬לפיתוחה של שפת התכנות העילית הראשונה‪,‬‬
‫פורטר )‪ .(Fortran‬משו שבאותה תקופה הייתה עלייה בביקוש לתוכניות מחשב המבצעות חישובי‬
‫מתמטיי‪ ,‬פורטר הותאמה לכתיבה של חישובי כאלה‪ .‬אבל היא לא הייתה נוחה לכתיבת תוכניות‬
‫לניהול מאגרי מידע )ניהול כוח אד‪ ,‬ניהול מלאי וכו'(‪ ,‬ומשו כ פותחה בעקבותיה‪ ,‬בתחילת שנות‬
‫ה&‪ ,60‬שפת קובול )‪ .(Cobol‬באותה תקופה פותחה שפה נוספת‪ ,‬ליספ )‪ (Lisp‬שהתאימה לצרכי‬
‫אחרי‪ .‬ממנה נגזרה מאוחר יותר שפת לוגו )‪ (LOGO‬המשמשת בדר כלל לשפה לימודית‪ ,‬לפיתוח‬
‫הרגלי חשיבה בפתרו בעיות‪.‬‬
‫מאז פותחו שפות עיליות רבות לצרכי שוני ומגווני‪ .‬למשל‪ ,‬שפת בייסיק )‪ (Basic‬פותחה באמצע‬
‫שנות ה&‪ ,60‬למטרות לימודיות‪ .‬פסקל )‪ (Pascal‬פותחה א היא כשפה לימודית‪ ,‬בתחילת שנות ה&‪,70‬‬
‫ובאותה תקופה פותחה ג שפת ‪ ,C‬שנועדה לכתיבת מערכות הפעלה‪ .‬ב&‪ 1970‬פותחה שפת פרולוג‬
‫)‪ (PROLOG‬שגישת התכנות בה מבוססת על כללי לוגיי‪ .‬ע עליית הצור בכתיבת תוכניות גדולות‬
‫מאוד ומורכבות מאוד‪ ,‬פותחו בשנות ה&‪ 80‬שפות שנועדו במיוחד לפיתוח תוכניות גדולות‪ ,‬כגו‬
‫‪ Modula‬ו&‪ .Ada‬בעקבותיה פותחו שפות נוספות שהתמקדו בפיתוח תוכניות גדולות‪ ,‬והתבססו על‬
‫מה שקרוי תכנות מונחה&עצמי‪ .‬בי אלו נית למצוא את ‪ Eiffel ,Ada95 ,SmallTalk ,C++‬ו&‪.Java‬‬
‫התפתחות מדעית‬
‫כאמור‪ ,‬במקביל להתפתחות ההנדסית והטכנולוגית‪ ,‬ה בתחו החומרה וה בתחו התוכנה‪ ,‬חלה ג‬
‫התפתחות מדעית‪ .‬החל באמצע שנות ה&‪ 30‬של המאה העשרי )עוד לפני שנבנה המחשב הראשו!(‪,‬‬
‫נעשתה עבודה תיאורטית חשובה‪ ,‬שהניחה את הבסיס לתחו המדעי הקרוי היו מדעי המחשב‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-22-‬‬
‫מדעי המחשב‬
‫עבודה זו נעשתה על ידי מתמטיקאי‪ ,‬שניסו להגדיר בצורה מתמטית מהו תהלי של חישוב‪ ,‬ולנתח‬
‫בצורה מתמטית‪ ,‬פורמלית ומדוייקת‪ ,‬את מגבלותיה של תהליכי חישוב‪ ,‬ובפרט את מגבלותיה של‬
‫מכונות המבצעות תהליכי חישוב‪ .‬בי המתמטיקאי האלה נית למנות את אל טיורינג )‪(Turing‬‬
‫האנגלי‪ ,‬שהיה מעורב מאוחר יותר בפרוייקט האניגמה‪ ,‬את קורט גדל )‪ (Gödel‬הגרמני‪ ,‬אנדריי מרקוב‬
‫)‪ (Markov‬הרוסי‪ ,‬והאמריקניי אלונזו צ'ר ' )‪ ,(Church‬אמיל פוסט )‪ (Post‬וסטיב קלי )‪.(Kleene‬‬
‫חוקרי אלה ידעו להצביע כבר אז על כ שיש בעיות חישוביות שלא יצליחו לעול להיפתר על ידי‬
‫מכונה חישובית‪ ,‬וזאת‪ ,‬כאמור‪ ,‬עוד לפני שנבנה המחשב הראשו‪.‬‬
‫מאז חלה התפתחות מדעית עצומה‪ ,‬כאשר לעיתי ההתפתחויות הטכנולוגיות הניעו וזירזו‬
‫התפתחויות מדעיות ולעית דווקא ההתפתחויות המדעיות גרמו להתפתחות טכנולוגית‪ .‬כיו קיימת‬
‫מחלקה למדעי המחשב כמעט בכל מוסד אקדמי‪ ,‬והפעילות המחקרית במדעי המחשב היא רבה‬
‫ומגוונת‪ :‬תורת החישוביות העוסקת באיפיו של בעיות שניתנות או לא ניתנות לפתרו; תורת‬
‫הסיבוכיות העוסקת באיפיו של בעיות על פי כמות המשאבי )זמ וזיכרו( הנדרשי לפתרונ;‬
‫קריפטוגרפיה העוסקת בהצפנות מסוגי שוני; חישוב מקבילי ומבוזר‪ ,‬העוסק בפתרו בעיות שנועדו‬
‫להתבצע במערכות בה כמה מחשבי עובדי ביחד לפתרו משימה אחת; תורת התקשורת העוסקת‬
‫באיפיוני של רשתות תקשורת )כמו האינטרנט( ופתרו בעיות הקשורות לרשתות תקשורת; בינה‬
‫מלאכותית העוסקת במערכות שנועדו לדמות פעילות אנושית‪ ,‬ועוד תחומי רבי נוספי‪.‬‬
‫במסגרת לימודי מדעי המחשב בבית הספר התיכו נית כמוב להציג רק מקצת מתחומי הפעילות‬
‫השוני במדעי המחשב‪ .‬בכל זאת תוכנית הלימודי התיכונית במדעי המחשב נוגעת במגוו רחב למדי‬
‫של נושאי‪ ,‬ג בחלק מאלה שהוזכרו לעיל‪.‬‬
‫סיכום‬
‫בפרק זה תיארנו בקצרה מהו מחשב‪ ,‬מה היחידות הבסיסיות מה הוא בנוי‪ ,‬וכיצד נכתבות‬
‫ומתבצעות תוכניות מחשב‪ .‬תיארנו ג את ההתפתחות ההנדסית והטכנולוגית של המחשבי‬
‫וההתפתחות המדעית של תחו מדעי המחשב‪.‬‬
‫מחשב הוא מכונה אלקטרונית הקולטת נתוני‪ ,‬מעבדת אות ופולטת מידע שנוצר בתהלי העיבוד‪.‬‬
‫הנתוני שקולט המחשב נקראי קלט‪.‬‬
‫המידע שפולט המחשב נקרא פלט‪.‬‬
‫העיבוד המבוצע במחשב מונחה על ידי קבוצת הוראות הנקראת תוכנית מחשב‪.‬‬
‫הרכיבי הפיסיי של המחשב נקראי חומרה ואוס תוכניות המחשב נקרא תוכנה‪ .‬החומרה‬
‫מחולקת לכמה רכיבי בסיסיי‪ :‬יחידת עיבוד מרכזי‪ ,‬זיכרו‪ ,‬אמצעי קלט ואמצעי פלט‪ .‬תוכנה של‬
‫מחשב כוללת בי השאר את מערכת ההפעלה‪ ,‬המהדרי ותוכניות ליישומי שוני‪.‬‬
‫יחידת העיבוד המרכזית מנהלת את כל התהליכי המתבצעי במחשב‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-23-‬‬
‫מדעי המחשב‬
‫הזיכרו שומר מידע‪ ,‬תוכניות‪ ,‬ותוצאות ביניי של תהליכי עיבוד‪ .‬הזיכרו מתחלק לזיכרו משני‬
‫וזיכרו ראשי‪ .‬המידע השמור בזיכרו מיוצג באמצעות סיביות )סיבית – אחת מ הספרות ‪ 0‬או ‪.(1‬‬
‫אמצעי הקלט אחראי על קליטת נתוני ואמצעי הפלט אחראי על פליטת מידע‪.‬‬
‫תוכנית מחשב נכתבת על ידי מתכנת בשפת תכנות‪ .‬לשפת תכנות כללי המכתיבי את אופ כתיבת‬
‫ההוראות בתוכנית‪ .‬כיו נכתבות תוכניות מחשב בשפה עילית‪.‬‬
‫בשפה עילית המשפטי דומי למשפטי בשפה טבעית‪ ,‬כמו אנגלית‪ .‬שפת מכונה היא השפה אותה‬
‫"מבי" המחשב‪ ,‬וההוראות בה מקודדות על ידי סיביות‪.‬‬
‫לפני ביצוע תוכנית בשפה עילית עליה לעבור שני שלבי‪ :‬הידור והרצה‪ .‬הידור )קומפילציה( הוא‬
‫התהלי של תרגו תוכנית בשפה עילית לשפת מכונה‪ .‬תהלי זה מתבצע על ידי מהדר )קומפיילר(‪.‬‬
‫שגיאות תחביר מתגלות בשלב ההידור‪ .‬שגיאות ריצה מתגלות בזמ ההרצה‪ .‬תהלי איתור שגיאות‬
‫ריצה ותיקונ נקרא ניפוי שגיאות‪.‬‬
‫שאלות נוספות‬
‫‪ .1‬מדוע אי&אפשר לכתוב תוכנית למחשב בשפה טבעית‪ ,‬כמו אנגלית או עברית?‬
‫‪ .2‬מדוע שפת תכנות עילית נקראת בש זה?‬
‫‪ .3‬למה מתכווני כאשר אומרי כי מחשב מבי שפת מכונה?‬
‫‪ .4‬כמה מהדרי דרושי להידור תוכנית בשפת ‪ ,C‬תוכנית בשפת פסקל‪ ,‬ותוכנית בשפת בייסיק‬
‫בשלושה מחשבי מסוגי שוני?‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-24-‬‬
‫מדעי המחשב‬
‫פרק ‪ – 2‬פתרו בעיות אלגוריתמיות‬
‫פרק זה עור הכרה ע הנושא שבו נעסוק למעשה‪ ,‬במהל כל לימוד היחידה‪ :‬פתרו בעיות‬
‫אלגוריתמיות‪ .‬נכיר את מושג האלגורית‪ ,‬מושג מרכזי וחשוב במדעי המחשב‪ ,‬שמשמעותו למעשה‬
‫פתרו לבעיה‪ ,‬פתרו שאפשר אחר כ לתרגמו לתוכנית מחשב‪ .‬לאחר מכ נערו היכרות ראשונית ע‬
‫מושג התבנית‪ .‬ג תבנית היא אלגורית‪ ,‬כלומר‪ ,‬פתרו לבעיה‪ ,‬א היא יכולה ג לשמש כתתפתרו‬
‫בבעיות רבות בעלות מאפייני משותפי‪.‬‬
‫‪ 2.1‬אלגוריתמים‬
‫המושג אלגורית‪ ,‬שבו נתמקד בפרק זה‪ ,‬הוא מושג מרכזי במדעי המחשב‪ .‬בפרק זה נכיר ונפתח‬
‫אלגוריתמי ראשוני‪ ,‬אשר אינ מיועדי לביצוע במחשב‪ .‬בפרק הבא‪ ,‬ובפרקי הבאי אחריו‬
‫נפתח אלגוריתמי המיועדי ליישו על ידי תוכניות מחשב‪ ,‬לביצוע במחשב‪.‬‬
‫קבוצת ההוראות שבדוגמה הבאה היא אלגורית‪:‬‬
‫‪íéî úåñåë øùò çúøä .1‬‬
‫‪çìî èøå÷ óñåä .2‬‬
‫‪íéçúåøä íéîì íéúéúô åìé÷ éöç óñåä .3‬‬
‫‪úôñåð äçéúøì íéîä úà àáä .4‬‬
‫‪äðè÷ ùà ìò úå÷ã 20 êùîì íéúéúôä úà ìùá .5‬‬
‫‪íéúéúôä úà ïðñ .6‬‬
‫האלגורית שבדוגמה זו הוא מתכו לבישול חצי קילו פתיתי‪.‬‬
‫הנה דוגמה נוספת לאלגורית‪:‬‬
‫‪éáåéç íìù øôñî øçá .1‬‬
‫‪øôñîä úåøôñ úà øáç .2‬‬
‫‪3-á äàöåúä úà ÷ìç .3‬‬
‫‪ä÷åìçä úéøàù úà áåúë .4‬‬
‫שאלה ‪2.1‬‬
‫מהי תוצאת ביצוע האלגורית שלעיל עבור המספר ‪?1977‬‬
‫באופ כללי‪ ,‬נית לומר כי אלגורית הוא מתכו‪ ,‬א לאו דווקא לבישול‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-25-‬‬
‫מדעי המחשב‬
‫אלגורית‬
‫הוא מתכו לביצוע משימה‪ .‬אלגורית מורכב תמיד מקבוצת הוראות חדמשמעיות‬
‫ואפשריות לביצוע‪ ,‬אשר סדר ביצוע מוגדר היטב‪.‬‬
‫המילי המודגשות בהגדרה שלעיל ה שלושת המאפייני חשובי אלה של אלגורית‪ :‬חדמשמעיות‪,‬‬
‫אפשריות לביצוע וסדר מוגדר היטב‪.‬‬
‫חדמשמעיות‪ :‬הוראה המופיעה באלגורית חייבת להיות חדמשמעית‪ .‬כלומר‪ ,‬כל ביצוע שלה צרי‬
‫להסתיי תמיד באותה תוצאה‪ .‬כ‪ ,‬למשל‪ ,‬ההוראה השנייה בדוגמה האחרונה‪úåøôñ úà øáç ,‬‬
‫‪ ,øôñîä‬היא חדמשמעית‪ .‬לעומתה‪ ,‬ההוראה ‪ äãéöä úö÷ æåæ‬אינה חדמשמעית‪ :‬אנשי שוני‬
‫יזוזו לפיה למקומות שוני‪ ,‬וייתכ ג כי אותו אד יזוז לפיה אחרת בפעמי שונות‪.‬‬
‫אפשריות לביצוע‪ :‬הוראה באלגורית צריכה להיות אפשרית לביצוע‪ ,‬ובפרט‪ ,‬עליה להתאי למבצע‬
‫המיועד שלה‪ .‬למשל‪ ,‬טבח יכול לבצע את ההוראה ‪ ,íéî úåñåë 10 çúøä‬א אינו יכול לבצע את‬
‫ההוראה ‪.ñåèîä úà úçðä‬‬
‫סדר ביצוע‪ :‬סדר ביצוע הוראות האלגורית הוא לפי סדר הופעת‪ ,‬א לא נאמר אחרת‪ .‬הביצוע של‬
‫האלגורית מסתיי כאשר אי יותר הוראות‪ .‬למעשה‪ ,‬באופ לא מפורש‪ ,‬כל הוראה מורכבת מהוראה‬
‫לביצוע פעולה ואחריה הנחיה לקידו הביצוע אל ההוראה הבאה או הנחיה לסיו הביצוע‪.‬‬
‫צורת הכתיבה בה אנו כותבי אלגוריתמי נקראת כתיבה בפסאודוקוד‪.‬‬
‫פסאודוקוד‬
‫)קוד‬
‫מדומה‪ (pseudo-code ,‬של אלגורית הוא ייצוג או כתיבה של האלגורית בדר דמוית שפת תכנות‪,‬‬
‫כלומר‪ ,‬במילי ובמשפטי בשפה חופשית‪ ,‬אבל ברורה וחד משמעית‪.‬‬
‫המונח "אלגורית" נגזר‪ ,‬ככל הנראה‪ ,‬משמו של המתמטיקאי מוחמד אלחואריזמי‪ ,‬שהשתבש לאל‬
‫גואריזמי‪ .‬אלחואריזמי חי במאה ה‪ 9‬לספירה‪ ,‬באיזור חואריז‪ ,‬אשר נמצא היו באוזבקיסט‪ .‬אל‬
‫חואריזמי היה הראשו שניסח את הכללי המשמשי אותנו עד היו לביצוע ארבע פעולות החשבו‬
‫הבסיסיות‪ .‬במאה ה‪ 14‬החל המונח "אלגורית" להיות שגור בפי המתמטיקאי‪ ,‬ככינוי ל"מתכו‬
‫מתמטי"‪ .‬מתכוני מתמטיי כאלו ה למשל אלגורית להכפלת שני מספרי )"כפל ארו"(‪,‬‬
‫אלגורית להעלאה בחזקה של מספר אחד באחר‪ ,‬אלגורית למציאת המחלק המשות' הגדול ביותר‬
‫של שני מספרי שלמי חיוביי )האלגורית של אויקלידס(‪.‬‬
‫אנו נתמקד באלגוריתמי כפתרו לבעיות אלגוריתמיות‪:‬‬
‫בעיה אלגוריתמית‬
‫היא בעיה אשר נתונות בה נקודת מוצא ומטרה ונדרש אלגורית המביא‬
‫מנקודת המוצא אל המטרה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-26-‬‬
‫מדעי המחשב‬
‫כלומר‪ ,‬בעיה אלגוריתמית מגדירה למעשה משימה‪ :‬הגעה מנקודת המוצא הנתונה אל המטרה‬
‫הנתונה‪ .‬אלגורית הפותר את הבעיה הוא מתכו לביצוע המשימה הזאת‪ .‬הנה דוגמה לבעיה‬
‫אלגוריתמית‪:‬‬
‫בעיה ‪1‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת בעיה אלגוריתמית ראשונה‪ ,‬ואלגורית לפתרונה‪.‬‬
‫שייט נמצא על גדת נהר ע כרוב‪ ,‬כבש וזאב‪ ,‬ורוצה לעבור לגדה השנייה בעזרת סירה קטנה‪ .‬הסירה‬
‫יכולה להכיל בוזמנית רק את השייט ואחד מבי שלושת הפריטי שאיתו‪ .‬אבל‪ ,‬השייט אינו יכול‬
‫להשאיר את הזאב ואת הכבש ביחד ללא השגחתו‪ ,‬ואינו יכול להשאיר את הכבש והכרוב ביחד ללא‬
‫השגחתו‪.‬‬
‫פתחו אלגורית שינחה את השייט כיצד להעביר את הכבש‪ ,‬הזאב והכרוב מהגדה האחת אל השנייה‪.‬‬
‫בעיה זו מגדירה משימה של מעבר נהר ע אילוצי שוני‪ .‬נקודת המוצא היא המצב שבו השייט‪,‬‬
‫הזאב‪ ,‬הכבש והכרוב נמצאי על גדה אחת )גדה א( של הנהר‪ .‬המטרה היא המצב שבו השייט‪ ,‬הזאב‪,‬‬
‫הכבש והכרוב נמצאי על הגדה השנייה )גדה ב(‪.‬‬
‫נציג אלגורית אשר מורה כיצד לבצע את המשימה המתוארת בבעיה‪ .‬לצד הוראות האלגורית מוצג‬
‫מעקב אחר מהל ביצועו‪.‬‬
‫אלגורית לפתרו בעיה ‪1‬‬
‫גדה א‬
‫)נקודת המוצא(‬
‫גדה ב‬
‫שייט‪ ,‬כרוב‪ ,‬כבש‪ ,‬זאב‬
‫‪ùáëä íò á äãâì à äãâî âìôä .1‬‬
‫כרוב‪ ,‬זאב‬
‫שייט‪ ,‬כבש‬
‫שייט‪ ,‬כרוב‪ ,‬זאב‬
‫כבש‬
‫‪áàæä íò á äãâì à äãâî âìôä .3‬‬
‫כרוב‬
‫שייט‪ ,‬כבש‪ ,‬זאב‬
‫‪ùáëä íò à äãâì á äãâî âìôä .4‬‬
‫שייט‪ ,‬כרוב‪ ,‬כבש‬
‫זאב‬
‫‪áåøëä íò á äãâì à äãâî âìôä .5‬‬
‫כבש‬
‫שייט‪ ,‬כרוב‪ ,‬זאב‬
‫שייט‪ ,‬כבש‬
‫כרוב‪ ,‬זאב‬
‫‪ãáì à äãâì á äãâî âìôä .2‬‬
‫‪ãáì à äãâì á äãâî âìôä .6‬‬
‫‪ùáëä íò á äãâì à äãâî âìôä .7‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫שייט‪ ,‬כרוב‪ ,‬כבש‪ ,‬זאב‬
‫‪-27-‬‬
‫מדעי המחשב‬
‫?‬
‫הא זהו האלגורית היחיד הפותר את בעיה ‪?1‬‬
‫לא‪ .‬למשל‪ ,‬ג האלגורית הבא הוא פתרו לבעיה ‪:1‬‬
‫‪ùáëä íò á äãâì à äãâî âìôä .1‬‬
‫‪ãáì à äãâì á äãâî âìôä .2‬‬
‫‪áåøëä íò á äãâì à äãâî âìôä .3‬‬
‫‪ùáëä íò à äãâì á äãâî âìôä .4‬‬
‫‪áàæä íò á äãâì à äãâî âìôä .5‬‬
‫‪ãáì à äãâì á äãâî âìôä .6‬‬
‫‪ùáëä íò á äãâì à äãâî âìôä .7‬‬
‫שימו ♥‪ :‬במקרי רבי קיי יותר מאלגורית אחד הפותר בעיה אלגוריתמית נתונה‪.‬‬
‫שאלה ‪2.2‬‬
‫עקבו באמצעות טבלה מתאימה אחר מהל ביצוע האלגורית הנוס' לפתרו בעיה ‪.1‬‬
‫סוף פתרון בעיה‬
‫‪1‬‬
‫בעיה ‪ 1‬היא בעיה ספציפית‪ ,‬העוסקת בפריטי מסוימי )כרוב‪ ,‬כבש‪ ,‬זאב(‪ .‬אפשר להרחיב אותה‬
‫לבעיה כללית‪ ,‬בה נתוני שלושה פריטי כלשה‪ ,‬הנמצאי בגדה א‪ ,‬ויש להעביר לגדה ב‪ ,‬תו‬
‫שמירה על האילוצי שבבעיה ‪ .1‬את הבעיה הכללית אפשר לפתור על ידי אות אלגוריתמי‬
‫שפותרי את בעיה ‪ ,1‬א צרי יהיה להחלי' בה כל התייחסות ספציפית לכרוב‪ ,‬כבש וזאב ל"פריט‬
‫‪" ,"1‬פריט ‪" ,"2‬פריט ‪ ,"3‬בהתאמה‪ .‬כ אפשר יהיה להשתמש באותו אלגורית כדי לפתור את הבעיה‬
‫עבור כל שלושה פריטי המתאימי לאילוצי‪ .‬למשל‪ ,‬עבור כלב‪ ,‬חתול ועכבר‪ ,‬או אריה‪ ,‬פרה וחציר‪.‬‬
‫ג במקרה של כלב‪ ,‬חתול ועכבר‪ ,‬לא נית להשאיר את פריט ‪) 1‬כלב( ופריט ‪) 2‬חתול( יחד ללא השגחה‪,‬‬
‫וג לא את פריט ‪) 2‬חתול( ופריט ‪) 3‬עכבר(‪ .‬כ ג לגבי המקרה בו פריט ‪ 1‬הוא אריה‪ ,‬פריט ‪ 2‬הוא פרה‬
‫ופריט ‪ 3‬הוא חציר‪.‬‬
‫במדעי המחשב עוסקי בדר כלל בבעיות אלגוריתמיות‪ ,‬אשר לכל אחת מה אפשרויות רבות של‬
‫נקודת מוצא‪ .‬אלגורית הפותר בעיה אלגוריתמית שלה כמה אפשרויות לנקודת המוצא צרי להיות‬
‫כללי‪ ,‬ולפתור את הבעיה עבור כל האפשרויות של נקודת המוצא‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-28-‬‬
‫מדעי המחשב‬
‫שאלה ‪2.3‬‬
‫על לוח ב חמש משבצות מונחות שתי אבני משחק מצבע אחד ושתי אבני משחק מצבע שני בנקודת‬
‫המוצא הבאה‪:‬‬
‫○ ○‬
‫● ●‬
‫המטרה היא להביא את אבני המשחק למצב‪:‬‬
‫● ●‬
‫○ ○‬
‫הפעולות המותרות ה‪ :‬העברת אב משחק למשבצת סמוכה פנויה‪ ,‬והקפצת אב משחק מצבע אחד‬
‫מעל אב משחק מצבע אחר אל משבצת פנויה‪.‬‬
‫פתחו אלגורית להעברת אבני המשחק מנקודת המוצא אל מצב המטרה‪.‬‬
‫שימו ♥‪ :‬בבעיה זו מספר רב של אפשרויות לנקודת המוצא‪ ,‬כיוו שכל זוג צבעי שוני של אבני‬
‫המשחק מכתיב למעשה אפשרות שונה לנקודת מוצא‪ .‬האלגורית שתפתחו יתאי לכל זוג צבעי‪,‬‬
‫ולכ יהיה כללי‪.‬‬
‫בפתרו בעיה ‪ 1‬פיתחנו אלגורית‪ ,‬אשר בכל ביצוע שלו מבוצעות כל הוראותיו‪ ,‬זו אחר זו‪ ,‬לפי סדר‬
‫הופעת‪ .‬לעיתי יש צור באלגוריתמי אשר בה ביצוע חלק מההוראות הוא מותנה‪ .‬נראה זאת‬
‫בבעיה הבאה‪.‬‬
‫בעיה ‪2‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת אלגורית שבו הוראה לביצוע בתנאי‪.‬‬
‫שני מיכלי‪ ,‬מיכל א ומיכל ב‪ ,‬מכילי מספר שונה של תפוזי‪ .‬סכו מספרי התפוזי בשני המיכלי‬
‫הוא זוגי‪.‬‬
‫פתחו אלגורית להעברת תפוזי בי המיכלי‪ ,‬כ שתתבצע העברה אחת של מספר תפוזי‪ ,‬ולאחר‬
‫ההעברה יכילו המיכלי מספר שווה של תפוזי‪.‬‬
‫שימו ♥‪ :‬ישנ אפשרויות רבות לנקודת המוצא )בהנחה שכל מיכל יכול להכיל מספר גדול של‬
‫תפוזי(‪ ,‬כי ישנ אפשרויות רבות לזוגות מספרי תפוזי שוני זה מזה שסכומ זוגי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-29-‬‬
‫מדעי המחשב‬
‫שאלה ‪2.4‬‬
‫באלגורית לפתרו צרי יהיה לציי כמה תפוזי יש להעביר בי המיכלי כדי שמספרי התפוזי‬
‫בשני המיכלי יהיו שווי‪ .‬לפניכ זוגות של מספרי תפוזי‪ .‬בכל זוג מציי המספר השמאלי את‬
‫מספר התפוזי במיכל א‪ ,‬והמספר הימני מציי את מספר התפוזי במיכל ב‪ .‬עבור כל זוג‪ ,‬חשבו כמה‬
‫תפוזי יש להעביר מהמיכל המלא יותר למיכל הפחות מלא‪.‬‬
‫א‪100 160 .‬‬
‫ב‪971 935 .‬‬
‫ג‪1 1001 .‬‬
‫בעזרת התשובה לשאלה ‪ 2.4‬נית להיווכח שמספר התפוזי להעברה הוא חצי מההפרש בי מספרי‬
‫התפוזי שבמיכלי‪ .‬צרי לחשב מספר זה לפני ביצוע ההעברה‪ ,‬ולכ ההוראה הראשונה באלגורית‬
‫לפתרו הבעיה תהיה‪:‬‬
‫‪íéìëéîáù íéæåôúä éøôñî ïéá ùøôääî éöçë ,äøáòäì íéæåôúä øôñî úà áùç‬‬
‫א במיכל א יש יותר תפוזי‪ ,‬צרי לבצע את ההוראה הבאה‪:‬‬
‫‪áùåçîä øôñîä éô ìò íéæåôú á ìëéîì à ìëéîî øáòä‬‬
‫ואילו א במיכל ב יש יותר תפוזי‪ ,‬צרי לבצע את ההוראה הבאה‪:‬‬
‫‪áùåçîä øôñîä éô ìò íéæåôú à ìëéîì á ìëéîî øáòä‬‬
‫?‬
‫כיצד נבחר איזו משתי ההוראות לבצע?‬
‫בחירת ההוראה המתאימה לביצוע תיקבע על פי תנאי‪ .‬התנאי המתאי הוא‪:‬‬
‫‪á ìëéîá øùàî íéæåôú øúåé à ìëéîá‬‬
‫א התנאי יתקיי‪ ,‬תתבצע ההוראה הראשונה‪ .‬אחרת‪ ,‬תתבצע ההוראה השנייה‪ .‬באלגורית לפתרו‬
‫הבעיה ננסח את ההתניה הזאת על ידי הוראה לביצוע בתנאי‪ ,‬באופ הבא‪:‬‬
‫אלגורית לפתרו בעיה ‪2‬‬
‫‪íéìëéîáù íéæåôúä éøôñî ïéá ùøôääî éöçë ,äøáòäì íéæåôúä øôñî úà áùç .1‬‬
‫‪.2‬‬
‫‪íà‬‬
‫‪á ìëéîá øùàî íéæåôú øúåé à ìëéîá‬‬
‫‪áùåçîä øôñîä éô ìò íéæåôú á ìëéîì à ìëéîî øáòä .2.1‬‬
‫‪.3‬‬
‫‪úøçà‬‬
‫‪áùåçîä øôñîä éô ìò íéæåôú à ìëéîì á ìëéîî øáòä .3.1‬‬
‫סוף פתרון בעיה‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-30-‬‬
‫‪2‬‬
‫מדעי המחשב‬
‫ההוראה‬
‫‪... íà‬‬
‫⋅‬
‫⋅‬
‫⋅‬
‫‪úøçà‬‬
‫⋅‬
‫⋅‬
‫⋅‬
‫היא הוראה לביצוע‬
‫בתנאי‪ ,‬המורה על ביצוע קבוצת הוראות אחת או קבוצת הוראות אחרות‬
‫על פי תנאי‪.‬‬
‫הוראה לביצוע בתנאי היא הוראת בקרה‪ .‬הוראת בקרה‬
‫היא הוראה שמשפיעה על מהל ביצוע‬
‫ההוראות באלגורית‪.‬‬
‫שאלה ‪2.5‬‬
‫על השולח מונחות שלוש מעטפות בשורה‪ ,‬ובכל מעטפה פתק ועליו רשו מספר‪ .‬במעטפה אחת פתק‬
‫שעליו רשו המספר ‪ ,0‬ובשתי המעטפות האחרות פתקי שעליה רשומי מספרי שוני מ‪.0‬‬
‫המעטפה בה נמצא הפתק שעליו רשו ‪ 0‬איננה המעטפה האמצעית בשורה‪.‬‬
‫א‪ .‬ישנ אינסו' אפשרויות לנקודת המוצא‪ ,‬כי על שניי מהפתקי רשומי מספרי כלשה שוני‬
‫מ‪ .0‬תארו חמש אפשרויות שונות של נקודת המוצא‪.‬‬
‫ב‪ .‬פתחו אלגורית שמטרתו היא לשי באמצע‪ ,‬בי שתי המעטפות האחרות‪ ,‬את המעטפה ע הפתק‬
‫שעליו רשו ‪ .0‬הפעולות שבה יש להשתמש לביצוע המשימה ה‪ :‬קריאת המספר הרשו על‬
‫המעטפה‪ ,‬והחלפת מקומות בי מעטפות שכנות‪.‬‬
‫בפתרו בעיה ‪ 2‬ראינו אלגורית שכלל הוראה לביצוע הוראות בתנאי‪ .‬לעיתי יש צור באלגוריתמי‬
‫אשר בה ביצוע חלק מההוראות חוזר כמה פעמי‪ .‬נראה זאת בבעיה הבאה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-31-‬‬
‫מדעי המחשב‬
‫בעיה ‪3‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת אלגורית שבו הוראה לביצוע חוזר‪.‬‬
‫על השולח שורת קלפי‪ .‬בשורה מספר איזוגי של קלפי‪ ,‬והקל' האמצעי הוא לב‪ .‬כל הקלפי‬
‫שמשמאל לקל' הלב שחורי וכל הקלפי שמימינו אדומי‪ .‬נתונות ג שתי סימניות‪ :‬סימניה‪1‬‬
‫המוצבת על הקל' שבקצה השמאלי וסימניה‪ 2‬המוצבת על הקל' שבקצה הימני‪.‬‬
‫פתחו אלגורית אשר מסדר את שורת הקלפי מחדש כ שכל הקלפי האדומי יהיו משמאל לקל'‬
‫הלב וכל השחורי מימינו‪.‬‬
‫הפעולות המותרות לביצוע ה‪:‬‬
‫♦ הצבת סימניה מימי או משמאל לקל' שעליו היא מוצבת‪ .‬הצבת סימניה כוללת קריאת צבע הקל'‬
‫עליו היא מוצבת‪.‬‬
‫♦ החלפה זה בזה של מקומות הקלפי עליה מוצבות הסימניות‪.‬‬
‫נקודת המוצא של הבעיה היא המצב בו מונחות על השולח שורת הקלפי ושתי הסימניות‪ .‬המטרה‬
‫היא הסידור החדש‪ ,‬בו מוחלפי מקומותיה של הקלפי האדומי ושל הקלפי השחורי‪.‬‬
‫שימו ♥‪ :‬יש אינסו' אפשרויות לנקודת המוצא‪ ,‬כי מספר הקלפי בשורה יכול להיות מספר איזוגי‬
‫כלשהו‪ ,‬למשל )א מסמ קל' אדו‪ ,‬ל מסמ קל' לב וש מסמ קל' שחור(‪:‬‬
‫ל‬
‫א‬
‫א‬
‫ל‬
‫ש‬
‫א‬
‫ל‬
‫ש‬
‫ש‬
‫⋅‬
‫⋅‬
‫⋅‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-32-‬‬
‫מדעי המחשב‬
‫האלגורית המבוקש אינו צרי להיות תלוי באור שורת הקלפי הנתונה‪ ,‬כלומר‪ ,‬ביצועו צרי‬
‫להשיג את המטרה לכל נקודת מוצא אפשרית‪.‬‬
‫כדי לפתח אלגורית לפתרו הבעיה‪ ,‬נחשוב תחילה על מקרה פרטי של הבעיה‪ .‬נניח כי בשורה שבעה‬
‫קלפי‪ .‬כלומר‪ ,‬נקודת המוצא היא‪:‬‬
‫א‬
‫א‬
‫א‬
‫ל‬
‫ש‬
‫ש‬
‫ש‬
‫ונקודת הסיו היא‪:‬‬
‫ש‬
‫ש‬
‫ש‬
‫ל‬
‫א‬
‫א‬
‫א‬
‫את המקרה הפרטי הזה נית לפתור באופ הבא‪:‬‬
‫ראשית צרי להחלי' את זוג הקלפי שבקצות השורה‪ ,‬ולקד את הסימניות פנימה )כלומר‪ ,‬לקד‬
‫את הסימניה השמאלית מקו אחד ימינה ואת הימנית מקו אחד שמאלה(‪ .‬אחר כ צרי להחלי'‬
‫את זוג הקלפי שעליה מצביעות הסימניות כעת‪ ,‬ושוב לקד את הסימניות פנימה‪ .‬לבסו' נותר‬
‫להחלי' את זוג הקלפי שעדיי לא הוחלפו‪.‬‬
‫הנה תיאור מפורט של אלגורית הפותר את המקרה הפרטי‪ ,‬יחד ע מעקב אחר ביצועו )סימניה‪1‬‬
‫מסומנת בח* דק וסימניה‪ 2‬מסומנת בח* עבה(‪:‬‬
‫א‬
‫‪úåáöåî íäéìò íéôì÷ä úåîå÷î óìçä‬‬
‫א‬
‫א‬
‫⇑‬
‫ל‬
‫ש‬
‫ש‬
‫ש‬
‫↑‬
‫↓‬
‫‪úåéðîéñä‬‬
‫ש‬
‫‪ïéîéî àáä óì÷ä ìò 1-äéðîéñ áöä‬‬
‫א‬
‫⇑‬
‫ש‬
‫↑‬
‫↓‬
‫א‬
‫⇑‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫א‬
‫ל‬
‫ש‬
‫ש‬
‫א‬
‫ל‬
‫↓‬
‫‪-33-‬‬
‫א‬
‫ש‬
‫ש‬
‫א‬
‫↑‬
‫מדעי המחשב‬
‫‪ìàîùî àáä óì÷ä ìò 2-äéðîéñ áöä‬‬
‫ש‬
‫א‬
‫א‬
‫⇑‬
‫‪úåáöåî íäéìò íéôì÷ä úåîå÷î óìçä‬‬
‫ל‬
‫ש‬
‫ש‬
‫א‬
‫↑‬
‫↓‬
‫‪úåéðîéñä‬‬
‫ש‬
‫ש‬
‫א‬
‫⇑‬
‫‪ïéîéî àáä óì÷ä ìò 1-äéðîéñ áöä‬‬
‫ש‬
‫ש‬
‫ש‬
‫ש‬
‫א‬
‫ל‬
‫↓‬
‫א‬
‫⇑‬
‫‪úåáöåî íäéìò íéôì÷ä úåîå÷î óìçä‬‬
‫↑‬
‫↓‬
‫⇑‬
‫‪ìàîùî àáä óì÷ä ìò 2-äéðîéñ áöä‬‬
‫ל‬
‫ש‬
‫ל‬
‫↓‬
‫א‬
‫א‬
‫ש‬
‫א‬
‫א‬
‫↑‬
‫ש‬
‫א‬
‫א‬
‫↑‬
‫‪úåéðîéñä‬‬
‫ש‬
‫ש‬
‫ש‬
‫⇑‬
‫ל‬
‫א‬
‫א‬
‫א‬
‫↑‬
‫פתרו המקרה הפרטי של הבעיה מלמד כי כדי להשיג את המטרה יש לבצע כמה פעמי את התת‬
‫משימה הבאה‪:‬‬
‫החלפת מקומות הקלפים עליהם מוצבות הסימניות וקידום הסימניות פנימה‬
‫תתמשימה זו תבוצע על ידי קבוצת ההוראות הבאה‪:‬‬
‫‪úåéðîéñä úåáöåî íäéìò íéôì÷ä úåîå÷î óìçä .1‬‬
‫‪ïéîéî àáä óì÷ä ìò 1-äéðîéñ áöä .2‬‬
‫‪ìàîùî àáä óì÷ä ìò 2-äéðîéñ áöä .3‬‬
‫האלגורית הדרוש צרי להורות על ביצוע חוזר של התתמשימה )כלומר‪ ,‬שלוש ההוראות(‪ .‬מספר‬
‫החזרות תלוי במספר הקלפי בשורה‪ .‬מאחר שיש לכתוב אלגורית כללי‪ ,‬שיתאי לשורת קלפי‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-34-‬‬
‫מדעי המחשב‬
‫בכל אור איזוגי שהוא‪ ,‬לא יהיה זה מספיק לכתוב אלגורית המטפל באור מסוי‪ .‬בנוס'‪ ,‬אפילו‬
‫א היה ידוע מראש אור מסוי‪ ,‬למשל ‪ ,401‬אי זה סביר שנכתוב אלגורית ובו כתובות שלוש‬
‫ההוראות שוב ושוב ‪ 401‬פעמי‪.‬‬
‫?‬
‫כיצד ננסח אלגורית שיתאי לכל שורת קלפי באור איזוגי ?‬
‫כדי לנסח את האלגורית המבוקש‪ ,‬נשתמש בהוראה לביצוע חוזר בתנאי‪ ,‬שתורה לחזור על ביצוע‬
‫קבוצת שלוש ההוראות שתיארנו כל עוד מתקיי התנאי‪:‬‬
‫‪ïáì åðéà úåéðîéñä úåáöåî åéìò óì÷ä‬‬
‫האלגורית הבא פותר את הבעיה‪ ,‬והוא כולל הוראה לביצוע חוזר בתנאי‪:‬‬
‫אלגורית לפתרו בעיה ‪3‬‬
‫‪.1‬‬
‫‪:òöá ïáì åðéà úåéðîéñä úåáöåî åéìò óì÷ä ãåò ìë‬‬
‫‪úåéðîéñä úåáöåî íäéìò íéôì÷ä úåîå÷î óìçä .1.1‬‬
‫‪ïéîéî àáä óì÷ä ìò 1-äéðîéñ áöä .1.2‬‬
‫‪ìàîùî àáä óì÷ä ìò 2-äéðîéñ áöä .1.3‬‬
‫סוף פתרון בעיה‬
‫ההוראה‬
‫‪3‬‬
‫‪:òöá ... ãåò ìë‬‬
‫⋅‬
‫⋅‬
‫⋅‬
‫היא הוראה לביצוע חוזר‬
‫בתנאי‪ ,‬המורה לחזור על ביצוע של קבוצת הוראות כל עוד מתקיי‬
‫תנאי מסוי‪.‬‬
‫בדומה להוראה לביצוע בתנאי ג הוראה לביצוע חוזר בתנאי היא הוראת בקרה‪.‬‬
‫שאלה ‪2.6‬‬
‫תארו את מצבי ביצוע האלגורית לפתרו בעיה ‪ 3‬עבור כל אחת מ האפשרויות הבאות של נקודת‬
‫המוצא‪.‬‬
‫א‪ .‬שורת קלפי באור ‪.9‬‬
‫ב‪ .‬שורת קלפי באור ‪.3‬‬
‫שאלה ‪2.7‬‬
‫שנו את האלגורית שבפתרו בעיה ‪ 3‬כ שע תו הביצוע תושג מטרה אחרת‪ :‬הקלפי שמשני צידי‬
‫הקל' הלב יהיו מסודרי לפי צבעי לסירוגי )כלומר‪ ,‬ש‪ ,‬א‪ ,‬ש‪ ,... ,‬ל‪ .... ,‬א‪ ,‬ש‪ ,‬א(‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-35-‬‬
‫מדעי המחשב‬
‫‪ 2.2‬תבניות‬
‫בפתרו בעיה ‪ 3‬בסעי' הקוד נכלל ביצוע חוזר של הפעולה "החל' מקומות הקלפי עליה מוצבות‬
‫הסימניות"‪ .‬פעולת ההחלפה משולבת בבדיקה חוזרת ונשנית של מקו הסימניות – "הא ה מוצבות‬
‫על קל' שאינו לב"‪ .‬פעולת ההחלפה‪ ,‬ופעולת הבדיקה החוזרת של ער‪) %‬במקרה זה‪ ,‬צבע( ה פעולות‬
‫שימושיות בפתרונות של בעיות אלגוריתמיות נוספות רבות‪ .‬למשל‪ ,‬הבעיה של סידור שורת מספרי‬
‫היא בעיה אלגוריתמית‪ ,‬אשר בפתרונה נית להשתמש שוב ושוב בהחלפה בי מספרי סמוכי‬
‫בשורה‪ ,‬עד אשר השורה תהיה מסודרת‪ .‬ג הבעיה של חיפוש מספר מסוי בשורת מספרי היא בעיה‬
‫אלגוריתמית‪ ,‬ונית לפתור אותה עלידי מעבר שיטתי על פני המספרי שבשורה משמאל לימי‪ ,‬תו‬
‫בדיקה חוזרת של ער‪ %‬המספר הבא בשורה )עד למציאת המספר הרצוי או עד ההגעה סו' השורה(‪.‬‬
‫לעיתי קרובות‪ ,‬פתרונות של בעיות אלגוריתמיות כוללי פעולות‪ ,‬אשר חוזרות שוב ושוב בפתרונות‬
‫שוני‪ .‬לכל פעולה כזו ישנו מבנה אלגוריתמי בסיסי‪ ,‬אשר מתאר אופ ביצוע של משימה‪ ,‬מנקודת‬
‫מוצא למטרה‪ .‬כיוו שפעולה זו משמשת שוב ושוב‪ ,‬בפתרונות שוני‪ ,‬נוח לקרוא לה בש‪ ,‬ולהתייחס‬
‫אל המבנה האלגוריתמי שלה כאל תבנית אלגוריתמית לביצוע משימה‪ .‬תבנית מתאפיינת על ידי‬
‫המרכיבי הבאי‪:‬‬
‫• ש התבנית‪ ,‬המבטא בצורה מאד תמציתית משימה לביצוע ו‪/‬או את דר ביצועה )למשל‪ ,‬החלפת‬
‫ערכי(‪.‬‬
‫•‬
‫•‬
‫•‬
‫נקודת מוצא‪ ,‬המציינת את המצב התחילי הנתו של המשימה לביצוע‪.‬‬
‫מטרה‪ ,‬המתארת את המצב הסופי‪ ,‬הפלט הדרוש‪ ,‬או ער שיש להחזיר ע תו הביצוע‪.‬‬
‫אלגורית‪ ,‬המתאר מתכו לביצוע המשימה‪ .‬האלגורית הוא לב התבנית‪.‬‬
‫מחקרי שוני בתחו הוראת מדעי המחשב מצביעי על כ שפותרי מנוסי של בעיות‬
‫אלגוריתמיות שומרי בזיכרונ פתרונות קודמי על פי התבנית שבבסיס‪ .‬בבוא לפתור בעיה‬
‫אלגוריתמית ה מסוגלי לזהות קשר בינה לבי בעיות אחרות שכבר פתרו‪ ,‬על פי התבניות‬
‫שמשמשות בפתרו הבעיות‪ .‬משו כ‪ ,‬השימוש בתבניות מסייע בתהלי הפיתוח של אלגוריתמי‪.‬‬
‫לכ בספר הלימוד אנו נתייחס ג לתבניות‪ ,‬נציג אות ונדו בה‪.‬‬
‫ספר הלימוד משלב תבניות בצורה מודרגת‪ .‬כבר בפרק הבא מוצגות תבניות ראשונות‪ ,‬ובפרקי‬
‫שאחריו מוצגות עוד ועוד תבניות‪ ,‬בהתא לבעיות האלגוריתמיות שבה‪ .‬בכל פרק בו נוספות תבניות‬
‫חדשות ה מוצגות בסו' הפרק‪ ,‬מודגמות‪ ,‬מתורגלות‪ ,‬ומקושרות לבעיות אלגוריתמיות שהוצגו בפרק‪.‬‬
‫לפעמי‪ ,‬תבנית חדשה א' מוצגת כסעי' של פרק‪ .‬לעיתי‪ ,‬מורחב בפרק חדש המבט על תבנית שכבר‬
‫הוצגה בפרק קוד‪.‬‬
‫אופ השימוש בתבניות הנו מגוו ורחב‪ .‬בספר "יסודות מדעי המחשב ‪ "1‬מוצג שימוש בסיסי בלבד‪.‬‬
‫בספר "יסודות מדעי המחשב ‪ "2‬מורחב אופ השימוש‪ ,‬תו התייחסות לדרכי שונות של שילוב‬
‫תבניות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-36-‬‬
‫מדעי המחשב‬
‫סיכום‬
‫בפרק זה הכרנו את המושגי אלגורית ובעיה אלגוריתמית‪.‬‬
‫אלגורית הוא מתכו לביצוע משימה‪ ,‬המורכב מקבוצת הוראות חדמשמעיות ואפשריות לביצוע‬
‫אשר סדר ביצוע מוגדר היטב‪.‬‬
‫בעיה אלגוריתמית היא בעיה שבה מתוארות נקודת מוצא ומטרה‪ ,‬המגדירות משימה‪ ,‬ונדרש‬
‫אלגורית הפותר את המשימה‪ ,‬כלומר‪ ,‬מביא מנקודת המוצא אל המטרה‪.‬‬
‫בבעיות אלגוריתמיות ייתכנו אפשרויות רבות‪ ,‬לפעמי אינסו'‪ ,‬לנקודת המוצא‪.‬‬
‫בפרק זה‪ ,‬ובפרקי הבאי אנו משתמשי בפסאודוקוד לכתיבת אלגוריתמי‪ ,‬כלומר‪ ,‬במילי‬
‫ובמשפטי בשפה חופשית‪ ,‬א ברורה וחדמשמעית‪.‬‬
‫סדר ביצוע ההוראות של אלגורית הוא על פי סדר הופעת‪ ,‬א לא נאמר אחרת‪.‬‬
‫כאשר יש צור להתנות ביצוע של הוראות בקיו תנאי מסוי‪ ,‬משתמשי באלגורית בהוראה‬
‫לביצוע בתנאי )‪...íà‬‬
‫‪.(...úøçà‬‬
‫כאשר יש צור בביצוע חוזר של הוראות‪ ,‬משתמשי באלגורית בהוראה לביצוע חוזר )‪...ãåò ìë‬‬
‫‪.(...òöá‬‬
‫הוראה לביצוע בתנאי והוראה לביצוע חוזר ה הוראות בקרה‪ ,‬המנחות את אופ ביצוע הוראות‬
‫האלגורית‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-37-‬‬
‫מדעי המחשב‬
‫שאלות נוספות‬
‫‪ .1‬בצעו את האלגורית הבא ותארו את מהל ביצועו‪ .‬מהי התוצאה המוכרזת בסו' הביצוע?‬
‫‪êúãìåä úðù úà 2-á ìôëä .1‬‬
‫‪äàöåúì 5 óñåä .2‬‬
‫‪50-á äàöåúä úà ìôëä .3‬‬
‫‪äàöåúì (íìù øôñîë) êìéâ úà óñåä .4‬‬
‫‪äàöåúä ïî 250 øñçä .5‬‬
‫‪äàöåúä úà 100-á ÷ìç .6‬‬
‫‪äàöåúä ìò æøëä .7‬‬
‫‪ .2‬על השולח שורה של שלושה קלפי‪ .‬על כל קל' רשו מספר‪ .‬נתו האלגורית הבא‪:‬‬
‫‪éòöîàä óì÷ä ìòù øôñîä íò éìàîùä óì÷ä ìòù øôñîä úà äååùä .1‬‬
‫‪.2‬‬
‫‪íà‬‬
‫‪éðîéä óì÷ä ìò øôñîäî ìåãâ éìàîùä óì÷ä ìò øôñîä‬‬
‫‪íäéúåîå÷î óìçä .2.1‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪éðîéä óì÷ä ìòù øôñîä íò éçëåðä éòöîàä óì÷ä ìò øôñîä úà äååùä‬‬
‫‪íà‬‬
‫‪éðîéä óì÷ä ìò øôñîäî ìåãâ éçëåðä éòöîàä óì÷ä ìò øôñîä‬‬
‫‪íäéúåîå÷î óìçä .4.1‬‬
‫א‪ .‬תארו את מהל ביצוע האלגורית עבור נקודת המוצא‬
‫‪15‬‬
‫‪2‬‬
‫‪24‬‬
‫ב‪ .‬תארו את מהל ביצוע האלגורית עבור נקודת המוצא‬
‫‪2‬‬
‫‪24‬‬
‫‪13‬‬
‫ג‪ .‬תארו את מהל ביצוע האלגורית עבור נקודת המוצא‬
‫‪15‬‬
‫‪2‬‬
‫‪13‬‬
‫ד‪ .‬מהי הבעיה האלגוריתמית שהאלגורית פותר?‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-38-‬‬
‫מדעי המחשב‬
‫ה‪ .‬שנו את האלגורית כ שישיג את המטרה הבאה‪ :‬הקל' שעליו רשו המספר הקט ביותר‬
‫יהיה בקצה הימני של שורת הקלפי‪.‬‬
‫‪ .3‬מפעל מסמ כל מוצר שלו בסימ המורכב מאות ב‪ ABC‬וספרה‪ .‬כלומר‪ ,‬סדרת הסימני של‬
‫המפעל היא הסדרה ‪ A0 .A0, A1, …, A9, B0, B1, …, Z0, …, Z9‬הוא הסימ הראשו בסדרה‬
‫ו‪ Z9‬הוא הסימ האחרו בסדרה‪.‬‬
‫א‪ .‬מה הסימני שעוקבי למספרי ‪ B9 ,A1‬ו‪?Z0‬‬
‫ב‪ .‬פתחו אלגורית לקריאת סימ שאינו הסימ האחרו בסדרה וכתיבת הסימ הבא אחריו‪.‬‬
‫הפעולות המותרות ה‪ :‬קריאת סימ )המורכב מאות וספרה(‪ ,‬כתיבת אות‪ ,‬כתיבת ספרה‪.‬‬
‫‪ .4‬בכיתת תלמידי יש ילד אחד ששערו ג'ינג'י וילדי רבי שצבע שער אינו ג'ינג'י‪ .‬התלמידי‬
‫מסודרי בטור‪ .‬הילד הג'ינג'י אינו עומד בראש הטור‪.‬‬
‫פתחו אלגורית אשר מטרתו היא שהילד הג'ינג'י יהיה בראש הטור‪.‬‬
‫הפעולות המותרות ה‪ :‬עמידה מול התלמיד שבראש הטור‪ ,‬התקדמות לתלמיד הבא בטור‪ ,‬החלפת‬
‫מקומות בי התלמיד מולו אתה עומד לבי התלמיד שבראש הטור‪.‬‬
‫‪ .5‬על השולח שורת קלפי שחורי ואדומי‪ ,‬המכילה לפחות שלושה קלפי‪ .‬הקלפי השחורי‬
‫נמצאי משמאל לקלפי האדומי‪ ,‬וידוע כי מספר הקלפי האדומי קט ממספר הקלפי‬
‫השחורי‪.‬‬
‫נתונות שתי סימניות‪ :‬סימניה‪ 1‬המוצבת על הקל' שבקצה השמאלי‪ ,‬וסימניה‪ 2‬המוצבת על‬
‫הקל' שבקצה הימני‪.‬‬
‫הפעולות המותרות ה‪ :‬הצבת סימניה מימי או משמאל לקל' שעליו היא מוצבת‪ ,‬והחלפה זה בזה‬
‫של מקומות הקלפי שעליה מוצבות הסימניות‪.‬‬
‫א‪ .‬ציינו שלוש אפשרויות שונות לשורת הקלפי‪.‬‬
‫ב‪ .‬נתו האלגורית הבא אשר מטרתו היא שכל הקלפי האדומי יהיו משמאל לכל הקלפי‬
‫השחורי‪ .‬השלימו את האלגורית‪:‬‬
‫‪.1‬‬
‫‪:òöá _____________________________ ãåò ìë‬‬
‫‪úåéðîéñä úåáöåî íäéìò íéôì÷ä úåîå÷î úà óìçä .1.1‬‬
‫‪ïéîéî àáä óì÷ä ìò 1-äéðîéñ áöä .1.2‬‬
‫‪ìàîùî àáä óì÷ä ìò 2-äéðîéñ áöä .1.3‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-39-‬‬
‫מדעי המחשב‬
‫פרק ‪ – 3‬מודל חישוב בסיסי‬
‫בפרק ‪ 1‬הכרנו את המכונה מחשב‪ ,‬ובפרק ‪ 2‬ראינו אלגוריתמי ראשוני‪ ,‬אשר לא נועדו לביצוע‬
‫במחשב‪ .‬בפרק זה נכיר אלגוריתמי המיועדי לביצוע במחשב‪ ,‬ונראה כיצד נכתוב אות כתוכניות‬
‫בשפת התכנות ‪.Java‬‬
‫דר בעיות אלגוריתמיות שונות נציג את מרכיביה הבסיסיי של אלגוריתמי‪ ,‬ואת יישומ בשפת‬
‫התכנות ‪ .Java‬בכל בעיה יתואר פלט דרוש עבור קלט נתו‪ .‬הקלט הוא נקודת המוצא של הבעיה‪,‬‬
‫והפלט הוא המטרה‪ .‬כל אלגורית שיפותח יתואר בצורה מילולית‪ ,‬בדומה לתיאורי שהוצגו בפרק ‪,2‬‬
‫ולאחר מכ יוצג יישומו באמצעות תוכנית בשפת התכנות ‪.Java‬‬
‫בפרק זה נכיר את האמצעי לשמירת נתוני במחשב‪ ,‬את ההוראות לביצוע קלט ופלט וכיצד נבצע‬
‫חישובי ונשמור את תוצאותיה‪ .‬לאחר מכ נעקוב אחר מהל ביצוע של אלגורית‪.‬‬
‫‪ 3.1‬צעדים ראשונים‪ :‬הוראת פלט‪ ,‬הוראת קלט ומשתנים‬
‫המחשב מציג הודעות באמצעות אמצעי פלט‪ .‬בפרק ‪ 1‬הזכרנו את שני אמצעי הפלט הנפוצי‪ :‬מדפסת‬
‫וצג‪ .‬בפתרו הבעיה הבאה נראה אלגורית להצגת מילי כפלט‪ .‬האלגורית מיוש על ידי תוכנית‬
‫בשפת ‪ ,Java‬התוכנית הראשונה בפרק‪.‬‬
‫בעיה ‪1‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת משפט כפלט‬
‫פתחו אלגורית שהפלט שלו הוא המילי ‪ Hello World‬ויישמו את האלגורית על ידי תוכנית‬
‫מחשב בשפת ‪.Java‬‬
‫האלגורית לפתרו הבעיה יהיה האלגורית הפשוט הבא‪ ,‬הכולל הוראת פלט אחת‪:‬‬
‫‪íéìéîä úà èìôë âöä .1‬‬
‫‪Hello World‬‬
‫היישו בשפת ‪ Java‬של הוראת הפלט )הדפסת הפלט למס( ייראה כ‪:‬‬
‫;)"‪System.out.println("Hello World‬‬
‫נבח ממה מורכבת הוראה זו‪:‬‬
‫נכתוב בסוגריי את ההודעה שברצוננו‬
‫להדפיס למס‪ .‬הודעה זו תמוסגר ב "‪"...‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫הפעולה להדפסת‬
‫שורה למס‬
‫‪-41-‬‬
‫נתיב הפלט‬
‫המחלקה האחראית על‬
‫פעולות מערכת כלליות‬
‫מדעי המחשב‬
‫כעת ניצור מהמשפט שכתבנו תוכנית מלאה בשפת ‪:Java‬‬
‫‪public class MyFirstProgram‬‬
‫{‬
‫הידעת?‬
‫המשפט ‪ Hello World‬הוא‬
‫המשפט הראשו שנאמר‬
‫מחללית שיצאה מתחו‬
‫האטמוספירה אל כדור האר'‬
‫)‪public static void main (String[] args‬‬
‫{‬
‫;)"‪System.out.println("Hello World‬‬
‫}‬
‫}‬
‫תוצאת הביצוע )ההרצה( של התוכנית תהיה הצגת המילי ‪ Hello World‬על המס‪.‬‬
‫סוף פתרון בעיה‬
‫‪1‬‬
‫ננסה להבי כמה מהחלקי שהוספנו לתוכנית ונוסי" הערות להבהרה‪:‬‬
‫בתחילת כל תוכנית נפרס בהערה את‬
‫מטרת התוכנית‪ .‬מה הקלט ומה הפלט‬
‫הכרזה על מחלקה בתוכנית‬
‫*‪/‬‬
‫התוכנית מדפיסה את המשפט‬
‫‪Hello World‬‬
‫‪*/‬‬
‫פתיחת תחו המחלקה‬
‫‪public class MyFirstProgram‬‬
‫{‬
‫הכרזה על נקודת תחילת ביצוע‬
‫)‪public static void main (String[] args‬‬
‫פתיחת תחו הפעולה הראשית‬
‫גו הפעולה הראשית‬
‫{‬
‫;)"‪System.out.println("Hello World‬‬
‫סוף ‪// main‬‬
‫סגירת תחו הפעולה הראשית ‪+‬‬
‫הערה‬
‫}‬
‫סוף המחלקה ‪// MyFirstProgram‬‬
‫}‬
‫סגירת תחו המחלקה ‪ +‬הערה‬
‫מחלקה – ‪class‬‬
‫כל תוכנית בשפה מחולקת למחלקות שונות‪ .‬לכל מחלקה תפקיד ואחריות משלה‪.‬‬
‫תוכנית זו היא תוכנית פשוטה ביותר‪ ,‬ולכ מכילה מחלקה אחת בלבד‪ ,‬המהווה את התוכנית כולה‪.‬‬
‫כל מחלקה מוגדרת באמצעות המילה ‪ .class‬בתוכנית זו מוכרז כי המחלקה ‪ MyFirstProgram‬היא‬
‫ציבורית )‪ ,(public‬משמע‪ ,‬פתוחה לשימוש לכל המעוניי‪ .‬ביחידה "יסודות "מדעי המחשב ‪ "1‬נכתוב‬
‫תמיד תוכניות המכילות מחלקה אחת בלבד‪ ,‬ותמיד יש להצהיר על מחלקה זו כציבורית‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-42-‬‬
‫מדעי המחשב‬
‫בשפת ‪ Java‬מקובל כי ש מחלקה מתחיל תמיד באות גדולה‪ ,‬וא ש המחלקה מורכב מכמה מילי‪,‬‬
‫ה נכתבות צמודות זו לזו‪ ,‬כשהאות הראשונה בכל מילה היא גדולה‪.‬‬
‫‪main‬‬
‫לכל תוכנית יש נקודת התחלה אחת בלבד‪ .‬שורת הכותרת ‪ main‬מציינת נקודה זו‪.‬‬
‫את המשמעות המדויקת של שורה זו על כל מרכיביה תבינו בהמש לימודיכ‪.‬‬
‫המחלקה אשר מכילה את נקודת תחילת התוכנית )מכילה את שורת ה(‪ (main‬היא המחלקה הראשית‬
‫בתוכנית‪ .‬ש המחלקה הראשית הוא למעשה ש התוכנית‪.‬‬
‫בדוגמה זו‪ ,‬ש המחלקה הראשית הוא ‪.MyFirstProgram‬‬
‫גו" הפעולה הראשית‬
‫בגו" הפעולה הראשית נכתוב את רצ" ההוראות שהוא תרגו לשפת התכנות של האלגורית לפתרו‬
‫הבעיה‪.‬‬
‫כל הוראה נכתבת בשורה אחת‪ ,‬נפרדת‪ ,‬המסתיימת בסימ ;‪.‬‬
‫בגו" תוכנית זו נכללת הוראה יחידה המדפיסה למס את הכיתוב ‪.Hello World‬‬
‫אנו מבצעי זאת על ידי קריאה לפעולה ‪ println‬אשר מדפיסה שורה למס‪ .‬שימו לב כיצד פנינו‬
‫לפעולה זו‪ .System.out.println :‬זהו שמה המלא של הפעולה‪ ,‬והוא מעיד על כ שהפעולה‬
‫‪ println‬היא פעולת פלט‪ ,‬השייכת לנתיב הפלט ‪) out‬זהו הנתיב דרכו מתבצע הפלט ב(‪,(Java‬‬
‫ושנתיב הפלט ‪ out‬מוגדר תחת המחלקה ‪) System‬שאחראית על פעולות מערכת כלליות(‪.‬‬
‫תחו‬
‫את רצ" ההוראות‪ ,‬המהוות את גו" הפעולה הראשית‪ ,‬יש לתחו בי פותח וסוגר מסולסלי‬
‫)הסימני }‪.({ ...‬‬
‫בדומה‪ ,‬יש לתחו בי פותח וסוגר מסולסלי את כל ההוראות השייכות למחלקה‪ .‬א כ‪ ,‬בתוכנית‬
‫זו הוגדרו שני תחומי של הוראות‪ :‬האחד למחלקה‪ ,‬התחומה בי הסימני } { החיצוניי‪ ,‬והשני‬
‫לפעולה הראשית‪ ,main ,‬התחומה בי הסימני } { הפנימיי‪.‬‬
‫הערה‬
‫פעמי רבות נרצה לכתוב הערות בתוכנית‪ ,‬אשר נועדות לקורא התוכנית‪ .‬ישנ שתי דרכי לכתיבת‬
‫הערות‪:‬‬
‫♦ הערה אשר מתפרשת על פני כמה שורות נית לרשו בי הסימני ‪ ... */‬תוכ ההערה‬
‫‪/* ...‬‬
‫למשל‪ ,‬שלוש השורות הראשונות בדוגמה זו ה הערה לקורא המבהירה מהי מטרת התוכנית‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-43-‬‬
‫מדעי המחשב‬
‫♦ הערה אשר מתפרשת על פני שורה בודדת נית לרשו אחרי הסימני ‪//‬‬
‫למשל‪ ,‬ההערות המופיעות בשתי השורות האחרונות בדוגמה זו מסייעות לקורא בזיהוי התחומי‬
‫הנסגרי‪.‬‬
‫אי חובה לכלול הערות בתוכנית‪ ,‬א ה תורמות תרומה משמעותית לקריאות התוכנית‪ ,‬ולכ חשוב‬
‫להוסיפ‪.‬‬
‫שאלה ‪3.1‬‬
‫פתחו אלגורית המדפיס על המס את שמכ‪ ,‬ויישמו אותו בשפת ‪.Java‬‬
‫למשל‪ ,‬א הש הוא יאיר‪ ,‬הפלט יהיה‪Yair :‬‬
‫שאלה ‪3.2‬‬
‫פתחו אלגורית המדפיס על המס את שמכ מוק" במסגרת של כוכביות‪ ,‬ויישמו אותו בשפת ‪.Java‬‬
‫למשל‪ ,‬א הש הוא יאיר‪ ,‬הפלט יהיה‪:‬‬
‫******‬
‫*‪*Yair‬‬
‫******‬
‫הדרכה‪ :‬פעולת ‪ println‬מדפיסה שורה אחת למס‪ .‬בתוכנית זו עליכ להדפיס ‪ 3‬שורות‪.‬‬
‫כזכור‪ ,‬המחשב קולט נתוני באמצעות אמצעי קלט‪ .‬אמצעי קלט נפו' הוא לוח המקשי ‪ −‬המקלדת‪.‬‬
‫בפתרו הבעיה הבאה‪ ,‬נראה אלגורית הקולט נתוני ומציג כפלט‪.‬‬
‫בעיה ‪2‬‬
‫מטרת הבעיה ופתרונה‪ :‬שימוש במשתני‪ ,‬הוראות קלט ופלט למשתני‪ ,‬תוכנית הכוללת כמה‬
‫משפטי ומעקב ראשו אחרי ביצוע של תוכנית‪.‬‬
‫פתחו אלגורית שהקלט שלו הוא שני מספרי שלמי )המופרדי ברווח(‪ ,‬והפלט שלו הוא ההודעה‪:‬‬
‫"שני המספרי שנקלטו ה‪ ":‬ומתחתיה שני המספרי‪ .‬ישמו את האלגורית על ידי תוכנית בשפת‬
‫‪.Java‬‬
‫שימו ♥‪ :‬מספר הקלטי האפשריי בבעיה זו הוא רב )ולמעשה‪ ,‬אינסופי( כיוו שקלט יכול להיות כל‬
‫זוג מספרי‪ ,‬למשל‪ 7 :‬ו(‪ , 5‬או ‪ 20‬ו(‪ .2‬האלגורית המבוקש צרי לתת את הפלט הנכו עבור כל זוג‬
‫מספרי שהוא‪ ,‬כלומר‪ ,‬הוא צרי להיות אלגורית כללי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-44-‬‬
‫מדעי המחשב‬
‫חלוקה לתתמשימות‬
‫את המשימה שיש לפתור בבעיה נית לחלק לשלוש תת(משימות‪:‬‬
‫‪ .1‬קליטת שני מספרים שלמים‬
‫‪ .2‬הצגה כפלט של ההודעה "שני המספרים שנקלטו הם‪":‬‬
‫‪ .3‬הצגת שני המספרים שנקלטו כפלט‪ ,‬בשורה חדשה‪.‬‬
‫?‬
‫היכ ישמור המחשב את הנתוני הנקלטי?‬
‫הנתוני הנקלטי נשמרי בתאי הזיכרו המכוני "תאי משתני" או בקיצור "משתני"‪.‬‬
‫משתנה‬
‫)‪ (variable‬הוא תא זיכרו אשר במהל ביצוע אלגורית נית לשמור בו ער ולקרוא את‬
‫הער השמור בו‪ .‬למידע השמור בתו המשתנה קוראי ער‬
‫באמצעות שמו‪ ,‬שהוא ש‬
‫המשתנה‪ .‬פנייה למשתנה נעשית‬
‫המשתנה‪.‬‬
‫בבעיה זו הקלט הוא שני נתוני )שני מספרי(‪ ,‬ולכ נגדיר שני משתני שנקרא לה‪ num1 :‬ו(‬
‫‪ .num2‬בכל אחד מהמשתני יישמר ער! אחד בלבד‪ .‬כאשר אנו בוחרי שמות למשתני כדאי לבחור‬
‫שמות משמעותיי‪ ,‬שיעידו על תפקיד של המשתני‪ .‬בחירת שמות משמעותיי מסייעת לקריאות‬
‫ובהירות התוכנית‪ ,‬בדיוק כמו כתיבת הערות בתוכנית‪.‬‬
‫בשפת ‪ Java‬מקובל להתחיל ש של משתנה באות קטנה‪ .‬א שמו מורכב מכמה מילי ה נכתבות‬
‫צמודות זו לזו‪ ,‬כשהאות הראשונה בכל מילה‪ ,‬מהשנייה ואיל‪ ,‬היא אות גדולה‪.‬‬
‫האלגורית לפתרו הבעיה ישתמש בשני המשתני שבחרנו‪:‬‬
‫‪num2-å num1 íéðúùîá íéîìù íéøôñî éðù èåì÷ .1‬‬
‫‪":íä åèì÷ðù íéøôñîä éðù" :äòãåää úà èìôë âöä .2‬‬
‫‪num1, num2 íéðúùîä éëøò úà ,äùãç äøåùá ,èìôë âöä .3‬‬
‫יישו האלגורית‬
‫הוראה ‪) 1‬קלט(‬
‫כדי לייש את הוראה ‪ 1‬עלינו ללמוד כיצד לבצע קלט‪.‬‬
‫קליטת מספר של מתבצעת באמצעות הפעולה‪:‬‬
‫;)(‪ = In.readInt‬שם משתנה‬
‫פעולה זו קולטת ער של ומכניסה אותו לתו המשתנה ששמו כתוב בצד שמאל‪ .‬בעת ביצוע‬
‫התוכנית‪ ,‬כאשר תתבצע פעולה זו‪ ,‬תעצור התוכנית ותחכה לקלט מתאי מהמשתמש‪ .‬בשלב זה‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-45-‬‬
‫מדעי המחשב‬
‫המשתמש יכול להקליד את הנתוני‪ .‬נית לכתוב בתו הסוגריי הנחיה למשתמש‪ ,‬מעי הדרכה מדוע‬
‫נעצרה התוכנית ולמה היא מצפה‪ .‬הנחיה זו צריכה להיות תחומה בי גרשיי כפולי‪ .‬ההנחיה תופיע‬
‫על המס‪.‬‬
‫לכ‪ ,‬את הוראה ‪ 1‬נייש בעזרת שני משפטי הקלט הבאי‪:‬‬
‫;)"‪num1 = In.readInt("Insert first number‬‬
‫;)"‪num2 = In.readInt("Insert second number‬‬
‫הוראה ‪) 2‬מילות הפתיחה של הפלט(‬
‫באלגורית לפתרו בעיה ‪ 1‬כבר ביצענו פעולה דומה‪ .‬עלינו רק לשנות את תוכ ההודעה המודפסת‬
‫למס‪ ,‬כ‪:‬‬
‫;)"‬
‫‪System.out.println("The two numbers are:‬‬
‫הוראה ‪) 3‬פלט ערכי המשתני(‬
‫ג הפע ברצוננו להדפיס פלט למס‪ .‬נשתמש בשתי הוראות הדפסה‪ ,‬אחת עבור כל משתנה‪ ,‬א נרצה‬
‫שהמספרי יופיעו על המס באותה שורה‪ .‬כזכור‪ ,‬הפעולה ‪ println‬מדפיסה שורה‪ ,‬ומאחר שאי‬
‫אנו מעונייני שכל מספר יופיע בשורה משלו‪ ,‬נשתמש בפעולה ‪ .print‬ג היא פעולת פלט‪ ,‬בדומה ל(‬
‫‪ ,println‬א היא אינה גורמת למעבר שורה על המס‪ .‬מאחר שהפע אי ברצוננו להדפיס מילי‪,‬‬
‫אלא את תוכנ של שני המשתני‪ ,‬נרשו ‪.‬‬
‫;)‪System.out.print(num1‬‬
‫;)‪System.out.print(num2‬‬
‫ב(‪ Java‬יש להצהיר על כל משתנה לפני השימוש בו‪ .‬משו כ‪ ,‬כדי ליצור ממשפטי התוכנית גו"‬
‫תוכנית מלא בשפת ‪ Java‬עלינו להוסי" לה עוד משפטי הצהרה על המשתני‪ :‬הצהרה נעשית על ידי‬
‫כתיבת טיפוס המשתנה ושמו של המשתנה‪.‬‬
‫טיפוס‬
‫)‪ (type‬הוא סוג של ערכי‪ .‬למשל‪ ,‬כל המספרי השלמי ה מטיפוס של‪ ,‬וכל המספרי‬
‫הממשיי ה מטיפוס ממשי‪.‬‬
‫כיוו שבחרנו במספרי שלמי‪ ,‬נגדיר כי שני המשתני ה מטיפוס של‪ .‬זאת נעשה על ידי שימוש‬
‫במילה ‪) int‬קיצורה של המילה האנגלית ‪ ,integer‬שמשמעותה מספר של(‪ ,‬למשל כ‪:‬‬
‫;‪int num1‬‬
‫בהצהרת משתני בתוכנית ‪ Java‬נית להצהיר על כמה משתני מאותו טיפוס ברשימה אחת‪ ,‬אשר‬
‫לפניה יופיע ש הטיפוס ואחריה הסימ נקודה פסיק‪ .‬שמות המשתני יופרדו על ידי פסיק‪ .‬נצהיר על‬
‫משתני באותה השורה רק כאשר יש לה תפקיד דומה‪ ,‬ונית להסביר את תפקיד בהערת תיעוד‬
‫אחת משותפת‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-46-‬‬
‫מדעי המחשב‬
‫למשל‪ ,‬נוכל להצהיר על שני המשתני כ‪:‬‬
‫לשמירת שני משתנים שלמים הנקלטים מהמשתמש ‪//‬‬
‫;‪int num1, num2‬‬
‫הצהרה על משתנה יכולה להיות בכל מקו בתו התחו בו אנו מתייחסי אל המשתנה‪ ,‬כל עוד היא‬
‫מופיעה לפני ההתייחסות הראשונה אליו‪ .‬ע זאת‪ ,‬כדי שהתוכנית תהיה בהירה וקריאה מקובל לרכז‬
‫את כל הצהרות המשתני ביחד‪ ,‬בתחילת התחו‪.‬‬
‫נשלי את גו" התוכנית לתוכנית מלאה‪ ,‬בדומה למה שהודג בפתרו בעיה ‪:1‬‬
‫*‪/‬‬
‫התוכנית קולטת שני מספרים שלמים ומציגה את ערכם כפלט‬
‫שימו ♥ כי בתוכנית שילבנו הערות‪.‬‬
‫בתחילה שילבנו הערה המבהירה מה תפקיד‬
‫התוכנית כולה‪ ,‬ואחר כ שילבנו הערות‬
‫המבהירות לקורא מה תפקיד כל חלק בתוכנית‪.‬‬
‫שילוב ההערות אינו בגדר חובה‪ ,‬א מומל' ביותר‬
‫על מנת שהתוכנית תהיה ברורה לכל אד הקורא‬
‫אותה‪.‬‬
‫‪*/‬‬
‫‪public class ReadWrite‬‬
‫{‬
‫)‪public static void main (String [] args‬‬
‫{‬
‫הצהרה על משתנים בתוכנית ‪//‬‬
‫לשמירת שני משתנים שלמים הנקלטים מהמשתמש‪int num1, num2; //‬‬
‫הוראות התוכנית ‪//‬‬
‫;)"‪num1 = In.readInt("Insert first number‬‬
‫;)"‪num2 = In.readInt("Insert second number‬‬
‫;)"‬
‫‪System.out.println("The two numbers are:‬‬
‫;)‪System.out.print (num1‬‬
‫הדפסת רווח בין המספרים ‪System.out.print (" "); //‬‬
‫;)‪System.out.print (num2‬‬
‫‪} // main‬‬
‫‪} // class ReadWrite‬‬
‫נעקוב אחר ביצוע )הרצת( התוכנית ‪ ReadWrite‬עבור קלט כלשהו‪.‬‬
‫כאשר ניתנת למחשב סידרה של נתוני הוא קולט אות משמאל לימי‪ .‬למשל‪ ,‬א הקלט עבור‬
‫התוכנית ‪ ReadWrite‬הוא המספרי‪ ,10 20 :‬אז המספר השמאלי ‪ 10‬מוקלד ראשו‪ ,‬והמספר הימני‬
‫‪ 20‬מוקלד שני‪ ,‬מימינו‪.‬‬
‫הדו(שיח בי המשתמש למחשב בעת ביצוע התוכנית ייראה כ )לאחר כל הקלדת נתו על ידי‬
‫המשתמש עליו להקיש על המקש >‪:(<enter‬‬
‫המחשב יציג כפלט‪:‬‬
‫‪Insert first number‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-47-‬‬
‫מדעי המחשב‬
‫המשתמש יקליד‪:‬‬
‫‪10‬‬
‫המחשב יציג כפלט‪:‬‬
‫‪Insert second number‬‬
‫המשתמש יקליד‪:‬‬
‫‪20‬‬
‫המחשב יציג כפלט‪:‬‬
‫‪The two numbers are:‬‬
‫המחשב יציג כפלט בשורה חדשה‪:‬‬
‫‪10 20‬‬
‫סוף פתרון בעיה‬
‫‪2‬‬
‫כדי להבי היטב את תפקיד של משתני בתוכנית‪ ,‬ואת השפעת הפעולות הקשורות אליה‪ ,‬נעקוב‬
‫שוב אחרי ביצוע התוכנית שבפתרו בעיה ‪ ,2‬א הפע נתמקד בזיכרו‪.‬‬
‫המשפט הראשו שמתייחס למשתני התוכנית הוא משפטי ההצהרה על המשתני‪:‬‬
‫;‪int num1, num2‬‬
‫כתוצאה מביצוע המשפט הזה מוקצי עבור ‪ num1‬ו(‪ num2‬תאי זיכרו שתוכנ אינו ידוע‪ .‬אפשר‬
‫לצייר זאת כ‪:‬‬
‫‪num2:‬‬
‫?‬
‫?‬
‫‪num1:‬‬
‫שני המשפטי הבאי בתוכנית ה משפטי הקלט‪:‬‬
‫;)"‪num1 = In.readInt("Insert first number‬‬
‫;)"‪num2 = In.readInt("Insert second number‬‬
‫תוצאת הביצוע של משפט קלט היא הכנסת ער לתו המשתנה‪.‬‬
‫למשל‪ ,‬א כתגובה להודעה ‪ Insert first number‬הקליד המשתמש את המספר ‪ ,10‬הרי‬
‫שאחרי‬
‫ביצוע‬
‫משפט‬
‫הקלט הראשו ערכו של ‪ num1‬יהיה ‪ .10‬א כתגובה להודעה‬
‫‪ Insert second number‬הקליד המשתמש את המספר ‪ ,20‬אז אחרי ביצוע משפט הקלט‬
‫השני ערכו של ‪ num2‬יהיה ‪ .20‬נוכל לצייר זאת כ‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-48-‬‬
‫מדעי המחשב‬
‫‪20‬‬
‫‪10‬‬
‫‪num2:‬‬
‫‪num1:‬‬
‫לאחר שמירת הנתוני בזיכרו יבצע המחשב את המשפט הבא ‪ ,‬החמישי בתוכנית‪ ,‬ויציג כפלט את‬
‫ההודעה‪:‬‬
‫‪The two numbers are:‬‬
‫לבסו" יבוצעו שני המשפטי האחרוני ויוצגו כפלט הערכי השמורי בתו המשתני‪:‬‬
‫‪10 20‬‬
‫אי לפעולת ההדפסה כל השפעה על ערכ של המשתני‪.‬‬
‫ע תו ביצוע המשפט האחרו בתוכנית "ישוחררו" תאי הזיכרו שהוקצו בתחילת ביצוע התוכנית‪,‬‬
‫כלומר תאי זיכרו אלה כבר לא שייכי לנו ואסור לנו להשתמש בה יותר‪ .‬א נבקש לבצע )להרי'(‬
‫שוב את התוכנית‪ ,‬יוקצו שוב תאי זיכרו‪ ,‬ואלה אינ בהכרח אות תאי הזיכרו שהוקצו בביצוע‬
‫הקוד‪.‬‬
‫שימו ♥‪ :‬מאחר שהגדרנו את שני המשתני מטיפוס ‪ ,int‬ה יכולי להכיל מספרי שלמי בלבד‪.‬‬
‫שאלה ‪3.3‬‬
‫א‪ .‬תארו את הדו(שיח בי המשתמש למחשב בעת ביצוע התוכנית ‪) ReadWrite‬שבפתרו בעיה ‪,(2‬‬
‫עבור הקלט ‪.5 10‬‬
‫ב‪ .‬נתייחס לביצוע התוכנית ‪ ReadWrite‬עבור הקלט ‪ .5 10‬מה יהיו הערכי השמורי במשתני‬
‫‪ num1‬ו( ‪ num2‬בתחילת הביצוע? מה יהיו הערכי השמורי בה לאחר כל משפט ‪?readInt‬‬
‫ולאחר ביצוע המשפט ‪?System.out.print‬‬
‫ג‪ .‬תארו את הדו(שיח בי המשתמש למחשב בעת ביצוע התוכנית ‪ ReadWrite‬עבור הקלט ‪.10 5‬‬
‫ד‪ .‬ענו על אות שאלות כמו בסעי" ב‪ ,‬הפע בהתייחס לביצוע התוכנית ‪ ReadWrite‬עבור הקלט‬
‫‪.10 5‬‬
‫שאלה ‪3.4‬‬
‫בחרו שני משתני‪ ,‬הראשו לשמירת מספר הבני בכיתה והשני לשמירת מספר הבנות בכיתה‪ .‬לכל‬
‫משתנה בחרו ש מתאי והצהירו עליו ב(‪ ,Java‬תו ציו טיפוסו‪ ,‬ותיעוד תפקידו בהערה מתאימה‪.‬‬
‫שימו ♥‪ :‬פיתוח ויישו אלגורית יעשה תמיד על פי השלבי הבאי‪ ,‬כפי שנעשה בפתרו בעיה ‪:2‬‬
‫‪ .1‬בחינת דוגמאות קלט שונות והבנת הקשר הדרוש בי הקלט לפלט‪.‬‬
‫‪ .2‬חלוקת המשימה לתת(משימות‪.‬‬
‫‪ .3‬בחירת משתני – תפקיד‪ ,‬ש וטיפוס לכל משתנה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-49-‬‬
‫מדעי המחשב‬
‫‪ .4‬כתיבת האלגורית‪.‬‬
‫‪ .5‬יישו האלגורית על ידי תוכנית‪.‬‬
‫אנו מקפידי על פיתוח ויישו של אלגורית בשלבי‪ .‬אמנ בפרק זה האלגוריתמי לפיתוח ה‬
‫קצרי‪ ,‬א חשוב כבר עכשיו להבחי בשלבי השוני‪ .‬ככל שנתקד יותר בחומר הלימוד נפתח‬
‫אלגוריתמי מורכבי יותר‪ ,‬וחשיבות הפיתוח בשלבי תתברר יותר ויותר‪.‬‬
‫לאחר כתיבת התוכנית חשוב לבצע מעקב לבדיקתה‪ ,‬כפי שביצענו בפתרו שאלה ‪ .2‬מעקב זה מסייע‬
‫בבדיקת נכונות התוכנית‪ ,‬ולעיתי נמצא בעזרתו שגיאות שנצטר לתק‪.‬‬
‫שאלה ‪3.5‬‬
‫פתחו ויישמו בשלבי אלגורית שיקבל כקלט שלושה מספרי שלמי‪ ,‬והפלט שלו יהיה המספר‬
‫האמצעי מביניה‪ .‬למשל‪ ,‬עבור הקלט‪ 9 5 3 :‬הפלט הדרוש הוא ‪.5‬‬
‫שאלה ‪3.6‬‬
‫נתונה התוכנית הבאה‪:‬‬
‫‪public class InOut‬‬
‫{‬
‫)‪public static void main (String [] args‬‬
‫{‬
‫;‪int num1‬‬
‫;‪int num2‬‬
‫;)"‪num1 = In.readInt("Insert first number‬‬
‫;)"‪num2 = In.readInt("Insert second number‬‬
‫;)‪System.out.println(num1‬‬
‫;)‪System.out.println(num2‬‬
‫;)"‪num2 = In.readInt(("Insert another one‬‬
‫;)‪System.out.println(num1‬‬
‫;)‪System.out.println(num2‬‬
‫}‬
‫}‬
‫א‪ .‬תארו את הדו(שיח בי המשתמש למחשב בעת ביצוע התוכנית ‪ ,InOut‬כאשר הקלט עבור שני‬
‫משפטי הקלט הראשוני הוא ‪ ,2 3‬והקלט עבור משפט הקלט השלישי הוא ‪.5‬‬
‫ב‪ .‬תארו את הדו(שיח בי המשתמש למחשב בעת ביצוע התוכנית ‪ ,InOut‬כאשר הקלט עבור שני‬
‫משפטי הקלט הראשוני הוא ‪ ,2 5‬והקלט עבור משפט הקלט השלישי הוא ‪.3‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-50-‬‬
‫מדעי המחשב‬
‫שאלה ‪3.7‬‬
‫פתחו ויישמו בשלבי אלגורית שהקלט שלו הוא שלושה מספרי שלמי‪ ,‬והפלט שלו הוא שתי‬
‫שורות‪ ,‬כשבכל שורה שניי ממספרי הקלט‪ :‬בשורה הראשונה המספר השני והמספר השלישי‬
‫מסודרי לפי סדר קליטת‪ ,‬ובשורה השנייה המספר הראשו והמספר השני מסודרי בסדר הפו!‬
‫לסדר קליטת‪.‬‬
‫שאלה ‪3.8‬‬
‫פתחו ויישמו בשלבי אלגורית אשר הקלט שלו הוא שלושה מספרי שלמי המהווי סדרה‪ .‬הפלט‬
‫שלו הוא סדרה של שישה מספרי שבה משוכפל כל אחד מנתוני הקלט כמספר הפעמי המתאי‬
‫למקומו הסידורי בסדרת הקלט‪ .‬למשל‪ ,‬עבור הקלט‪ ,8 3 6 :‬הפלט הוא‪) 8 3 3 6 6 6 :‬הנתו‬
‫הראשו מופיע פע אחת‪ ,‬השני פעמיי‪ ,‬והשלישי שלוש פעמי(‪.‬‬
‫‪ 3.2‬הוראת השמה‬
‫בסעי" הקוד הכרנו אלגוריתמי )ותוכניות( למחשב שקולטי נתוני ונותני פלט‪ .‬א ביצוע קלט‬
‫ופלט הוא רק מרכיב אחד של אלגוריתמי למחשב‪ .‬אלגוריתמי למחשב מיועדי בדר(כלל לביצוע‬
‫חישובי ועיבודי שוני‪ ,‬בנוס" לביצוע קלט ופלט‪ .‬בסעי" זה נראה אלגוריתמי ראשוני המבצעי‬
‫חישובי‪.‬‬
‫בעיה ‪3‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת הוראת השמה‪.‬‬
‫פתחו ויישמו בשלבי אלגורית שהקלט שלו הוא שני מספרי שלמי חיוביי‪ ,‬המצייני אור‬
‫ורוחב של מלב‪ ,‬והפלט שלו הוא שטחו והיקפו של המלב‪.‬‬
‫בבעיה זו‪ ,‬כמו בבעיות הקודמות שפתרנו‪ ,‬מספר הקלטי הוא רב‪ .‬א האור והרוחב של המלב‬
‫יכולי להיות כל זוג מספרי שלמי חיוביי‪ ,‬הרי שישנ‪ ,‬בעצ‪ ,‬אינסו קלטי אפשריי‪.‬‬
‫בדיקת דוגמאות‬
‫כזכור‪ ,‬לפני שאנו ניגשי לכתיבת האלגורית כדאי לוודא שאנו מביני את המשימה על ידי כ‬
‫שנבח את הפלט עבור דוגמאות קלט מגוונות‪:‬‬
‫שאלה ‪3.9‬‬
‫ציינו את הפלט עבור כל אחד מהקלטי הבאי‪:‬‬
‫א‪5 10 .‬‬
‫ב‪12 3 .‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-51-‬‬
‫מדעי המחשב‬
‫חלוקה לתתמשימות‬
‫מה התת(משימות של האלגורית?‬
‫תחילה יש לקלוט את הנתוני‪ ,‬אחר כ יש לחשב את השטח וההיק"‪ ,‬ולבסו" יש להציג כפלט את‬
‫תוצאת החישוב‪ .‬נתאר זאת על ידי החלוקה הבאה לתת(משימות‪:‬‬
‫‪ .1‬קליטת שני מספרים שלמים המייצגים אורך ורוחב של מלבן‬
‫‪ .2‬חישוב שטח המלבן‬
‫‪ .3‬חישוב היקף המלבן‬
‫‪ .4‬הצגת תוצאת החישוב‬
‫בחירת משתני‬
‫כדי לשמור את אורכו ורוחבו של המלב נשתמש בשני משתני‪ ,‬שנקרא לה ‪ length‬ו(‪,width‬‬
‫בהתאמה )זיכרו! אנו מקפידי על בחירת שמות משמעותיי(‪ .‬בנוס"‪ ,‬נבחר את המשתני ‪ area‬ו(‬
‫‪ .perimeter‬מטיפוס של‪ ,‬לשמירת תוצאות חישובי השטח וההיק"‪.‬‬
‫בס הכל בחרנו ארבעה משתני מטיפוס של‪:‬‬
‫‪ – length‬ישמור את אור המלב‪.‬‬
‫‪ – width‬ישמור את רוחב המלב‪.‬‬
‫‪ – area‬ישמור את שטח המלב‪.‬‬
‫‪ – perimeter‬ישמור את היק" המלב‪.‬‬
‫האלגורית‬
‫את תת(משימה ‪ 1‬נבצע על ידי הוראת קלט מתאימה‪:‬‬
‫÷‪width-áå length-á ïáìî ìù áçåøå êøåà èåì‬‬
‫?‬
‫לאחר קליטת הנתוני עלינו לחשב שטח והיק"‪ .‬כיצד נבצע את החישובי?‬
‫חישוב שטח מתקבל באמצעות הביטוי‪length * width :‬‬
‫חישוב היק" מתקבל באמצעות הביטוי‪(width + length) * 2 :‬‬
‫?‬
‫היכ נשמור את תוצאות החישובי?‬
‫המחשב מסוגל לבצע חישוב של ביטוי חשבוני ולשי )לשמור( את תוצאת החישוב במשתנה‪ .‬הביטוי‬
‫החשבוני יכול לכלול ערכי המצויני במפורש )למשל‪ ,‬המספר ‪ (2‬או ערכי השמורי במשתני‪.‬‬
‫הדר להורות למחשב לשמור את תוצאת הביטוי במשתנה היא על ידי הוראת השמה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-52-‬‬
‫מדעי המחשב‬
‫א כ‪ ,‬נכלול באלגורית הוראות השמה לשמירת תוצאות החישוב במשתני ‪ area‬ו(‪.perimeter‬‬
‫האלגורית לפתרו הבעיה יכלול שתי הוראות השמה‪ ,‬ויהיה‪:‬‬
‫‪width-áå length-á ïáìî ìù áçåøå êøåà èåì÷ .1‬‬
‫‪area-á äàöåúä (øåîù) íùäå length * width éãé ìò ïáìîä çèù úà áùç .2‬‬
‫‪-á äàöåúä (øåîù) íùäå (width + length) * 2 éãé ìò ïáìîä ó÷éä úà áùç .3‬‬
‫‪perimeter‬‬
‫‪perimeter êøò úàå area êøò úà èìôë âöä .4‬‬
‫יישו האלגורית‬
‫כעת ניגש ליישו האלגורית בתוכנית ‪.Java‬‬
‫יישו הוראות ההשמה יהיה על ידי שני המשפטי הבאי‪:‬‬
‫;‪area = length * width‬‬
‫;‪perimeter = (width + length) * 2‬‬
‫אלה ה משפטי השמה‪ .‬כל משפט מורה על ביצוע חישוב והשמת תוצאתו במשתנה‪.‬‬
‫ביצוע המשפט הראשו‪ ,‬יביא לחישוב מכפלת ערכו של ‪ width‬בערכו של ‪ ,length‬והשמת התוצאה‬
‫במשתנה ‪.area‬‬
‫ביצוע המשפט השני‪ ,‬יביא לחישוב הסכו של ערכו של ‪ width‬בערכו של ‪ length‬והכפלתו ב(‪,2‬‬
‫והשמת התוצאה במשתנה ‪.perimeter‬‬
‫הנה יישו האלגורית כולו בשפת ‪:Java‬‬
‫;)"‪length = In.readInt("Insert length‬‬
‫;)"‪width = In.readInt ("Insert width‬‬
‫;‪area = length * width‬‬
‫;‪perimeter = (width + length) * 2‬‬
‫;)‪System.out.println("The area is: " + area‬‬
‫;)‪System.out.println("The perimeter is: " + perimeter‬‬
‫שימו ♥‪ :‬שתי ההוראות האחרונות ה הוראות פלט‪ ,‬ובכל אחת מה ברצוננו להדפיס‪ ,‬באותה השורה‪,‬‬
‫ג משפט מקדי וג ער השמור במשתנה‪ .‬הסימ ‪ +‬מחבר את רצ" התווי )הסימני( התחו‬
‫בגרשיי כפולי ואת ער המשתנה לרצ" תווי אחד‪ .‬לכ‪ ,‬תוצאת הביצוע של הוראת הפלט‬
‫הראשונה תהיה הדפסת שורה שבה יופיעו התווי ‪ The area is:‬ומיד אחר(כ יופיע הער‬
‫השמור במשתנה ‪ .area‬תוצאת הביצוע של הוראת הפלט השנייה תהיה הדפסת שורה שבה יופיעו‬
‫התווי ‪ The perimeter is:‬ומיד אחר(כ יופיע הער השמור במשתנה ‪.perimeter‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-53-‬‬
‫מדעי המחשב‬
‫נשלי את משפטי התוכנית לתוכנית מלאה‪:‬‬
‫*‪/‬‬
‫התוכנית מחשבת את שטחו והיקפו של מלבן‬
‫‪*/‬‬
‫‪public class Rectangle‬‬
‫{‬
‫)‪public static void main (String [] args‬‬
‫{‬
‫;‪int length, width, area, perimeter‬‬
‫הוראות קלט‬
‫;)"‪length = In.readInt("Insert length‬‬
‫;)"‪width = In.readInt ("Insert width‬‬
‫הוראות השמה‬
‫;‪area = length * width‬‬
‫;‪perimeter = (width + length) * 2‬‬
‫הוראות פלט‬
‫;)‪System.out.println("The area is: " + area‬‬
‫;)‪System.out.println("The perimeter is: " + perimeter‬‬
‫‪} // main‬‬
‫‪} // class Rectangle‬‬
‫מעקב‬
‫נעקוב עתה אחר מהל ביצוע התוכנית ‪ Rectangle‬עבור הקלט ‪:5 3‬‬
‫בתחילת הביצוע ערכי כל המשתני אינ ידועי‪.‬‬
‫בעקבות ביצוע משפט הקלט הראשו תוצג ההודעה‪ ,"Insert length":‬ואז ימתי המחשב‬
‫לקלט מ המשתמש‪ .‬המשתמש יקיש ‪ 5‬ו(>‪ .<Enter‬תוצאת הוראת הקלט הראשונה תהיה שמירת‬
‫הער ‪ 5‬במשתנה ‪.length‬‬
‫לאחר מכ תוצג ההודעה "‪ , "Insert width‬ושוב ימתי המחשב לקלט‪ .‬המשתמש יקיש ‪ 3‬ו(‬
‫>‪ .<Enter‬תוצאת הוראת הקלט השנייה תהיה שמירת הער ‪ 3‬במשתנה ‪.width‬‬
‫בביצוע משפט ההשמה הראשו יחושב הער ‪ ,15‬שהוא ער הביטוי ‪ ,5*3‬המופיע בצד ימי של‬
‫המשפט‪ .‬ער זה יישמר במשתנה ‪ ,area‬ששמו כתוב בצד שמאל של המשפט‪.‬‬
‫בביצוע משפט ההשמה השני יחושב הער ‪ ,16‬שהוא ער הביטוי ‪ ,(3+5)*2‬המופיע בצד ימי של‬
‫המשפט‪ .‬ער זה יישמר במשתנה ‪ ,perimeter‬ששמו כתוב בצד שמאל של המשפט‪.‬‬
‫שימו ♥‪ :‬ערכיה של ‪ length‬ו( ‪ width‬לא ישתנו בעקבות ביצוע משפטי ההשמה! משפט השמה‬
‫משפיע רק על המשתנה שבצד שמאל של המשפט‪ .‬משתני המעורבי בביטוי שבצד ימי של המשפט‬
‫אינ מושפעי ממנו‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-54-‬‬
‫מדעי המחשב‬
‫בעקבות ביצוע שני משפטי הפלט האחרוני יתקבל הפלט‪:‬‬
‫‪The area is: 15‬‬
‫‪The perimeter is: 16‬‬
‫סוף פתרון בעיה ‪3‬‬
‫בפתרו בעיה ‪ 3‬הכרנו את פעולת ההשמה‪:‬‬
‫בפעולת השמה‪ ,‬המחשב מבצע חישוב כלשהו ו ָש )שומר( את התוצאה בתו משתנה‪.‬‬
‫פעולת ההשמה מיושמת ב(‪ Java‬כ‪ .y = expression; :‬משפט זה מורה על השמת ער הביטוי‬
‫‪ expression‬בתו המשתנה ‪.y‬‬
‫הביטוי ‪ expression‬יכול להיות ביטוי פשוט )כמו למשל מספר או ש של משתנה( או ביטוי המורכב‬
‫מפעולות חשבוניות שונות‪.‬‬
‫דוגמאות‪:‬‬
‫♦‬
‫;‪ a = 7‬פירושו‪" :‬הש )שמור( את הער ‪ 7‬במשתנה ששמו ‪ "a‬לאחר ביצוע פעולה זו‪ ,‬ערכו של ‪a‬‬
‫יהיה ‪.7‬‬
‫♦ ;‪ a = b‬פירושו‪" :‬הש את ערכו של המשתנה ‪ b‬בתו המשתנה ‪ ."a‬למשל‪ ,‬א ערכו של ‪ b‬לפני‬
‫ביצוע המשפט הוא ‪ ,3‬אז לאחר ביצוע המשפט ערכו של ‪ a‬יהיה ‪ .3‬ערכו של ‪ b‬לא ישתנה ויישאר ‪.3‬‬
‫♦ ;‪ a = b * c‬פירושו‪" :‬הכפל את ערכיה של ‪ b‬ו(‪ c‬והש את התוצאה ב(‪ ."a‬למשל‪ ,‬א לפני‬
‫ביצוע המשפט ערכיה של ‪ b‬ו(‪ c‬ה ‪ 9‬ו(‪ ,5‬בהתאמה‪ ,‬אז לאחר ביצוע המשפט יהיה ערכו של‬
‫‪a‬‬
‫שווה ל(‪) 45‬וערכיה של ‪ b‬ו(‪ c‬לא ישתנו(‪.‬‬
‫שימו ♥‪ :‬כיוו שמשתנה יכול להכיל ער אחד בלבד בכל רגע‪ ,‬אז בעת ביצוע המשפט ;‪,y=expression‬‬
‫ערכו הקוד של ‪ y‬אובד‪ ,‬כלומר ערכו של הביטוי ‪" expression‬דור" על מה שהיה בתו ‪ y‬לפני ביצוע‬
‫המשפט‪ .‬אבל‪ ,‬כאמור‪ ,‬משפט ההשמה אינו משפיע על א" משתנה חו' מ(‪.y‬‬
‫שימו ♥‪ :‬בביטוי חשבוני מתקיי סדר הקדימויות המוכר של פעולות החשבו‪ .‬כלומר‪ ,‬לסוגריי‬
‫עדיפות גבוהה ביותר‪ ,‬עדיפות נמוכה יותר לכפל ולחילוק‪ ,‬ועדיפות נמוכה ביותר לחיבור וחיסור‪.‬‬
‫שאלה ‪3.10‬‬
‫נניח שהקלט בעת ביצוע התוכנית ‪ Rectangle‬הוא‪.7 10 :‬‬
‫א‪ .‬מה יהיו ערכי המשתני ‪ length‬ו(‪ width‬לאחר ביצוע משפטי הקלט?‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-55-‬‬
‫מדעי המחשב‬
‫ב‪ .‬מה יהיו ערכי כל המשתני לאחר ביצוע משפט ההשמה השני?‬
‫ג‪ .‬תארו את הדו(שיח בי המחשב למשתמש במהל ביצוע התוכנית‪.‬‬
‫שאלה ‪3.11‬‬
‫כתבו משפטי השמה לביצוע הפעולות הבאות‪:‬‬
‫א‪ .‬איפוס המשתנה ‪) a‬איפוס משמעותו השמת הער ‪.(0‬‬
‫ב‪ .‬השמת תוצאת החישוב ‪ (729-511)*3‬במשתנה ‪.a‬‬
‫ג‪ .‬השמת כפליי ערכו של המשתנה ‪ b‬במשתנה ‪.a‬‬
‫ד‪ .‬השמת סכו ערכי המשתני ‪ x‬ו(‪ y‬במשתנה ‪.w‬‬
‫שאלה ‪3.12‬‬
‫נתו קטע תוכנית ובו המשפטי הבאי‪:‬‬
‫;)"‪a = In.readInt("insert first number‬‬
‫;)"‪b = In.readInt ("insert second number‬‬
‫;‪c = a + b‬‬
‫;)‪System.out.println(c‬‬
‫תנו שתי דוגמאות קלט שונות שהפלט עבור הוא ‪.5‬‬
‫שאלה ‪3.13‬‬
‫כתבו סדרה של ארבעה משפטי השמה המבצעי‪ ,‬לפי הסדר הבא‪:‬‬
‫‪ .1‬השמת הער ‪ 3‬במשתנה ‪.a‬‬
‫‪ .2‬השמת תוצאת החישוב של הביטוי ‪ 3*9‬במשתנה ‪.b‬‬
‫‪ .3‬השמת סכו ערכי ‪ a‬ו(‪ b‬במשתנה ‪.c‬‬
‫‪ .4‬השמת מכפלת ערכי ‪ a‬ו(‪ c‬במשתנה ‪.d‬‬
‫מה ערכי ארבעת המשתני ‪ c ,b ,a‬ו(‪ d‬ע תו ביצוע סדרת המשפטי?‬
‫שאלה ‪3.14‬‬
‫נתוני משפטי התוכנית הבאי‪:‬‬
‫;)"‪num1 = In.readInt("insert first number‬‬
‫;)"‪num2 = In.readInt ("insert second number‬‬
‫;)"‪num3 = In.readInt ("insert third number‬‬
‫;‪diff1 = num1 * num2 – num3‬‬
‫;‪diff1 = num2 * num3 – num1‬‬
‫;)‪System.out.println(diff1‬‬
‫;)‪System.out.println(diff2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-56-‬‬
‫מדעי המחשב‬
‫נניח שהקלט במהל הביצוע הוא‪.3 2 3 :‬‬
‫א‪ .‬מה יהיו ערכי המשתני ‪ num2 ,num1‬ו(‪ num3‬לאחר ביצוע משפטי הקלט?‬
‫ב‪ .‬מה יהיו ערכי המשתני ‪ diff1‬ו(‪ diff2‬לאחר ביצוע משפט ההשמה השני?‬
‫ג‪ .‬תארו את הדו(שיח בי המחשב למשתמש במהל משפטי התוכנית‪.‬‬
‫שאלה ‪3.15‬‬
‫פתחו ויישמו בשלבי אלגורית שהקלט שלו הוא מספר חיובי של‪ ,‬המציי אור צלע של קובייה‪,‬‬
‫והפלט שלו הוא נפח הקובייה ושטח הפני שלה‪.‬‬
‫הדרכה‪ :‬א צלע הקובייה היא ‪ ,a‬הנפח יחושב על ידי ‪ a3‬ושטח הפני יחושב על ידי‪.6a2 :‬‬
‫שימו ♥‪ :‬ג פעולת קלט כוללת למעשה השמה‪ .‬למשל‪ ,‬במשפט‬
‫)(‪length = In.readInt‬‬
‫מתבצעת פעולת השמה של המספר הנקלט לתו המשתנה ‪.length‬‬
‫כזכור‪ ,‬כאשר אנו מצהירי על משתנה‪ ,‬מוקצה לו מקו בזיכרו‪ ,‬א ערכו אינו ידוע‪ .‬במקרי‬
‫מסוימי נרצה לתת למשתנה ער מיד ע ההצהרה עליו‪ .‬זאת כדאי לעשות כאשר ידוע לנו כבר בשלב‬
‫ההצהרה מה צרי להיות ערכו ההתחלתי של משתנה‪ ,‬ואי הוא תלוי בהוראה שצריכה להתבצע‬
‫מאוחר יותר‪ ,‬כמו הוראת קלט‪ .‬מת ער התחלתי למשתנה נקרא אתחול‪.‬‬
‫אתחול של משתנה משמעותו מת ער התחלתי למשתנה‪.‬‬
‫הסיבה שלא כדאי לנו לדחות אתחול של משתנה‪ ,‬וכדאי לאתחל משתנה מיד כאשר ידוע לנו הער‬
‫המתאי לאתחול‪ ,‬היא שא לא נעשה זאת‪ ,‬אנו עלולי לשכוח לבצע זאת מאוחר יותר‪ .‬ערכו של‬
‫המשתנה יישאר לא ידוע‪ ,‬וכאשר ננסה להשתמש בערכו – למשל‪ ,‬להדפיסו‪ ,‬או לשלבו בביטוי חשבוני‪,‬‬
‫אי לדעת מה יהיה ער זה ולאיזו תוצאה יביא‪.‬‬
‫שפת ‪ Java‬מאפשרת לנו למזג הצהרה על משתנה יחד ע השמה אליו‪ ,‬כלומר‪ ,‬נית למשל לכתוב‬
‫בשפת ‪ Java‬הוראה כזאת‪:‬‬
‫;‪int x = 3‬‬
‫תוצאת ביצוע ההוראה היא הקצאת מקו בזיכרו עבור המשתנה ‪ x‬והשמת הער ‪ 3‬בתוכו‪ .‬ההוראה‬
‫הזאת שקולה לרצ" ההוראות‬
‫;‪int x‬‬
‫;‪x = 3‬‬
‫ג הוראה כזאת נית לכתוב בשפת ‪:Java‬‬
‫;‪int x = num1 * num2‬‬
‫וזאת בתנאי ש(‪ num1‬ו(‪ num2‬ה משתני מטיפוס של‪ ,‬שהוצהרו קוד לכ‪ ,‬וערכ ידוע‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-57-‬‬
‫מדעי המחשב‬
‫א כ‪ ,‬ג בצד ימי של השמה תו כדי הצהרה יכול להופיע ביטוי‪ ,‬בתנאי שכל הערכי הכלולי בו‬
‫ידועי‪.‬‬
‫בהמש הפרק נשתמש לעיתי במונחי ער תחילי ומצב תחילי‪:‬‬
‫הער התחילי‬
‫של משתנה ביחס לתוכנית מסוימת או לקטע תוכנית מסוי‪ ,‬הוא הער שיש‬
‫במשתנה מיד לפני ביצוע ההוראה הראשונה בתוכנית או בקטע התוכנית‪.‬‬
‫מצב תחילי‬
‫של תוכנית או קטע תוכנית כולל את ערכ התחילי של כל המשתני ביחס לאותה‬
‫תוכנית או קטע תוכנית‪.‬‬
‫למשל‪ ,‬א השורה הראשונה בתוכנית היא ;‪ ,int x = 3‬אז ערכו התחילי של ‪ x‬ביחס לתוכנית הוא‬
‫כמוב ‪ .3‬א השורה הראשונה היא ;‪ ,int x‬אז ערכו התחילי של ‪ x‬אינו ידוע‪ .‬כאשר אנו בוחני את‬
‫ערכו של משתנה ביחס לקטע תוכנית‪ ,‬עלינו לבדוק מהו הער האחרו שהוש לתוכו‪ ,‬לפני קטע‬
‫התוכנית‪ .‬זה יהיה ערכו התחילי של המשתנה ביחס לקטע התוכנית‪ .‬א לא התבצעה שו השמה‬
‫למשתנה לפני קטע התוכנית‪ ,‬הרי שערכו התחילי ביחס לקטע התוכנית אינו ידוע‪.‬‬
‫‪ 3.3‬טבלת מעקב‬
‫בסעי" הקוד ראינו הוראות השמה ראשונות‪ ,‬פשוטות‪ ,‬ובחנו לראשונה מהל של השמת ערכי‬
‫במשתני בעת התקדמות הביצוע של אלגורית מהוראה להוראה‪.‬‬
‫בסעי" זה נראה הוראות השמה מורכבות יותר‪ ,‬ונציג דר למעקב שיטתי אחר מהל ביצוע של‬
‫אלגורית‪.‬‬
‫בעיה ‪4‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת הוראת השמה אשר בה הער החדש המוש במשתנה תלוי בער‬
‫הנוכחי של המשתנה‪ ,‬והצגת מעקב אחר מהל ביצוע באמצעות טבלת מעקב‪.‬‬
‫נתבונ בשתי סדרות המספרי הבאות‪ 2 4 12 :‬ו( ‪.5 10 30‬‬
‫בשתי הסדרות האיבר הראשו )משמאל( הוא הקט ביותר‪ ,‬האיבר השני גדול פי שניי מהאיבר‬
‫הראשו‪ ,‬והאיבר השלישי גדול פי שלושה מהאיבר השני‪.‬‬
‫פתחו ויישמו בשלבי אלגורית אשר הקלט שלו הוא מספר של חיובי המציי איבר ראשו בסדרה‬
‫)כדוגמת הסדרות המתוארות( והפלט שלו הוא האיברי השני והשלישי בסדרה בשורות נפרדות‪.‬‬
‫השתמשו באלגורית במשתנה אחד בלבד!‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-58-‬‬
‫מדעי המחשב‬
‫בדיקת דוגמאות‬
‫שאלה ‪3.16‬‬
‫מהו הפלט עבור הקלט ‪ ,10‬ומהו הפלט עבור הקלט ‪? 2‬‬
‫חלוקה לתתמשימות‬
‫נבצע את החלוקה הבאה לתת(משימות‪:‬‬
‫‪ .1‬קליטת מספר שהוא איבר ראשון בסדרה‪.‬‬
‫‪ .2‬חישוב האיבר השני בסדרה והצגתו כפלט‪.‬‬
‫‪ .3‬חישוב האיבר השלישי בסדרה והצגתו כפלט‪.‬‬
‫בחירת משתני‬
‫כיוו שהוטלה המגבלה של שימוש במשתנה אחד‪ ,‬ברור שהמשתנה שנבחר ישמור בכל פע אחד‬
‫מאיברי הסדרה‪ .‬נשתמש במשתנה מסוג של ונקרא לו ‪.element‬‬
‫האלגורית‬
‫את התת(משימה הראשונה נבצע כמוב על ידי קליטת האיבר הראשו לתו ‪.element‬‬
‫?‬
‫כיצד נחשב באמצעות משתנה אחד בלבד את האיבר השני ואחר כ את האיבר השלישי בסדרה?‬
‫בביטוי שבהוראת השמה )כלומר‪ ,‬בצד ימי של ההוראה( אפשר לכלול ג את המשתנה אשר בו‬
‫מושמת תוצאת החישוב של הביטוי )המשתנה המופיע בצד שמאל של ההשמה(‪ .‬במקרה כזה מחשבי‬
‫את הביטוי תו שימוש בערכו של המשתנה לפני ביצוע ההשמה‪ .‬לדוגמה‪:‬‬
‫‪num-á äàöåúä úà íùäå num*2 éåèéáä ìù åëøò úà áùç‬‬
‫משמעות הוראה זו היא שערכו של ‪ num‬לאחר ביצוע ההוראה יהיה פי ‪ 2‬מערכו לפני ביצוע ההוראה‪.‬‬
‫א ערכו של ‪ num‬לפני ביצוע ההוראה הוא ‪ 5‬אז ערכו לאחר הביצוע יהיה ‪.10‬‬
‫נשתמש בהוראת השמה כזו‪ ,‬שבה מופיע ‪ num‬בשני צידי משפט ההשמה‪ .‬נחשב את האיבר השני על‬
‫ידי הכפלה ב(‪ 2‬של הער השמור ב(‪ ,element‬נשי את התוצאה חזרה ב( ‪ element‬ונציג כפלט את‬
‫ערכו‪ .‬אחר כ נחשב את האיבר השלישי בסדרה על ידי הכפלה ב(‪ 3‬של הער השמור ב(‪,element‬‬
‫נשי את התוצאה חזרה ב(‪ element‬ולבסו" נציג שוב את ערכו‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-59-‬‬
‫מדעי המחשב‬
‫הנה האלגורית לפתרו הבעיה‪:‬‬
‫‪element-ì øôñî èåì÷ .1‬‬
‫} קליטת איבר ראשו בסדרה {‬
‫‪element-á äàöåúä úà íùäå element*2 :áùç .2‬‬
‫} חישוב האיבר השני בסדרה {‬
‫‪element ìù åëøò úà èìôë âöä .3‬‬
‫‪element-á äàöåúä úà íùäå element*3 :áùç .4‬‬
‫} חישוב האיבר השלישי בסדרה {‬
‫‪element ìù åëøò úà èìôë âöä .5‬‬
‫יישו האלגורית‬
‫הנה התוכנית ליישו האלגורית שלעיל‪ ,‬אשר ג בה יש הערות כדי להבהיר מטרת כל משפט‪ .‬את‬
‫מספרי השורות הוספנו לש נוחות‪ ,‬ונשתמש בה עוד מעט‪ .‬ה אינ חלק מהוראות התוכנית!‬
‫*‪/‬‬
‫התוכנית נותנת כפלט את איבריה של סדרה בת שלושה איברים‬
‫‪*/‬‬
‫‪public class Sequence‬‬
‫{‬
‫)‪public static void main (String [] args‬‬
‫{‬
‫;‪int element‬‬
‫;)"‪1. element = In.readInt("Insert first element‬‬
‫חישוב האיבר השני‬
‫;‪2. element = 2 * element‬‬
‫‪//‬‬
‫;)‪3. System.out.println("The second element is: " + element‬‬
‫חישוב האיבר השלישי‬
‫;‪4. element = 3 * element‬‬
‫‪//‬‬
‫;)‪5. System.out.println("The third element is: " + element‬‬
‫‪} // main‬‬
‫‪}// Sequence‬‬
‫מעקב‬
‫נעקוב אחר מהל ביצוע התוכנית עבור דוגמת הקלט ‪:5‬‬
‫אחרי ביצוע משפט הקלט יהיה ערכו של ‪ element‬שווה ל(‪.5‬‬
‫אחרי ביצוע משפט ההשמה הראשו יהיה ערכו של ‪ element‬שווה ל(‪.10‬‬
‫אחרי ביצוע משפט ההשמה השני יהיה ערכו של ‪ element‬שווה ל(‪.30‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-60-‬‬
‫מדעי המחשב‬
‫הדו(שיח בי המחשב למשתמש יהיה‪:‬‬
‫מחשב‪:‬‬
‫‪Insert first element‬‬
‫משתמש‪:‬‬
‫‪5‬‬
‫מחשב‪:‬‬
‫‪The second element is: 10‬‬
‫מחשב‪:‬‬
‫‪The third element is: 30‬‬
‫סוף פתרון בעיה ‪4‬‬
‫בפתרו בעיה ‪ 4‬ראינו נקודה חשובה לגבי הוראות השמה‪:‬‬
‫משתנה יכול להופיע משני צידי הוראת השמה‪ ,‬כלומר‪ ,‬ג בתפקיד המשתנה שלתוכו מתבצעת‬
‫ההשמה‪ ,‬וג כמשתנה שערכו משמש בביטוי שבצד ימי של ההשמה‪ .‬בהוראה כזו ערכו החדש של‬
‫המשתנה תלוי בערכו לפני ביצוע ההוראה‪.‬‬
‫למשל‪ ,‬ההוראה ;‪ counter = counter + 1‬תוסי" ‪ 1‬לערכו של המשתנה ‪ .counter‬למשל‪ ,‬א‬
‫לפני פעולת ההשמה ערכו של ‪ counter‬היה ‪ ,5‬אז אחרי ביצועה ערכו יהיה ‪.6‬‬
‫שאלה ‪3.17‬‬
‫הניחו שערכי המשתני ‪ a‬ו(‪ b‬לפני כל אחד ממשפטי ההשמה הבאי ה ‪ 3‬ו(‪ ,5‬בהתאמה‪ .‬מהו ערכו‬
‫של ‪ a‬לאחר ביצוע כל משפט?‬
‫א‪.‬‬
‫;‪a = 1‬‬
‫ב‪.‬‬
‫;‪a = a + 1‬‬
‫ג‪.‬‬
‫;‪a = 2 *a + 3‬‬
‫ד‪.‬‬
‫;)‪a = 2 * a + (a – 3‬‬
‫ה‪.‬‬
‫;‪a = b‬‬
‫ו‪.‬‬
‫;‪a = a * b‬‬
‫ז‪.‬‬
‫;‪a = a + a * b‬‬
‫שימו ♥‪ :‬ערכו של ‪ b‬לא משתנה בעקבות א" אחת מההוראות האלו!‬
‫שאלה ‪3.18‬‬
‫כתבו משפטי השמה לביצוע ההוראות הבאות‪:‬‬
‫א‪ .‬הכפלת ערכו של המשתנה ‪ a‬ב(‪.2‬‬
‫ב‪ .‬החסרת ער המשתנה ‪ b‬מ המשתנה ‪.a‬‬
‫ג‪ .‬הכפלת ערכו של המשתנה ‪ a‬בסכו ערכי המשתני ‪ b‬ו( ‪.c‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-61-‬‬
‫מדעי המחשב‬
‫שאלה ‪3.19‬‬
‫נתו קטע התוכנית הבא‪:‬‬
‫;)"‪a = In.readInt ("Insert number‬‬
‫;)"‪b = In.readInt ("Insert number‬‬
‫;‪a = a + b‬‬
‫;)‪System.out.println(a‬‬
‫;‪a = a – b‬‬
‫;)‪System.out.println(a‬‬
‫פלט התוכנית הוא שני מספרי‪ .‬הביאו שלוש דוגמאות קלט שונות‪ ,‬אשר עבור כל אחת מה יהיה‬
‫ההפרש בי שני מספרי הפלט שווה ל(‪.9‬‬
‫שאלה ‪3.20‬‬
‫הא המשפט ;‪ int x = 3 * x‬הוא משפט חוקי? נמקו את תשובתכ‪.‬‬
‫במהל ביצוע התוכנית ‪ Sequence‬השתנה שוב ושוב ערכו של ‪ .element‬אמנ‪ ,‬הצלחנו לבצע מעקב‬
‫אחר ערכי המשתנה‪ ,‬וג מעקב אחר הודעות הפלט‪ ,‬אבל שיטת המעקב בה השתמשנו עלולה להיות‬
‫מסורבלת עבור תוכניות ארוכות יותר ומורכבות יותר‪.‬‬
‫נוכל לבצע מעקב שיטתי באמצעות טבלת מעקב‪ .‬בטבלת מעקב נעקוב אחר השינויי בערכי המשתני‬
‫ואחר הפלט במהל ביצוע משפטי התוכנית‪.‬‬
‫נדגי את השימוש בטבלת מעקב אחר מהל ביצוע התוכנית ‪ Sequence‬עבור הקלט ‪:3‬‬
‫פלט‬
‫המשפט לביצוע‬
‫‪element‬‬
‫מספר‬
‫שורה‬
‫?‬
‫‪Insert first‬‬
‫‪element‬‬
‫‪The second‬‬
‫‪element is:‬‬
‫‪6‬‬
‫‪The third‬‬
‫‪element is:‬‬
‫‪18‬‬
‫‪3‬‬
‫;)" ‪element = In.readInt("Insert first element‬‬
‫‪6‬‬
‫;‪element = 2 * element‬‬
‫‪6‬‬
‫‪System.out.println("The second element is: " +‬‬
‫‪1.‬‬
‫‪2.‬‬
‫‪3.‬‬
‫;)‪element‬‬
‫‪18‬‬
‫;‪element = 3 * element‬‬
‫‪18‬‬
‫‪System.out.println("The third element is: " +‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪4.‬‬
‫‪5.‬‬
‫;)‪element‬‬
‫‪-62-‬‬
‫מדעי המחשב‬
‫טבלת‬
‫מעקב משמשת למעקב אחרי ביצוע תוכנית שלמה או קטע תוכנית‪ ,‬או אלגורית‪ .‬בטבלה‬
‫שורה עבור כל הוראה לביצוע‪ ,‬עמודה עבור כל משתנה ועמודה עבור הפלט‪.‬‬
‫מבנה אפשרי לטבלת מעקב‪:‬‬
‫♦ עמודות הטבלה‪:‬‬
‫• הטור השמאלי ביותר – מספרי השורות של הוראות התוכנית )על פי מספריה בתוכנית(‪.‬‬
‫• הטור השני משמאל – "המשפט לביצוע"‪ ,‬כלומר‪ ,‬הוראות התוכנית עצמ‪.‬‬
‫• הטורי שבמרכז הטבלה )מהשלישי משמאל ועד השני מימי( – טור עבור כל משתנה של‬
‫התוכנית‪.‬‬
‫• הטור הימני ביותר – "פלט"‪.‬‬
‫♦ השורה הראשונה מייצגת את המצב התחילי‪ :‬בשורה זו מופיע עבור כל משתנה ערכו התחילי ביחס‬
‫לתוכנית או לקטע התוכנית‪ .‬א ערכו לפני ביצוע ההוראה הראשונה אינו ידוע‪ ,‬נסמ זאת בסימ‬
‫'?'‪ .‬למשל‪ ,‬א אנו מבצעי מעקב אחרי תוכנית שלמה‪ ,‬ערכ של כל המשתני יסומ בשורה‬
‫הראשונה בסימ '?'‪ ,‬פרט לאלה שאותחלו ע ההצהרה עליה‪.‬‬
‫♦ בשורות הבאות‪:‬‬
‫• בטור "המשפט לביצוע" יהיו הוראות התוכנית בזו אחר זו‪ .‬נכתוב בטבלה רק הוראות‬
‫שמשפיעות על ערכ של משתני‪ .‬למשל‪ ,‬לא נכלול הצהרה על משתנה א אינה כוללת אתחול‪.‬‬
‫• בטורי המשתני‪ :‬א בעקבות ההוראה המתאימה לשורה המשתנה קיבל ער חדש‪ ,‬ייכתב‬
‫ערכו החדש‪ ,‬אחרת‪ ,‬ייכתב ערכו הנוכחי‪.‬‬
‫• בטור הפלט‪ :‬א ההוראה המתאימה לשורה היא הוראת פלט‪ ,‬כגו‬
‫או )"…"(‪ ,In.readInt‬ייכתב הפלט המתאי‪ .‬אחרת‪ ,‬המשבצת המתאימה בטבלה תישאר‬
‫ריקה‪.‬‬
‫‪System.out.println‬‬
‫נית להגמיש מעט את מבנה הטבלה‪ .‬למשל‪ ,‬נית לאחד את שתי העמודות השמאליות ולכתוב את‬
‫מספר השורה יחד ע המשפט שנמצא בשורה זו‪ .‬אבל‪ ,‬חשוב שתהיה בטבלה שורה לכל הוראה של‬
‫התוכנית‪ ,‬וחשוב שיהיה טור עבור כל משתנה וטור עבור הפלט‪.‬‬
‫שאלה ‪3.21‬‬
‫בנו טבלת מעקב אחר מהל הביצוע התוכנית ‪ Sequence‬עבור הקלט ‪ ,5‬וטבלת מעקב עבור הקלט ‪.1‬‬
‫שאלה ‪3.22‬‬
‫נתו קטע התוכנית הבא‪:‬‬
‫;‪1. c = 0‬‬
‫;‪2. a = (a + 5) * a‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-63-‬‬
‫מדעי המחשב‬
‫;‪3. b = b + 2 * a‬‬
‫;)‪4. System.out.println(a‬‬
‫;)‪5. System.out.println(b‬‬
‫;)‪6. System.out.println(c‬‬
‫הניחו שהערכי התחיליי של ‪ b ,a‬ו( ‪) c‬כלומר‪ ,‬ערכיה לפני תחילת ביצוע קטע התוכנית( ה ‪2 ,1‬‬
‫ו(‪ ,3‬בהתאמה‪.‬‬
‫מלאו את טבלת המעקב עבור קטע התוכנית הנתו‪:‬‬
‫פלט‬
‫‪c‬‬
‫‪b‬‬
‫‪a‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫המשפט לביצוע‬
‫מספר השורה‬
‫‪1.‬‬
‫‪2.‬‬
‫‪3.‬‬
‫‪4.‬‬
‫‪5.‬‬
‫‪6.‬‬
‫שאלה ‪3.23‬‬
‫בנו טבלת מעקב אחר מהל ביצוע קטע התוכנית הבא עבור הקלט ‪:2 3‬‬
‫;)"‪1. num1 = In.readInt ("Insert first number‬‬
‫;)"‪2. num2 = In.readInt ("Insert second number‬‬
‫;‪3. sum = num1 + num2‬‬
‫;‪4. sum = sum + sum‬‬
‫;‪5. sum = sum + sum‬‬
‫;)‪6. System.out.println(sum‬‬
‫מהי מטרת קטע התוכנית? )כלומר‪ ,‬מה הוא מבצע עבור שני מספרי שלמי כלשה?(‬
‫שאלה ‪3.24‬‬
‫כתבו קטע תוכנית ובו משפטי השמה אשר גורמי להכפלת ערכו של המשתנה ‪ a‬ב(‪ ,4‬ולחיסור פעמיי‬
‫ערכו של המשתנה ‪ c‬מערכו של המשתנה ‪ .b‬בכל אחד מ הביטויי של משפטי ההשמה‪ ,‬השתמשו א‬
‫ורק בפעולת חיבור אחת או בפעולת חיסור אחת‪ .‬בסו" קטע התוכנית יוצגו ערכי שלושת המשתני‪.‬‬
‫כעת‪ ,‬בחרו ערכי תחיליי כלשה למשתני ‪ b ,a‬ו(‪ ,c‬ובנו טבלת מעקב אחר מהל ביצוע קטע‬
‫התוכנית שכתבת עבור ערכי אלה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-64-‬‬
‫מדעי המחשב‬
‫‪ 3.4‬החלפה בין ערכי משתנים‬
‫בסעי" זה נראה כיצד לפתור בעיה אלגוריתמית בסיסית‪ ,‬שבפתרונה נוכל להיעזר בעתיד‪ ,‬בתו‬
‫אלגוריתמי אחרי‪ .‬כלומר‪ ,‬פתרונה יהווה תבנית שבה נוכל להשתמש שוב ושוב‪ ,‬בהקשרי שוני‪.‬‬
‫בעיה ‪5‬‬
‫מטרת הבעיה ופתרונה‪ :‬חידוד השימוש במשתני‪ ,‬והצגת שימוש במשתנה עזר‪.‬‬
‫במשתני ‪ a‬ו(‪ b‬ערכי תחיליי כלשה‪ .‬כתבו אלגורית ובו הוראות השמה‪ ,‬המבצע החלפה של‬
‫ערכי המשתני‪ .‬כלומר‪ ,‬לאחר ביצוע האלגורית יהיה ערכו של ‪ a‬שווה לערכו התחילי של ‪ b‬וערכו של‬
‫‪ b‬יהיה שווה לערכו התחילי של ‪.a‬‬
‫הנה הצעה לפתרו‪:‬‬
‫‪b ìù åëøò úà a-á íùä .1‬‬
‫‪a ìù åëøò úà b-á íùä .2‬‬
‫ואחרי יישו כקטע תוכנית מחשב‪:‬‬
‫;‪1. a = b‬‬
‫;‪2. b = a‬‬
‫הא קטע זה משיג את המטרה?‬
‫נעקוב אחר מהל ביצוע קטע התוכנית כאשר ערכו התחילי של ‪ a‬הוא ‪ 5‬וערכו התחילי של ‪ b‬הוא ‪:7‬‬
‫‪b‬‬
‫‪a‬‬
‫‪7‬‬
‫‪5‬‬
‫המשפט לביצוע‬
‫מספר‬
‫השורה‬
‫‪7‬‬
‫‪7‬‬
‫;‪a = b‬‬
‫‪1.‬‬
‫‪7‬‬
‫‪7‬‬
‫;‪b = a‬‬
‫‪2.‬‬
‫לא השגנו את המטרה!‬
‫למעשה‪" ,‬איבדנו" את ערכו של ‪ a‬בעקבות ביצוע שורה מספר ‪.1‬‬
‫?‬
‫מה עלינו לעשות כדי למנוע את איבוד ערכו של התחילי של המשתנה ‪?a‬‬
‫נגדיר משתנה נוס"‪) temp ,‬מלשו ‪ ,temporary‬שפירושו זמני‪ ,‬כלומר‪ ,‬משתנה זמני(‪ ,‬אשר ישמש‬
‫לשמירת ערכו התחילי של ‪ a‬במהל ביצוע ההחלפה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-65-‬‬
‫מדעי המחשב‬
‫נשמור תחילה את ערכו התחילי של ‪ a‬במשתנה הזמני ‪ .temp‬אחר כ נשי את ערכו של ‪ b‬ב(‪,a‬‬
‫ולבסו" נשי ב(‪ b‬את הער השמור ב(‪) temp‬הלא הוא הער שהיה ערכו של ‪ a‬בהתחלה(‪.‬‬
‫האלגורית לפתרו הבעיה יהיה‪:‬‬
‫‪a ìù åëøò úà temp-á íùä .1‬‬
‫‪b ìù åëøò úà a-á íùä .2‬‬
‫‪temp ìù åëøò úà b-á íùä .3‬‬
‫ואחרי יישומו‪ ,‬נקבל את קטע התוכנית הבא‪:‬‬
‫;‪1. temp = a‬‬
‫;‪2. a = b‬‬
‫;‪3. b = temp‬‬
‫לש המחשה נוכל לדמיי מצב שבו שמנו את הסוכר בכלי של המלח ואת המלח בכלי של הסוכר‪ ,‬על‬
‫מנת להחלי" ביניה נהיה חייבי להשתמש בכלי עזר!‬
‫סוף פתרון בעיה‬
‫‪5‬‬
‫בבעיה זו למדנו שכדי להחלי" ערכי של שני משתני יש להשתמש במשתנה נוס"‪ ,‬שיעזור בביצוע‬
‫ההחלפה‪ ,‬משתנה כזה נקרא משתנה עזר‪:‬‬
‫משתנה עזר‬
‫הוא משתנה שנועד לסייע בביצוע החלפה בי ערכי משתני‪.‬‬
‫שאלה ‪3.25‬‬
‫א‪ .‬בנו שתי טבלאות מעקב אחר מהלכי ביצוע שני הפתרונות שהוצעו לבעיה ‪ ,5‬עבור הערכי‬
‫התחיליי ‪ 1‬ו(‪ 2‬במשתני ‪ a‬ו( ‪ :b‬טבלה אחת עבור הפתרו השגוי של הבעיה וטבלה אחת עבור‬
‫הפתרו הנכו של הבעיה‪.‬‬
‫ב‪ .‬הביאו שתי דוגמאות קלט שונות אשר עבור כל אחת מה יהיה פלט הפתרו השגוי ‪.5 5‬‬
‫ג‪ .‬הא תיתכ דוגמת קלט שעבורה יהיה פלט הפתרו השגוי ‪ ?5 6‬נמקו‪.‬‬
‫שאלה ‪3.26‬‬
‫נתו קטע התוכנית הבא‪:‬‬
‫;)"‪1. a = In.readInt ("Insert number‬‬
‫;)"‪2. b = In.readInt ("Insert number‬‬
‫;)"‪3. c = In.readInt ("Insert number‬‬
‫;‪4. temp = a‬‬
‫;‪5. a = b‬‬
‫;‪6. b = c‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-66-‬‬
‫מדעי המחשב‬
‫;‪7. c = temp‬‬
‫;)‪8. System.out.println(a‬‬
‫;)‪9. System.out.println(b‬‬
‫;)‪10. System.out.println(c‬‬
‫א‪ .‬בנו טבלת מעקב אחר מהל ביצוע קטע התוכנית עבור הקלט ‪.1 2 3‬‬
‫ב‪ .‬הביאו דוגמת קלט שהפלט המתקבל עבורה הוא ‪.1 2 3‬‬
‫ג‪ .‬מהי מטרת קטע התוכנית?‬
‫ד‪ .‬הא נית להשיג את מטרת קטע התוכנית ללא משפטי השמה כלל? א כ‪ ,‬כיצד?‬
‫להעמקה בתבנית החלפת ערכים בין שני משתנים פנו לעמוד ‪.87‬‬
‫שאלה ‪3.27‬‬
‫מטרת קטע התוכנית הבא היא הצגה כפלט של נתוני הקלט בסדר הפו! לסדר קליטת‪:‬‬
‫;)"‪1. a = In.readInt("Insert number‬‬
‫;)"‪2. b = In.readInt("Insert number‬‬
‫;)"‪3. c = In.readInt("Insert number‬‬
‫;‪4. a = c‬‬
‫;‪5. c = a‬‬
‫;)‪6. System.out.print(a‬‬
‫;)‪7. System.out.print(b‬‬
‫;)‪8. System.out.print(c‬‬
‫א‪ .‬הביאו שתי דוגמאות קלט שונות שעבור כל אחת מה יוצג הפלט הדרוש‪.‬‬
‫ב‪ .‬הביאו דוגמת קלט שעבורה לא יוצג הפלט הדרוש‪.‬‬
‫ג‪ .‬תקנו את הקטע בלי לשנות את משפטי הקלט והפלט‪ ,‬כלומר‪ ,‬השלימו רק את השורות החסרות‬
‫בקטע התוכנית שלהל‪:‬‬
‫;)"‪a = In.readInt("Insert number‬‬
‫;)"‪b = In.readInt("Insert number‬‬
‫;)"‪c = In.readInt("Insert number‬‬
‫השלימו כאן‬
‫;)‪System.out.println(a‬‬
‫;)‪System.out.println(b‬‬
‫;)‪System.out.println(c‬‬
‫בעיה ‪ 3.27‬עסקה בהיפו סדרת איברי‪ .‬להעמקה בתבנית היפוך סדר האיברים בסדרה פנו לעמוד‬
‫‪.91‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-67-‬‬
‫מדעי המחשב‬
‫‪ 3.5‬טיפוסים‬
‫בפתרו הבעיות שהוצגו עד עתה השתמשנו במספרי שלמי‪ .‬ישנ בעיות שכדי לפתור אות יש לבצע‬
‫עיבוד מספרי שעשויי להיות לא שלמי‪ .‬בסעי" זה נראה דוגמאות לעיבוד מספרי ממשיי‬
‫)באנגלית ‪ ,(real‬שה ערכי מטיפוס ממשי‪ .‬בסעי" ‪ 3.1‬נתנו כבר הגדרה למונח טיפוס‪ .‬עתה נרחיב‬
‫אותה באופ הבא‪:‬‬
‫טיפוס של ער )‪ (data type‬מגדיר קבוצת ערכי ואת הפעולות שנית לבצע על הערכי השייכי‬
‫לקבוצה‪.‬‬
‫כלומר‪ ,‬יחד ע הערכי השייכי לטיפוס מסוי יש לציי ג את הפעולות המותרות עליה‪.‬‬
‫בסעי" זה נראה עיבודי ע שני טיפוסי ערכי‪ :‬טיפוס של‪ ,‬המוכר לנו כבר‪ ,‬וטיפוס ממשי‪.‬‬
‫ערכי מטיפוס של ה המספרי השלמי‪ ,‬למשל‪ .-511 ,700 ,0 ,3 :‬ערכי מטיפוס ממשי‬
‫ה מספרי ממשיי למשל‪.73.1 ,17.2 ,5.0 :‬‬
‫ער מטיפוס ממשי כולל תמיד חלק של ושבר‪ ,‬למשל‪ ,‬במספר ‪ 3.5‬החלק השל הוא ‪ 3‬והשבר הוא‬
‫‪ .0.5‬במספר ‪ 5.0‬החלק השל הוא ‪ 5‬והשבר הוא ‪.0‬‬
‫ה על ערכי מטיפוס של וה על ערכי מטיפוס ממשי נית לבצע את הפעולות החשבוניות המוכרות‬
‫לנו )חיבור‪ ,‬חיסור‪ ,‬כפל וחילוק(‪ .‬השימוש בפעולות אלו על ערכי מספריי יוצר ביטוי חשבוני‪.‬‬
‫הזכרנו בסעי" ‪ 3.2‬שביטוי חשבוני מורכב מפעולות חשבו בי ערכי מספריי מפורשי או משתני‬
‫השומרי ערכי מספריי‪ .‬ביטוי חשבוני א" הוא מטיפוס מסוי‪ ,‬של או ממשי‪:‬‬
‫טיפוס של ביטוי חשבוני‬
‫נקבע על(פי טיפוס הערכי המפורשי והמשתני שבו‪ ,‬ועל(פי‬
‫הפעולות שבו‪ .‬א נכלל בביטוי לפחות ער אחד או משתנה מטיפוס ממשי‪ ,‬או שנכללת בו פעולה אשר‬
‫תוצאתה עשויה להיות מספר לא של‪ ,‬אז הביטוי הוא מטיפוס ממשי‪ .‬רק א כל המרכיבי של‬
‫הביטוי ה מטיפוס של אז הביטוי הוא מטיפוס של‪ ,‬למשל‪ ,5*3 ,7+6 :‬או ‪ ,num2(num1‬כאשר‬
‫‪ num1‬ו(‪ num2‬הוגדרו כמשתני שלמי‪.‬‬
‫שימו ♥‪ :‬קבוצת הערכי מטיפוס של היא בעצ תת(קבוצה של קבוצת הערכי מטיפוס ממשי‪.‬‬
‫בהמש הסעי" נדגי ונסביר את החשיבות שבהגדרת קבוצת הערכי השלמי כטיפוס נפרד‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-68-‬‬
‫מדעי המחשב‬
‫בעיה ‪6‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת שימוש במשתני משני הטיפוסי‪ :‬של וממשי‪ .‬היכרות ע תבנית‬
‫חישוב ממוצע‪.‬‬
‫פתחו ויישמו בשלבי אלגורית שהקלט שלו הוא ארבעה מספרי שלמי‪ ,‬והפלט שלו הוא ממוצע‬
‫המספרי‪.‬‬
‫בדיקת דוגמאות‬
‫נוודא כי הבעיה מובנת לנו‪ ,‬בכ שנבח את הפלט עבור שתי דוגמאות קלט שונות‪:‬‬
‫♦ עבור הקלט ‪ 10 20 30 40‬הפלט הוא ‪.25‬‬
‫♦ עבור הקלט ‪ 11 12 13 14‬הפלט הוא ‪.12.5‬‬
‫חלוקה לתתמשימות‬
‫נבצע את החלוקה הבאה לתת(משימות‪:‬‬
‫‪ .1‬קליטת ארבעה מספרים שלמים‪.‬‬
‫‪ .2‬חישוב סכום ארבעת המספרים‪.‬‬
‫‪ .3‬חלוקת הסכום ב‪.4-‬‬
‫‪ .4‬הצגה כפלט של תוצאת החילוק‪.‬‬
‫בחירת משתני‬
‫אילו טיפוסי מתאימי לבעיה זו?‬
‫נגדיר ארבעה משתני שאליה יקלטו נתוני הקלט‪ num3 ,num2 ,num1 :‬ו(‪ .num4‬כיוו שידוע‬
‫שנתוני הקלט ה מספרי שלמי‪ ,‬משתני אלה יהיו מטיפוס של‪ .‬נגדיר משתנה נוס" ‪ ,sum‬אשר‬
‫ישמור את סכו ארבעת נתוני הקלט‪ .‬ג משתנה זה יהיה מטיפוס של‪.‬‬
‫נותר לנו להגדיר את המשתנה אשר ישמור את ממוצע ארבעת המספרי‪ .‬נקרא לו ‪ .average‬ראינו‬
‫בדוגמת הקלט‪/‬פלט השנייה שבחנו שיתכ שמשתנה זה ישמור ער אשר איננו מספר של‪ .‬לכ נגדיר‬
‫את ‪ average‬כמשתנה מטיפוס ממשי‪.‬‬
‫ובס הכל נקבל‪:‬‬
‫‪ – num4, num3, num2, num1‬מטיפוס של‪ ,‬ישמרו את נתוני הקלט‪.‬‬
‫‪ – sum‬מטיפוס של‪ ,‬ישמרו את סכו נתוני הקלט‪.‬‬
‫‪ – average‬מטיפוס ממשי‪ ,‬ישמור את ממוצע נתוני הקלט‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-69-‬‬
‫מדעי המחשב‬
‫האלגורית לפתרו הבעיה יהיה‪:‬‬
‫‪num4, num3, num2, num1-á íéøôñî äòáøà èåì÷ .1‬‬
‫‪sum-á äàöåúä úà íùäå íéøôñîä úòáøà íåëñ úà áùç .2‬‬
‫‪average-á äàöåúä úà íùäå ,sum/4 éãé ìò ,íéøôñîä òöåîî úà áùç .3‬‬
‫‪average ìù åëøò úà èìôë âöä .4‬‬
‫יישו האלגורית‬
‫כדי להגדיר בשפת ‪ Java‬משתנה מטיפוס ממשי‪ ,‬יש להצהיר עליו מטיפוס ‪ ,double‬כ‪:‬‬
‫;‪double average‬‬
‫היישו של הוראה ‪ 3‬הוא על ידי משפט השמה המערב ערכי שלמי וממשיי‪ .‬כיצד מתפרשת‬
‫הוראה כזאת ב(‪?Java‬‬
‫במשתנה מטיפוס ממשי נית לבצע השמה של ביטוי מטיפוס ממשי או מטיפוס של‪ .‬א הביטוי הוא‬
‫מטיפוס של ערכו מוסב לממשי לפני ביצוע ההשמה‪.‬‬
‫למשל‪ ,‬נניח ש(‪ x‬משתנה מטיפוס ממשי‪ ,‬ונתבונ במשפט ההשמה ;‪ .x = 3 + 4‬הביטוי בצד ימי של‬
‫ההשמה הוא ביטוי חשבוני שמורכב רק מערכי שלמי )‪ 3‬ו(‪ .(4‬לכ הביטוי הזה הוא מטיפוס של‬
‫וערכו ‪ .7‬לפני ביצוע ההשמה ערכו מוסב לער הממשי המקביל‪ ,7.0 ,‬ובעקבות ההשמה ערכו של ‪x‬‬
‫הוא ‪.7.0‬‬
‫את הוראה ‪ 3‬היינו רוצי לייש על ידי משפט השמה כזה‪:‬‬
‫;‪average = sum / 4‬‬
‫מאחר שכל המרכיבי של הביטוי ‪ sum/4‬ה שלמי‪ ,‬הרי שהטיפוס של הביטוי כולו הוא של )בפרק‬
‫הבא נלמד מה משמעות פעולת החלוקה עבור ערכי הטיפוס השל(‪ .‬אבל‪ ,‬אנו מעונייני לחשב את‬
‫הביטוי כמספר ממשי ולבצע השמה של תוצאת הביטוי )הממשית( לתו משתנה מטיפוס ממשי‪.‬‬
‫למשל‪ ,‬א ערכו של ‪ sum‬הוא ‪ ,10‬אנו מעונייני לשי את הער הממשי ‪ 2.5‬במשתנה ‪.average‬‬
‫נוכל להשיג זאת א נבקש להתייחס באופ זמני אל אחד ממרכיבי הביטוי כאל ממשי‪ .‬בכ נגרו כי‬
‫ער הביטוי כולו יהיה ממשי‪ .‬כלומר‪ ,‬אנו מבקשי להמיר את ער המשתנה ‪ sum‬לממשי‪ ,‬רק לצור‬
‫חישוב הביטוי‪ .‬פעולת ההמרה )‪ (casting‬ב(‪ Java‬מתבצעת על ידי המילה ‪ double‬הרשומה בתו‬
‫סוגריי משמאל למשתנה ‪ .sum‬נרחיב עוד על המרה בפרק הבא‪.‬‬
‫לכ‪ ,‬הדר הנכונה לייש ב(‪ Java‬את הוראה ‪ 3‬היא על ידי משפט ההשמה הבא‪:‬‬
‫;‪average = (double) sum / 4‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-70-‬‬
‫מדעי המחשב‬
:‫הנה התוכנית השלמה‬
/*
‫התוכנית מחשבת ממוצע של ארבעה ערכים‬
*/
public class FourNumbersAverage
{
public static void main (String [] args)
{
int num1, num2, num3, num4;
// ‫ארבעת נתוני הקלט‬
int sum;
// ‫סכום נתוני הקלט‬
double average;
// ‫ממוצע נתוני הקלט‬
1. num1 = In.readInt ("Insert first number");
2. num2 = In.readInt ("Insert second number");
3. num3 = In.readInt ("Insert third number");
4. num4 = In.readInt ("Insert fourth number");
5. sum = num1 + num2 + num3 + num4;
6. average = (double) sum/4;
7. System.out.println(“The average is: “ + average);
} // main
} // FourNumbersAverage
:1 2 3 5 ‫נבנה טבלת מעקב אחר ביצוע מהל התוכנית עבור הקלט‬
‫מספר‬
‫השורה‬
‫המשפט לביצוע‬
num1
num2
num3
num4
sum
average
?
?
?
?
?
?
‫פלט‬
1.
num1=In.readInt("...");
1
?
?
?
?
?
2.
num2=In.readInt("...");
1
2
?
?
?
?
3.
num3=In.readInt("...");
1
2
3
?
?
?
Insert
third
number
4.
num4=In.readInt("...");
1
2
3
5
?
?
Insert
fourth
number
5.
sum = num1 + ...
1
2
3
5
11
6.
average = ...
1
2
3
5
11
2.75
7.
System.out.println("...
");
1
2
3
5
11
2.75
‫מדעי המחשב‬
-71-
Insert
first
number
Insert
second
number
The
average
is 2.75
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫הפלט המתקבל בשורה האחרונה הוא‪The average is 2.75 :‬‬
‫סוף פתרון בעיה ‪6‬‬
‫דר הפתרו שהוצג לבעיה ‪ 6‬למדנו כמה עובדות חשובות לגבי משתני וטיפוסי משתני‪:‬‬
‫מרכיב חשוב בהגדרת הייעוד של משתנה הוא הגדרת סוג הערכי שיישמרו במשתנה‪ .‬סוג ערכי זה‬
‫נקבע באמצעות טיפוס המשתנה‪ .‬חשוב להתאי את טיפוס המשתנה לתפקידו‪.‬‬
‫משתנה שומר ערכי מטיפוס )סוג( אחד בלבד‪.‬‬
‫יש להצהיר בנפרד על משתני מטיפוסי שוני‪.‬‬
‫בשפת ‪ Java‬מצהירי על משתנה מטיפוס של על ידי המילה ‪ int‬ועל משתנה מטיפוס ממשי על ידי‬
‫המילה ‪.double‬‬
‫במשפט השמה נית לשי במשתנה מטיפוס של רק ער מטיפוס של‪ ,‬ואילו במשתנה מטיפוס‬
‫ממשי נית לשי ג ער מטיפוס של וג ער ממשי‪.‬‬
‫נית לבצע קלט לתו משתנה ממשי בדומה לביצוע קלט לתו משתנה של‪ .‬במקו להשתמש‬
‫בהוראה ‪ In.readInt‬נשתמש בהוראה ‪ .In.readDouble‬למשל‪ ,‬כ‪:‬‬
‫;‪double x‬‬
‫;)"‪x = In.readDouble("Insert a real number‬‬
‫שאלה ‪3.28‬‬
‫בנו טבלת מעקב אחר ביצוע התוכנית ‪ FourNumbersAverage‬עבור הקלט ‪.1 8 6 5‬‬
‫שאלה ‪3.29‬‬
‫פתחו בשלבי אלגורית שהקלט שלו הוא שני מספרי ממשיי והפלט שלו הוא שורה שבה מופיעות‬
‫תוצאות החילוק ב(‪ 4‬של כל אחד משני המספרי‪ ,‬ושורה שבה מופיע סכו תוצאות החילוק‪ .‬ישמו‬
‫את האלגורית בשפת ‪.Java‬‬
‫למשל‪ ,‬עבור הקלט ‪ 1.6 2.84‬הפלט הוא‪0.4 0.71 :‬‬
‫‪1.1‬‬
‫שימו ♥ לבחירת טיפוסי המשתני!‬
‫שאלה ‪3.30‬‬
‫פתחו בשלבי אלגורית שהקלט שלו הוא מחיריה‪ ,‬בשקלי‪ ,‬של שלושה מוצרי‪ ,‬והפלט שלו הוא‬
‫מחיר כולל המתקבל מסכו שלושת המחירי בתוספת ‪ 20%‬מס‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-72-‬‬
‫מדעי המחשב‬
‫להעמקה בתבנית ממוצע של סדרת מספרים פנו לעמוד ‪.93‬‬
‫כדאי לדעת – סיבות לאבחנה בי‪ ,‬של וממשי‪:‬‬
‫אמנ‪ ,‬המספרי השלמי ה תת(קבוצה של המספרי הממשיי‪ ,‬אבל כאשר אנו יודעי כי משתנה‬
‫מסוי עתיד להכיל רק ערכי שלמי רצוי להגדירו מטיפוס של ולא מטיפוס ממשי‪ .‬יש לכ שלוש‬
‫סיבות‪:‬‬
‫♦ בכ שנצהיר על טיפוסו המדויק של משתנה נסייע בהבנת תפקידו ובכ נהפו את התוכנית‬
‫לבהירה וקריאה יותר‪.‬‬
‫♦ ערכי מטיפוס של וערכי מטיפוס ממשי מיוצגי בזיכרו המחשב באופ שונה‪ .‬משו כ‪,‬‬
‫פעולות חישוב על ערכי מטיפוס של ה פשוטות ומהירות יותר מביצוע אות פעולות על ערכי‬
‫מטיפוס ממשי‪.‬‬
‫♦ הגדרת הטיפוסי משמשת את המהדר )הקומפיילר( לבדיקת ההתאמה של משפטי השמה‪ .‬המהדר‬
‫בודק הא טיפוס הביטוי המחושב בצד ימי מתאי לטיפוס הביטוי שלתוכו מבצעי את‬
‫ההשמה‪ .‬משו כ‪ ,‬הצהרה מדויקת על טיפוסו של משתנה יכולה לסייע לנו באיתור שגיאות‪.‬‬
‫‪ 3.6‬קבועים‬
‫בסעי" זה נכיר הרגל תכנותי שמסייע ליצור תוכניות בהירות‪ ,‬קריאות ועמידות בפני שגיאות‪.‬‬
‫כיתה יב'‪ 3‬מתכוננת לסיו לימודיה בביה"ס התיכו‪ .‬בכיתה ‪ 36‬תלמידי‪ .‬הגזבר של הכיתה מקבל‬
‫הצעות מחיר ממארגני אירועי עבור סעיפי שוני בתכנו אירועי חגיגות הסיו‪ .‬למשל‪ ,‬עלות‬
‫רכישת חולצות ע הדפס שנבחר על ידי הכיתה‪ ,‬עלות הדפסת ספר מחזור‪ ,‬עלות צריבת דיסק ע‬
‫השיר שהקליטו לכבוד המסיבה‪ ,‬ועוד ועוד‪ ...‬כל הצעה מתקבלת לפי תלמיד בודד‪ ,‬וכדי לחשב את‬
‫עלותה עבור הכיתה כולה יש להכפיל במספר התלמידי‪.‬‬
‫אחד התלמידי בכיתה כתב לגזבר תוכנית שתסייע לו בחישוב עלות הסעיפי השוני‪ .‬הגזבר יוכל‬
‫לתת לתוכנית כקלט את ההצעות שקיבל עבור הסעיפי השוני‪ ,‬והתוכנית תית כפלט את העלות של‬
‫כל אחד מהסעיפי עבור הכיתה כולה‪ ,‬ואת העלות הכוללת של כל הסעיפי‪.‬‬
‫הנה שלוש ההוראות הראשונות בקטע התוכנית שעוסק בחישוב העלות עבור הכיתה כולה של כל אחד‬
‫מהסעיפי‪:‬‬
‫;‪totalShirtPrice = shirtPrice * 36‬‬
‫;‪totalBookPrice = bookPrice * 36‬‬
‫;‪totalDiskPrice = diskPrice * 36‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-73-‬‬
‫מדעי המחשב‬
‫מאחר שבבית ספר זה נוהגי התלמידי לחגוג את סיו לימודיה באופ מוגז משהו‪ ,‬יש בקטע‬
‫התוכנית הזה עוד שורות רבות‪...‬‬
‫קטע התוכנית הזה מתאי כמוב רק עבור כיתה יב'‪ ,3‬משו שהוא מתייחס באופ ישיר למספר‬
‫התלמידי בכיתה )‪ .(36‬א תרצה ג כיתה יב'‪ ,6‬שבה ‪ 37‬תלמידי‪ ,‬להשתמש בתוכנית‪ ,‬יצטר‬
‫התלמיד שכתב את התוכנית לעבור עליה ולשנות בכל מקו את הער ‪ 36‬ל(‪ .37‬אמנ‪ ,‬סביר שמספר‬
‫הסעיפי אינו באמת מאוד גדול‪ ,‬ולכ שינוי זה לא יגזול זמ רב‪ ,‬א עדיי ייתכ כי יטעה וישכח‬
‫לשנות את אחד הערכי באחד המקומות‪ ,‬ובכ התוכנית תהפו לשגויה‪ ,‬ותית פלט שגוי‪.‬‬
‫בתוכנית גדולה ומורכבת )לדוגמא‪ :‬מערכת לניווט לווייני(‪ ,‬הצור לשנות ער שמופיע באופ מפורש‬
‫במקומות רבי בתוכנית‪ ,‬מאות או אפילו אלפי‪ ,‬הוא בעייתי מאוד‪ ,‬ויש להימנע ממנו במידת‬
‫האפשר‪ ,‬כדי להפו את התוכנית לעמידה יותר‪.‬‬
‫הדר להימנע מכ‪ ,‬היא לתת לער זה ש‪ ,‬ובכל מקו בתוכנית להשתמש בשמו ולא בערכו‪ .‬רק‬
‫במקו אחד בתוכנית נקשר בי הש לער‪ .‬א יהיה צור בשינוי הער‪ ,‬השינוי יתבצע רק במקו‬
‫אחד‪ .‬בשפת ‪ Java‬נוכל לעשות זאת על ידי שימוש בקבוע‪.‬‬
‫הצהרה על קבוע בשפת ‪ Java‬דומה להגדרת משתנה‪ .‬ג עבור קבוע מוקצה מקו בזיכרו ובו נשמר‬
‫ערכו‪ .‬אלא שלא כמו עבור משתנה‪ ,‬ערכו של קבוע לא נית לשינוי במהל התוכנית‪ .‬למשל‪ ,‬בתחילת‬
‫התוכנית שמחשבת את עלות חגיגות הסיו נוכל לכתוב את המשפט הבא‪:‬‬
‫קבוע – מספר התלמידים בכיתה ‪//‬‬
‫;‪final int NUM_OF_STUDENTS = 36‬‬
‫מעתה נתרגל להשתמש בקבועי בתוכניות שנכתוב‪ ,‬כפי שמודג כבר בתוכנית הראשונה בפרק הבא‪,‬‬
‫פרק ‪.4‬‬
‫קבוע‬
‫)‪ (constant‬הוא תא זיכרו‪ ,‬אשר מאותחל מיד ע ההצהרה עליו‪ ,‬וערכו התחילי לא נית‬
‫לשינוי‪.‬‬
‫להצהרה על קבוע נכתוב את המילה ‪ final‬בתחילת שורת ההצהרה‪ ,‬למשל‪.final int x = 5; :‬‬
‫נהוג לכתוב את ש הקבוע באותיות גדולות‪ .‬א ש הקבוע כולל יותר ממילה אחת‪ ,‬נהוג להפריד את‬
‫המילי על ידי קו תחתו‪.‬‬
‫סיכום‬
‫בפרק זה פיתחנו אלגוריתמי ראשוניי לביצוע במחשב‪ ,‬ויישמנו אות על ידי תוכנית מחשב בשפת‬
‫‪ .Java‬הכרנו את אבני הבניי של אלגוריתמי למחשב‪ :‬משתני‪ ,‬אשר בה נשמרי נתוני ותוצאות‬
‫חישוב‪ ,‬הוראות קלט והוראות פלט‪ ,‬אשר מורות על קליטה של נתוני והצגה כפלט של נתוני‪,‬‬
‫והוראות השמה‪ ,‬אשר מורות על ביצוע חישובי ושמירת תוצאת במשתני‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-74-‬‬
‫מדעי המחשב‬
‫משתנה )‪ (variable‬הוא תא זיכרו אשר במהל ביצוע אלגורית נית לשמור בו ער ולקרוא את‬
‫הער השמור בו‪ .‬הער השמור במשתנה נקרא ער! המשתנה‪ .‬פנייה למשתנה מתבצעת באמצעות ש‬
‫הנית לו על ידי ְמ ַפ ֵ‪9‬ח האלגורית‪ ,‬ש זה הוא ש המשתנה‪.‬‬
‫במשתנה נשמרי ערכי מטיפוסי אשר מתאימי לתפקידו של המשתנה‪ .‬טיפוס הערכי הנשמרי‬
‫במשתנה הוא טיפוס המשתנה‪.‬‬
‫טיפוס של ער! )‪ (data type‬מגדיר ערכי אפשריי ואת הפעולות שנית לבצע עליה‪ .‬בפרק זה‬
‫היכרנו ערכי מטיפוס של )כלומר‪ ,‬מספרי שלמי( וערכי מטיפוס ממשי )כלומר‪ ,‬מספרי‬
‫ממשיי(‪ .‬כל טיפוס מיוצג בזיכרו המחשב בצורה שונה‪.‬‬
‫בחירת טיפוס של משתנה נעשית כחלק מהגדרת הייעוד של המשתנה‪ .‬סוג הערכי נקבע על פי נתוני‬
‫שייקלטו במשתנה או ערכי )של פעולות חישוב( שיושמו במשתנה‪ ,‬למשל‪ ,‬כאשר יש לשמור במשתנה‬
‫תוצאת ממוצע של שני מספרי‪ ,‬יהיה מתאי להגדירו כמשתנה מטיפוס ממשי‪.‬‬
‫כדי לעדכ את ערכו של משתנה נשתמש בפעולת השמה‪ .‬בפעולה זו מחושב ערכו של ביטוי ותוצאת‬
‫החישוב נשמרת בתו משתנה‪ .‬הביטוי לחישוב יכול להיות ביטוי פשוט‪ ,‬כגו ער מפורש או ש של‬
‫משתנה‪ ,‬או ביטוי המורכב מפעולות שונות בי ערכי ומשתני‪ .‬משפט השמה משפיע רק על ערכו של‬
‫המשתנה המיועד לשמור את תוצאת החישוב‪ ,‬ולא על משתני אחרי המעורבי בביטוי המחושב‪.‬‬
‫המשתנה המיועד לשמור את תוצאת החישוב יכול ג להופיע כחלק מהביטוי המחושב‪ .‬במקרה זה‪,‬‬
‫לצור חישוב הביטוי נעשה שימוש בערכו לפני ההשמה‪ .‬לכ‪ ,‬ערכו החדש תלוי בערכו היש‪.‬‬
‫מת ער התחלתי למשתנה נקרא אתחול‪.‬‬
‫קליטת נתוני נעשית על ידי הוראת קלט‪ ,‬המבצעת השמה של נתו הנקרא מהקלט לתו משתנה‪.‬‬
‫הצגת נתוני נעשית באמצעות הוראת פלט‪ ,‬באמצעותה נית להציג לפלט הודעות‪ ,‬ערכי משתני‪,‬‬
‫וערכי ביטויי‪.‬‬
‫ביטוי אשר מורכב מפעולות חשבו בי ערכי ומשתני מטיפוס של או ממשי נקרא ביטוי חשבוני‪.‬‬
‫טיפוס של ביטוי חשבוני נקבע על פי טיפוסי הערכי והמשתני שבו‪ ,‬ועל פי הפעולות שבו‪.‬‬
‫פתרו‪ ,‬בעיה אלגוריתמית נעשה בשלבי‪:‬‬
‫‪ .1‬בחינת דוגמאות קלט שונות והבנת הקשר בי הקלט לפלט‪.‬‬
‫‪ .2‬חלוקת משימות האלגורית לתתמשימות‪.‬‬
‫‪ .3‬בחירת משתני – תפקיד‪ ,‬ש וטיפוס לכל משתנה‪.‬‬
‫‪ .4‬כתיבת האלגורית‪.‬‬
‫‪ .5‬כתיבת התוכנית ליישו האלגורית‪.‬‬
‫לאחר כתיבת התוכנית כדאי לבצע מעקב אחר מהל ביצועה עבור דוגמאות קלט מגוונות‪ ,‬כדי‬
‫להשתכנע בנכונותה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-75-‬‬
‫מדעי המחשב‬
‫מעקב מסודר אחר מהל ביצוע של אלגורית או תוכנית נעשה באמצעות טבלת מעקב‪ .‬בטבלת מעקב‬
‫מפורטי השינויי בערכי המשתני והפלט בעקבות ביצוע כל אחת ואחת מהוראות האלגורית או‬
‫התוכנית‪.‬‬
‫ער! תחילי של משתנה ביחס לתוכנית או לקטע תוכנית הוא הער השמור בו מיד לפני תחילת ביצוע‬
‫אותה תוכנית או אותו קטע תוכנית‪ .‬מצב תחילי של תוכנית או קטע תוכנית מתאר את ערכ התחילי‬
‫של כל המשתני לפני תחילת הביצוע‪.‬‬
‫המצב התחילי מתואר בשורה הראשונה של טבלת המעקב‪ .‬עבור תוכנית שלמה הערכי התחיליי של‬
‫המשתני שלא אותחלו ע הצהרת אינ ידועי )נסמ על ידי סימ שאלה )?( (‪ .‬עבור קטע תוכנית‪,‬‬
‫נקבל מראש את הערכי התחיליי של כל המשתני ונכתוב אות בשורה הראשונה של טבלת‬
‫המעקב‪.‬‬
‫בכל אלגורית או תוכנית כדאי לכלול תיעוד‪ ,‬כדי להסביר לקורא‪ .‬יש לצר" לכותרת האלגורית או‬
‫התוכנית הערה המתארת את המטרה‪ ,‬כלומר‪ ,‬את המשימה אותה מיועד הפתרו למלא‪ .‬את שמות‬
‫המשתני נבחר על פי תפקידיה‪ ,‬ונוסי" הערות המתארות את תפקידיה‪ .‬ההערות מיועדות לקורא‬
‫בלבד‪.‬‬
‫במהל הפרק הצגנו שאלות רבות ומגוונות‪ ,‬אות אפשר לחלק לשני סוגי‪:‬‬
‫♦ שאלות פיתוח ויישו של אלגורית‪.‬‬
‫♦ שאלות ניתוח אלגורית או קטע תוכנית נתו‪.‬‬
‫בשאלות הפיתוח והיישו נדרש פיתוח מלא בשלבי‪ ,‬או פיתוח חלקי )עד שלב החלוקה לתת(‬
‫משימות‪ ,‬או עד שלב בחירת המשתני או עד שלב כתיבת האלגורית‪ ,‬מבלי ליישמו(‪ .‬בשאלות‬
‫הניתוח נדרש מעקב אחר מהל ביצוע עבור קלט נתו‪ ,‬הבאת דוגמת קלט עבור פלט נתו‪ ,‬תיאור‬
‫מטרת קטע תוכנית או משימות ניתוח אחרות‪ .‬ההתנסות בשני הסוגי של השאלות מפתחת את‬
‫היכולת להבי אלגורית ולפתח‪ ,‬ובעקבות כ את היכולת לפתרו בעיות‪.‬‬
‫בפרק הבא נפתור בעיות מורכבות יותר מהבעיות שהוצגו בפרק זה ונרחיב בפירוט השלבי השוני‬
‫של תהלי פיתוח אלגורית ויישומו על ידי תוכנית‪ .‬בפרקי הבאי אחר כ יוצגו בעיות מורכבות‬
‫יותר ויותר‪ .‬כדי להתמודד ע בעיות מורכבות חשובה לא רק היכולת לכתוב תוכנית מחשב‪ ,‬אלא‬
‫חשובות ג היכולת להתקד בשלבי‪ ,‬והיכולת לנתח ולהבי אלגורית )או קטע תוכנית( נתו‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-76-‬‬
‫מדעי המחשב‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪3‬‬
‫בחלק זה נפרט את כללי שפת ‪ Java‬שלמדנו בפרק ‪ .3‬פרט להוראות הקלט‪ ,‬הכללי המוצגי כא ה‬
‫הכללי של שפת ‪ Java‬הסטנדרטית‪ ,‬ואינ הכללי של סביבת עבודה מסוימת‪ ,‬כגו ד"ר ג'אווה‪ .‬איננו‬
‫יכולי להניח שכל המשתמשי בספר זה עובדי באותה הסביבה‪ .‬לכ‪ ,‬לאור הספר כולו אנו מציגי‬
‫את כללי שפת ‪ Java‬הסטנדרטית‪ .‬ע זאת‪ ,‬מאחר שהוראות הקלט מהמקלדת בשפת ‪ Java‬ה‬
‫מורכבות למדי‪ ,‬בחרנו לחרוג מכלל הסטנדרטיות בנקודה זו‪.‬‬
‫מבנה תוכנית בשפת ‪_______________________________________________Java‬‬
‫♦ תוכנית בשפת ‪ Java‬היא אוס" של מחלקות )מחלקה אחת או יותר(‪ .‬כאשר אחת המחלקות היא‬
‫המחלקה הראשית‪ .‬המחלקה הראשית מכילה את הפעולה הראשית )‪ ,(main‬ממנה מתחיל ביצוע‬
‫התוכנית ובתחומה נכתבי משפטי התוכנית‪ ,‬באופ הבא‪:‬‬
‫‪public class TheNameOfTheProgram‬‬
‫{‬
‫)‪public static void main (String[] args‬‬
‫{‬
‫גוף התוכנית‬
‫סוף ‪// main‬‬
‫}‬
‫סוף המחלקה הראשית ‪//‬‬
‫}‬
‫♦ כל הוראה בתוכנית מסתיימת בסימ ; )נקודה(פסיק(‪.‬‬
‫הערות_____________________________________________________________‬
‫בי המשפטי השוני של התוכנית מופיעות הערות )‪ .(comments‬ההערות מיועדות למתכנת‬
‫ולמשתמש בתוכנית‪ ,‬א לא למחשב‪ .‬ה עוזרות בקריאת התוכנית והבנתה‪ .‬הערה המתחילה בסימ‬
‫‪ //‬נמשכת עד סופה של השורה‪ .‬הערה התחומה בי הסימני *‪ /‬ו(‪ */‬יכולה להתמש על פני כמה‬
‫שורות‪ .‬למשל‪:‬‬
‫‪*/‬‬
‫תוכנית לחישוב ממוצע‬
‫*‪/‬‬
‫משתנה השומר את הממוצע ‪//‬‬
‫שמות_____________________________________________________________‬
‫♦ שמות מרכיבי התוכנית המוגדרי על ידי המתכנת )שמות המשתני‪ ,‬שמות המחלקות המוגדרות‬
‫על ידי המתכנת‪ ,‬ובפרט ש המחלקה הראשית‪ ,‬כלומר ש התוכנית( נבחרי על ידי המתכנת‪ .‬אנו‬
‫נוהגי לכנות משתני בשמות משמעותיי‪ ,‬ולעיתי נצמיד שתי מילי או יותר כדי ליצור ש‬
‫משמעותי וברור יותר‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-77-‬‬
‫מדעי המחשב‬
‫♦ על פי המוסכמות המקובלות לגבי מת שמות‪ ,‬לא נהוג לקצר שמות‪ .‬למשל‪ ,‬א המשתנה מתעתד‬
‫להכיל בתוכו ממוצע נעדי" לקרוא לו ‪ average‬ולא ‪ .avg‬כ ג לגבי שמות של תוכניות‪.‬‬
‫♦ ש מחלקה יתחיל באות גדולה‪ ,‬ש משתנה יתחיל באות קטנה‪ .‬שאר האותיות יהיו קטנות‪ ,‬אלא‬
‫א הש מורכב מכמה מילי שהוצמדו זו לזו‪ .‬במקרה זה נשתמש באות גדולה באות הראשונה‬
‫של כל מילה שאינה הראשונה‪ .‬למשל‪ ReadWrite ,sum ,numOfChildren ,‬וכדומה‪ .‬הקפדה על‬
‫כללי אלה עוזרת ליצור תוכנית ברורה וקריאה יותר‪.‬‬
‫♦ קיימת ב(‪ Java‬קבוצת שמות מיוחדת הנקראת מילי שמורות )‪ .(reserved words‬לשמות אלה‬
‫משמעות מוגדרת ב(‪ ,Java‬ואסור להשתמש בה לשמות אחרי‪ .‬למשל‪ ,‬אסור להשתמש במילה‬
‫‪ class‬כש של משתנה כי היא מילה שמורה למחלקה‪ .‬בתוכניות המופיעות בספר זה‪ ,‬מילה‬
‫שמורה כתובה באותיות מודגשות‪.‬‬
‫♦ השמות בתוכנית חייבי להיות מופרדי על ידי תו רווח אחד לפחות‪ .‬למשל‪ ,‬לא נוכל לכתוב‪:‬‬
‫‪.publicclassmyProgram‬‬
‫ערכי ונתוני בתוכנית ‪Java‬‬
‫טיפוסי___________________________________________________________‬
‫♦ הערכי המופיעי בתוכנית וערכי המשתני והקבועי מסווגי לטיפוסי )‪ .(types‬הטיפוסי‬
‫שהכרנו עד עכשיו ה של )‪ (int‬וממשי )‪.(double‬‬
‫♦ ער! מטיפוס של המופיע בתוכנית ‪ Java‬הוא מספר של כשלשמאלו יכול להופיע הסימ פלוס‬
‫)‪ (+‬או הסימ מינוס )((‪ .‬א המספר שלילי יש לכתוב את הסימ מינוס‪ .‬כתיבת הסימ פלוס אינה‬
‫הכרחית )זוהי ברירת המחדל‪ ,‬כלומר‪ ,‬א לא כתוב א" סימ‪ ,‬המספר מפורש כמספר חיובי(‪.‬‬
‫למשל‪ ,‬אלה ערכי חוקיי מטיפוס של בשפת ‪.0 ,-3 ,+156 ,156 :Java‬‬
‫♦ ער! מטיפוס ממשי המופיע בתוכנית ‪ Java‬מורכב מארבעה חלקי‪:‬‬
‫‪ .1‬סימ ‪ +‬או הסימ ‪) -‬כתיבת הסימ ‪ +‬אינה הכרחית כאשר המספר חיובי(‪.‬‬
‫‪ .2‬סדרה לא ריקה של ספרות המייצגת את החלק השל של המספר‪.‬‬
‫‪ .3‬נקודה עשרונית‪.‬‬
‫‪ .4‬סדרה לא ריקה של ספרות המייצגת את השבר של המספר‪.‬‬
‫למשל‪ ,‬אלה ערכי חוקיי מטיפוס ממשי בשפת ‪ .+5.3 ,7.0 ,-0.2 ,1.53 :Java‬הערכי ‪ .5‬או ‪3.‬‬
‫אינ ערכי ממשיי חוקיי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-78-‬‬
‫מדעי המחשב‬
‫♦ מספר של יכול להיות מיוצג בשפת ‪ Java‬על ידי ער מטיפוס של או ער מטיפוס ממשי‪ .‬למשל‪,‬‬
‫המספר השל שלוש יכול להיות מיוצג על ידי הער מטיפוס של ‪ ,3‬וג על ידי הער מטיפוס‬
‫ממשי ‪.3.0‬‬
‫משתני___________________________________________________________‬
‫♦ הצהרה על משתני תתבצע באמצעות הצהרה על הטיפוס ועל שמו‪ ,‬כאשר המילה ‪ int‬משמשת‬
‫להצהרה על משתנה מטיפוס של‪ ,‬והמילה ‪ double‬משמשת להצהרה על משתנה מטיפוס ממשי‪.‬‬
‫לדוגמה‪:‬‬
‫;‪int num‬‬
‫♦ נית להצהיר על כמה משתני באותה השורה א תפקיד דומה‪ ,‬על ידי הפרדה באמצעות פסיק‪.‬‬
‫לדוגמה‪:‬‬
‫;‪double num1, num2‬‬
‫קבועי____________________________________________________________‬
‫קבוע הוא תא זיכרו שערכו נקבע מיד ע ההצהרה ואינו יכול יותר להשתנות‪ .‬ההצהרה על קבוע‬
‫נעשית בדומה להצהרת משתנה‪ ,‬א מקדימה אותה המילה ‪ ,final‬והיא כוללת אתחול של‬
‫המשתנה‪ ,‬למשל‪:‬‬
‫;‪final int MY_CONSTANT_INTEGER = 3‬‬
‫הוראות ביצוע של תוכנית בשפת ‪Java‬‬
‫קלט______________________________________________________________‬
‫♦ ליישו הוראת קלט של ער! של נשתמש בפעולה ‪ .In.readInt‬ליישו הוראת קלט של ער!‬
‫ממשי נשתמש בפעולה ‪ .In.readDouble‬הוראת הקלט כוללת ש של משתנה בו יישמר הער‬
‫הנקלט‪ .‬למשל‪ ,‬המבנה הכללי של הוראת קלט של ער של הוא‪:‬‬
‫)(‪ = In.readInt‬שם משתנה‬
‫♦ ביצוע פעולת קלט גור לעצירת התוכנית עד לקליטת ער מתאי‪ .‬לאחר קליטתו הוא נשמר בתו‬
‫המשתנה‪.‬‬
‫♦ נית לשלב בתו פעולת קלט ג הודעה המנחה את המשתמש לגבי הקלט לו מצפה התוכנית‪,‬‬
‫למשל‪:‬‬
‫;)"‪x = In.readInt("Insert a positive integer number‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-79-‬‬
‫מדעי המחשב‬
‫פלט______________________________________________________________‬
‫♦ הוראת פלט מיושמת ב(‪ java‬על ידי הפעולה ‪) System.out.print‬שאינה גורמת למעבר שורה‬
‫בפלט( או הפעולה ‪) System.out.println‬שמדפיסה את המבוקש בשורה נפרדת(‪.‬‬
‫למשל‪:‬‬
‫;)"‪System.out.print("a message‬‬
‫כאשר ‪ x‬משתנה‬
‫;)‪System.out.println(x‬‬
‫♦ בעזרת הסימ ‪ +‬נית לצר" להודעה שברצוננו להדפיס ג פריטי נוספי להדפסה‪ ,‬למשל‪:‬‬
‫;)‪System.out.print("The sum is: " + sum‬‬
‫השמה_____________________________________________________________‬
‫♦ המבנה הכללי של משפט השמה ב(‪ Java‬הוא‪:‬‬
‫;ביטוי = משתנה‬
‫♦ הביטוי המופיע מימי לסימ =‪ ,‬הוא ער מפורש‪ ,‬משתנה או ביטוי מורכב‪ .‬א הביטוי הוא ביטוי‬
‫חשבוני סדר הקדימויות של פעולות החשבו זהה לסדר הקדימויות המקובל במתמטיקה‪.‬‬
‫♦ במשתנה מטיפוס ממשי אפשר לשי ער מטיפוס של או ממשי‪ .‬במשתנה מטיפוס של אפשר‬
‫לשי רק ערכי שלמי‪.‬‬
‫שאלות נוספות‬
‫שאלות נוספות לסעיף ‪3.1‬‬
‫‪ .1‬כתבו תוכנית להדפסת האות ‪ L‬מכוכביות באופ הבא‪:‬‬
‫*‬
‫*‬
‫* * *‬
‫‪ .2‬נתו קטע התוכנית הבא‪:‬‬
‫;)(‪left = In.readInt‬‬
‫;)(‪right = In.readInt‬‬
‫;)‪" + left‬‬
‫" ‪System.out.println(right +‬‬
‫נניח שנתוני הקלט שהוקלדו ה ‪: 8 10‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-80-‬‬
‫מדעי המחשב‬
‫א‪ .‬מה יהיו ערכי המשתני לאחר ביצוע משפטי הקלט?‬
‫ב‪ .‬מה יהיה הפלט?‬
‫‪ .3‬נתו קטע התוכנית הבא‪:‬‬
‫;)(‪num1 = In.readInt‬‬
‫;)(‪num2 = In.readInt‬‬
‫;)(‪num3 = In.readInt‬‬
‫;)‪" + num3‬‬
‫;)‪" + num3‬‬
‫" ‪System.out.println(num2 +‬‬
‫" ‪" + num1 +‬‬
‫" ‪System.out.println(num3 +‬‬
‫תנו דוגמת קלט עבורה הפלט הוא‪:‬‬
‫‪9‬‬
‫‪9‬‬
‫‪5‬‬
‫‪5‬‬
‫‪9‬‬
‫‪ .4‬פתחו בשלבי אלגורית אשר הקלט שלו הוא שלושה מספרי שלמי‪ ,‬והפלט שלו הוא שלוש‬
‫שורות של מספרי‪ :‬בשורה הראשונה יופיע נתו הקלט השלישי‪ ,‬בשורה השנייה יופיעו נתוני‬
‫הקלט השלישי והשני‪ ,‬ובשורה השלישית יופיעו נתוני הקלט השלישי השני והראשו‪ .‬ישמו את‬
‫האלגורית בשפת ‪.Java‬‬
‫‪ .5‬נתו קטע התוכנית הבא‪:‬‬
‫;)(‪right = In.readInt‬‬
‫;)(‪left = In.readInt‬‬
‫;)(‪middle = In.readInt‬‬
‫;)‪System.out.println(right + " " + middle+ " " + left‬‬
‫א‪ .‬הביאו דוגמת קלט שעבורה הפלט זהה לקלט‪.‬‬
‫ב‪ .‬הביאו דוגמת קלט שעבורה הפלט שונה מהקלט‪.‬‬
‫שאלות נוספות לסעיף ‪3.2‬‬
‫‪ .1‬כתבו משפטי השמה לביצוע הפעולות הבאות‪:‬‬
‫א‪ .‬השמה במשתנה ‪ a‬של סכו ערכי המשתני ‪ c‬ו(‪.b‬‬
‫ב‪ .‬השמה במשתנה ‪ c‬של ההפרש בי פעמיי ערכו של המשתנה ‪ d‬לבי ער המשתנה ‪.b‬‬
‫ג‪ .‬השמה במשתנה ‪ e‬של סכו ערכו של המשתנה ‪ a‬וחמש פעמי ערכו של המשתנה ‪.f‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-81-‬‬
‫מדעי המחשב‬
‫‪ .2‬מחיר כרטיס כניסה לבריכת השחייה העירונית הוא ‪ = 20‬למבוגר ו(‪ = 12‬לילד‪ .‬פתחו בשלבי‬
‫אלגורית אשר הקלט שלו הוא מספר מבוגרי ומספר ילדי‪ ,‬והפלט שלו הוא הסכו לגביה עבור‬
‫הכרטיסי‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלות נוספות לסעיף ‪3.3‬‬
‫‪ .1‬נתו משפט ההשמה הבא‪:‬‬
‫;‪a = a + b + c + d‬‬
‫א‪ .‬כתבו במקו משפט השמה זה סדרה של משפטי השמה אשר הביטוי בצד ימי של כל אחד‬
‫מה כולל סימ חיבור אחד בלבד‪.‬‬
‫ב‪ .‬בנו טבלת מעקב אחר מהל ביצוע סדרת משפטי ההשמה שכתבת בסעי" א‪ ,‬עבור הערכי‬
‫התחיליי ‪ 4 2 5 1‬במשתני ‪ c ,b ,a‬ו(‪ d‬בהתאמה‪.‬‬
‫‪ .2‬כתבו משפטי השמה לביצוע הפעולות הבאות‪:‬‬
‫א‪ .‬הקטנת ערכו של ‪ a‬ב(‪.5‬‬
‫ב‪ .‬הגדלת ערכו של ‪ b‬פי ‪.3‬‬
‫ג‪ .‬הקטנת ערכו של המשתנה ‪ a‬בערכו של המשתנה ‪.b‬‬
‫‪ .3‬עבור כל זוג משפטי השמה נתו כתבו משפט השמה אחד שמשיג אותה מטרה‪:‬‬
‫א‪.‬‬
‫;‪n = m + 5‬‬
‫;‪n = n - 2‬‬
‫ב‪.‬‬
‫;‪v = v + w‬‬
‫;‪v = v * 5‬‬
‫ג‪.‬‬
‫;‪a = (a + 2)* 3‬‬
‫;‪a = a * 4 – 9‬‬
‫ד‪.‬‬
‫;‪x = x - 2‬‬
‫;‪x = t -3‬‬
‫שאלות נוספות לסעיף ‪3.4‬‬
‫‪ .1‬נתו קטע התוכנית הבא‪:‬‬
‫;)(‪x = In.readInt‬‬
‫;)(‪y = In.readInt‬‬
‫;‪x = x + y‬‬
‫;‪y = x – y‬‬
‫;‪x = x – y‬‬
‫;)‪" + y‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-82-‬‬
‫" ‪System.out.println(x +‬‬
‫מדעי המחשב‬
‫א‪ .‬מהו פלט קטע התוכנית עבור הקלט ‪ ?13 5‬היעזרו בטבלת מעקב למציאת הפלט‪.‬‬
‫ב‪ .‬נסחו את הבעיה האלגוריתמית שקטע תוכנית זה פותר‪.‬‬
‫ג‪ .‬כתבו קטע תוכנית אחר לפתרו הבעיה‪.‬‬
‫‪ .2‬מטרת סדרת המשפטי הבאה היא כי אחרי ביצועה יהיו במשתני ‪ c ,d ,e‬ו(‪ b‬ערכי המשתני ‪,d‬‬
‫‪ ,b ,c‬ו(‪ a‬בהתאמה‪.‬‬
‫;‪b = a‬‬
‫;‪c = b‬‬
‫;‪d = c‬‬
‫;‪e = d‬‬
‫א‪ .‬תנו דוגמה של ערכי תחיליי למשתני אשר עבורה לא מושגת המטרה‪.‬‬
‫ב‪ .‬מה מתבצע בסדרת המשפטי הנתונה? הא היא גורמת ל"אובד" ערכי משתני?‬
‫ג‪ .‬כתבו סדרת משפטי שעבורה תושג המטרה‪.‬‬
‫שאלות נוספות לסעיף ‪3.5‬‬
‫‪ .1‬במשרדי הממשלה עבור כל טופס שפקיד ממלא הוא מקבל שכר של ‪. = 6.3‬‬
‫פתחו בשלבי אלגורית אשר הקלט שלו הוא מספר הטפסי שעל הפקיד למלא‪ ,‬והפלט שלו הוא‬
‫השכר שהפקיד יקבל‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫למשל‪ ,‬עבור הקלט ‪ 55‬הפלט הדרוש הוא ‪.346.5‬‬
‫‪ .2‬פתחו בשלבי אלגורית אשר הקלט שלו הוא מספר חיובי של המציי אור צלע של ריבוע‪,‬‬
‫והפלט שלו הוא שטח העיגול החסו בריבוע‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫‪ .3‬עקב איחור בעונת הגשמי החליטו יצרני המטריות על מבצע מכירות בהנחה‪ .‬יש לפתח ולייש‬
‫אלגורית אשר הקלט שלו הוא מחיר מטריה‪ ,‬אחוז ההנחה למטריה‪ ,‬ומספר מטריות מבוקש‪,‬‬
‫והפלט שלו הוא הסכו הכולל לתשלו‪.‬‬
‫נבחר את המשתנה הבא מטיפוס של‪:‬‬
‫‪ – num‬ישמור את מספר המטריות המבוקש‬
‫ואת המשתני הבאי מטיפוס ממשי‪:‬‬
‫‪ – price‬ישמור את המחיר של המטריה‬
‫‪ – discount‬ישמור את אחוז ההנחה‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-83-‬‬
‫מדעי המחשב‬
‫‪ – newPrice‬ישמור את המחיר של מטריה אחת לאחר הנחה‬
‫‪ – total‬ישמור את הסכו הכולל לתשלו‬
‫פותח אלגורית שהוראותיו מיושמות על ידי משפטי התוכנית הבאי‪:‬‬
‫;)"?‪num = In.readInt ("How many umbrellas‬‬
‫;)"‪price = In.readInt ("Insert the price of one umbrella‬‬
‫;)"‪discount = In.readInt ("Insert discount percentage per umbrella‬‬
‫; ______________ = ‪newPrice‬‬
‫; ________________ = ‪total‬‬
‫;)‪System.out.println("Total sum is" + total‬‬
‫השלימו את משפטי התוכנית‪.‬‬
‫שאלות מסכמות לפרק ‪3‬‬
‫‪ .1‬נית להמיר ער של טמפרטורה המיוצג במעלות פרנהייט )‪ (F‬לייצוג במעלות צלזיוס )‪ (C‬על ידי‬
‫הנוסחה‪.C = 5/9 (F-32) :‬‬
‫פתחו בשלבי אלגורית אשר הקלט שלו הוא טמפרטורה הנתונה במעלות פרנהייט‪ ,‬והפלט שלו‬
‫הוא ער הטמפרטורה במעלות צלזיוס‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫‪ .2‬פתחו בשלבי )אי צור לייש על ידי תוכנית( אלגורית אשר הקלט שלו הוא אורכי שני‬
‫הניצבי והיתר במשולש ישר זווית‪ ,‬והפלט שלו הוא היק" המשולש ושטח המשולש‪.‬‬
‫‪ .3‬פתחו בשלבי אלגורית שהקלט שלו הוא שלושה מספרי שלמי‪ ,‬והפלט שלו הוא כל הסידורי‬
‫האפשריי של שלושת המספרי‪ .‬הניחו כי שלושת המספרי שוני זה מזה‪ .‬ישמו את‬
‫האלגורית בשפת ‪.Java‬‬
‫הדרכה‪ :‬חלקו את הפלט לשלושה חלקי‪ :‬הסידורי שמתחילי בנתו הקלט הראשו‪ ,‬הסידורי‬
‫שמתחילי בנתו הקלט השני‪ ,‬הסידורי שמתחילי בנתו הקלט השלישי‪.‬‬
‫למשל‪ ,‬עבור הקלט‪ 1 8 30 :‬הפלט המתאי הוא‪:‬‬
‫‪8‬‬
‫‪1‬‬
‫‪30‬‬
‫‪30‬‬
‫‪1‬‬
‫‪1‬‬
‫‪8‬‬
‫‪1‬‬
‫‪30‬‬
‫‪8‬‬
‫‪8‬‬
‫‪1‬‬
‫‪30‬‬
‫‪1‬‬
‫‪8‬‬
‫‪30‬‬
‫‪8‬‬
‫‪30‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-84-‬‬
‫מדעי המחשב‬
‫‪ .4‬נתו קטע התוכנית הבא‪:‬‬
‫;)(‪a = In.readInt‬‬
‫;)(‪b = In.readInt‬‬
‫;‪a = a + b‬‬
‫;)‪System.out.println(a‬‬
‫;‪a = a – 2 * b‬‬
‫;)‪System.out.println(a‬‬
‫;‪a = a + b‬‬
‫;)‪System.out.println(a‬‬
‫א‪ .‬מהו פלט קטע התוכנית עבור הקלט ‪ ?3 2‬היעזרו בטבלת מעקב כדי לענות על השאלה‪.‬‬
‫ב‪ .‬תנו דוגמת קלט אשר הפלט עבורה הוא ‪.3 1 2‬‬
‫ג‪ .‬נסחו במילי את היחס בי הפלט לקלט שמוגדר על ידי קטע התוכנית‪.‬‬
‫‪ .5‬הזזה מעגלית של סדרת ערכי משמעותה העברת הער האחרו בסדרה לתחילתה‪ .‬למשל‪ ,‬לאחר‬
‫ביצוע הזזה מעגלית על הסדרה ‪ 1 2 3 4‬מתקבלת הסדרה‪ .4 1 2 3 :‬הזזה מעגלית היא תבנית‬
‫שיכולה לשמש בפתרו בעיות אלגוריתמיות אחרות‪.‬‬
‫נתו קטע התוכנית הבא שהקלט שלו הוא שלושה מספרי ומטרתו הוא לתת כפלט את תוצאת‬
‫ההזזה המעגלית על סדרת נתוני הקלט‪:‬‬
‫;)"‪x = In.readInt("Insert first element‬‬
‫;)"‪y = In.readInt("Insert second element‬‬
‫;)"‪z = In.readInt("Insert third element‬‬
‫;‪x = y‬‬
‫;‪y = z‬‬
‫;‪z = x‬‬
‫;)‪" + z‬‬
‫" ‪" + y +‬‬
‫" ‪System.out.println(x +‬‬
‫קטע התוכנית שגוי‪.‬‬
‫א‪ .‬הסבירו מדוע הקטע שגוי‪.‬‬
‫ב‪ .‬תקנו את התוכנית על ידי שינוי החלק של משפטי ההשמה )ובלי לשנות את משפט הפלט(‪.‬‬
‫ג‪ .‬תקנו את קטע התוכנית על ידי ביטול משפטי ההשמה ושינוי משפט הפלט‪.‬‬
‫להעמקה בתבנית הזזה מעגלית בסדרה פנו לעמוד ‪.96‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-85-‬‬
‫מדעי המחשב‬
‫תבניות – פרק ‪3‬‬
‫החלפת ערכים בין שני משתנים‬
‫נתבונ בבעיה הבאה‪:‬‬
‫בחנות למוצרי חשמל הוחלפו בטעות מחיריה של הדיסקמ והווקמ המוצעי למכירה במחיר‬
‫מבצע‪ .‬מחירו האמיתי של הווקמ נשמר במחשב החנות במשתנה ‪ diskman‬ומחיר הדיסקמ‬
‫נשמר במשתנה ‪ .walkman‬עזרו לבעל החנות לתק את הטעות על ידי השלמת האלגורית‪:‬‬
‫‪________ ìù åëøò úà ________-á íùä .1‬‬
‫‪________ ìù åëøò úà walkman-á íùä .2‬‬
‫‪________ ìù åëøò úà ________-á íùä .3‬‬
‫בבעיה זו יש להחלי את ערכיה של ‪ diskman‬ושל ‪ .walkman‬כדי להחלי בי ערכי המשתני‬
‫נצטר להשתמש במשתנה עזר ‪ ,temp‬שישמור את ערכו התחילי של ‪ ,walkman‬ולכ האלגורית‬
‫ייראה כ‪:‬‬
‫‪walkman ìù åëøò úà temp-á íùä .1‬‬
‫‪diskman ìù åëøò úà walkman-á íùä .2‬‬
‫‪temp ìù åëøò úà diskman-á íùä .3‬‬
‫בפתרו בעיה זו השתמשנו בתבנית של החלפה בי שני ערכי‪ ,‬בדומה לאלגורית שבפתרו בעיה‬
‫‪ 5‬בפרק ‪ .3‬נתבונ בשני האלגוריתמי הללו‪:‬‬
‫‪a ìù åëøò úà temp-á íùä .1‬‬
‫‪walkman ìù åëøò úà temp-á íùä .1‬‬
‫‪b ìù åëøò úà a-á íùä .2‬‬
‫‪diskman ìù åëøò úà walkman-á íùä .2‬‬
‫‪temp ìù åëøò úà b-á íùä .3‬‬
‫‪temp ìù åëøò úà diskman-á íùä .3‬‬
‫נשי לב‪ ,‬כי א נקביל את המשתני ‪ a‬ו!‪ b‬למשתני ‪ walkman‬ו!‪ ,diskman‬בהתאמה‪ ,‬נקבל שני‬
‫אלגוריתמי זהי‪ .‬תבנית זו‪ ,‬החלפת ערכים בין שני משתנים מופיעה באלגוריתמי רבי‬
‫ולרוב משמשת כתבנית בסיס של פעולות סידור ערכי‪ ,‬למשל עבור מיו ערכי בסדרה‪.‬‬
‫לתבנית זו של החלפת ערכים בין שני משתנים ולכל התבניות שתוגדרנה בהמש יש כמה‬
‫מרכיבי המאפייני אות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-87-‬‬
‫מדעי המחשב‬
‫נגדיר באופ כללי את מאפייניה של‬
‫תבנית ע הסבר קצר לכל מאפיי‪:‬‬
‫ש התבנית‪ :‬הש מבטא בצורה תמציתית את המשימה לביצוע או את דר ביצועה‪.‬‬
‫נקודת מוצא‪ :‬נקודת המוצא מציינת את המצב התחילי הנתו של המשימה לביצוע‪ ,‬כלומר‪ :‬שמות‬
‫המשתני ובהקשרי מסוימי ג טיפוסיה‪ .‬התבניות מתפתחות ע ההתקדמות בחומר‬
‫הלימוד ולכ ייתכ כי לתבנית אחת תהיינה נקודות מוצא שונות‪ ,‬למשל‪ ,‬פע נקודת המוצא‬
‫תהיה שני מספרי‪ ,‬ופע אחרת שלושה מספרי‪.‬‬
‫מטרה‪ :‬המטרה מתארת את המצב הסופי‪ ,‬הפלט הדרוש או ער שיש להחזיר ע תו הביצוע‪.‬‬
‫אלגורית‪ :‬האלגורית מתאר מתכונת לביצוע המשימה‪ .‬האלגורית הוא לב התבנית‪ .‬לעיתי‬
‫בתו האלגורית יהיה שימוש בתבנית אחרת‪.‬‬
‫יישו ב‪ :Java‬יישו האלגורית בשפת ‪.Java‬‬
‫נציג את התבנית החלפת ערכים בין שני משתנים‪ ,‬על פי המאפייני שהכרנו‪:‬‬
‫ש התבנית‪ :‬החלפת ערכי בי שני משתני‬
‫נקודת מוצא‪ :‬שני ערכי במשתני ‪ element1‬ו!‪element2‬‬
‫מטרה‪ :‬החלפת הערכי התחיליי בי שני המשתני‬
‫אלגורית‪:‬‬
‫‪element1 ìù åëøò úà temp-á íùä .1‬‬
‫‪element2 ìù åëøò úà element1-á íùä .2‬‬
‫‪temp ìù åëøò úà element2-á íùä .3‬‬
‫יישו ב‪:Java‬‬
‫;‪temp = element1‬‬
‫;‪element1 = element2‬‬
‫;‪element2 = temp‬‬
‫שימו ♥‪ :‬ביישו התבנית נעשה שימוש במשתנה עזר ‪ temp‬כדי להבטיח שלא יאבד א אחד‬
‫מהערכי התחיליי של שני המשתני‪.‬‬
‫בעל החנות של מוצרי החשמל יכול להשתמש בתבנית שתיארנו‪ .‬נוכל לכתוב‬
‫החלף את ערכי המשתנים ‪ diskman‬ו!‪walkman‬‬
‫מאחר שזו תבנית מוכרת לנו‪ ,‬הרי השימוש בתבנית כהוראה באלגורית )במקרה זה‪ ,‬אלגורית‬
‫ב שורה אחת(‪ ,‬מסביר מה הפעולות שיש לבצע‪ .‬האלגורית שנכתב הוא קצר יותר‪ ,‬אבל ג ברור‬
‫יותר‪ .‬אמנ הוראה אחת בו מייצגת כעת כמה הוראות‪ ,‬אבל היא מסבירה היטב את תפקיד של‬
‫אות הוראות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-88-‬‬
‫מדעי המחשב‬
‫שאלה ‪1‬‬
‫ישמו בשפת ‪ Java‬את השימוש של בעל החנות למוצרי חשמל בתבנית‪.‬‬
‫שאלה ‪2‬‬
‫איתמר ויאיר משחקי במשחק הקלפי "טאקי"‪ .‬בתחילת המשחק קיבל כל אחד מה מספר‬
‫קלפי זהה‪ .‬המנצח במשחק הוא השחק שאי בידו קלפי‪ .‬במהל המשחק‪ ,‬כאשר איתמר‬
‫הבחי כי מספר הקלפי שבידו גדול בהרבה ממספר הקלפי שבידי יאיר החליט להשתמש בקל‬
‫"החל קלפי"‪ ,‬שמשמעותו החלפת הקלפי בי שני השחקני‪.‬‬
‫נתו אלגורית‪ ,‬שהקלט שלו הוא מספר הקלפי שיש לאיתמר וליאיר לפני ביצוע ההחלפה‬
‫והפלט שלו הוא מספר הקלפי של כל אחד מה לאחר ביצוע ההחלפה וכ מספר הקלפי‬
‫שאיתמר הצליח להיפטר במסגרת ההחלפה‪:‬‬
‫‪itamar-á øîúéà ìù íéôì÷ øôñî èåì÷ .1‬‬
‫‪yair-á øéàé ìù íéôì÷ øôñî èåì÷ .2‬‬
‫‪itamar ìù åëøò úà temp-á íùä .3‬‬
‫‪yair ìù åëøò úà itamar-á íùä .4‬‬
‫‪temp ìù åëøò úà yair-á íùä .5‬‬
‫‪åëøò úàå "äôìçää øçàì øîúéà ìù íéôì÷ä øôñî" äòãåää úà èìôë âöä .6‬‬
‫‪itamar ìù‬‬
‫‪åëøò úàå "äôìçää øçàì øéàé ìù íéôì÷ä øôñî" äòãåää úà èìôë âöä .7‬‬
‫‪yair ìù‬‬
‫‪yair - itamar éðåáùçä éåèéáä ìù åëøò úà diff-á íùä .8‬‬
‫‪øèôéäì çéìöä øîúéà íäîù íéôì÷ä øôñî" äòãåää úà èìôë âöä .9‬‬
‫‪diff ìù åëøò úàå "äôìçää úøâñîá‬‬
‫א‪ .‬ציינו מה השורות באלגורית המממשות את התבנית החלפת ערכים בין שני משתנים‪.‬‬
‫ב‪ .‬מהי נקודת המוצא של התבנית בשימוש זה?‬
‫ג‪ .‬כתבו אלגורית שקול לאלגורית הנתו תו שימוש בתבנית החלפת ערכים בין שני‬
‫משתנים‪.‬‬
‫ד‪ .‬כתבו אלגורית שקול לאלגורית הנתו המבצע אותה מטרה ללא שימוש בתבנית החלפת‬
‫ערכים בין שני משתנים‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-89-‬‬
‫מדעי המחשב‬
‫שאלה ‪3‬‬
‫דר נוספת להחלי ערכי בי שני משתני היא להשי בתחילה את ערכו של ‪ element2‬ב!‬
‫‪ .temp‬השלימו את קטע התוכנית המתאי להצעה זאת‪:‬‬
‫;‪temp = element2‬‬
‫_______________‬
‫_______________‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-90-‬‬
‫מדעי המחשב‬
‫היפוך סדר האיברים בסדרה‬
‫נתבונ בשתי הבעיות האלגוריתמיות הבאות‪:‬‬
‫בעיה ‪ :1‬כתבו אלגורית‪ ,‬שהקלט שלו הוא שני מספרי שלמי הנקלטי למשתני ‪ big‬ו!‬
‫‪ ,small‬כ שהמספר הגדול נקלט ל!‪ small‬והמספר הקט נקלט ל!‪ .big‬על האלגורית להפו את‬
‫ערכי המשתני‪ ,‬כ שבמשתנה ‪ big‬יישמר הער הגדול ובמשתנה ‪ small‬יישמר הער הקט‪,‬‬
‫ולהציג כפלט את הערכי לאחר ההיפו‪.‬‬
‫בעיה ‪ :2‬כל הספרי בספריה העירונית מקוטלגי על פי מספרי קטלוגיי‪ .‬על מד כלשהו‬
‫בספריה מסודרי כל הספרי בסדר עולה על פי מספריה הקטלוגיי פרט לשני ספרי שהחליפו‬
‫בטעות את מקומ זה בזה‪ .‬כתבו אלגורית‪ ,‬שמטרתו לדאוג לכ שכל הספרי במד יהיו‬
‫מסודרי בסדר עולה על פי מספריה הקטלוגיי של הספרי‪ .‬הקלט של האלגורית הוא‬
‫המקומות של הספרי שאינ מונחי במקומותיה ומספריה הקטלוגיי‪ ,‬בהתאמה‪ .‬על‬
‫האלגורית להפו את סדר הספרי ולהציג כפלט את המקומות והמספרי הקטלוגיי של‬
‫הספרי לאחר ההיפו‪.‬‬
‫אנו רואי כי בשתי הבעיות האלגוריתמיות עלינו להפו סדר של שני ערכי‪ .‬זהו ליבה של‬
‫התבנית היפוך סדר האיברים בסדרה‪ ,‬במקרה זה של סדרה בת שני איברי‪ .‬היפו סדר‬
‫האיברי בסדרה שימושי בהקשרי בה הסדרה נתונה בסדר כלשהו ויש צור להפכו‪ .‬למשל‪,‬‬
‫כאשר מעונייני להפו סדרה המסודרת בסדר עולה לאותה סדרה המסודרת בסדר יורד‪.‬‬
‫שימו ♥‪ :‬עבור סדרה בת שני איברי‪ ,‬האלגוריתמי של התבנית החלפת ערכים בין שני‬
‫משתנים ושל התבנית היפוך סדר האיברים בסדרה ה זהי‪ ,‬כי כדי להפו סדר של שני‬
‫ערכי בלבד יש למעשה להחלי בי שני ערכי המשתני‪ .‬חשוב לציי שזהו מקרה פרטי‪ ,‬ולפעולת‬
‫ההיפו יש משמעות עבור סדרה שבה יותר משני איברי‪ .‬בהמש נראה דוגמאות להיפו סדרה‬
‫שבה לפחות ‪ 3‬איברי‪.‬‬
‫נגדיר את מאפייני התבנית‪:‬‬
‫ש התבנית‪ :‬היפו סדר האיברי בסדרה‬
‫נקודת מוצא‪ :‬שני ערכי במשתני ‪ element1‬ו!‪element2‬‬
‫מטרה‪ :‬היפו הערכי בי שני המשתני‬
‫אלגורית‪:‬‬
‫החלף את ערכי ‪ element1‬ו!‪element2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-91-‬‬
‫מדעי המחשב‬
‫הנה הפתרונות של שתי הבעיות האלגוריתמיות‪:‬‬
‫פתרו בעיה ‪2‬‬
‫פתרו בעיה ‪1‬‬
‫‪small-ì ìåãâ øôñî èåì÷ .1‬‬
‫‪place1-á ïåùàø øôñ íå÷î èåì÷ .1‬‬
‫‪big-ì ïè÷ øôñî èåì÷ .2‬‬
‫‪num1-á ïåùàø øôñ ìù éâåìè÷ øôñî èåì÷ .2‬‬
‫‪.3‬‬
‫הפוך את סדר האיברים בסדרה ‪place2-á éðù øôñ íå÷î èåì÷ .3‬‬
‫‪small, big‬‬
‫‪num2-á éðù øôñ ìù éâåìè÷ øôñî èåì÷ .4‬‬
‫‪big ,"ìåãâä êøòä" èìôë âöä .4‬‬
‫‪ .5‬הפוך את סדר האיברים בסדרה ‪num1, num2‬‬
‫‪small ,"ïè÷ä êøòä" èìôë âöä .5‬‬
‫‪,"-á" ,num1 ,"øôñä íå÷éî" èìôë âöä .6‬‬
‫‪place1‬‬
‫‪,"-á" ,num2 ,"øôñä íå÷éî" èìôë âöä .7‬‬
‫‪place2‬‬
‫שאלה ‪4‬‬
‫ישמו כל אחד מ האלגוריתמי כקטע תוכנית בשפת ‪.Java‬‬
‫שימו לב כי כדי לייש את התבנית היפוך סדר האיברים בסדרה עליכ להשתמש ביישו של‬
‫התבנית החלפת ערכים בין שני משתנים‪.‬‬
‫שאלה ‪5‬‬
‫נתוני ‪ 3‬ערכי במשתני ‪ element2 ,element1‬ו!‪ .element3‬המורה ביקשה מהתלמידי‬
‫להציע אלגורית עבור היפו סדר הערכי בסדרת המשתני‪.‬‬
‫אוהד הציע את האלגורית הבא‪:‬‬
‫‪ .1‬הפוך את סדר האיברים בסדרה ‪element1, element3‬‬
‫‪ .2‬הפוך את סדר האיברים בסדרה ‪element3, element1‬‬
‫האלגורית של אוהד שגוי‪.‬‬
‫א‪ .‬תנו דוגמה לערכי ב!‪ element2 ,element1‬ו!‪ element3‬שעבורה נית לראות כי האלגורית‬
‫שגוי‪.‬‬
‫ב‪ .‬תנו שתי דוגמאות שונות לערכי ב!‪ element2 ,element1‬ו!‪ ,element3‬שעבור לא נית‬
‫לראות כי האלגורית שגוי‪ .‬רשמו מהו המאפיי של כל אחת מהדוגמאות‪.‬‬
‫ג‪ .‬הסבירו במלי מדוע האלגורית שאוהד הציע שגוי‪.‬‬
‫ד‪ .‬תקנו את האלגורית‪.‬‬
‫ה‪ .‬ישמו את האלגורית כקטע תוכנית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-92-‬‬
‫מדעי המחשב‬
‫ממוצע של סדרת מספרים‬
‫נתבונ בשלוש הבעיות האלגוריתמיות הבאות‪:‬‬
‫בעיה ‪ :1‬ציו שנתי של מקצוע בתעודה נקבע על פי הממוצע של הציוני במחצית א' ובמחצית ב'‪.‬‬
‫כתבו אלגורית‪ ,‬שהקלט שלו הוא ציוניו של אלי במחצית א' ובמחצית ב' במקצוע מדעי המחשב‬
‫והפלט שלו הוא הציו השנתי של אלי במדעי המחשב‪.‬‬
‫בעיה ‪ :2‬הציו הבית!ספרי של תלמיד נקבע על פי הממוצע של הציו השנתי וציו המתכונת‪ .‬כתבו‬
‫אלגורית‪ ,‬שהקלט שלו הוא ציונו של אלי בבחינת המתכונת במדעי המחשב והפלט שלו הוא‬
‫ציונו הבית!ספרי של אלי במדעי המחשב‪.‬‬
‫בעיה ‪ :3‬ציו סופי של תלמיד במקצוע נקבע על פי הממוצע של הציו הבית!ספרי והציו בבחינת‬
‫הבגרות‪ .‬כתבו אלגורית‪ ,‬שהקלט שלו הוא ציונו של אלי בבחינת הבגרות במדעי המחשב והפלט‬
‫שלו הוא ציונו הסופי של אלי במדעי המחשב‪.‬‬
‫בשלוש הבעיות האלגוריתמיות יש שימוש בתבנית ממוצע‪ .‬ממוצע הוא מדד סטטיסטי וחישובו‬
‫הוא אחד החישובי הבסיסיי עבור סדרת ערכי מספריי‪ .‬כדי לחשב ממוצע של סדרה יש‬
‫לחשב תחילה את הסכו הכולל של הסדרה ולאחר מכ לחלק במספר הערכי בסדרה‪.‬‬
‫נגדיר את מאפייני התבנית ממוצע של סדרת מספרים‪ ,‬עבור סדרה בת שני מספרי‪:‬‬
‫ש התבנית‪ :‬ממוצע של סדרת מספרי‬
‫נקודת מוצא‪ :‬שני מספרי ב!‪ num1‬ו!‪num2‬‬
‫מטרה‪ :‬חישוב הממוצע של שני המספרי‬
‫אלגורית‪:‬‬
‫‪num1 + num2 éðåáùçä éåèéáä ìù åëøò úà sum-á íùä‬‬
‫‪sum / 2 éðåáùçä éåèéáä ìù åëøò úà average-á íùä‬‬
‫יישו ב‪:Java‬‬
‫;‪sum = num1 + num2‬‬
‫;‪average = (double) sum / 2‬‬
‫נציג עתה את הפתרו של שלוש הבעיות האלגוריתמיות ברצ‪:‬‬
‫‪semester1-á 'à úéöçî ïåéö èåì÷ .1‬‬
‫‪semester2-á 'á úéöçî ïåéö èåì÷ .2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-93-‬‬
‫מדעי המחשב‬
‫‪ áùç .3‬ממוצע של סדרת המספרים ‪êøòä úà íùäå semester1, semester2‬‬
‫‪yearGrade-á áùåçîä‬‬
‫‪yearGrade ,"áùçîä éòãîá éìà ìù éúðùä åðåéö" èìôë âöä .4‬‬
‫‪finalExam-á úðåëúî úðéçá ïåéö èåì÷ .5‬‬
‫‪ áùç .6‬ממוצע של סדרת המספרים ‪êøòä úà íùäå yearGrade, finalExam‬‬
‫‪schoolGrade-á áùåçîä‬‬
‫‪schoolGrade ,"áùçîä éòãîá éìà ìù éøôñ-úéáä åðåéö" èìôë âöä .7‬‬
‫‪matriculation-á úåøâá úðéçá ïåéö èåì÷ .8‬‬
‫‪ áùç .9‬ממוצע של סדרת המספרים ‪êøòä úà íùäå schoolGrade, matriculation‬‬
‫‪finalGrade-á áùåçîä‬‬
‫‪finalGrade ,"áùçîä éòãîá éìà ìù éôåñä åðåéö" èìôë âöä .10‬‬
‫שאלה ‪6‬‬
‫ישמו את האלגורית כקטע תוכנית בשפת ‪.Java‬‬
‫שאלה ‪7‬‬
‫עיד טוע כי נית לכתוב את היישו ב!‪ Java‬עבור התבנית ממוצע של סדרת מספרים בת שני‬
‫מספרי ממשיי בהוראה אחת ואי צור לפצל לשתי הוראות‪ ,‬ולכ הציע את היישו הבא‪:‬‬
‫;‪average = num1 + num2 / 2‬‬
‫חגית טוענת כי היישו שעיד הציע שגוי‪.‬‬
‫א‪ .‬תנו דוגמה לערכי ‪ num1‬ו!‪ ,num2‬עבורה האלגורית שעיד הציע נות פלט נכו‪.‬‬
‫ב‪ .‬תנו דוגמה לערכי ‪ num1‬ו!‪ ,num2‬עבורה נית לראות כי טענתה של חגית נכונה‪.‬‬
‫ג‪ .‬תקנו את היישו שעיד הציע‪.‬‬
‫שאלה ‪8‬‬
‫לפניכ שימוש בתבנית‪:‬‬
‫‪ áùç‬ממוצע של סדרת המספרים ‪êøòä úà èìôë âöäå num1, num2, num3‬‬
‫‪áùåçîä‬‬
‫א‪ .‬מהי נקודת המוצא של התבנית?‬
‫ב‪ .‬כתבו את היישו ב!‪ Java‬עבור השימוש המתואר‪.‬‬
‫שאלה ‪9‬‬
‫בפינת החי "צבי הנינג'ה" ישנ ‪ 3‬צבי‪ .‬האחראי על פינת החי מעוניי לבצע חישובי‬
‫סטטיסטיי על התפתחות הצבי‪ .‬לצור זה הוא שוקל את הצבי אחת לחודש ורוש את‬
‫ממוצע משקלי שלושת הצבי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-94-‬‬
‫מדעי המחשב‬
‫נתו קטע התוכנית הבא שהקלט שלו הוא משקלי שלושת הצבי בחודש ינואר והפלט שלו אמור‬
‫להיות ממוצע משקליה‪:‬‬
‫;)(‪weight1 = In.readDouble‬‬
‫;)(‪weight2 = In.readDouble‬‬
‫;)(‪weight3 = In.readDouble‬‬
‫;‪sum = weight1 + weight2‬‬
‫;‪average = sum / 2‬‬
‫;‪sum = average + weight3‬‬
‫;‪average = sum / 2‬‬
‫;)‪System.out.println(average‬‬
‫קטע התוכנית שגוי‪.‬‬
‫א‪ .‬תנו דוגמת קלט שעבורה נית לראות כי קטע התוכנית אינו משיג את המטרה‪.‬‬
‫ב‪ .‬תנו דוגמת קלט שעבורה קטע התוכנית משיג את המטרה‪.‬‬
‫ג‪ .‬בקטע התוכנית ישנו שימוש כפול בתבנית‪ :‬עבור כל אחד מהשימושי‪ ,‬ציינו את ההוראות‬
‫המתאימות לו ותארו את השימוש בתבנית‪.‬‬
‫ד‪ .‬תקנו את קטע התוכנית‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-95-‬‬
‫מדעי המחשב‬
‫הזזה מעגלית בסדרה‬
‫הזזה מעגלית בסדרה היא תבנית הנחוצה לעיבוד אשר בו יש להזיז באופ אחיד את כל‬
‫הערכי בסדרה‪ ,‬תו הקפדה על כ שערכו של א ער לא יאבד‪ .‬נית להזיז את ערכי הסדרה‬
‫שמאלה או ימינה‪.‬‬
‫הזזה מעגלית שמאלה מתבצעת על ידי שמירת ערכו של המשתנה השמאלי ביותר בסדרה‬
‫במשתנה זמני ולאחר מכ‪ ,‬השמה של כל ער של משתנה למשתנה שמשמאלו‪ .‬כלומר‪ ,‬השמת ערכו‬
‫של המשתנה השני במשתנה הראשו‪ ,‬השמת ערכו של המשתנה השלישי במשתנה השני‪ ,‬וכ‬
‫הלאה‪ .‬לבסו השמת ערכו של המשתנה הזמני במשתנה האחרו‪.‬‬
‫הזזה מעגלית ימינה מתבצעת על ידי שמירת ערכו של המשתנה הימני ביותר בסדרה במשתנה‬
‫זמני ולאחר מכ‪ ,‬השמה של כל ער של משתנה למשתנה שמימינו‪ .‬כלומר‪ ,‬השמת ערכו של‬
‫המשתנה הלפני אחרו במשתנה האחרו‪ ,‬וכ הלאה‪ ,‬ולבסו השמת ערכו של המשתנה הזמני‬
‫במשתנה הראשו‪.‬‬
‫שימו ♥‪ :‬עבור סדרה בת שני איברי האלגוריתמי של התבנית החלפת ערכים בין שני‬
‫משתנים ושל התבנית הזזה מעגלית בסדרה ה זהי‪ ,‬כי כדי להזיז מעגלית שמאלה או ימינה‬
‫שני ערכי בלבד יש למעשה להחלי בי שני ערכי המשתני‪ .‬חשוב לציי שזהו מקרה פרטי‪,‬‬
‫ולפעולת ההזזה המעגלית יש משמעות עבור סדרה שבה יותר משני איברי‪ .‬נציג הזזה מעגלית‬
‫של סדרה שבה ‪ 3‬איברי‪ ,‬ובהמש נראה דוגמאות להזזה מעגלית של סדרה שבה לפחות ‪3‬‬
‫איברי‪.‬‬
‫נפריד את מאפייני התבנית הזזה מעגלית בסדרה לשתי תת!תבניות‪ :‬ראשית נציג את מאפייני‬
‫התבנית הזזה מעגלית שמאלה בסדרה ואחר כ נציג את מאפייני התבנית הזזה מעגלית‬
‫ימינה בסדרה‪.‬‬
‫ש התבנית‪ :‬הזזה מעגלית שמאלה בסדרה‬
‫נקודת מוצא‪ :‬שלושה ערכי במשתני ‪ element2 ,element1‬ו!‪element3‬‬
‫מטרה‪ :‬הזזה מעגלית שמאלה של שלושת המשתני‬
‫אלגורית‪:‬‬
‫החלף את ערכי המשתנים ‪ element1‬ו!‪element2‬‬
‫החלף את ערכי המשתנים ‪ element2‬ו!‪element3‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-96-‬‬
‫מדעי המחשב‬
‫ש התבנית‪ :‬הזזה מעגלית ימינה בסדרה‬
‫נקודת מוצא‪ :‬שלושה ערכי במשתני ‪ element2 ,element1‬ו!‪element3‬‬
‫מטרה‪ :‬הזזה מעגלית ימינה של שלושת המשתני‬
‫אלגורית‪:‬‬
‫החלף את ערכי המשתנים ‪ element2‬ו!‪element3‬‬
‫החלף את ערכי המשתנים ‪ element1‬ו!‪element2‬‬
‫שאלה ‪10‬‬
‫נתונה סדרה של שלושה ערכי‪.element1, element2, element3 :‬‬
‫לפניכ שימוש בתבנית של הזזה מעגלית שמאלה עבור הסדרה‪:‬‬
‫הזז מעגלית שמאלה את איברי הסדרה ‪element1, element2, element3‬‬
‫א‪ .‬כתבו אלגורית המתאי לתבנית‪ ,‬שאינו משתמש בתבנית החלפת ערכי‪ ,‬ויישמו אותו על‬
‫ידי כתיבת קטע תוכנית בשפת ‪.Java‬‬
‫ב‪ .‬כתבו שימוש בתבנית של הזזה מעגלית ימינה עבור שלושת הערכי הנתוני‪ ,‬לאחר מכ‬
‫כתבו אלגורית המתאי לתבנית‪ ,‬שאינו משתמש בתבנית החלפת ערכי‪ ,‬ויישמו אותו על‬
‫ידי כתיבת קטע תוכנית בשפת ‪.Java‬‬
‫שאלה ‪11‬‬
‫במשחק הכיסאות המוזיקליי משתתפי שלושה ילדי היושבי על שלושה כסאות‪ .‬בעת‬
‫הפעלת המוזיקה כל ילד זז מעגלית שמאלה ומתיישב בכסא שמשמאלו‪.‬‬
‫נתו האלגורית הבא שהקלט שלו הוא ‪ 3‬מספרי שלמי המייצגי את מספרי הילדי‪ ,‬והפלט‬
‫שלו הוא מספרי הילדי לאחר שתי הזזות מעגליות שמאלה‪:‬‬
‫‪child1, child2, child3-á íéîìù íéøôñî äùåìù èåì÷ .1‬‬
‫‪ .2‬הזז מעגלית שמאלה את איברי הסדרה ‪child1, child2, child3‬‬
‫‪ .3‬הזז מעגלית שמאלה את איברי הסדרה ‪child1, child2, child3‬‬
‫‪child1, child2, child3 ìù íéëøòä úà èìôë âöä .4‬‬
‫א‪ .‬מה יהיה הפלט עבור הקלט ‪?8 3 6‬‬
‫ב‪ .‬תנו דוגמת קלט שעבורה הפלט יהיה ‪.2 4 9‬‬
‫ג‪ .‬באלגורית נעשה שימוש כפול בתבנית הזזה מעגלית שמאלה בסדרה‪ .‬כתבו אלגורית‬
‫השקול לאלגורית הנתו תו שימוש יחיד בתבנית אחרת‪.‬‬
‫ד‪ .‬ישמו את האלגורית שכתבת בסעי ג' כקטע תוכנית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-97-‬‬
‫מדעי המחשב‬
‫שאלה ‪12‬‬
‫ביו ספורט היתולי התחרו ‪ 4‬קבוצות ‪ a, b, c, d‬בארבע תחנות שונות‪ .‬נקבע כי המעבר בי‬
‫התחנות ייעשה בצורה מעגלית ימינה‪ .‬נתו האלגורית החלקי הבא‪ ,‬המתאר את החלפת‬
‫הקבוצות‪:‬‬
‫‪d ìù åëøò úà temp-á íùä .1‬‬
‫‪________ ìù åëøò úà d-á íùä .2‬‬
‫‪b ìù åëøò úà c-á íùä .3‬‬
‫‪a ìù åëøò úà ________-á íùä .4‬‬
‫‪________ ìù åëøò úà ________-á íùä .5‬‬
‫א‪ .‬השלימו את האלגורית‪.‬‬
‫ב‪ .‬לאחר שכל הקבוצות סיימו את הסיבוב הראשו בתחרות קבעו מארגני יו הספורט שהמעבר‬
‫בי התחנות בסיבוב השני ייעשה בצורה מעגלית שמאלה‪ .‬כתבו אלגורית שיתאר את החלפת‬
‫הקבוצות בסיבוב השני‪.‬‬
‫שאלה ‪13‬‬
‫נתו האלגורית הבא‪ ,‬שהקלט שלו הוא ארבעה מספרי שלמי‪:‬‬
‫‪element1, element2, element3, element4-á íéîìù íéøôñî 4 èåì÷ .1‬‬
‫‪ .2‬הזז מעגלית שמאלה את איברי הסדרה ‪element1, element2, element3‬‬
‫‪ .3‬הזז מעגלית ימינה את איברי הסדרה ‪element1, element3, element4‬‬
‫‪element1, element2, element3, element4 ìù íéëøòä úà èìôë âöä .4‬‬
‫א‪ .‬מה יהיה הפלט עבור הקלט ‪?6 -7 15 2‬‬
‫ב‪ .‬תנו דוגמת קלט שעבורה הפלט יהיה ‪.10 19 6 4‬‬
‫ג‪ .‬מהי מטרת האלגורית?‬
‫ד‪ .‬כתבו אלגורית שקול לאלגורית הנתו תו שימוש כפול בתבנית היפוך סדר האיברים‬
‫בסדרה בת שני ערכי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-98-‬‬
‫מדעי המחשב‬
‫פרק ‪ – 4‬הרחבה בפיתוח אלגוריתמי
‬
‫בפרק הקוד הצגנו את התהלי של פיתוח ויישו אלגורית בשלבי‪ .‬בפרק זה נרחיב בכמה‬
‫מהשלבי‪ :‬בניתוח הבעיה‪ ,‬בפירוק המשימה לתתמשימות‪ ,‬ובבדיקת הפתרו עבור דוגמאות קלט‬
‫שונות‪ .‬הבעיות שיוצגו בפרק זה יהיו מורכבות יותר מהבעיות שהוצגו בפרק הקוד‪ ,‬וכ‪ ,‬ככל‬
‫שנתקד בפרקי הלימוד‪ ,‬הבעיות יהיו מורכבות יותר ויותר‪ ,‬וחשיבות הפתרו בשלבי תהיה‬
‫משמעותית יותר ויותר‪.‬‬
‫דר הבעיות שיוצגו בפרק זה ופתרונ‪ ,‬נכיר ג פעולות נוספות על ערכי מטיפוס של‪ ,‬טיפוס חדש‬
‫שערכיו ה תווי‪ ,‬ואת המחלקה האחראית על פעולות מתמטיות בשפת ‪.Java‬‬
‫‪ 4.1‬מבט נוסף אל התהליך של פיתוח אלגוריתם ויישומו‬
‫כזכור‪ ,‬תהלי של פיתוח אלגורית ויישומו על ידי תוכנית מחשב כולל את השלבי הבאי‪:‬‬
‫‪ .1‬ניתוח ראשוני של הבעיה בעזרת דוגמאות‬
‫‪ .2‬פירוק הבעיה לתתמשימות‬
‫‪ .3‬בחירת משתני‪ ,‬הגדרת תפקידיה וטיפוסי הערכי שיישמרו בה‬
‫‪ .4‬כתיבת האלגורית‬
‫‪ .5‬יישו האלגורית בתוכנית מחשב‬
‫‪ .6‬בדיקת נכונות עבור דוגמאות קלט מגוונות על ידי טבלת מעקב‬
‫‪ .7‬כתיבת התוכנית המלאה‪ ,‬ובדיקתה על ידי הרצה על דוגמאות קלט נוספות‬
‫בעת פיתוח האלגורית אנו נשפר ונשנה אותו‪ .‬לעיתי בעת העבודה על שלב‪ ,‬מתברר כי יש לתק שלב‬
‫קוד )לדוגמה‪ ,‬בעת כתיבת האלגורית‪ ,‬מסתבר כי יש להוסי' משתנה(‪ .‬במקרה כזה נחזור אחורה‬
‫לשלב הקוד ונתק לפני שנמשי לשלב הבא‪ .‬כמו כ‪ ,‬בבדיקת התוכנית עלולות להתגלות שגיאות‪,‬‬
‫ותיקונ עשוי להביא לבחירת משתני נוספי ולשינוי הוראות האלגורית‪ .‬שיפור ותיקו אלגורית‬
‫ותוכנית תו חזרה משלב מתקד לשלב קוד הינו תהלי טבעי ומקובל‪.‬‬
‫שימו ♥ לשני השלבי האחרוני‪:‬‬
‫בשלב ‪ 6‬נבדקת נכונות התוכנית באמצעות מעקב "ידני" אחר מהל הביצוע עבור מספר מצומצ של‬
‫דוגמאות קלט; זאת על מנת לאמת ולקבל בטחו ראשוני שהתוכנית אכ משיגה את מטרתה‬
‫המיועדת‪.‬‬
‫בשלב ‪ 7‬מורצת התוכנית המלאה במחשב‪ .‬ההרצה מאפשרת בדיקה מלאה יותר של התוכנית‪ ,‬כיוו‬
‫שנית להרי‪ +‬את התוכנית‪ ,‬במהירות‪ ,‬עבור דוגמאות קלט רבות ומגוונות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-99-‬‬
‫מדעי המחשב‬
‫בעיה ‪1‬‬
‫מטרת הבעיה הבאה ופתרונה‪ :‬הדגמה מפורטת של פיתוח ויישו בשלבי של אלגורית‪.‬‬
‫אודי וטל מעונייני לבנות גלגלת שתחבר בי החלונות שלה‪ .‬הגלגלת מורכבת מחבל כפול באור‬
‫המרחק שבי החלונות‪ .‬על אודי למדוד את המרחק שבי החלונות על מנת לדעת מה אור החבל לו‬
‫יזדקקו‪ .‬אודי בדק ומצא שעל מנת להגיע מהחלו שלו לחלו של טל עליו לצעוד ישר מספר צעדי‪,‬‬
‫לפנות ימינה ולצעוד מספר צעדי נוספי‪ .‬אודי ג בדק ומצא שאור כל צעד שלו הוא ‪ 42‬ס"מ‪.‬‬
‫)‪ 0.42‬מ'(‪.‬‬
‫פתחו אלגורית שהקלט שלו הוא מספר הצעדי שעל אודי לצעוד ישר‪ ,‬ומספר הצעדי שעל אודי‬
‫לצעוד לאחר שפנה ימינה‪ ,‬והפלט שלו הוא אור החבל המבוקש‪ .‬ישמו את האלגורית על ידי תוכנית‬
‫מחשב בשפת ‪.Java‬‬
‫ניתוח הבעיה בעזרת דוגמאות‬
‫נבדוק עבור מספר דוגמאות מה הפלט הרצוי עבור קלט‪:‬‬
‫א אודי צועד ‪ 30‬צעדי ישר‪ ,‬ואחר כ ‪ 21‬צעדי ימינה‪ ,‬נית לתאר זאת על ידי משולש ישר זווית‪,‬‬
‫שניצב אחד שלו הוא ‪ 30‬צעדי‪ ,‬והשני ‪ 21‬צעדי‪ .‬החלו של אודי הוא הקודקוד התחתו של‬
‫המשולש‪ ,‬והחלו של טל הוא הקודקוד העליו מימי של המשולש‪.‬‬
‫המרחק המבוקש הוא בדיוק אור היתר במשולש זה‪ .‬לכ‪ ,‬נשתמש במשפט פיתגורס‪ ,‬האומר כי אור‬
‫יתר במשולש ישר זווית הינו שורש סכו ריבועי שני הניצבי‪ ,‬כלומר‪:‬‬
‫‪c = a2 + b2‬‬
‫לכ‪ ,‬א אודי צועד ‪ 30‬צעדי ישר‪ ,‬ואחר כ ‪ 21‬צעדי ימינה‪ ,‬נית לחשב את אור החבל המבוקש‬
‫באופ הבא‪. (30 ⋅ 0.42) 2 + ( 21⋅ 0.42) 2 = 15.38 :‬‬
‫לבסו' נכפיל את התוצאה ב‪) 2‬כיוו שהחבל הינו כפול( והער המתקבל הוא הפלט הנדרש‪.‬‬
‫ומה א הנתו השני בקלט הוא ‪ ?0‬כלומר‪ ,‬אודי אינו צרי לצעוד כלל ימינה‪ ,‬משו שהחלו של טל‬
‫נמצא בדיוק מול החלו שלו? במקרה זה‪ ,‬ברור כי המרחק המבוקש נית לחישוב ישירות ממספר‬
‫הצעדי הנתו בקלט‪ ,‬אבל מסתבר שהנוסחה הכללית שמצאנו תתאי ג למקרה הפרטי הזה‪:‬‬
‫‪2 ⋅ (30 * 0.42) 2 + (0 * 0.42)2 = 2 ⋅ (30 * 0.42) 2 = 2 ⋅ 30 ⋅ 0.42‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-100-‬‬
‫מדעי המחשב‬
‫תהלי בדיקת הפלט עבור דוגמאות שונות עוזר לנו להבי את מהות הבעיה‪ ,‬להבי מה בעצ נדרש‬
‫מאיתנו‪ ,‬לחשוב על התהליכי הדרושי לפתרו הבעיה‪ ,‬ובכ בעצ מכוו אותנו לקראת השלבי‬
‫הבאי של תכנו וכתיבת האלגורית עצמו‪.‬‬
‫פירוק הבעיה לתתמשימות‬
‫נפרק את הבעיה לשלוש תתמשימות‪:‬‬
‫‪ .1‬קליטת שני מספרים חיוביים שלמים‬
‫‪ .2‬חישוב אורך החבל הנדרש‬
‫‪ .3‬הצגה כפלט של אורך החבל‬
‫התתמשימות הראשונה והשלישית ה פשוטות‪ .‬התתמשימה השנייה היא התתמשימה העיקרית‬
‫והמורכבת יותר‪ .‬נית לפרק ג אותה לתתמשימות ובכ לפרט יותר את הרעיו לפתרו הבעיה‪:‬‬
‫‪ .2.1‬הכפלת המספר הראשון ב‪ ,0.42-‬והעלאת התוצאה בריבוע‬
‫‪ .2.2‬הכפלת המספר השני ב‪ ,0.42-‬והעלאת התוצאה בריבוע‬
‫‪ .2.3‬חיבור שני הערכים שהתקבלו והוצאת שורש מהסכום‬
‫‪ .2.4‬הכפלת הערך שהתקבל ב‪2-‬‬
‫כל הפעולות המפורטות כא הינ פעולות חישוב פשוטות לביצוע‪ ,‬שאינ דורשות ניתוח נוס'‪.‬‬
‫כעת‪ ,‬לאחר פירוק הבעיה לתתמשימות‪ ,‬ברור לנו הרעיו לפתרו הבעיה‪.‬‬
‫בחירת משתני
‬
‫שלושת המשתני הראשוני שנבחר דרושי עבור פעולות הקלט והפלט‪:‬‬
‫‪ – stepForward‬של‪ ,‬ישמור את מספר הצעדי קדימה‬
‫‪ – stepRight‬של‪ ,‬ישמור את מספר הצעדי ימינה‬
‫‪ – ropeLength‬ממשי‪ ,‬ישמור את אור החבל הנדרש הסופי‬
‫נשתמש בעוד שני משתני לשמירת ערכי הביניי של החישובי השוני‪:‬‬
‫‪ – side1‬ממשי‪ ,‬ישמור את ריבוע האור של ניצב אחד במשולש‬
‫‪ – side2‬ממשי‪ ,‬ישמור את ריבוע האור של ניצב שני במשולש‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-101-‬‬
‫מדעי המחשב‬
‫האלגורית
‬
‫לפי החלוקה לתתמשימות ותו שימוש במשתני שבחרנו‪ ,‬נקבל את האלגורית הבא‪:‬‬
‫‪stepForward-á éáåéç íìù øôñî èåì÷ .1‬‬
‫‪stepRight-á éáåéç íìù øôñî èåì÷ .2‬‬
‫‪side1-á íùäå 0.42-á stepForward úìôëî úà áùç .3‬‬
‫‪side2-á íùäå 0.42-á stepRight úìôëî úà áùç .4‬‬
‫‪òåáéøá side1 úà äìòä .5‬‬
‫‪òåáéøá side2 úà äìòä .6‬‬
‫‪åìá÷úäù íéëøòä íåëñ úà áùç .7‬‬
‫‪ìá÷úäù êøòä ìù éòåáéøä ùøåùä úà áùç .8‬‬
‫‪ropeLength-á íùäå 2-á ìá÷úäù êøòä úà ìôëä .9‬‬
‫‪ropeLength ìù åëøò úà èìôë âöä .10‬‬
‫יישו
האלגורית
‬
‫הוראה ‪ 8‬באלגורית כוללת חישוב שורש ריבועי‪ .‬כצד מבצעי זאת בשפת ‪?Java‬‬
‫את הוראות ‪ 5‬עד ‪ 8‬נית לבטא בעזרת הביטוי‪:‬‬
‫;))‪Math.sqrt((side1 * side1) + (side2 * side2‬‬
‫הפעולה לחישוב‬
‫השורש הריבועי של‬
‫מספר‬
‫המחלקה האחראית על‬
‫פעולות מתמטיות‬
‫הפעולה ‪ sqrt‬מקבלת בתו הסוגריי מספר מטיפוס ממשי‪ ,‬ומחזירה מספר ממשי השווה לשורש‬
‫הריבועי של המספר שקיבלה‪.‬‬
‫הוראה זו שייכת למחלקה ‪ .Math‬מחלקה זו מוכרת בשפת ‪ ,Java‬ומוכנה לשימוש‪ ,‬א אנו צריכי‬
‫להודיע למהדר באופ מפורש כי אנו מתכווני להשתמש בה‪ .‬כשנכתוב את התוכנית המלאה‪ ,‬נצר'‬
‫הודעה בתחילתה כי אנו מתכווני להשתמש במחלקה זו בגו' התוכנית‪.‬‬
‫את הער ‪ 0.42‬נגדיר כקבוע‪ ,‬כדי ליצור תוכנית קריאה ועמידה בפני שינויי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-102-‬‬
‫מדעי המחשב‬
:‫הנה היישו של הוראות האלגורית‬
1. stepForward = In.readInt("Insert number of steps forward");
2. stepRight = In.readInt("Insert number of steps to the right");
3. side1 = stepForward * STEP_SIZE;
4. side2 = stepRight * STEP_SIZE;
5. ropeLength = 2 * Math.sqrt((side1 * side1) + (side2 * side2));
6. System.out.println ("The length of the rope is: " + ropeLength);
‫מעקב‬
:30 21 ‫נעקוב אחר מהל ביצוע משפטי התוכנית עבור הקלט‬
‫שורה‬
stepForward
stepRight
side1
side2
ropeLength
?
?
?
?
?
1
30
?
?
?
?
2
30
21
?
?
?
3
30
21
12.6
?
?
4
30
21
12.6
8.82
?
5
30
21
12.6
8.82
30.76
6
30
21
12.6
8.82
30.76
‫פלט‬
‫לביצוע‬
Insert number
of steps
forward
Insert number
of steps to
the right
The length of
the rope is:
30.76
.‫על פי המעקב הזה התוכנית מבצעת את מטרתה‬
‫מדעי המחשב‬
-103-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫התוכנית המלאה‬
/*
‫ מספר הצעדים בין הבתים של טל ואודי‬:‫קלט‬
‫ אורך החבל הנדרש‬:‫פלט‬
*/
import java.lang.Math;
‫הודעה כי אנו מתכווני להשתמש‬
Math ‫בגו' התוכנית במחלקה‬
public class Rope
{
public static void main (String[] args)
{
// ‫הגדרת משתנים‬
int stepForward, stepRight; // ‫המספרים הניתן כקלט‬
double side1, side2;
// ‫ערכי הניצבים של המשולש‬
double ropeLength;
// ‫אורך החבל‬
final double STEP_SIZE = 0.42;
// ‫קבוע – גודל צעד‬
// ‫קלט‬
stepForward = In.readInt("Insert number of steps forward");
stepRight = In.readInt("Insert number of steps to the right");
// ‫חישוב אורך החבל‬
side1 = stepForward * STEP_SIZE;
side2 = stepRight * STEP_SIZE;
ropeLength = 2 * Math.sqrt((side1 * side1) + (side2 * side2));
// ‫פלט‬
System.out.println ("The length of the rope is: " + ropeLength);
} // main
} // class Rope
1 ‫סוף פתרון בעיה‬
‫ מעתה ואיל‬.‫ יישע על התהלי שהצגנו‬,1 ‫ בעיות מורכבות יותר מבעיה‬,‫פתרו הבעיות הבאות בפרק‬
‫ ולכ לא נציי זאת‬,‫ נדרש פיתוח בשלבי‬,‫נניח שכאשר נדרש פיתוח אלגורית ויישומו בשפת תכנות‬
.‫במפורש‬
‫מדעי המחשב‬
-104-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫שאלה ‪4.1‬‬
‫ד‪ ,‬ב וח קיבלו כל אחד דמי חנוכה מהוריו‪ .‬כל אחד קיבל סכו הגדול מ‪ .0 20‬שלושת החברי‬
‫החליטו לאחד את כל סכו הכס' לקופה אחת ולקנות יחדיו כדורסל שמחירו ‪ .0 50‬ביתרת הכס'‬
‫יקנו מסטיקי שעלות ‪ 0 1‬כל אחד‪ .‬פתחו בשלבי אלגורית המקבל כקלט את דמי החנוכה שקבל‬
‫כל אחד מהחברי‪ ,‬ומציג כפלט את כמות המסטיקי שיקנו‪ .‬ישמו את האלגורית על ידי תוכנית‬
‫בשפת ‪.Java‬‬
‫המחלקה המתמטית‬
‫בפתרו בעיה ‪ 1‬חישבנו שורש ריבועי על ידי שימוש בפעולה ‪.Math.sqrt‬‬
‫זהו שמה המלא של הפעולה ‪ sqrt‬השייכת למחלקה המתמטית ‪ .Math‬כאמור‪ ,‬לפעולה אנו מעבירי‬
‫ער )פרמטר( שהוא מטיפוס ממשי‪ ,‬והיא מחזירה את השורש הריבועי של המספר שנית לה‪ .‬טיפוס‬
‫הער המוחזר הוא ממשי‪.‬‬
‫המחלקה המתמטית ‪ Math‬מכילה עוד פעולות מתמטיות רבות אשר נתונות לשימושנו‪ ,‬וכמוה ישנ‬
‫מחלקות נוספות בה נוכל להשתמש לפעולות עזר מסוגי שוני‪.‬‬
‫פעולות שימושיות מהמחלקה המתמטית ‪Math‬‬
‫הפעולה‬
‫תיאור‬
‫טיפוסי‬
‫הפעולה‬
‫פרמטרי
‬
‫של‬
‫של‬
‫ממשי‬
‫ממשי‬
‫)‪Math.abs(-12.7‬‬
‫‪12.7‬‬
‫ממשי‬
‫ממשי‬
‫)‪Math.sqrt(6.25‬‬
‫‪2.5‬‬
‫ממשי‪ ,‬ממשי‬
‫ממשי‬
‫)‪Math.pow(3,2‬‬
‫‪9.0‬‬
‫הקט מבי‬
‫של‪ ,‬של‬
‫של‬
‫)‪Math.min(3,8‬‬
‫‪3‬‬
‫השניי‬
‫ממשי‪,‬ממשי‬
‫ממשי‬
‫)‪Math.min(8.0,8.8‬‬
‫‪8.0‬‬
‫הגדול מבי‬
‫של‪ ,‬של‬
‫של‬
‫)‪Math.max(3,8‬‬
‫‪8‬‬
‫השניי‬
‫ממשי‪,‬ממשי‬
‫ממשי‬
‫)‪Math.max(8.0,8.8‬‬
‫‪8.8‬‬
‫)‪sqrt(num‬‬
‫שורש ריבועי‬
‫חזקה ‬
‫)‪max(num1,num2‬‬
‫המוחזר‬
‫)‪Math.abs(63‬‬
‫)‪abs(num‬‬
‫)‪min(num1,num2‬‬
‫מוחזר‬
‫הפעולה‬
‫הער‬
‫‪63‬‬
‫ער מוחלט‬
‫)‪pow(num1,num2‬‬
‫טיפוס‬
‫ער‬
‫דוגמה‬
‫‪num1num2‬‬
‫בנוס' לפעולות המתוארות בטבלה זו שייכות למחלקה ‪ Math‬פעולות רבות נוספות‪ .‬הנכ מוזמני‬
‫לחפש ברשת על המחלקה המתמטית בשפת ‪ (lang.Math) Java‬ולמצוא פעולות נוספות השייכות‬
‫למחלקה זו‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-105-‬‬
‫מדעי המחשב‬
‫עד כה היכרנו כמה מחלקות שימושיות‪ :‬המחלקה ‪ System‬שאחראית על פעולות מערכת כלליות‬
‫)בתוכה מוגדר נתיב הפלט ‪ ;(out‬המחלקה ‪ In‬האחראית על פעולות הקלט; המחלקה ‪Math‬‬
‫האחראית על פעולות מתמטיות‪ .‬בהמש לימודיכ תפגשו עוד מחלקות רבות המשמשות לצרכי‬
‫שוני‪.‬‬
‫שאלה ‪4.2‬‬
‫פתחו אלגורית אשר הקלט שלו הוא גבהי שני תלמידי‪ ,‬נתוני במספרי ממשיי‪ ,‬הפלט שלו הוא‬
‫הער המוחלט של הפרשי הגבהי שלה‪ .‬ישמו את האלגורית על ידי תוכנית בשפת ‪ .Java‬שימו לב‬
‫לבחירת דוגמאות קלט מגוונות‪.‬‬
‫שאלה ‪4.3‬‬
‫שנו את התוכנית שכתבת כפתרו לשאלה ‪ 4.2‬כ שפלט התוכנית יהיה גובה התלמיד הנמו מבי‬
‫השניי‪.‬‬
‫שאלה ‪4.4‬‬
‫פתחו אלגורית אשר הקלט שלו הוא אור ורוחב צלעות מלב )מספרי שלמי( והפלט שלו הוא‬
‫שטח המלב ואור אלכסו המלב‪.‬‬
‫‪ 4.2‬פעולות חלוקה בשלמים‬
‫בפרק ‪ 3‬נאמר‪ ,‬כי הגדרת טיפוס כוללת ג את פירוט הפעולות הניתנות לביצוע על ערכי הטיפוס‪ .‬בפרק‬
‫‪ 3‬הוצגו הטיפוסי של וממשי‪ ,‬ורשימת הפעולות שהוצגה עבור כל אחד מה כללה את הפעולות‬
‫החשבוניות המוכרות‪ .‬בסעי' זה נכיר פעולות חשבוניות המוגדרות רק עבור ערכי מטיפוס של‪.‬‬
‫בעיה ‪2‬‬
‫מטרת הבעיה הבאה ופתרונה‪ :‬שימוש בפעולות לחישוב מנה ושארית בחלוקת מספרי שלמי‪.‬‬
‫ליונת אוס' מטופח של גוגואי‪ .‬הוא שומר את כל האוס' בקופסה‪ ,‬בקבוצות של ‪ ,20‬כלומר‪ ,‬כל‬
‫קבוצה של ‪ 20‬גוגואי ארוזה בשקית נפרדת‪ .‬הגוגואי הנותרי מפוזרי בתחתית הקופסה‪.‬‬
‫פתחו בשלבי אלגורית אשר הקלט שלו הוא מספר הגוגואי שיש ליונת‪ ,‬והפלט הוא מספר‬
‫השקיות שיש בקופסה‪ ,‬ומספר הגוגואי המפוזרי בתחתיתה‪ .‬ישמו את האלגורית על ידי תוכנית‬
‫מחשב בשפת ‪.Java‬‬
‫למשל‪ ,‬עבור הקלט ‪ ,135‬הפלט הדרוש הוא‪ 6 15 :‬כלומר‪ 6 ,‬שקיות ו‪ 15‬גוגואי פזורי )משו ש‬
‫‪.(6*20+15=135‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-106-‬‬
‫מדעי המחשב‬
‫ניתוח הבעיה בעזרת דוגמאות‬
‫נבדוק את הפלט הרצוי עבור כמה דוגמאות קלט‪:‬‬
‫פלט‬
‫קלט‬
‫‪13‬‬
‫‪ 0‬שקיות ו‪ 13‬פזורי‬
‫‪60‬‬
‫‪ 3‬שקיות ו‪ 0‬פזורי‬
‫‪64‬‬
‫‪ 3‬שקיות ו‪ 4‬פזורי‬
‫‪82‬‬
‫השלימו‪ ____ :‬שקיות ו____ פזורי‬
‫על פי הדוגמאות אנו רואי כי מספר השקיות הוא מספר הפעמי שנכנס המספר ‪ 20‬במספר‬
‫הגוגואי הכולל‪ ,‬שנקלט מהקלט‪ .‬הגוגואי הפזורי ה השארית‪ ,‬אלה שנותרו אחרי שאספנו ככל‬
‫שנית קבוצות של ‪ 20‬גוגואי‪.‬‬
‫כלומר‪ ,‬עלינו לבצע כא שתי פעולות‪ ,‬כל אחת מה מתבצעת על מספרי שלמי ומחזירה מספר של‪.‬‬
‫הפעולה הראשונה מקבלת מספר ‪) x‬במקרה שלנו‪ ,‬המספר הכולל של הגוגואי( ומספר ‪) y‬במקרה‬
‫שלנו‪ ,‬מספר הגוגואי בכל שקית‪ ,‬כלומר ‪ (20‬ומחזירה את מספר הפעמי שנכנס המספר ‪ y‬במספר ‪.x‬‬
‫הפעולה השנייה משלימה אותה‪ ,‬במוב מסוי‪ :‬היא מקבלת מספר ‪) x‬במקרה שלנו‪ ,‬המספר הכולל‬
‫של הגוגואי( ומספר ‪) y‬במקרה שלנו‪ ,‬מספר הגוגואי בכל שקית‪ ,‬כלומר ‪ (20‬ומחזירה את מה שנותר‬
‫אחרי שמחסירי מ‪ x‬כפולות שלמות של ‪ y‬ככל שנית‪.‬‬
‫אלו ה פעולות המוגדרות על מספרי שלמי‪ ,‬כלומר על ערכי טיפוס של‪ :‬הפעולה הראשונה‬
‫מחשבת את המנה של ‪ x‬ו‪ .y‬נהוג לקרוא לה ג פעולת ‪ .div‬הפעולה השנייה היא פעולת השארית‬
‫)‪.(mod‬‬
‫בעברית‪ ,‬מנה היא תוצאה של פעולת חלוקה‪ ,‬וג הש האנגלי ‪ ,div‬הוא קיצור של המילה ‪division‬‬
‫)חלוקה(‪ .‬ואכ יש קשר בי הפעולות האלו לפעולת החלוקה הרגילה‪ .‬כאמור‪ ,‬א נבצע חלוקה רגילה‬
‫של מספר הגוגואי ‪ x‬במספר ‪ ,20‬לא נקבל בהכרח מספר של‪ .‬למשל‪ ,‬א יש ‪ 105‬גוגואי‪,‬‬
‫‪ .105/20=5.25‬אבל‪ ,‬א ננסה למלא מתו ‪ 105‬גוגואי כמה שיותר שקיות של ‪ 20‬גוגואי‪ ,‬נצליח‬
‫למלא בדיוק ‪ 5‬שקיות‪ .‬זהו בדיוק החלק השל של תוצאת החלוקה ‪.105/20‬‬
‫שתי פעולות אלו נקראות פעולות חלוקה בשלמי‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-107-‬‬
‫מדעי המחשב‬
‫פעולות החלוקה בשלמי‬
‫מוגדרות רק על מספרי שלמי‪ ,‬וג תוצאת הפעלת היא מספר‬
‫של‪:‬‬
‫מנת החלוקה )‪ (div‬של מספר של ‪ x‬במספר של ‪ y‬שווה לחלק השל של ‪ ,x/y‬ובמילי אחרות‪,‬‬
‫למספר הפעמי שהער ‪ y‬נכנס בער ‪.x‬‬
‫שארית החלוקה‬
‫)‪ (mod‬של מספר של ‪ x‬במספר של ‪ y‬מבטאת את השארית הנותרת לאחר‬
‫חלוקה בשלמי של ‪ x‬ב‪ ,y‬ובמילי אחרות‪ ,‬את מה שנותר אחרי שמפחיתי מ‪ x‬כפולות שלמות של‬
‫‪ y‬ככל שנית‪.‬‬
‫השוני בי פעולות חלוקה בשלמי לבי פעולת החלוקה במספרי ממשיי מדגי את האבחנה בי‬
‫הטיפוסי של וממשי‪.‬‬
‫למשל‪ ,‬מנת החלוקה של ‪ 13‬ב‪ 5‬שווה ל‪ ,2‬משו ש‪ 5‬נכנס ב‪ 13‬פעמיי )ואכ‪ 13/5=2.6 ,‬והחלק‬
‫השל הוא ‪ .(2‬לעומת זאת‪ ,‬שארית החלוקה של ‪ 13‬ב‪ 5‬שווה ל‪ ,3‬משו שאחרי שנפחית מ‪ 13‬שתי‬
‫כפולות של ‪) 5‬כלומר‪ ,(10 ,‬נקבל ‪ .3‬נדגי זאת בעזרת האיור הבא‪ ,‬המציג חלוקת ‪ 13‬נקודות‬
‫לקבוצות של ‪:5‬‬
‫בחלוקה של ‪ 13‬לקבוצות של ‪ 5‬אנו אכ מקבלי כי מנת החלוקה היא ‪ ,2‬כיוו שהתקבלו שתי קבוצות‬
‫שלמות בגודל ‪ 5‬כל אחת‪ .‬שארית החלוקה היא ‪ ,3‬כיוו שנשארו שלוש נקודות שלא שייכות לא'‬
‫קבוצה‪.‬‬
‫את בעיית החלוקה הזו נית לראות באופ נוס'‪ :‬א נרצה לחלק ‪ 13‬סוכריות באופ שווה ל‪ 5‬ילדי‪,‬‬
‫כמה סוכריות יקבל כל ילד? כמה יישארו לנו? והתשובה תהיה זהה – כל ילד יקבל ‪ 2‬סוכריות‪ ,‬ולנו‬
‫יישארו ‪.3‬‬
‫פירוק הבעיה לתתמשימות‬
‫נפרק את הבעיה לארבע תתמשימות‪:‬‬
‫‪ .1‬קליטת מספר הגוגואים‬
‫‪ .2‬חישוב מספר השקיות‬
‫‪ .3‬חישוב מספר הגוגואים הפזורים‬
‫‪ .4‬הצגה כפלט של מספר השקיות והגוגואים הפזורים‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-108-‬‬
‫מדעי המחשב‬
‫הערכי בעיבוד הנתוני ה מספרי שלמי‪ .‬אי לנו כא עניי במספרי ממשיי‪ ,‬ולכ הפעולה בה‬
‫נרצה להשתמש לביצוע התתמשימות השנייה והשלישית איננה פעולת חלוקה רגילה‪ ,‬כיוו שפעולה‬
‫כזאת תית תוצאה מטיפוס ממשי‪ .‬למשל‪ ,‬תוצאה של ‪ 64/20‬תית ‪ ,3.2‬א מספר זה אינו נות לנו את‬
‫מספר השקיות המלאות ומספר הגוגואי הפזורי‪ .‬הפעולות המתאימות ה פעולות החלוקה‬
‫בשלמי‪ ,‬שהוצגו לעיל‪.‬‬
‫את מספר השקיות המלאות נחשב כמנה של חלוקת מספר הגוגואי ב‪ ;20‬את מספר הגוגואי‬
‫הפזורי נחשב כשארית של אותה חלוקה‪ .‬שתי פעולות אלה ה שתי פני של תבנית שימושית‪:‬‬
‫חלוקת כמות פריטי לקבוצות בגודל נתו‪.‬‬
‫בחירת משתני
‬
‫‪ – amount‬של‪ ,‬ישמור את המספר הנית כקלט‪ ,‬מספר הגוגואי‬
‫‪ –bags‬של‪ ,‬ישמור את מספר השקיות המכילות ‪ 20‬גוגואי כל אחת‬
‫‪ – remainder‬של‪ ,‬ישמור את מספר הגוגואי שנשארו פזורי‪.‬‬
‫האלגורית
‬
‫‪amount-á íéàåâåâä øôñî èåì÷ .1‬‬
‫‪úà íùäå 20-á amount ìù ä÷åìçä úðî éãé-ìò úåàìîä úåé÷ùä øôñî úà áùç .2‬‬
‫‪bags-á äàöåúä‬‬
‫‪20-á amount ìù ä÷åìçä úéøàù éãé-ìò íéøåæô åøúåðù íéàåâåâä øôñî úà áùç .3‬‬
‫‪remainder-á äàöåúä úà íùäå‬‬
‫‪remainder êøòä úàå bags êøòä úà èìôë âöä .4‬‬
‫יישו
האלגורית
‬
‫בשפת ‪ ,Java‬הפעולה לחישוב שארית החלוקה )‪ (mod‬של הער ‪ a‬בער ‪ b‬נכתבת בצורה ‪,a % b‬‬
‫כאשר ג ‪ a‬וג ‪ b‬ה מטיפוס של‪.‬‬
‫למשל‪ ,3%5=3 ,7%3=1 :‬ו ‪12%4=0‬‬
‫בשפת ‪ ,Java‬הפעולה לחישוב מנת החלוקה )‪ (div‬של הער ‪ a‬בער ‪ b‬נכתבת בצורה ‪ ,a / b‬כאשר‬
‫ג ‪ a‬וג ‪ b‬ה מטיפוס של‪.‬‬
‫למשל‪ 13 / 5=2 ,7 / 3 = 2 :‬ו ‪.12 / 4 =3‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-109-‬‬
‫מדעי המחשב‬
‫שימו לב שאותו סימ משמש ב‪ Java‬ה לפעולת חלוקה של מספרי ממשיי וה לפעולת חישוב מנת‬
‫חלוקה של שלמי‪ .‬א כ‪ ,‬אי נבדיל בי פעולת חישוב מנת החלוקה בשלמי לבי פעולת חלוקה‬
‫בממשיי? אי נדע א הביטוי ‪ 13/5‬ערכו שווה ל‪ 2‬או ל‪?2.6‬‬
‫סוג החלוקה נקבע על פי חוק פשוט‪:‬‬
‫חלוקת של בשל תתפרש תמיד כפעולת חלוקה בשלמי‪.‬‬
‫כל אחת מהחלוקות הבאות מתפרשת כפעולת חלוקה של מספרי ממשיי‪:‬‬
‫של ‪ /‬ממשי‬
‫ממשי ‪ /‬של‬
‫ממשי ‪ /‬ממשי‬
‫למשל‪ 13.0 / 5 = 2.6 ,13 / 5 = 2 ,‬ו‪.13 / 5.0 = 2.6‬‬
‫נייש את האלגורית תו שימוש בפעולות החלוקה בשלמי בשפה‪ ,‬והגדרת קבוע )‪(PER_BAG‬‬
‫עבור מספר הגוגואי בשקית‪:‬‬
‫;)"‪1. amount = In.readInt("Insert amount of gogos‬‬
‫;‪2. bags = amount / PER_BAG‬‬
‫;‪3. remainder = amount % PER_BAG‬‬
‫" ‪4. System.out.println("There are " + bags + " bags, " + remainder +‬‬
‫;)"‪are left over‬‬
‫מעקב‬
‫נעקוב אחר מהל ביצוע משפטי התוכנית עבור הקלט ‪:92‬‬
‫פלט‬
‫שורה לביצוע‬
‫‪remainder‬‬
‫‪bags‬‬
‫‪number‬‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫‪92‬‬
‫‪1. amount = In.readInt….‬‬
‫?‬
‫‪4‬‬
‫‪92‬‬
‫‪2. bags = amount / PER_BAG‬‬
‫‪12‬‬
‫‪4‬‬
‫‪92‬‬
‫‪3. remainder = amount %‬‬
‫‪12‬‬
‫‪4‬‬
‫‪92‬‬
‫‪Insert amount of‬‬
‫‪gogos‬‬
‫‪PER_BAG‬‬
‫‪There are 4 bags,‬‬
‫‪12 are left over‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-110-‬‬
‫)…(‪4. System.out.println‬‬
‫מדעי המחשב‬
‫התוכנית המלאה‬
‫*‪/‬‬
‫התוכנית קולטת את מספר הגוגואים שיש ליונתן‬
‫ונותנת כפלט את מספר השקיות המלאות‪ ,‬ואת מספר הגוגואים שנותרו פזורים‬
‫‪*/‬‬
‫‪public class GogosInBox‬‬
‫{‬
‫)‪public static void main (String[] args‬‬
‫{‬
‫הגדרת משתנים ‪//‬‬
‫כמות הגוגואים ‪//‬‬
‫;‪int amount‬‬
‫מספר שקיות ‪//‬‬
‫;‪int bags‬‬
‫מספר גוגואים פזורים ‪//‬‬
‫;‪int remainder‬‬
‫מספר הגוגואים בשקית אחת ‪//‬‬
‫;‪final int PER_BAG = 20‬‬
‫קלט ‪//‬‬
‫;)"‪amount = In.readInt("Insert amount of gogos‬‬
‫חישוב מספר השקיות ‪//‬‬
‫;‪bags = amount / PER_BAG‬‬
‫חישוב מספר הגוגואים הפזורים ‪//‬‬
‫;‪remainder = amount % PER_BAG‬‬
‫פלט ‪//‬‬
‫‪System.out.println("There are " + bags + " bags, " + remainder +‬‬
‫;)"‪" are left over‬‬
‫‪} // main‬‬
‫‪} // class GogosInBox‬‬
‫סוף פתרון בעיה ‪2‬‬
‫שאלה ‪4.5‬‬
‫בנו טבלת מעקב אחר מהל ביצוע התוכנית ‪ GogosInBox‬עבור הקלט ‪.123‬‬
‫שאלה ‪4.6‬‬
‫יונת בעל הגוגואי החליט לשדרג את אופ האחסו של האוס' ושינה את פקודות התוכנית שבפתרו‬
‫בעיה ‪ 2‬כ שג מספר הגוגואי בשקית יהיה חלק מהקלט‪ ,‬ולא קבוע‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-111-‬‬
‫מדעי המחשב‬
‫;)"‪amount = In.readInt("Insert amount of gogos‬‬
‫;)"‪capacity = In.readInt("Insert capacity‬‬
‫;‪bags = amount / capacity‬‬
‫;‪remainder = amount % capacity‬‬
‫‪System.out.println("There are " + bags + " bags, " + remainder + " are‬‬
‫;)"‪left over‬‬
‫מה יהיה פלט הפתרו המשודרג לבעיית אחסו הגוגואי של יונת עבור הקלט ‪ ?125 30‬מה יהיה‬
‫הפלט עבור הקלט ‪?200 50‬‬
‫שאלה ‪4.7‬‬
‫השלימו את תוצאות הפעולות הבאות של חלוקה בשלמי‪:‬‬
‫א‪7 / 3 = _________ .‬‬
‫ב‪7 % 3 = _________ .‬‬
‫ג‪20 / 4 = _________ .‬‬
‫ד‪20 % 4 = _________ .‬‬
‫ה‪3 / 7 = _________ .‬‬
‫ו‪3 % 7 = _________ .‬‬
‫שאלה ‪4.8‬‬
‫נתו קטע התוכנית הבא‪ ,‬שהקלט שלו הוא שני מספרי שלמי‪ ,‬והמשתני בו ה מטיפוס של‪:‬‬
‫;)"‪num1 = In.readInt("Insert first number‬‬
‫;)" ‪num2 = In.readInt("Insert second number‬‬
‫;‪a = num1 / num2‬‬
‫;‪b = num1 % num2‬‬
‫;)‪System.out.println("a: " + a + " b: " + b‬‬
‫א‪ .‬רשמו את פלט קטע התוכנית עבור כל אחד מהקלטי הבאי )משמאל לימי(‪:‬‬
‫‪5 2 .1‬‬
‫‪5 4 .2‬‬
‫‪5 5 .3‬‬
‫ב‪ .‬תנו דוגמה לקלט עבורו הפלט יהיה ‪2 2‬‬
‫להעמקה בתבנית חלוקת כמות פריטים לקבוצות בגודל נתון פנו לעמוד ‪.135‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-112-‬‬
‫מדעי המחשב‬
‫עוד על פעולת השארית‬
‫?‬
‫בשאלה ‪ ,4.7‬בסעי' ד‪ ,‬התקבל הער ‪ .0‬מה משמעות הביטוי ‪ ?20 % 4 = 0‬באופ כללי‪ ,‬מתי פעולת‬
‫שארית נותנת תוצאה השווה ל‪?0‬‬
‫התוצאה ‪ 0‬מצביעה על כ שהמספר הראשו )במקרה זה ‪ (20‬מתחלק במספר השני )במקרה זה ‪ (4‬ללא‬
‫שארית‪ .‬כלומר‪ ,‬המספר ‪ 4‬הוא אחד המחלקי של ‪.20‬‬
‫למשל‪ ,‬כיצד נבדוק א מספר נתו הוא זוגי? מספר זוגי הוא מספר המתחלק ב‪ 2‬ללא שארית‪ .‬לכ‪,‬‬
‫נוכל לחשב את שארית החלוקה של המספר הנתו ב‪ .2‬א המספר אכ זוגי השארית שנקבל תהיה‬
‫שווה ל‪.0‬‬
‫שימו ♥‪ :‬שארית החלוקה של ער ‪ x‬בער ‪ y‬אינה שווה לחלק הלא של המתקבל מפעולת החלוקה‬
‫בממשיי של ‪ x‬ב‪ .y‬למשל‪ ,‬א נחשב ‪ 13 / 5‬בפעולת חלוקה ממשית נקבל ‪ .2.6‬לעומת זאת‪ ,‬שארית‬
‫החלוקה ‪ 13%5‬היא ‪ ,3‬ולא ‪.6‬‬
‫?‬
‫א נחלק מספר ב‪ 2‬ונבדוק את השארית‪ .‬אילו מספרי יכולי להתקבל כתוצאה?‬
‫נבדוק את המקרי הבאי‪:‬‬
‫‪4 mod 2 = 0‬‬
‫‪5 mod 2 = 1‬‬
‫‪6 mod 2 = 0‬‬
‫‪7 mod 2 =1‬‬
‫המספרי האפשריי כתוצאה ה א ורק ‪ 0‬ו‪ .1‬לא ייתכ כי נקבל תוצאה הגדולה מ‪ .1‬נראה זאת‬
‫שוב בעזרת איור‪ :‬כאשר אנו מחלקי מספר כלשהו של נקודות לקבוצות של שתי נקודות כל אחת‪,‬‬
‫ובודקי כמה נקודות לא נכללות בא' קבוצה‪ ,‬ייתכ כי לא נשארת א' נקודה ללא קבוצה‪ ,‬למשל‪,‬‬
‫עבור ‪:4 mod 2‬‬
‫ייתכ כי נשארת נקודה בודדת ללא קבוצה‪ ,‬למשל‪ ,‬עבור ‪:5 mod 2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-113-‬‬
‫מדעי המחשב‬
‫לא ייתכ שיישארו שלוש נקודות מחו‪ +‬לקבוצות‪ ,‬משו שאז נית לקחת שתיי מה וליצור קבוצה‬
‫חדשה‪ :‬א נגדיל את מספר הנקודות ב‪ 1‬ונחשב את ‪ ,6 mod 2‬נראה כי נוצרה קבוצה חדשה‬
‫מהנקודה הבודדת שנותרה קוד ומהנקודה החדשה‪:‬‬
‫א כ‪ ,‬השארית של חלוקת מספר כלשהו ב‪ 2‬לא יכולה להיות גדולה מ‪.1‬‬
‫והשארית של חלוקת מספר כלשהו ב‪ ?3‬באותו אופ בדיוק נית להראות כי השארית של חלוקת‬
‫מספר כלשהו ב‪ 3‬לא יכולה להיות גדולה מ‪.2‬‬
‫ובאופ כללי‪:‬‬
‫הערכי האפשריי לשארית של חלוקת מספר כלשהו ב‪ n‬ה בי ‪ 0‬ל)‪.(n−1‬‬
‫שאלה ‪4.9‬‬
‫השלימו‪:‬‬
‫א‪ .‬הערכי האפשריי לשארית החלוקה של מספר כלשהו ב‪ 5‬ה‬
‫‪.‬‬
‫ב‪ .‬הערכי האפשריי לשארית החלוקה של מספר כלשהו ב‪ 6‬ה‬
‫‪.‬‬
‫שאלה ‪4.10‬‬
‫נתו קטע התוכנית הבא אשר הקלט שלו הוא פרק זמ הנתו בשעות‪ ,‬השמור במשתנה ‪ ,hours‬והפלט‬
‫שלו הוא מספר היממות השלמות והשעות הנותרות בפרק הזמ הנתו‪.‬‬
‫השלימו את קטע התוכנית‪.‬‬
‫קלט ‪//‬‬
‫; _____________ = ‪days‬‬
‫; ____________ = ‪hours_left‬‬
‫פלט ‪//‬‬
‫‪System.out.println("There are " + days + "days and " + hours_left +‬‬
‫;)"‪"hours‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-114-‬‬
‫מדעי המחשב‬
‫שאלה ‪4.11‬‬
‫פתחו אלגורית שהקלט שלו הוא פרק זמ הנתו בדקות‪ ,‬והפלט שלו הוא מרכיבי השעות והדקות‬
‫בפרק זמ זה‪ .‬ישמו אותו בשפת התכנות ‪.Java‬‬
‫למשל‪ ,‬עבור הקלט ‪ 90‬הפלט יהיה‪ 1 :‬שעות‪ 30 ,‬דקות‪.‬‬
‫עבור הקלט ‪ 30‬הפלט יהיה‪ 0 :‬שעות‪ 30 ,‬דקות‪.‬‬
‫עבור הקלט ‪ 300‬הפלט יהיה‪ 5 :‬שעות‪ 0 ,‬דקות‪.‬‬
‫שאלה ‪4.12‬‬
‫טייס חלל יוצא ביו ראשו בשבוע לטיסה ממושכת בחלל‪ .‬עבור כל יו טיסה‪ ,‬יש לצייד את הטייס ב‬
‫‪ 3.8‬ליטר מי‪.‬‬
‫פתחו אלגורית שהקלט שלו הוא מספר ימי הטיסה בחלל‪ ,‬והפלט שלו הוא מספר השבתות שייעדר‬
‫הטייס מביתו‪ ,‬וכמות המי שיש לציידו לקראת הטיסה‪ .‬ישמו את האלגורית בשפת התכנות ‪.Java‬‬
‫שאלה ‪4.13‬‬
‫פקיד חרו‪ +‬ממלא טופס במש ‪ 10‬דקות‪ .‬עבור כל טופס שהפקיד ממלא הוא מקבל שכר של ‪.0 6.3‬‬
‫הפקיד עובד ללא הפוגה‪.‬‬
‫פתחו בשלבי אלגורית אשר הקלט שלו הוא מספר הטפסי שעל הפקיד למלא‪ ,‬והפלט שלו הוא‬
‫מש העבודה‪ ,‬בשעות ודקות‪ ,‬והשכר שהפקיד יקבל‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫למשל‪ ,‬עבור הקלט ‪ 55‬יהיה הפלט‪ :‬מש העבודה הוא‪ 9 :‬שעות ו‪ 10‬דקות והשכר הוא‪.346.5 :‬‬
‫שאלה ‪4.14‬‬
‫בפס ייצור במפעל לייצור משאיות מרכיבי גלגלי על המשאיות‪.‬‬
‫פתחו בשלבי אלגורית אשר הקלט שלו הוא מספר הגלגלי הכולל בפס הייצור ומספר גלגלי‬
‫למשאית‪ ,‬והפלט שלו הוא מספר המשאיות שיורכבו לה גלגלי‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ ,1000 6‬שפירושו ‪ 1000‬גלגלי בס הכל בפס הייצור‪ ,‬ו‪ 6‬גלגלי למשאית‪ ,‬יהיה‬
‫הפלט ‪.166‬‬
‫המרת ערך שלם לממשי‬
‫ראוב החליט‪ ,‬בנדיבות לבו‪ ,‬כי את דמי החנוכה שהוא מקבל מסבתו‪ ,‬הוא יחלק באופ שווה בי‬
‫החברי שיגיעו למסיבת החנוכה שלו‪.‬‬
‫למשל‪ ,‬א קיבל ראוב מסבתו ‪ ,0 25‬ולמסיבה הגיעו ‪ 10‬חברי‪ ,‬יקבל כל אחד מהחברי ‪.0 2.5‬‬
‫ראוב כתב את ההוראות הבאות כדי לחשב את הפלט הנדרש‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-115-‬‬
‫מדעי המחשב‬
‫;‪int money, friends‬‬
‫;‪double gift‬‬
‫;)"‪1. money = In.readInt("Insert sum of money‬‬
‫;)"‪2. friends = In.readInt("Insert number of friends‬‬
‫;‪3. gift = money / friends‬‬
‫;)"‪4. System.out.println("Every friend will get: " + gift + " shekels‬‬
‫נעקוב אחר מהל ביצוע משפטי התוכנית עבור הקלט ‪:10 25‬‬
‫פלט‬
‫שורה לביצוע‬
‫‪gift‬‬
‫‪friends‬‬
‫‪money‬‬
‫?‬
‫?‬
‫?‬
‫‪Insert sum of money‬‬
‫?‬
‫?‬
‫‪25‬‬
‫…‪1. money = In.readInt‬‬
‫‪Insert number of‬‬
‫‪friends‬‬
‫?‬
‫‪10‬‬
‫‪25‬‬
‫…‪2. friends = In.ReadInt‬‬
‫‪2‬‬
‫‪10‬‬
‫‪25‬‬
‫‪3. gift = money / friends‬‬
‫‪2‬‬
‫‪10‬‬
‫‪25‬‬
‫)…(‪4. System.out.println‬‬
‫‪Every friend will‬‬
‫‪get: 2.0 shekels‬‬
‫מדוע הפלט שגוי? נזכר בהגדרת הפעולה ‪ /‬בשפת ‪ :Java‬כאשר מחלקי של בשל‪ ,‬פעולת החילוק‬
‫מתפרשת תמיד כחלוקה בשלמי‪.‬‬
‫נתבונ בשורה השלישית‪ :‬בביטוי ‪ money / friends‬מתבצעת חלוקה של שני ערכי מטיפוס של‪.‬‬
‫אמנ‪ ,‬תוצאת החלוקה מושמת במשתנה מטיפוס ממשי‪ ,‬א דבר זה נעשה רק לאחר ביצוע פעולת‬
‫החלוקה‪ ,‬וזו הייתה פעולת חלוקה בשלמי ולא פעולת חלוקה בממשיי‪ ,‬כפי שנדרש‪ .‬עבור הקלט ‪25‬‬
‫‪ ,10‬מחושבת מנת החלוקה של ‪ 25‬ב‪ ,10‬והתוצאה המתקבלת היא שלמה )‪ .(2‬תוצאה זו מוצבת‬
‫במשתנה ‪ gift‬המכיל כעת את הער הממשי ‪) 2.0‬הצורה הממשית של המספר ‪ .(2‬א כ‪ ,‬התשובה‬
‫שקיבלנו היא שגויה‪ ,‬מכיוו שמחלוקת ‪ 25‬ב‪ 10‬ציפינו במקרה זה לקבל ‪ 2.5‬ולא ‪.2.0‬‬
‫כדי לפתור את הבעיה יש להודיע כי למרות שהמשתנה ‪ money‬הינו משתנה מטיפוס של השומר ער‬
‫של‪ ,‬יש להתייחס זמנית אל ערכו כאל ער ממשי‪ .‬בכ החלוקה הופכת להיות חלוקה של ער ממשי‬
‫בער של‪ ,‬ולכ היא חלוקה בממשיי‪ ,‬כפי שנדרש‪ .‬דבר זה מתבצע בשפת ‪ Java‬בעזרת פעולת המרה‬
‫)‪.(casting‬‬
‫לפני הביטוי שאת ערכו אנו מעונייני לפרש זמנית כממשי ולא כשל )במקרה זה‪ ,‬הביטוי ‪,(money‬‬
‫נוסי' את הוראת ההמרה שמשמעותה‪ :‬המר‪ ,‬רק לצור החישוב הנוכחי‪ ,‬את ערכו של ביטוי זה לער‬
‫ממשי‪ .‬ההוראה מיושמת על ידי כתיבת ש הטיפוס אליו נרצה להמיר‪ ,‬עטו' בסוגריי‪ ,‬לפני הביטוי‬
‫המומר‪:‬‬
‫;‪gift = (double)money / friends‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-116-‬‬
‫מדעי המחשב‬
‫שימו ♥‪ :‬המשתני המעורבי בביטוי המומר )במקרה זה‪ ,‬המשתנה ‪ (money‬אינ
הופכי מרגע זה‬
‫למשתני מטיפוס ממשי‪ .‬ה נשארי משתני מטיפוס של בדיוק כפי שהיו עד כה‪ .‬ההמרה גורמת‬
‫לכ שרק בעת חישוב הביטוי‪ ,‬ערכ נראה כממשי ולא של‪.‬‬
‫בהתא לכ‪ ,‬קטע הקוד הנכו הוא‪:‬‬
‫;‪int money, friends‬‬
‫;‪double gift‬‬
‫;)"‪money = In.readInt("Insert sum of money‬‬
‫;)" ‪friends = In.readInt("Insert number of friends‬‬
‫;‪gift = (double) money / friends‬‬
‫;)‪System.out.println("Every friend will get: " + gift‬‬
‫שאלה ‪4.15‬‬
‫לפניכ סדרת הוראות‪ .‬השלימו בטבלה את ערכי המשתני לאחר כל הוראה‪.‬‬
‫‪fnum‬‬
‫‪num‬‬
‫;‪int num, x = 22, y = 5‬‬
‫;‪double fnum‬‬
‫;‪num = x / y‬‬
‫;‪fnum = x / y‬‬
‫;‪fnum = (double)x / y‬‬
‫;‪num = x % y‬‬
‫שאלה ‪4.16‬‬
‫אהרו מעוניי לדעת את ממוצע ציוניו במקצועות היסטוריה‪ ,‬תנ" וספרות‪.‬‬
‫פתחו אלגורית המקבל כקלט את שלושת הציוני במקצועות אלו‪ ,‬ומציג כפלט את הממוצע של‬
‫שלושת הציוני‪ .‬ישמו את האלגורית בשפת התכנות ‪.Java‬‬
‫שאלה ‪4.17‬‬
‫אהרו מעוניי לדעת את הציו הכולל שלו במדעי המחשב‪.‬‬
‫ידוע כי שתי היחידות הראשונות מהוות ‪ 33%‬מהציו‪ ,‬היחידה השלישית מהווה ‪ 17%‬מהציו‪ ,‬ושתי‬
‫היחידות האחרונות מהוות ‪ 50%‬מהציו הכללי‪.‬‬
‫פתחו אלגורית המקבל כקלט את שלושת ציוניו של אהרו במדעי המחשב )בשתי היחידות‬
‫הראשונות‪ ,‬ביחידה השלישית ובשתי היחידות האחרונות(‪ ,‬כמספרי שלמי בי ‪ 0‬ל‪ ,100‬ומציג‬
‫כפלט את ציונו הכולל‪ .‬ישמו את האלגורית בשפת התכנות ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-117-‬‬
‫מדעי המחשב‬
‫פירוק מספר דו‪-‬ספרתי לספרותיו‬
‫בסעי' זה נכיר שתי תבניות שימושיות‪ .‬התבנית של פירוק מספר לספרותיו תודג על ידי בעיה ‪.3‬‬
‫תבנית שמשלימה אותה במוב מסוי היא בניית מספר מרכיבי‪ ,‬ואליה תתייחס שאלה ‪.4.19‬‬
‫בעיה ‪3‬‬
‫מטרת הבעיה הבאה ופתרונה‪ :‬פיתוח ויישו בשלבי של אלגורית ושימוש בפעולות חלוקה‬
‫בשלמי לצור פירוק מספר דוספרתי לספרותיו‬
‫פתחו אלגורית שהקלט שלו הוא מספר דוספרתי‪ ,‬חיובי או שלילי‪ ,‬והפלט שלו הוא סכו ספרות‬
‫המספר‪ .‬ישמו את האלגורית על ידי תוכנית מחשב בשפת ‪.Java‬‬
‫ניתוח הבעיה בעזרת דוגמאות‬
‫נבדוק עבור מספר דוגמאות מה הפלט הרצוי עבור קלט‪:‬‬
‫פלט‬
‫קלט‬
‫‪71‬‬
‫‪8‬‬
‫‪-53‬‬
‫‪8‬‬
‫‪49‬‬
‫‪13‬‬
‫ג במקרה זה‪ ,‬תהלי בדיקת הפלט עבור דוגמאות שונות מסייע לנו בהבנת משמעות הבעיה ובזיהוי‬
‫התהליכי הדרושי לפתרונה‪ .‬למשל‪ ,‬עבור הקלט ‪ 71‬והקלט ‪ 53‬קיבלנו את אותו הפלט‪ .‬כעת אנו‬
‫רואי כי ייתכנו קלטי שוני אשר מתאי לה אותו פלט‪ .‬בדומה‪ ,‬לקלט ‪ -53‬ולקלט ‪ 53‬מתאי‬
‫אותו פלט‪ ,‬וכ אנו רואי כי אי חשיבות לסימנו של המספר שבקלט‪ .‬אלו ה אבחנות חשובות לצור‬
‫כתיבת אלגורית נכו לפתרו הבעיה‪.‬‬
‫פירוק הבעיה לתתמשימות‬
‫את הבעיה הזו נפרק לשלוש תתמשימות‪:‬‬
‫‪ .1‬קליטת מספר דו‪-‬ספרתי חיובי או שלילי‬
‫‪ .2‬פירוק המספר לספרותיו וסיכום הספרות‬
‫‪ .3‬הצגה כפלט של סכום הספרות‬
‫נית לפרק ג את התתמשימה השנייה לתתמשימות ובכ לפרט יותר את הרעיו לפתרו הבעיה‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-118-‬‬
‫מדעי המחשב‬
‫‪ .2.1‬פירוק המספר לספרותיו‬
‫‪ .2.2‬סיכום הספרות‬
‫כיצד נפרק את המספר לספרותיו?‬
‫ידוע לנו כי המספר הוא דוספרתי‪ ,‬ולכ פירוקו לספרותיו פירושו חישוב ספרת העשרות וספרת‬
‫האחדות‪ .‬נפרק א כ את תתמשימה ‪ ,2.1‬פירוק המספר לספרותיו‪ ,‬כ‪:‬‬
‫‪ .2.1.1‬חישוב ספרת העשרות של המספר‬
‫‪ .2.1.2‬חישוב ספרת האחדות של המספר‬
‫?‬
‫כיצד נבצע פעולות אלו?‬
‫נוכל להיעזר בפעולות חלוקה בשלמי‪ ,‬של המספר הדוספרתי הנתו במספר ‪:10‬‬
‫שארית החלוקה של מספר של כלשהו ב‪ 10‬נותנת תמיד את ספרת האחדות של המספר‪.‬‬
‫מנת החלוקה של מספר של דוספרתי חיובי ב‪ 10‬נותנת תמיד את ספרת העשרות של המספר‪.‬‬
‫למשל‪ 24%10 = 4 ,‬ו ‪.24 / 10 = 2‬‬
‫שימו ♥‪ :‬חישוב מנת החלוקה של מספר דוספרתי ב‪ 10‬נותנת את ספרת העשרות של המספר‪ ,‬א‬
‫הוא חיובי‪ ,‬א לא א הוא שלילי! למשל‪ -20 / 10 = -2 ,‬ולא ‪!2‬‬
‫לכ‪ ,‬יש לטפל באופ שונה במספר שלילי‪.‬‬
‫בדוגמאות ראינו כי הפלט עבור מספר חיובי ועבור המספר הנגדי שלו צרי להיות זהה‪ .‬לכ‪ ,‬כל שעלינו‬
‫לעשות עבור מספר שלילי‪ ,‬הוא ל"היפטר" מהסימ ‪ ,-‬כלומר‪ ,‬להפו את המספר לחיובי‪ ,‬עוד לפני‬
‫פירוקו לספרותיו‪.‬‬
‫?‬
‫כיצד נהפו מספר שלילי לחיובי?‬
‫נוכל לעשות זאת על ידי חישוב ערכו המוחלט של המספר לפני פירוקו לספרותיו‪.‬‬
‫א כ‪ ,‬בס הכול‪ ,‬תתמשימה ‪ ,2.1‬פירוק המספר לספרותיו תורכב משלוש תתמשימות‪:‬‬
‫‪ .2.1‬חישוב ערכו המוחלט של המספר‬
‫‪ .2.2‬חישוב ספרת העשרות של המספר‬
‫‪ .2.3‬חישוב ספרת האחדות של המספר‬
‫כעת‪ ,‬לאחר פירוק הבעיה לתתמשימות‪ ,‬ברור לנו הרעיו לפתרו הבעיה וקל לכתוב את האלגורית‬
‫עצמו‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-119-‬‬
‫מדעי המחשב‬
‫בחירת משתני
‬
‫שני המשתני הראשוני שנבחר דרושי לנו עבור פעולות הקלט והפלט‪:‬‬
‫‪ – num‬של‪ ,‬ישמור את המספר הנית כקלט‬
‫‪ – sum‬של‪ ,‬ישמור את סכו ספרות המספר‬
‫המשתני לשמירת החישובי השוני‪:‬‬
‫‪ – absNum‬של‪ ,‬ישמור את ערכו המוחלט של המספר‬
‫‪ – tens‬של‪ ,‬ישמור את ספרת העשרות של המספר‬
‫‪ – units‬של‪ ,‬ישמור את ספרת האחדות של המספר‬
‫האלגורית
‬
‫האלגורית‪ ,‬לפי החלוקה לתתמשימות ותו שימוש במשתני שבחרנו‪ ,‬יהיה‪:‬‬
‫‪num-á éúøôñ-åã íìù øôñî èåì÷ .1‬‬
‫‪absNum-á íùäå øôñîä ìù èìçåîä åëøò úà áùç .2‬‬
‫‪tens-á íùäå 10-á absNum ìù ä÷åìçä úðî úà áùç .3‬‬
‫‪units-á íùäå 10-á absNum ìù ä÷åìçä úéøàù úà áùç .4‬‬
‫‪sum-á íùäå units ìùå tens ìù íåëñä úà áùç .5‬‬
‫‪sum ìù åëøò úà èìôë âöä .6‬‬
‫יישו
האלגורית
‬
‫כזכור‪ ,‬לצור חישוב ערכו המוחלט של מספר‪ ,‬נוכל להשתמש בפעולה לחישוב הער המוחלט ששייכת‬
‫למחלקה המתמטית‪ ,‬ומתוארת בטבלת הפעולות‪ .‬המשפט המתאי ליישו הוראה ‪ 2‬באלגורית‬
‫הוא‪:‬‬
‫;)‪absNum = Math.abs(num‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-120-‬‬
‫מדעי המחשב‬
‫התוכנית המלאה‬
‫*‪/‬‬
‫קלט‪ :‬מספר דו‪-‬ספרתי שלם חיובי או שלילי‬
‫פלט‪ :‬סכום ספרות המספר‬
‫‪*/‬‬
‫;‪import java.lang.Math‬‬
‫הודעה כי אנו מתכווני להשתמש‬
‫במחלקה ‪ Math‬בגו' התוכנית‬
‫‪public class DigitSum‬‬
‫{‬
‫)‪public static void main (String[] args‬‬
‫{‬
‫הגדרת משתנים ‪//‬‬
‫המספר הניתן כקלט ‪//‬‬
‫;‪int num‬‬
‫ערכו המוחלט של המספר ‪//‬‬
‫;‪int absNum‬‬
‫ספרת העשרות ‪//‬‬
‫;‪int tens‬‬
‫ספרת האחדות ‪//‬‬
‫;‪int units‬‬
‫סכום הספרות ‪//‬‬
‫;‪int sum‬‬
‫קלט ‪//‬‬
‫;)"‪1. num = In.readInt("Insert a two digit number‬‬
‫קבלת ערכו המוחלט של המספר ‪//‬‬
‫;)‪2. absNum = Math.abs(num‬‬
‫פירוק המספר לספרותיו ‪//‬‬
‫;‪3. tens = absNum / 10‬‬
‫;‪4. units = absNum % 10‬‬
‫סכום ספרות המספר ‪//‬‬
‫;‪5. sum = tens + units‬‬
‫פלט ‪//‬‬
‫;)‪6. System.out.println("The sum of the number’s digits is: " + sum‬‬
‫‪// main‬‬
‫}‬
‫‪// class DigitSum‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-121-‬‬
‫}‬
‫מדעי המחשב‬
‫מעקב‬
‫נעקוב אחר מהל ביצוע משפטי התוכנית עבור הקלט ‪:-17‬‬
‫פלט‬
‫‪Insert a two digit number‬‬
‫‪The sum of the number’s‬‬
‫‪digits is: 8‬‬
‫שורה לביצוע‬
‫‪sum‬‬
‫‪units‬‬
‫‪tens‬‬
‫‪absNum‬‬
‫‪num‬‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫‪-17‬‬
‫‪1‬‬
‫?‬
‫?‬
‫?‬
‫‪17‬‬
‫‪-17‬‬
‫‪2‬‬
‫?‬
‫?‬
‫‪1‬‬
‫‪17‬‬
‫‪-17‬‬
‫‪3‬‬
‫?‬
‫‪7‬‬
‫‪1‬‬
‫‪17‬‬
‫‪-17‬‬
‫‪4‬‬
‫‪8‬‬
‫‪7‬‬
‫‪1‬‬
‫‪17‬‬
‫‪-17‬‬
‫‪5‬‬
‫‪8‬‬
‫‪7‬‬
‫‪1‬‬
‫‪17‬‬
‫‪-17‬‬
‫‪6‬‬
‫על פי המעקב הזה התוכנית ביצעה את מטרתה‪.‬‬
‫א יש עוד לבדוק את התוכנית עבור דוגמאות קלט מגוונות )כלומר‪ ,‬בעלות מאפייני שוני אשר‬
‫מבטאי את מגוו הקלטי האפשריי( כדי להשתכנע שאכ היא מבצעת את מטרתה עבור כל קלט‬
‫אפשרי‪.‬‬
‫בדוגמה זו בדקנו עבור קלט שלילי‪ .‬כדאי לבדוק הא התוכנית מבצעת את מטרתה ג עבור קלט‬
‫חיובי‪.‬‬
‫שאלה ‪4.18‬‬
‫בנו טבלת מעקב אחר ביצוע משפטי התוכנית ‪ DigitSum‬עבור הקלט ‪.53‬‬
‫פלט‬
‫‪sum‬‬
‫‪units‬‬
‫‪tens‬‬
‫‪absNum‬‬
‫‪num‬‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫‪53‬‬
‫שורה לביצוע‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫סוף פתרון בעיה ‪3‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-122-‬‬
‫מדעי המחשב‬
‫להעמקה בתבנית פירוק מספר חיובי לספרותיו פנו לעמוד ‪.138‬‬
‫שאלה ‪4.19‬‬
‫שנו את התוכנית ‪) DigitSum‬התוכנית מפתרו בעיה ‪ (3‬כ שהפלט יהיה המספר הנתו אבל כאשר‬
‫ספרותיו בסדר הפו‪ .‬למשל‪ ,‬עבור הקלט ‪ ,43‬הפלט הנדרש הוא ‪.34‬‬
‫הדרכה‪ :‬בידיכ שני משתני המבטאי את ספרת האחדות )‪ (units‬וספרת העשרות )‪ (tens‬של‬
‫המספר‪ .‬חשבו על ביטוי חשבוני אשר משתמש בשני ערכי אלה ונות את המספר הנדרש‪.‬‬
‫להעמקה בתבנית בניית מספר פנו לעמוד ‪.141‬‬
‫שאלה ‪4.20‬‬
‫שנו את התוכנית ‪) DigitSum‬התוכנית מפתרו בעיה ‪ (3‬כ שהפלט יהיה המרחק בי ספרות המספר‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ ,43‬הפלט הנדרש הוא ‪.1‬‬
‫הדרכה‪ :‬היעזרו בפעולה לחישוב ער מוחלט‪.‬‬
‫‪ 4.3‬הטיפוס התווי‬
‫עד עתה עסקנו רק במספרי‪ ,‬מטיפוס של או מטיפוס ממשי‪ .‬בפרק זה נלמד כי עיבודי נית לבצע‬
‫לא רק על מספרי‪ ,‬אלא ג על תווי‪ .‬תו הוא כל סימ אשר נית להציג על מס המחשב‪ .‬כגו‪:‬‬
‫אותיות )… ‪ ,('a', 'b', 'A',‬סימני מתמטיי )'<'‪ ,(... ,'%' ,'. ' ,'*' ,'+' ,‬ספרות )'‪ ,(... ,'2' ,'1' ,'0‬סימני‬
‫תחביר )' !'‪ ,(... ,': ' ,', ' ,‬רווח )' '(‪ ,‬וכ הלאה‪.‬‬
‫לצור הטיפול הפנימי של המחשב בתווי מותא לכל תו מספר של‪ ,‬על פי קוד סטנדרטי‪ ,‬השומר‬
‫על עקרו מרכזי‪ :‬לתווי עוקבי מותא ער מספרי עוקב‪ .‬למשל‪ ,‬א לתו '‪ 'b‬מותא מספר כלשהו‪,‬‬
‫לתו '‪ 'c‬מותא המספר העוקב לו‪ .‬למעשה‪ ,‬כל התווי מסודרי בתתקבוצות המכילות תווי‬
‫עוקבי בקבוצת התווי‪ :‬אותיות ה‪) ABC‬הגדולות( מסודרות בתת קבוצה אחת ואותיות ה‪abc‬‬
‫)הקטנות( מסודרות בתת קבוצה אחרת‪ ,‬אותיות עבריות בתתקבוצה נפרדת‪ ,‬וכ ג הספרות‪.‬‬
‫בהמש לימודינו נלמד כיצד נית לעבד מילי וא' משפטי שלמי‪ ,‬א בסעי' זה נתמקד‪ ,‬כאמור‪,‬‬
‫בתווי בודדי‪.‬‬
‫ער מטיפוס תווי מצוי בשפת ‪ Java‬בי גרשיי בודדי‪ .‬למשל '‪.'Z‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-123-‬‬
‫מדעי המחשב‬
‫בעיה ‪4‬‬
‫מטרת הבעיה הבאה ופתרונה‪ :‬הצגת הטיפוס התווי‬
‫פתחו אלגורית אשר הקלט שלו הוא אות לועזית גדולה והפלט שלו הוא האות הלועזית הקטנה‬
‫המתאימה‪ .‬ישמו את האלגורית על ידי תוכנית מחשב בשפת ‪.Java‬‬
‫ניתוח הבעיה על ידי דוגמאות‬
‫הדוגמאות הבאות מבהירות את הנדרש בבעיה ‪:4‬‬
‫קלט‬
‫פלט‬
‫'‪'A‬‬
‫'‪'a‬‬
‫'‪'D‬‬
‫'‪'d‬‬
‫''‪'V‬‬
‫'‪'v‬‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטת אות לועזית גדולה‬
‫‪ .2‬חישוב האות הלועזית הקטנה המתאימה‬
‫‪ .3‬הצגה כפלט של האות הלועזית הקטנה המתאימה‬
‫?‬
‫כיצד נחשב את האות הלועזית הקטנה המתאימה?‬
‫אנו יודעי כי לכל תו מתאי מספר‪ ,‬ולתווי עוקבי מתאימי מספרי עוקבי‪.‬‬
‫הנה דוגמה אפשרית למספור כזה‪:‬‬
‫‪'A' – 65‬‬
‫‪'a' – 97‬‬
‫‪'B' – 66‬‬
‫‪'b' – 98‬‬
‫‪'C' – 67‬‬
‫‪'c' – 99‬‬
‫‪'D' – 68‬‬
‫‪'d' – 100‬‬
‫…‬
‫…‬
‫מכיוו שמספור האותיות הגדולות מתחילות ממספר מסוי‪ ,‬וממשי מש בסדר עולה רצי'‪ ,‬וכ ג‬
‫לגבי האותיות הקטנות‪ ,‬הרי שההפרש בי המספר של אות גדולה למספר של האות הקטנה המתאימה‬
‫לה הוא קבוע‪ .‬כלומר‪ ,‬א למשל‪ ,‬ההפרש בי '‪ 'a‬ל'‪ 'A‬הוא ‪) 32‬כפי שמתקיי בדוגמה שלעיל כי‬
‫‪ ,(97−65 = 32‬זהו ג ההפרש בי '‪ 'b‬ל'‪ ,(98−66=32) 'B‬בי '‪ 'c‬ל'‪ ,'C‬וכ הלאה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-124-‬‬
‫מדעי המחשב‬
‫א כ‪ ,‬כל שיש לעשות הוא להוסי' למספר המתאי לאות הלועזית הגדולה שקלטנו את ההפרש‬
‫הקבוע שבי אות קטנה והאות הגדולה המתאימה לה‪ .‬את ההפרש הקבוע הזה נוכל לחשב עבור זוג‬
‫אותיות כלשהו‪ ,‬למשל‪ ,‬עבור האותיות '‪ 'a‬ו'‪.'A‬‬
‫הנה הפירוק של תתמשימה ‪:2‬‬
‫‪ .2.1‬חישוב ההפרש הקבוע בין אות קטנה לאות הגדולה המתאימה לה‪ ,‬על ידי הפחתת‬
‫המספר המתאים ל‪ 'A'-‬מהמספר המתאים ל‪.'a'-‬‬
‫‪ .2.2‬הוספת ההפרש שחושב למספור של האות הגדולה שנקלטה‬
‫בחירת משתני
‬
‫נשתמש במשתני הבאי‪:‬‬
‫‪ – capitalLetter‬מטיפוס תווי‪ ,‬ישמור את התו הנית כקלט‪ ,‬כלומר‪ ,‬האות הגדולה‬
‫‪ – smallLetter‬מטיפוס תווי‪ ,‬ישמור את תו הפלט‪ ,‬כלומר‪ ,‬האות הקטנה המתאימה‬
‫האלגורית
‬
‫הנה האלגורית המתאי לפירוק לתתמשימות ולמשתני שנבחרו‪:‬‬
‫‪capitalLetter-á äìåãâ úåà èåì÷ .1‬‬
‫‪úà óñåä ,'A'-ì íéàúîä øôñîì 'a'-ì íéàúîä øôñîä ïéá ùøôää úà áùç .2‬‬
‫‪smallLetter-á äàöåúä úà íùäå capitalLetter-ì áùåçù ùøôää‬‬
‫‪smallLetter êøò úà èìôë âöä .3‬‬
‫יישו
האלגורית
‬
‫האלגורית משתמש במשתני מטיפוס תווי‪ ,‬ולכ צרי כמוב להצהיר עליה‪.‬‬
‫משתנה מטיפוס תווי‬
‫מוצהר באמצעות המילה ‪) char‬קיצור של המילה ‪,character‬‬
‫שמשמעותה תו באנגלית(‪.‬‬
‫למשל‪:‬‬
‫;‪char capitalLetter‬‬
‫יישו הוראה ‪ 1‬באלגורית צרי להיות משפט קלט‪ ,‬הקולט תו‪ .‬פעולת הקלט של ערכי מטיפוס‬
‫תווי היא הפעולה ‪ ,In.readChar‬והשימוש בה דומה לשימוש בפעולות קלט אחרות שראינו‪ .‬לכ‪,‬‬
‫היישו של הוראה ‪ 1‬יהיה‪:‬‬
‫;)"‪capitalLetter = In.readChar ("Insert a capital letter‬‬
‫כיצד נבצע את החישובי הנדרשי בהוראה ‪?2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-125-‬‬
‫מדעי המחשב‬
‫בשפת ‪ Java‬תו מזוהה ע הער המספרי המתאי לו‪ .‬לכ נית לשלב תווי בביטויי חשבוניי‪,‬‬
‫והפעולות‬
‫שכלולות‬
‫בביטוי‬
‫יפעלו‬
‫על‬
‫הערכי‬
‫המספריי‬
‫המתאימי‬
‫לתווי‪.‬‬
‫לכ‪,‬‬
‫הביטוי '‪ 'a'-'A‬נות לנו את ההפרש לו אנו זקוקי‪ .‬א כ‪ ,‬הביטוי הבא מבטא את החישובי‬
‫בהוראה ‪:2‬‬
‫;'‪'a' – 'A‬‬
‫‪capitalLetter +‬‬
‫אבל‪ ,‬מאחר שבשפת ‪ Java‬תווי מזוהי ע ערכ המספרי‪ ,‬הרי כאשר אנו מבצעי פעולות‬
‫חשבוניות על ערכי מטיפוס תווי‪ ,‬התוצאה הינה מטיפוס של‪ .‬ליישו הוראה ‪ ,2‬נרצה להשי את‬
‫ער הביטוי לתו משתנה מטיפוס תווי‪ ,smallLetter ,‬ולכ עלינו להשתמש בהמרה )‪,(casting‬‬
‫הפע כדי להמיר את ער הביטוי מטיפוס של לטיפוס תווי‪.‬‬
‫נשתמש בפעולת ההמרה באותו האופ בו השתמשנו בה בסעי' הקוד‪ .‬כא נמיר ער ביטוי מטיפוס‬
‫של להיות ער מטיפוס תווי‪ .‬שימו לב שההמרה צריכה לחול על כל הביטוי‪ ,‬ולכ נעטו' אותו‬
‫בסוגריי‪.‬‬
‫א כ‪ ,‬היישו ב‪ Java‬של הוראה ‪ 2‬הוא‪:‬‬
‫;)'‪'a' - 'A‬‬
‫‪smallLetter = (char)(capitalLetter +‬‬
‫שימו ♥‪ :‬הוראת ההמרה לטיפוס תווי מבוטאת על ידי זוג הסוגריי השמאלי‪ .‬זוג הסוגריי הימני‬
‫מגדיר את התחו עליו מופעלת ההמרה‪.‬‬
‫שימו ♥‪ :‬בפתרו זה אנו מתייחסי ה למשתני מטיפוס תווי )‪(capitalLetter ,smallLetter‬‬
‫וה לערכי תוויי‪ ,‬כלומר‪ ,‬ערכי קבועי מטיפוס תווי )'‪ .('A' ,'a‬הערכי התוויי מוקפי בגרשיי‪.‬‬
‫ההתייחסות למשתני היא דר שמותיה‪ ,‬בדיוק כפי שנעשה עבור משתני מטיפוס מספרי‪.‬‬
‫פלט של תווי נעשה ב‪ Java‬בעזרת הוראות הפלט המוכרות לנו‪.‬‬
‫נייש את האלגורית תו שימוש בהוראות קלט ופלט עבור תווי‬
‫;)" ‪1. capitalLetter = In.readChar("Insert capital letter‬‬
‫;)'‪'a'-'A‬‬
‫‪2. smallLetter = (char)(capitalLLetter +‬‬
‫‪3. System.out.println("The corresponding small letter is: " +‬‬
‫;)‪smallLetter‬‬
‫שימו ♥‪ :‬הוראות אלו אינ מסתמכות על ידיעת ער ההפרש עצמו‪ ,‬או על ידיעה מפורשת של הער‬
‫המספרי המותא לכל תו‪ .‬בכ אנו מסייעי לתוכנית להיות עמידה יותר‪ :‬ג א גרסאות מאוחרות‬
‫יותר של ‪ Java‬ישתמשו בקידוד אחר לתווי‪ ,‬הרי כל עוד יישמר העיקרו שתווי עוקבי מותאמי‬
‫למספרי עוקבי‪ ,‬התוכנית תישאר נכונה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-126-‬‬
‫מדעי המחשב‬
‫מעקב‬
:'D' ‫נעקוב אחר מהל ביצוע משפטי התוכנית עבור הקלט‬
‫שורה לביצוע‬
capitalLetter
smallLetter
?
?
'D'
?
'D'
'd'
'D'
'd'
1. capitalLetter =
Insert capital
letter
In.Read...
2. smallLetter =
‫פלט‬
char)(capitalLetter...
3. System.out.println(...)
Small letter: d
‫התוכנית המלאה‬
/*
‫התוכנית קולטת אות לועזית גדולה‬
‫ומציגה כפלט את האות הלועזית הקטנה המתאימה לה‬
*/
public class CapitalLetterToSmall
{
public static void main (String[] args)
{
// ‫הגדרת משתנים‬
char capitalLetter;
//
‫תו הקלט – אות לועזית גדולה‬
char smallLetter;
//
‫תו הפלט – אות לועזית קטנה‬
// ‫קלט‬
capitalLetter = In.readChar("Insert capital letter: ");
// ‫חישוב האות הקטנה‬
smallLetter = (char)(capitalLetter +
'a'-'A');
// ‫פלט‬
System.out.println("The corresponding small letter is: " +
smallLetter);
} // main
} // class CapitalLetterTOSmall
4 ‫סוף פתרון בעיה‬
‫מדעי המחשב‬
-127-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫שאלה ‪4.21‬‬
‫שנו את התוכנית ‪ CapitalLetterToSmall‬כ שתקבל כקלט אות לועזית קטנה‪ ,‬ותציג כפלט את‬
‫האות הלועזית הגדולה המתאימה לה‪.‬‬
‫רמז‪ :‬שימו לב לסדר פעולות חשבו! בדקו עצמכ בזהירות!‬
‫שאלה ‪4.22‬‬
‫פתחו אלגורית הקולט תו ומציג כפלט את התו הבא אחריו בסדר הקידוד המספרי‪ .‬ישמו את‬
‫האלגורית כתוכנית בשפת ‪.Java‬‬
‫שימו ♥‪ :‬מה התו אחרי התו '‪ ?'a‬מה התו אחרי התו ’‪ ?‘S‬מה התו אחרי התו '‪?'z‬‬
‫בחנו דוגמאות קלט מגוונות ככל שנית‪.‬‬
‫המרה מתו המייצג ספרה לערך מספרי מתאים‬
‫כפי שנאמר בתחילת הפרק‪ ,‬ערכי הטיפוס התווי כוללי כל סימ אשר נית להציג על מס המחשב‪.‬‬
‫בי סימני אלה נכללות ג הספרות‪ .‬למשל‪ ,‬ער מטיפוס תו יכול להיות ’‪ ’4‬או ’‪ .‘7‬לעיתי‪ ,‬בהינת‬
‫תו המייצג ספרה‪ ,‬נרצה לדעת את ערכה המספרי של הספרה )כלומר‪ ,‬להתאי לתו '‪ '4‬את הער‬
‫השל ‪.(4‬‬
‫הנה דוגמה אפשרית למספור הפנימי עבור התווי המייצגי ספרות‪:‬‬
‫‪48‬‬
‫– '‪'0‬‬
‫‪49‬‬
‫– '‪'1‬‬
‫‪50‬‬
‫– '‪'2‬‬
‫‪51‬‬
‫– '‪'3‬‬
‫…‬
‫התווי המייצגי ספרות )'‪ '2' ,'1' ,'0‬וכו'( ה תווי עוקבי‪ ,‬ולכ ג המספור שלה עוקב‪.‬‬
‫?‬
‫כיצד נית לנצל את העובדה שמספור התווי המייצגי ספרות הוא עוקב כדי לחשב‪ ,‬עבור תו‬
‫המייצג ספרה‪ ,‬את ערכה המספרי של הספרה?‬
‫נשי לב כי התו '‪ '1‬מרוחק תו אחד מהתו '‪ .'0‬בדומה‪ ,‬התו '‪ '2‬מרוחק שני תווי מהתו '‪ ,'0‬התו‬
‫'‪'3‬‬
‫מרוחק שלושה תווי מהתו '‪ ,'0‬וכ הלאה‪ .‬לכ‪ ,‬נוכל להשתמש בפעולת חיסור כדי לחשב את הער‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-128-‬‬
‫מדעי המחשב‬
‫הדרוש‪ .‬למשל‪ ,‬א נפחית מהמספר המותא לתו '‪ '3‬את המספר המתאי לתו '‪ ,'0‬נקבל בדיוק ‪3‬‬
‫)‪.('3'−'0' = 51−48 = 3‬‬
‫ג הפע אי אנו משתמשי באופ ישיר בערכי הקידוד עצמ‪ ,‬אלא רק מסתמכי על כ שהקידוד‬
‫נות ערכי עוקבי לספרות עוקבות‪.‬‬
‫לכ‪ ,‬א במשתנה ‪) charDigit‬מטיפוס תווי( שמור תו המייצג ספרה‪ ,‬אז לאחר החישוב שלהל יכיל‬
‫המשתנה ‪ ,digit‬מטיפוס של‪ ,‬את ערכה המספרי של הספרה המיוצגת על ידי התו שב‪.charDigit‬‬
‫;'‪digit = charDigit – '0‬‬
‫שאלה ‪4.23‬‬
‫פתחו אלגורית המקבל כקלט תו המייצג ספרה‪) .‬יש עשרה תווי אפשריי לקלט זה‪'0', '1', '2' … :‬‬
‫'‪.('9‬‬
‫פלט האלגורית יהיה מורכב משלושה מספרי‪ :‬הספרה המיוצגת על ידי תו הקלט )שנקרא לה לש‬
‫קיצור ספרת הקלט(‪ ,‬ספרת הקלט לאחר הכפלה ב‪ ,10‬וספרת הקלט לאחר הכפלה ב‪ .15‬ישמו את‬
‫האלגורית כתוכנית בשפת ‪.Java‬‬
‫הדרכה‪ :‬חשבו מהו המספר המתקבל אחרי הכפלת ספרת הקלט ב‪.10‬‬
‫שאלה ‪4.24‬‬
‫פתחו אלגורית המקבל כקלט שני תווי‪ ,‬כל אחד מה מייצג ספרה‪ .‬פלט האלגורית יהיה תוצאת‬
‫החיבור בי שני המספרי המתאימי‪ .‬למשל‪ ,‬א הקלט הוא ’‪ ‘9’ ‘5‬הפלט יהיה ‪.14‬‬
‫ישמו את האלגורית כתוכנית בשפת ‪.Java‬‬
‫סיכום‬
‫פיתוח ויישום אלגוריתמים‬
‫הדגמנו בפרק זה את שלבי התהלי של פיתוח ויישו אלגורית‪ ,‬באמצעות בעיות ברמות קושי‬
‫ומורכבות שונות‪ .‬למרות הבדלי הרמות‪ ,‬הקפדנו על שלבי התהלי בפתרו כל הבעיות‪ :‬פיתוח ראשוני‬
‫של הבעיה תו בחינת הפלט עבור דוגמאות קלט מגוונות‪ ,‬ניסוח רעיו לפתרו עלידי פירוק לתת‬
‫משימות‪ ,‬בחירת משתני‪ ,‬כתיבת אלגורית‪ ,‬יישו האלגורית על ידי משפטי תוכנית‪ ,‬בדיקת מהל‬
‫ביצוע התוכנית באמצעות טבלת מעקב וכתיבת התוכנית המלאה והרצתה‪.‬‬
‫ג בשאר פרקי הספר‪ ,‬בעת פתרו בעיות אלגוריתמיות‪ ,‬נשתדל להקפיד על פיתוח אלגורית בשלבי‬
‫ויישומו על פי שלבי אלה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-129-‬‬
‫מדעי המחשב‬
‫ייתכ כי בפתרו בעיות בהמש‪ ,‬נאחד לפעמי חלק מ השלבי‪ .‬נעשה זאת רק לאחר רכישת מיומנות‬
‫מספקת בפתרו מפורט בשלבי‪ .‬בכל מקרה נקפיד תמיד על ביצוע שלבי הבדיקה – ה הבדיקה‬
‫ה"ידנית" וה הבדיקה באמצעות ההרצה‪.‬‬
‫פעולות חלוקה בשלמים‬
‫על ערכי מטיפוס של מוגדרות שתי פעולות‪ :‬מנת חלוקה )פעולת ‪ (div‬ושארית חלוקה )פעולת‬
‫‪:(mod‬‬
‫מנת החלוקה של מספר של ‪ x‬במספר של ‪ y‬שווה לחלק השל של ‪ ,x/y‬ובמילי אחרות‪ ,‬למספר‬
‫הפעמי שהער ‪ y‬נכנס בער ‪.x‬‬
‫שארית החלוקה של מספר של ‪ x‬במספר של ‪ y‬מבטאת את השארית הנותרת לאחר חלוקה‬
‫בשלמי של ‪ x‬ב‪ ,y‬ובמילי אחרות‪ ,‬את מה שנותר אחרי שמפחיתי מ‪ x‬כפולות שלמות של ‪ y‬ככל‬
‫שנית‪.‬‬
‫תוצאת שארית החלוקה של מספר של כלשהו ב‪ ,n‬יכולה להיות כל מספר של בי ‪ 0‬ל‪.n−1‬‬
‫פעולות אלו מוגדרות עבור ערכי שלמי בלבד!‬
‫נית להיעזר בפעולות חלוקה בשלמי כדי לבצע פירוק מספר דוספרתי לספרותיו‪.‬‬
‫הטיפוס התווי‬
‫לכל תו מותא
ער מספרי השמור לו‪.‬‬
‫לתווי
עוקבי
‪ ,‬ערכי מספריי עוקבי‪.‬‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪4‬‬
‫פעולות חלוקה בשלמים‬
‫פעולת מנת החלוקה בשלמי מסומנת בשפת ‪ Java‬על ידי הסימ ‪./‬‬
‫כאשר הפעולה ‪ /‬מופעלת על שני ערכי שלמי היא מפורשת בשפת ‪ Java‬כפעולת חלוקה בשלמי‪.‬‬
‫בכל מקרה אחר )של וממשי‪ ,‬ממשי ושל‪ ,‬ממשי וממשי( הפעולה ‪ /‬מפורשת בשפת ‪ Java‬כפעולת‬
‫חלוקה על ערכי ממשיי‪.‬‬
‫פעולת שארית החלוקה בשלמי מסומנת בשפת ‪ Java‬על ידי הסימ ‪.%‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-130-‬‬
‫מדעי המחשב‬
‫כדי לבצע פעולת חלוקה ממשית בי שני ערכי שלמי יש לבצע המרה )‪ (casting‬של המחלק או‬
‫המחולק לער ממשי‪.‬‬
‫המרה של ער של ‪ x‬לער ממשי נעשית בשפת ‪ Java‬כ‪.(double)x :‬‬
‫לפעולת ההמרה אי השפעה של ממש על טיפוסי המשתני המעורבי בביטוי המומר‪ .‬היא רק מנחה‬
‫להתייחס אל ערכיה כאילו היו מטיפוס של‪ ,‬באופ זמני‪ ,‬רק לצור החישוב הנוכחי‪.‬‬
‫הטיפוס התווי‬
‫ער מטיפוס תווי מצויי ב‪ Java‬בי גרשיי
בודדי‪ ,‬למשל כ‪.'a' :‬‬
‫הצהרה על משתנה מטיפוס תווי נעשית בעזרת המילה ‪.char‬‬
‫נית לשלב תווי בביטויי חשבוניי‪ .‬בזמ חישוב הביטוי נלקחי הערכי המספריי המותאמי‬
‫לכל תו ותו‪.‬‬
‫הטיפוס של ביטוי חשבוני המערב תווי הוא מספרי‪ .‬במידת הצור‪ ,‬נית להמיר את ערכו של ביטוי‬
‫כזה לער מטיפוס תווי על ידי פעולת ההמרה‪ ,‬למשל‪.(char)( 'a'+3) :‬‬
‫שאלות נוספות‬
‫שאלות נוספות לסעיף ‪4.1‬‬
‫‪ .1‬פתחו אלגורית אשר הקלט שלו הוא מקדמי של משוואה ריבועית‪ ,c ,b ,a ,‬והפלט הוא שני‬
‫הפתרונות האפשריי של המשוואה הריבועית‪ .‬הניחו כי הקלט תקי ולמשוואה הריבועית אכ‬
‫קיימי שני פתרונות‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫‪− b ± b 2 − 4ac‬‬
‫להזכירכ‪ ,‬הנה הנוסחה לחישוב פתרונותיה של משוואה ריבועית‪:‬‬
‫‪2a‬‬
‫= ‪X 1, 2‬‬
‫שאלות נוספות לסעיף ‪4.2‬‬
‫‪ .1‬פתחו אלגורית אשר הקלט שלו הוא פרק זמ‪ ,‬הנתו בימי‪ ,‬והפלט שלו הוא מספר השבועות‬
‫השלמי הכלולי בפרק הזמ הנתו‪ .‬לדוגמה‪ ,‬עבור הקלט ‪ 18‬הפלט הוא ‪ .2‬ישמו את האלגורית‬
‫כתוכנית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-131-‬‬
‫מדעי המחשב‬
‫‪ .2‬נהגי מוניות שירות יוצאי לדרכ רק כאשר כל המושבי במונית תפוסי‪.‬‬
‫פתחו אלגורית אשר הקלט שלו הוא מספר הנוסעי הממתיני למונית בתחנה ומספר המושבי‬
‫במונית‪ ,‬והפלט שלו הוא מספר המוניות שנית למלא במלוא‪ ,‬ומספר הנוסעי שייוותרו בתחנה‬
‫)הניחו כי לכל המוניות בתחנה מספר מושבי זהה(‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪7‬‬
‫עבור הקלט ‪7‬‬
‫‪ 25‬יהיה הפלט‪ :‬ניתן למלא ‪ 3‬מוניות‪ 4 ,‬נוסעים יוותרו בתחנה‪.‬‬
‫‪ 35‬יהיה הפלט‪ :‬ניתן למלא ‪ 4‬מוניות‪ 0 ,‬נוסעים יוותרו בתחנה‪.‬‬
‫‪ .3‬נתו קטע התוכנית הבא‪ num2) :‬ו‪ num2‬ה משתני מטיפוס של(‬
‫;‪a = num1 / 2‬‬
‫;‪b = num1 % 2‬‬
‫;‪c = num2 / 10‬‬
‫;‪d = num2 % 10‬‬
‫;‪e = num1 / num2‬‬
‫;‪d = num1 % num2‬‬
‫א‪ .‬ציינו ער תחילי של ‪ num1‬שעבורו ערכיה הסופיי של ‪ a‬ו‪ b‬יהיו ‪ 3‬ו‪ 0‬בהתאמה‪.‬‬
‫ב‪ .‬ציינו ער תחילי של ‪ num2‬שעבורו ערכיה הסופיי של ‪ c‬ו‪ d‬יהיו ‪ 6‬ו‪ 3‬בהתאמה‪.‬‬
‫ג‪ .‬תנו שתי דוגמאות לערכי תחיליי של ‪ num1‬ו‪ num2‬שעבור ערכיה הסופיי של ‪ e‬ו‪ f‬יהיו‬
‫‪ 3‬ו‪ ,2‬בהתאמה‪.‬‬
‫שאלות מסכמות לפרק ‪4‬‬
‫‪ .1‬במכולת של חנניה מוכרי מסטיקי בקבוצות‪ ,‬על פי גודל האריזות הקיימות‪ ,‬והמסטיקי‬
‫הנותרי נמכרי בודדי‪ .‬שווי כל מסטיק הוא ‪.0 0.2‬‬
‫יש לפתח אלגורית שהקלט שלו הוא מספר המסטיקי הנמצא במכולת‪ ,‬וגודל האריזות הקיימות‬
‫בחנות )כל האריזות באותו הגודל(‪ .‬הפלט של האלגורית הוא השווי הכולל של המסטיקי‬
‫בחבילות השלמות ושווי המסטיקי שנותרי לא ארוזי‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ 100 7‬הפלט הדרוש הוא ‪.19.6 0.4‬‬
‫בחנו את הפלט עבור דוגמאות קלט מייצגות‪ ,‬והציגו את חלוקת המשימה המתוארת לתת‬
‫משימות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-132-‬‬
‫מדעי המחשב‬
‫‪ .2‬חנניה מהמכולת מעוניי באלגורית אשר יעזור לו להחזיר עוד' במטבעות בצורה היעילה ביותר‪,‬‬
‫כלומר‪ ,‬על ידי מספר מטבעות קט ביותר‪.‬‬
‫בהנחה כי חנניה יכול להחזיר עוד' א ורק במטבעות של ‪ 0 5 ,0 1‬ו‪ ,0 10‬כתבו אלגורית‬
‫המקבל כקלט את הסכו אותו צרי להחזיר חנניה כעוד' )מספר של(‪ ,‬ומציג כפלט‪:‬‬
‫א‪ .‬מספר המטבעות מכל סוג שחנניה יחזיר‪.‬‬
‫ב‪ .‬מספר המטבעות הכולל שחנניה יחזיר‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ 18‬יתקבל הפלט‪:‬‬
‫א‪1 :0 10 ,1 :0 5 ,3 :0 1 .‬‬
‫ב‪ 5 .‬מטבעות‪.‬‬
‫ישמו את האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-133-‬‬
‫מדעי המחשב‬
‫תבניות – פרק ‪4‬‬
‫חלוקת כמות פריטים לקבוצות בגודל נתון‬
‫נתבונ בבעיה הבאה‪:‬‬
‫במפעל זכוכית אורזי ‪ 8‬כוסות בקופסת קרטו‪ .‬מחיר קופסת קרטו הוא ‪ . 1.5‬נתו אלגורית‬
‫חלקי שהקלט שלו הוא מספר הכוסות המיועדות לאריזה‪ ,‬והפלט שלו הוא‪ :‬מספר הקופסאות‬
‫המלאות )בכוסות( שנית לארוז‪ ,‬המחיר הכולל של הקרטו הדרוש לאריזה ומספר הכוסות‬
‫שנותרו בתפזורת‪ .‬השלימו את האלגורית‪:‬‬
‫‪glasses-á äæéøàì úåãòåéîä úåñåë øôñî èåì÷ .1‬‬
‫‪boxes-á íùäå ________ éãé ìò ________ úà áùç .2‬‬
‫‪price-á íùäå ________ éãé ìò ________ úà áùç .3‬‬
‫‪left-á íùäå ________ éãé ìò ________ úà áùç .4‬‬
‫‪left êøòä úàå price êøòä úà ,boxes êøòä úà èìôë âöä .5‬‬
‫בבעיה זו יש לחשב את המספר המירבי של קופסאות מלאות על ידי חישוב מנת החלוקה של‬
‫מספר הכוסות ב‪ .8‬את חישוב מספר הכוסות שנותרו בתפזורת נבצע באמצעות חישוב שארית‬
‫החלוקה של מספר הכוסות המיועדות לאריזה ב‪ .8‬התבנית של חלוקת כמות פריטי לקבוצות‬
‫בגודל נתו‪ ,‬באמצעות חישובי מנה ושארית‪ ,‬כפי שמשמשת בפתרו בעיה זו‪ ,‬דומה לחישובי‬
‫שהוצגו בפתרו בעיה ‪ 2‬בפרק הלימוד‪ .‬תבנית זו היא בסיסית ביותר ושימושית בחישובי רבי‬
‫של מספרי שלמי‪ .‬התבנית משמשת ה כתבנית עיקרית בבעיות חישוב של מספרי שלמי וה‬
‫כתבנית המשולבת בחישובי מורכבי שוני‪.‬‬
‫נתבונ בשני האלגוריתמי הללו‪:‬‬
‫‪amount-á íéàåâåâä øôñî èåì÷ .1‬‬
‫‪-á äæéøàì úåãòåéîä úåñåë øôñî èåì÷ .1‬‬
‫‪glasses‬‬
‫‪úðî éãé ìò úåàìîä úåé÷ùä øôñî úà áùç .2‬‬
‫‪úà íùäå 20-á amount ìù ä÷åìçä‬‬
‫‪bags-á äàöåúä‬‬
‫‪éãé ìò úåàìîä úåàñôå÷ä øôñî úà áùç .2‬‬
‫‪úà íùäå 8-á glasses ìù ä÷åìçä úðî‬‬
‫‪boxes-á äàöåúä‬‬
‫‪boxes*1.5 éãé ìò úåàñôå÷ä øéçî úà áùç .3‬‬
‫‪price-á íùäå‬‬
‫‪ìò úøåæôúá åøúåðù úåñåëä øôñî úà áùç .4‬‬
‫‪íùäå 8-á glasses ìù ä÷åìçä úéøàù éãé‬‬
‫‪left-á‬‬
‫‪êøòä úà ,boxes êøòä úà èìôë âöä .5‬‬
‫‪left êøòä úàå price‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪íéøåæô åøúåðù íéàåâåâä øôñî úà áùç .3‬‬
‫‪20-á amount ìù ä÷åìçä úéøàù éãé ìò‬‬
‫‪remainder-á äàöåúä úà íùäå‬‬
‫‪êøòä úàå bags êøòä úà èìôë âöä .4‬‬
‫‪remainder‬‬
‫‪-135-‬‬
‫מדעי המחשב‬
‫אנו רואי כי בשני האלגוריתמי מתבצעת חלוקת כמות פריטי לקבוצות‪ :‬בבעיה הראשונה‬
‫כמות הפריטי היא מספר הכוסות המיועדות לאריזה וגודל כל קבוצה )כוסות בקופסת קרטו(‬
‫הוא ‪ 8‬ובבעיה השנייה כמות הפריטי היא מספר הגוגואי וגודל כל קבוצה )מספר גוגואי‬
‫בשקית( הוא ‪.20‬‬
‫נפריד את מאפייני התבנית חלוקת כמות פריטים לקבוצות בגודל נתון לשתי תתתבניות‪:‬‬
‫ראשית‪ ,‬נציג את מאפייני התבנית מנת החלוקה של כמות פריטים לקבוצות ואחר כ" נציג את‬
‫מאפייני התבנית שארית החלוקה של כמות פריטים לקבוצות‪.‬‬
‫ש התבנית‪ :‬מנת החלוקה של כמות פריטי לקבוצות‬
‫נקודת מוצא‪ :‬שני מספרי שלמי חיוביי ‪) quantity‬כמות הפריטי( ו‪) num‬מספר הפריטי‬
‫בקבוצה(‬
‫מטרה‪ :‬מספר הקבוצות המלאות מחלוקה של ‪ quantity‬הפריטי לקבוצות בגודל ‪num‬‬
‫אלגורית‪:‬‬
‫‪num-á quantity ìù ä÷åìçä úðî úà groups-á íùä‬‬
‫יישו ב‪:Java‬‬
‫;‪groups = quantity / num‬‬
‫ש התבנית‪ :‬שארית החלוקה של כמות פריטי לקבוצות‬
‫נקודת מוצא‪ :‬שני מספרי שלמי חיוביי ‪) quantity‬כמות הפריטי( ו‪) num‬מספר הפריטי‬
‫בקבוצה(‬
‫מטרה‪ :‬מספר הפריטי העוד‪ #‬בחלוקה של ‪ quantity‬הפריטי לקבוצות בגודל ‪num‬‬
‫אלגורית‪:‬‬
‫‪num-á quantity ìù ä÷åìçä úéøàù úà remainder-á íùä‬‬
‫יישו ב‪:Java‬‬
‫;‪remainder = quantity % num‬‬
‫שאלה ‪1‬‬
‫ישמו את האלגורית לפתרו בעיית הכוסות בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-136-‬‬
‫מדעי המחשב‬
‫שאלה ‪2‬‬
‫א‪ .‬מה הערכי האפשריי עבור מספר הכוסות שעשויות להישאר בתפזורת לאחר החלוקה‬
‫לקופסאות מלאות?‬
‫ב‪ .‬אחד העובדי במפעל הזכוכית הציע הצעת ייעול לאריזת הכוסות‪ ,‬כדי להקטי את מספר‬
‫הכוסות שיישארו בתפזורת‪ :‬חלוקת מספר הכוסות הנותרות לקופסאות קרטו קטנות בגודל‬
‫‪ ,2‬שעלות כל אחת מה היא ‪. 0.5‬‬
‫‪ .1‬מה הערכי האפשריי עבור מספר הכוסות שעשויות להישאר בתפזורת לאחר החלוקה‬
‫לשני סוגי הקופסאות?‬
‫‪ .2‬הרחיבו את האלגורית על פי הצעת הייעול של העובד‪ ,‬כ" שהפלט של האלגורית יהיה‬
‫המחיר הכולל של הקרטו עבור שני סוגי הקופסאות ומספר הכוסות שיישארו בתפזורת‬
‫לאחר החלוקה‪.‬‬
‫‪ .3‬ישמו את האלגורית שכתבת בסעי‪ #‬ב בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-137-‬‬
‫מדעי המחשב‬
‫פירוק מספר חיובי לספרותיו‬
‫התבנית של הפרדת הספרות של מספר‪ ,‬ובפרט הספרה הימנית ביותר – ספרת האחדות‪ ,‬היא‬
‫שימושית בהקשרי רבי במדעי המחשב‪ ,‬למשל‪ ,‬לצור" סיווג מספרי על פי ספרת האחדות‬
‫שלה‪.‬‬
‫לעת עתה נתמקד בתבנית של פירוק מספר דוספרתי חיובי לספרותיו‪ ,‬בהדרגה נרחיב עבור מספר‬
‫תלתספרתי חיובי ובהמש" נראה תבנית כללית עבור מספר חיובי כלשהו‪ .‬במספר דוספרתי ישנ‬
‫שתי ספרות‪ :‬הפרדת ספרת האחדות נעשית על ידי חישוב שארית החלוקה של המספר ב‪10‬‬
‫והפרדת ספרת העשרות נעשית על ידי חישוב של מנת החלוקה של המספר ב‪.10‬‬
‫נפריד את מאפייני התבנית פירוק מספר חיובי לספרותיו לשתי תתתבניות‪ :‬ראשית נציג את‬
‫מאפייני התבנית ספרת האחדות של מספר ואחר כ" נציג את מאפייני התבנית ספרת‬
‫העשרות של מספר‪ .‬כפי שצוי קוד‪ ,‬נקודת המוצא של התבנית היא מספר דוספרתי חיובי‪.‬‬
‫ש התבנית‪ :‬ספרת האחדות של מספר‬
‫נקודת מוצא‪ :‬מספר דוספרתי חיובי ‪num‬‬
‫מטרה‪ :‬חישוב ספרת האחדות של ‪num‬‬
‫אלגורית‪:‬‬
‫‪10-á num ìù ä÷åìçä úéøàù úà units-á íùä‬‬
‫יישו ב‪:Java‬‬
‫;‪units = num % 10‬‬
‫ש התבנית‪ :‬ספרת העשרות של מספר‬
‫נקודת מוצא‪ :‬מספר דוספרתי חיובי ‪num‬‬
‫מטרה‪ :‬חישוב ספרת העשרות של ‪num‬‬
‫אלגורית‪:‬‬
‫‪10-á num ìù ä÷åìçä úðî úà tens-á íùä‬‬
‫יישו ב‪:Java‬‬
‫;‪tens = num / 10‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-138-‬‬
‫מדעי המחשב‬
‫שאלה ‪3‬‬
‫נתו מספר דוספרתי חיובי ‪ num‬ועליו הופעלו שתי התבניות‪:‬‬
‫‪ úà áùç .1‬ספרת האחדות של ‪èìôë äúåà âöäå num‬‬
‫‪ úà áùç .2‬ספרת העשרות של ‪èìôë äúåà âöäå num‬‬
‫א‪ .‬תנו שתי דוגמאות שונות לערכי אפשריי ל‪ num‬שעבור הער" הראשו שיוצג כפלט הוא ‪.5‬‬
‫ב‪ .‬תנו שתי דוגמאות שונות לערכי אפשריי ל‪ num‬שעבור הער" השני שיוצג כפלט הוא ‪.8‬‬
‫ג‪ .‬רשמו את כל זוגות הערכי שעשויי להתקבל בפלט א ידוע שהמספר ‪ num‬גדול מ‪,40‬‬
‫מתחלק ב‪ 5‬ללא שארית ואינו זוגי‪.‬‬
‫ד‪ .‬רשמו את כל הערכי האפשריי ל‪ num‬כ" שעבור סדרת ההוראות הבאה יוצג הער" ‪:3‬‬
‫‪ úà áùç .1‬ספרת האחדות של ‪num‬‬
‫‪ úà áùç .2‬ספרת העשרות של ‪num‬‬
‫‪åáùåçù íéëøòä íåëñ úà èìôë âöä .3‬‬
‫ה‪ .‬נתונה סדרת ההוראות הבאה‪:‬‬
‫‪ úà áùç .1‬ספרת האחדות של ‪num‬‬
‫‪ úà áùç .2‬ספרת העשרות של ‪num‬‬
‫‪åáùåçù íéëøòä ùøôä ìù èìçåîä êøòä úà èìôë âöä .3‬‬
‫‪ .1‬רשמו את כל הערכי האפשריי ל‪ num‬עבור יוצג כפלט הער" ‪.1‬‬
‫‪ .2‬ישמו את ההוראה בשפת ‪.Java‬‬
‫שאלה ‪4‬‬
‫עינת הציעה לייש את התבנית פירוק מספר לספרותיו עבור מספר דוספרתי חיובי ‪num‬‬
‫באמצעות התבנית חלוקת כמות פריטים לקבוצות בגודל נתון‪.‬‬
‫א‪ .‬מהי כמות הפריטי? הסבירו‪.‬‬
‫ב‪ .‬מהו גודל הקבוצות? הסבירו‪.‬‬
‫ג‪ .‬השלימו את השימוש בתבניות על פי הצעתה של עינת‪:‬‬
‫‪ úà áùç .1‬שארית החלוקה של _____ פריטים ל‪ _____-‬קבוצות ‪äúåà âöäå‬‬
‫‪èìôë‬‬
‫‪ úà áùç .2‬מנת החלוקה של _____ פריטים ל‪ _____-‬קבוצות ‪èìôë äúåà âöäå‬‬
‫שאלה ‪5‬‬
‫המורה ביקשה מתלמידיה לכתוב אלגורית שהקלט שלו הוא מספר תלתספרתי ‪ num‬והפלט‬
‫שלו הוא שלוש ספרותיו של ‪ ,num‬על פי הרעיו הבא‪ ,‬המתבסס על פירוק המספר לשני מספרי‪:‬‬
‫ספרת האחדות‪ ,‬ומנת החלוקה של ‪ num‬ב‪ .10‬לאחר מכ יש לבצע פירוק נוס‪ #‬של המנה‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-139-‬‬
‫מדעי המחשב‬
‫שחושבה‪ ,‬כמספר דוספרתי‪.‬‬
‫א‪ .‬השלימו את האלגורית‪ ,‬ונסו להשתמש לש כ" בתבניות‪.‬‬
‫‪num-á éúøôñ-úìú øôñî èåì÷ .1‬‬
‫‪units-á íùäå ________ éãé ìò úåãçàä úøôñ úà áùç .2‬‬
‫‪éãé ìò úåãçàä úøôñ úøñäî ìá÷úîä éúøôñ-åãä øôñîä úà áùç .3‬‬
‫________ ‪doubleDigit-á íùäå‬‬
‫‪tens-á íùäå ________ éãé ìò num ìù úåøùòä úøôñ úà áùç .4‬‬
‫‪hundreds-á íùäå ________ éãé ìò num ìù úåàîä úøôñ úà áùç .5‬‬
‫‪hundreds êøòä úàå tens êøòä úà ,units êøòä úà èìôë âöä .6‬‬
‫ב‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫ג‪ .‬אלו הציע דר" אחרת לפירוק המספר‪ .‬לפניכ האלגורית‪:‬‬
‫‪num-á éúøôñ-úìú øôñî èåì÷ .1‬‬
‫‪ áåùéç éãé ìò num ìù úåàîä úøôñ úà áùç .2‬מנת החלוקה של ‪ num‬פריטים ל‪-‬‬
‫‪ 100‬קבוצות ‪hundreds-á íùäå‬‬
‫‪áåùéç éãé ìò úåàîä úøôñ úøñäî ìá÷úîä éúøôñ-åãä øôñîä úà áùç .3‬‬
‫שארית החלוקה של ‪ num‬פריטים ל‪ 100-‬קבוצות ‪doubleDigit-á íùäå‬‬
‫‪ áåùéç éãé ìò num ìù úåøùòä úøôñ úà áùç .4‬ספרת העשרות של ‪doubleDigit‬‬
‫‪tens-á íùäå‬‬
‫‪ áåùéç éãé ìò num ìù úåãçàä úøôñ úà áùç .5‬ספרת האחדות של ‪doubleDigit‬‬
‫‪units-á íùäå‬‬
‫‪hundreds êøòä úàå tens êøòä úà ,units êøòä úà èìôë âöä .6‬‬
‫ד‪ .‬הסבירו את הרעיו לפתרו עליו מתבסס אלו‪ .‬בהסבר התייחסו לשימוש בתבנית חלוקת‬
‫כמות פריטים לקבוצות בגודל נתון‪.‬‬
‫ה‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪6‬‬
‫בבניי משרדי ב ‪ 9‬קומות מסומ כל חדר באמצעות קוד של מספר תלתספרתי‪ :‬ספרת המאות‬
‫מציינת את מספר הקומה בה נמצא החדר וספרות האחדות והעשרות מציינות את מספר החדר‬
‫בקומה‪.‬‬
‫א‪ .‬כתבו אלגורית‪ ,‬שהקלט שלו הוא קוד חדר והפלט שלו הוא מספר הקומה בה נמצא החדר‬
‫ומספר החדר בקומה‪.‬‬
‫ב‪ .‬ציינו באילו תבניות השתמשת לפתרו הבעיה‪.‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-140-‬‬
‫מדעי המחשב‬
‫בניית מספר‬
‫התבנית של בניית מספר היא שימושית בהקשרי רבי‪ .‬אול‪ ,‬הבנייה של מרכיב ממספר‬
‫מרכיבי מצומצמי יותר שימושית ג בהקשרי אחרי במדעי המחשב‪ ,‬למשל‪ :‬בניית מילה‬
‫מאותיות בודדות‪ ,‬בניית משפט ממילי בודדות‪ ,‬בניית צורה גרפית מקווי בודדי וכדומה‪.‬‬
‫לעת עתה נתמקד בתבנית של הרכבת מספר דוספרתי משתי ספרות‪ ,‬בהדרגה נרחיב עבור בניית‬
‫מספר תלתספרתי ובהמש" נראה תבנית כללית עבור מספר חיובי כלשהו‪.‬‬
‫כדי להרכיב מספר משתי ספרות נכפיל את הספרה המיועדת להיות ספרת העשרות ב‪ 10‬ונחבר‬
‫לתוצאה את הספרה המיועדת להיות ספרת האחדות‪.‬‬
‫ש התבנית‪ :‬בניית מספר‬
‫נקודת מוצא‪ :‬שתי ספרות ‪ left‬ו‪right‬‬
‫מטרה‪ :‬בניית מספר דוספרתי מהספרות הנתונות‬
‫אלגורית‪:‬‬
‫‪left * 10 + right éðåáùçä éåèéáä ìù êøòä úà num-á íùä‬‬
‫יישו ב‪:Java‬‬
‫;‪num = left * 10 + right‬‬
‫שימו ♥‪ :‬כאשר אנו משתמשי בתבנית בניית מספר חשוב להקפיד על תיאור חדמשמעי‪:‬‬
‫נסכי כי הספרה הראשונה שנציי תהיה ספרת העשרות והשנייה ספרת האחדות‪ .‬למשל‪ ,‬הכוונה‬
‫בשימוש בנה מספר מ‪ 1-‬ו‪ 3-‬היא לבנות את המספר ‪) 13‬ולא את המספר ‪ .(31‬בדומה‪ ,‬בשימוש‬
‫בתבנית לשלוש ספרות נציי קוד את ספרת המאות‪ ,‬אחר כ" את ספרת העשרות ולבסו‪ #‬את‬
‫ספרת האחדות‪.‬‬
‫שאלה ‪7‬‬
‫נתו אלגורית חלקי‪ ,‬שהקלט שלו הוא מספר דוספרתי חיובי ‪ ,num‬והפלט שלו הוא מספר דו‬
‫ספרתי חדש‪ ,‬שער" ספרת האחדות בו גדולה ב‪ 1‬מספרת האחדות של המספר הנתו ‪ ,num‬וער"‬
‫ספרת העשרות בו קטנה ב‪ 1‬מספרת העשרות של המספר הנתו ‪.num‬‬
‫הניחו שבמספר הנקלט ספרת האחדות שונה מ‪ 9‬וספרת העשרות שונה מ‪.0‬‬
‫א‪ .‬השלימו את האלגורית‪:‬‬
‫‪num-á éáåéç éúøôñ-åã øôñî èåì÷ .1‬‬
‫‪units-á íùäå ________ éãé ìò úåãçàä úøôñ úà áùç .2‬‬
‫‪tens-á íùäå ________ éãé ìò num ìù úåøùòä úøôñ úà áùç .3‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-141-‬‬
‫מדעי המחשב‬
‫‪íùäå ________ éãé ìò ùãçä øôñîä ìù úåãçàä úøôñ ìù äëøò úà áùç .4‬‬
‫‪newUnits-á‬‬
‫‪íùäå ________ éãé ìò ùãçä øôñîä ìù úåøùòä úøôñ ìù äëøò úà áùç .5‬‬
‫‪newTens-á‬‬
‫‪ .6‬בנה מספר מ‪ ________-‬ו‪ ________-‬ו‪ìá÷úäù êøòä úà èìôë âöä‬‬
‫א‪ .‬ציינו מה התבניות שהשתמשת בה בהשלמת האלגורית‪.‬‬
‫ב‪ .‬מהו הפלט עבור הקלט ‪?67‬‬
‫ג‪ .‬מהו הקלט שהפלט עבורו הוא ‪?45‬‬
‫ד‪ .‬מהו הער" הקט ביותר שיוצג כפלט? עבור איזה ער" של ‪ num‬יוצג כפלט ער" זה?‬
‫ה‪ .‬מהו הער" הגדול ביותר שיוצג כפלט? עבור איזה ער" של ‪ num‬יוצג כפלט ער" זה?‬
‫ו‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫ז‪ .‬כתבו את האלגורית ללא שימוש בתבנית בניית מספר‪.‬‬
‫שאלה ‪8‬‬
‫א‪ .‬כתבו אלגורית‪ ,‬שהקלט שלו הוא מספר תלתספרתי ‪ num‬והפלט שלו הוא כל המספרי‬
‫הדוספרתיי שנית להרכיב משלוש הספרות של ‪.num‬‬
‫ב‪ .‬ציינו את מספר הפעמי בה השתמשת בתבנית בניית מספר‪.‬‬
‫ג‪ .‬עבור אילו ערכי של ‪ num‬יוצג כפלט ער" יחיד )החוזר על עצמו(?‬
‫ד‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪9‬‬
‫נתו אלגורית חלקי שהקלט שלו הוא ‪ 3‬ספרות והפלט שלו הוא מספר תלתספרתי המורכב‬
‫משלוש הספרות‪:‬‬
‫‪units-á úåãçà úøôñå tens-á úåøùò úøôñ ,hundreds-á úåàî úøôñ èåì÷ .1‬‬
‫‪ .2‬בנה מספר מ‪ hundreds-‬ו‪ìá÷úäù êøòä úà temp-á íùäå tens-‬‬
‫‪ .3‬בנה מספר מ‪ _______ -‬ו‪éúøôñ-úìúä øôñîä úà num-á íùäå _______ -‬‬
‫‪ìá÷úäù‬‬
‫‪num ìù åëøò úà èìôë âöä .4‬‬
‫א‪ .‬השלימו את האלגורית‪.‬‬
‫ב‪ .‬הסבירו את תפקידו של המשתנה ‪.temp‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫ד‪ .‬ילנה הציעה תבנית לאלגורית של בניית מספר משלוש ספרות ללא שימוש כפול בתבנית‬
‫בניית מספר עבור שתי ספרות‪ .‬לפניכ האלגורית החלקי‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-142-‬‬
‫מדעי המחשב‬
units-á úåãçà úøôñå tens-á úåøùò úøôñ ,hundreds-á úåàî úøôñ èåì÷ .1
________*100 + ________*10 + ________ ‫ את‬num-á íùä .2
num ìù åëøò úà èìôë âöä .3
.‫השלימו את האלגורית‬
:‫ נתו שימוש בתבנית‬.‫ה‬
ìá÷úäù êøòä úà èìôë âöäå digit-‫ ו‬digit ,digit-‫בנה מספר מ‬
?digit‫ ב‬8 "‫מה יוצג כפלט עבור הער‬
10 ‫שאלה‬
:num ‫ שהקלט שלו הוא מספר ארבעספרתי חיובי‬,‫נתו אלגורית חלקי‬
num-á éáåéç éúøôñ-òáøà øôñî èåì÷ .1
units-á íùäå ________ éãé ìò úåãçàä úøôñ úà áùç .2
tens-á íùäå ________ éãé ìò num ìù úåøùòä úøôñ úà áùç .3
hundreds-á íùäå ________ éãé ìò num ìù úåàîä úøôñ úà áùç .4
‫ מנת החלוקה של _____ פריטים‬áåùéç éãé ìò num ìù íéôìàä úøôñ úà áùç .5
thousands-á íùäå ‫_____ קבוצות‬-‫ל‬
100-á åúåà ìôëäå units-‫ ו‬tens-‫ בנה מספר מ‬.6
hundreds-‫ ו‬thousands-‫ בנה מספר מ‬.7
åáùåçù íéøôñîä íåëñ úà èìôë âöä .8
.‫ השלימו את האלגורית‬.‫א‬
?5243 ‫ מהו הפלט עבור הקלט‬.‫ב‬
?1197 ‫ מהו הקלט עבור הפלט‬.‫ג‬
?‫ מהי מטרת האלגורית‬.‫ד‬
‫ נית לכתוב אלגורית המבצע אותה מטרה ללא שימוש בתבנית בניית מספר עבור שתי‬.‫ה‬
:‫ לפניכ האלגורית החלקי‬.‫ספרות‬
num-á éáåéç éúøôñ-òáøà øôñî èåì÷ .1
left-á íùäå ________ éãé ìò úåéìàîùä úåøôñä éúù úà áùç .2
right-á íùäå ________ éãé ìò úåéðîéä úåøôñä éúù úà áùç .3
________ + 100 * ________ ìù êøòä úà èìôë âöä .4
.‫השלימו את האלגורית‬
‫מדעי המחשב‬
-143-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫אחד השימושי של התבנית בניית מספר הוא לצור" היפו" ספרותיו של מספר נתו‪ .‬נראה זאת‬
‫בשתי השאלות הבאות‪:‬‬
‫שאלה ‪11‬‬
‫נתו אלגורית חלקי‪ ,‬שהקלט שלו הוא מספר דוספרתי חיובי ‪ ,num‬והפלט שלו הוא מספר דו‬
‫ספרתי שסדר ספרותיו הפו" מסדר הספרות במספר הנקלט ‪:num‬‬
‫א‪ .‬השלימו את האלגורית‪:‬‬
‫‪num-á éáåéç éúøôñ-åã øôñî èåì÷ .1‬‬
‫‪units-á íùäå ________ éãé ìò úåãçàä úøôñ úà áùç .2‬‬
‫‪.3‬‬
‫‪tens-á íùäå ________ éãé ìò num ìù úåøùòä úøôñ úà áùç‬‬
‫‪ .4‬בנה מספר מ‪ ________-‬ו‪reverseNum-á íùäå ________-‬‬
‫‪reverseNum ìù åëøò úà èìôë âöä .5‬‬
‫ב‪ .‬כתבו את כל הערכי האפשריי ל‪ num‬עבור הפלט יהיה זהה לקלט‪.‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪12‬‬
‫נתו אלגורית חלקי שהקלט שלו הוא מספר תלתספרתי חיובי ‪ ,num‬והפלט שלו הוא מספר‬
‫תלתספרתי המורכב משלוש הספרות של ‪ num‬א" בסדר הפו"‪.‬‬
‫‪num-á éáåéç éúøôñ-úìú øôñî èåì÷ .1‬‬
‫‪units-á íùäå ________ éãé ìò úåãçàä úøôñ úà áùç .2‬‬
‫‪tens-á íùäå ________ éãé ìò num ìù úåøùòä úøôñ úà áùç .3‬‬
‫‪hundreds-á íùäå ________ éãé ìò num ìù úåàîä úøôñ úà áùç .4‬‬
‫‪ .5‬בנה מספר מ‪ ________ , ________-‬ו‪reverseNum-á íùäå ________ -‬‬
‫‪reverseNum ìù åëøò úà èìôë âöä .6‬‬
‫א‪ .‬השלימו את האלגורית‪.‬‬
‫ב‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-144-‬‬
‫מדעי המחשב‬
‫פרק ‪ – 5‬ביצוע מותנה‬
‫בשני הפרקי הקודמי ראינו אלגוריתמי שבמהל ביצוע מתבצעת כל אחת מהוראות‬
‫האלגורית‪ .‬בפרק זה נכיר אלגוריתמי אשר במהל ביצוע לא מתבצעות תמיד כל הוראות‬
‫האלגורית‪ .‬אלגוריתמי אלה כוללי הוראות המורות על ביצוע קבוצת הוראות אחת או קבוצת‬
‫הוראות אחרת‪ ,‬בהתא לקיומו או איקיומו של תנאי‪ .‬הוראות אלו נקראות הוראות לביצוע בתנאי‪.‬‬
‫קיומו של התנאי תלוי בקלט לאלגורית‪.‬‬
‫למשל‪ ,‬כאשר נערכות בחירות בי שני מועמדי‪ ,‬מושווי מספרי הקולות עבור כל מועמד‪ .‬המועמד‬
‫שצבר יותר קולות מוכרז כמנצח בבחירות‪ .‬הקלט של אלגורית להכרזת המנצח יהיה מספר הקולות‬
‫אשר צבר כל מועמד‪ .‬א יתקיי התנאי שהנתו הראשו בקלט גדול מ השני אז תתבצע באלגורית‬
‫הוראה להכרזת המועמד הראשו כמנצח‪ .‬אחרת‪ ,‬תתבצע הוראה להכרזת המועמד השני כמנצח‪.‬‬
‫‪ 5.1‬הוראה לביצוע בתנאי‬
‫הוראה לביצוע בתנאי במבנה ‪...úøçà ...íà‬‬
‫בעיה ‪1‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת אלגורית הכולל הוראה לביצוע בתנאי‪.‬‬
‫פתחו אלגורית שהקלט שלו הוא מספר הבני ומספר הבנות בכיתה והפלט שלו הוא הודעה המציינת‬
‫הא נית או לא נית לסדר את תלמידי הכיתה‪ ,‬ב ובת לסירוגי‪ ,‬במעגל‪ ,‬כ שכל ב יעמוד בי שתי‬
‫בנות וכל בת תעמוד בי שני בני‪.‬‬
‫ישמו את האלגורית על ידי תוכנית מחשב בשפת ‪.Java‬‬
‫ניתוח הבעיה בעזרת דוגמאות‬
‫נניח שבכיתה רק ארבעה תלמידי‪ .‬א יש שני בני ושתי בנות נית לסדר לסירוגי במעגל באופ‬
‫הבא‪:‬‬
‫בת‬
‫ב‬
‫ב‬
‫בת‬
‫אול‪ ,‬במקרה של שלושה בני ובת אחת או ב אחד ושלוש בנות הסידור איננו אפשרי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-145-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.1‬‬
‫עבור אילו צירופי של חמישה תלמידי אפשרי סידור לסירוגי במעגל? עבור אילו צירופי של שישה‬
‫תלמידי אפשרי הסידור?‬
‫בדוגמאות הפשוטות שבחנו התברר שסידור לסירוגי במעגל אפשרי רק כאשר מספר הבני שווה‬
‫למספר הבנות‪ .‬הא זהו כלל שנכו לגבי כל מספר של תלמידי? התשובה לשאלה זו היא כ‪ .‬לימינו‬
‫של כל ב חייבת לעמוד בת ולימינה של כל בת חייב לעמוד ב‪.‬‬
‫פירוק הבעיה לתתמשימות‬
‫על פי ניתוח הבעיה נפרק את המשימה העומדת בפנינו באופ הבא‪:‬‬
‫‪ .1‬קליטת מספר הבנים ומספר הבנות בכיתה‪.‬‬
‫‪ .2‬השוואת המספרים‪ .‬אם המספרים שווים נציג הודעה שסידור תלמידי הכיתה‪ ,‬בן ובת‬
‫לסירוגין במעגל‪ ,‬אפשרי‪ ,‬אחרת נציג הודעה שסידור כזה אינו אפשרי‪.‬‬
‫בחירת משתני‬
‫‪ – boysNum‬של‪ ,‬ישמור את מספר הבני בכיתה‪.‬‬
‫‪ – girlsNum‬של‪ ,‬ישמור את מספר הבנות בכיתה‪.‬‬
‫האלגורית‬
‫כיצד ננסח באלגורית את תתמשימה ‪?2‬‬
‫ננסח תנאי אשר על פי קיומו נית לקבוע א הסידור לסירוגי אפשרי‪ .‬התנאי יהיה‪ :‬מספר הבני‬
‫שווה למספר הבנות‪.‬‬
‫א התנאי מתקיי יש להודיע‪ :‬נית לסדר את התלמידי במעגל‪ ,‬בבת לסירוגי‪.‬‬
‫א התנאי לא מתקיי יש להודיע‪ :‬לא נית לסדר את התלמידי במעגל‪ ,‬בבת לסירוגי‪.‬‬
‫הוראה זו מבטאת את הרעיו של בחירה באחת מבי שתי אפשרויות לביצוע על פי תנאי‪ .‬נציג אותה‬
‫במבנה הבא‪:‬‬
‫‪úåðáä øôñîì äååù íéðáä øôñî íà‬‬
‫‪ïéâåøéñì úá-ïá ,ìâòîá íéãéîìúä úà øãñì ïúéð :èìôë âöä‬‬
‫‪úøçà‬‬
‫‪ïéâåøéñì úá-ïá ,ìâòîá íéãéîìúä úà øãñì ïúéð àì :èìôë âöä‬‬
‫הוראה במבנה זה נקראת הוראה לביצוע בתנאי‪ .‬הוראה לביצוע בתנאי היא הוראת בקרה‪ ,‬משו‬
‫שהיא משפיעה על מהל הביצוע של האלגורית‪ ,‬כלומר‪ ,‬קובעת א יבוצעו הוראות אלו או אחרות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-146-‬‬
‫מדעי המחשב‬
:‫הנה האלגורית המלא‬
girlsNum-áå boysNum-á äúéëá úåðáä øôñîå íéðáä øôñî úà èåì÷ .1
úåðáä øôñîì äååù íéðáä øôñî
íà
.2
ïéâåøéñì úá-ïá ,ìâòîá íéãéîìúä úà øãñì ïúéð :èìôë âöä .2.1
úøçà
.3
ïéâåøéñì úá-ïá ,ìâòîá íéãéîìúä úà øãñì ïúéð àì :èìôë âöä .3.1
‫יישו האלגורית‬
‫ שאופ‬,if…else… ‫ על ידי הוראת‬Java ‫ההוראה לביצוע בתנאי המופיעה באלגורית מיושמת בשפת‬
.
...úøçà...íà ‫כתיבתה דומה לצורת הכתיבה העברית‬
?úåðáä øôñîì äååù íéðáä øôñî :‫ תנאי כמו זה המופיע באלגורית‬Java‫ כיצד כותבי ב‬,‫אבל‬
.(‫פעולת ההשוואה נכתבת בעזרת סימ הפעולה == )שני סימני שוויו רצופי‬
:‫ כ‬Java ‫ באלגורית נית לייש בשפת‬3‫ ו‬2 ‫ את הוראות‬,‫לכ‬
if (boysNum == girlsNum)
{
System.out.println("The
boys
and
girls
can
be
arranged
in
a
in
a
circle");
}
else
{
System.out.println("The
boys
and
girls
cannot
be
arranged
circle");
}
‫מדעי המחשב‬
-147-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫התוכנית המלאה‬
‫*‪/‬‬
‫הקלט‪ :‬מספר הבנים והבנות בכיתה‬
‫הפלט‪ :‬הודעה האם ניתן או לא ניתן לסדר את התלמידים במעגל‪ ,‬בן‪-‬בת לסירוגין‬
‫‪*/‬‬
‫‪public class Circle‬‬
‫{‬
‫)‪public static void main (String [] args‬‬
‫{‬
‫הצהרה על משתנים בתוכנית ‪//‬‬
‫מספר הבנים בכיתה‪//‬‬
‫;‪int boysNum‬‬
‫מספר הבנות בכיתה‪int girlsNum; //‬‬
‫קליטת המשתנים ‪//‬‬
‫;)"‪1. boysNum = In.readInt("Insert number of boys in class‬‬
‫;)"‪2. girlsNum = In.readInt("Insert number of girls in class‬‬
‫‪//‬‬
‫ההוראה לביצוע בתנאי‬
‫)‪3. if (boysNum == girlsNum‬‬
‫{‬
‫הצגת הודעה‪ :‬ניתן לסדר את התלמידים במעגל‪,‬בן‪-‬בת לסירוגין‪//‬‬
‫‪3.1. System.out.println("The boys and girls can be arranged in a‬‬
‫;)"‪circle‬‬
‫}‬
‫‪4. else‬‬
‫{‬
‫הצגת הודעה‪ :‬לא ניתן לסדר את התלמידים במעגל‪,‬בן‪-‬בת לסירוגין‪//‬‬
‫‪4.1. System.out.println("The boys and girls cannot be arranged in‬‬
‫;)"‪a circle‬‬
‫}‬
‫‪} // main‬‬
‫‪} // class Circle‬‬
‫המעקב‬
‫נבדוק את התוכנית ‪ Circle‬באמצעות מעקב אחר ביצועה עבור דוגמאות קלט שונות‪.‬‬
‫עבור הקלט ‪ 15‬בני ו‪ 15‬בנות‪ ,‬יתקיי התנאי ‪ ,úåðáä øôñîì äååù íéðáä øôñî‬ותתקבל טבלת‬
‫המעקב הבאה‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-148-‬‬
‫מדעי המחשב‬
‫מספר‬
‫השורה‬
‫המשפט לביצוע‬
boysNum
girlsNum
boysNum
‫פלט‬
==
girlsNum
1
boysNum = In.readInt
?
?
15
?
15
15
Insert
number of
boys in
class
Insert
number of
girls in
class
("Insert number of boys
in class");
2
girlsNum = In.readInt
("Insert number of girls
in class");
3
if (boysNum == girlsNum)
15
15
3.1
System.out.println("The
15
15
boys
and
girls
can
‫מתקיי‬
The boys
and girls
can be
arranged
in a
circle
be
arranged in a circle")
:‫ ומתקבלת טבלת המעקב הבאה‬,‫לא מתקיי התנאי‬,‫ בנות‬15‫ בני ו‬17 ‫עבור הקלט‬
‫מספר‬
‫השורה‬
‫המשפט לביצוע‬
boysNum
girlsNum
boysNum
‫פלט‬
==
girlsNum
1
boysNum = In.readInt
?
?
17
?
17
15
17
15
17
15
Insert
number of
boys in
class
Insert
number of
girls in
class
("Insert number of boys
in class");
2
girlsNum = In.readInt
("Insert
number
of
girls in class");
3
if
(boysNum
==
‫לא מתקיי‬
girlsNum)
4.1
System.out.println("The
boys
and
girls
be
arranged
cannot
in
a
circle");
‫מדעי המחשב‬
-149-
The boys
and girls
cannot be
arranged
in a
circle
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫שימו ♥ להבדל בי עמודות "המשפט לביצוע" בשתי הטבלאות‪ .‬בטבלה הראשונה מופיע המשפט‪:‬‬
‫)"‪System.out.println("The boys and girls can be arranged in a circle‬‬
‫זאת מכיוו שהתנאי מתקיי ולכ מתבצע חלק ה‪ if‬של משפט ה‪.if‬‬
‫לעומת זאת‪ ,‬בטבלה השנייה מופיע המשפט‪:‬‬
‫)"‪System.out.println("The boys and girls cannot be arranged in a circle‬‬
‫זאת מכיוו שהתנאי אינו מתקיי ולכ מתבצע חלק ה‪ else‬של המשפט‪.‬‬
‫סוף פתרון בעיה‬
‫‪1‬‬
‫הוראה לביצוע בתנאי כוללת בתוכה כמוב תנאי‪ ,‬שמכוו את המש הביצוע‪ .‬באלגורית שנתנו‬
‫לפתרו בעיה ‪ 1‬התנאי שמשולב בהוראה הוא ‪.úåðáä øôñîì äååù íéðáä øôñî‬‬
‫התנאי העומד בבסיסה של הוראת ביצוע בתנאי מיוצג על ידי ביטוי בוליאני‪ .‬כמו ביטוי חשבוני‪ ,‬ג‬
‫לביטוי בוליאני יש ער‪ .‬אלא שער זה אינו ער מספרי‪ .‬ערכו של ביטוי בוליאני יכול להיות אחד‬
‫משניי – אמת )‪ (true‬או שקר )‪ .(false‬א התנאי שמייצג הביטוי הבוליאני מתקיי אז ערכו של‬
‫הביטוי הבוליאני הוא ‪ .true‬א התנאי שמייצג הביטוי הבוליאני אינו מתקיי אז ערכו של הביטוי‬
‫הבוליאני הוא ‪.false‬‬
‫הידעת?‬
‫המילה "בוליאני" נגזרה משמו של המתמטיקאי‬
‫האנגלי ג'ורג' בול )‪ .(1815-1864‬הוא היה‪ ,‬בי‬
‫שאר עיסוקיו‪ ,‬לוגיק – חוקר תורת ההגיו‪ .‬הוא‬
‫היה המתמטיקאי הראשו שראה בלוגיקה ענ(‬
‫של המתמטיקה‪ .‬הוא נחשב לאבי הלוגיקה‬
‫הסימבולית )אלגברה של הלוגיקה( הקרויה היו‬
‫אלגברה בוליאנית‪.‬‬
‫נית להמחיש את המשמעות של הוראה לביצוע בתנאי באמצעות תרשי הזרימה הבא‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-150-‬‬
‫מדעי המחשב‬
‫לא‬
‫כ‬
‫ביטוי בוליאני‬
‫ההוראות אשר‬
‫מבוצעות א‬
‫התנאי מתקיי‬
‫ההוראות אשר‬
‫מבוצעות א התנאי‬
‫אינו מתקיי‬
‫במהל הספר לא נציג אלגוריתמי באמצעות תרשימי‪ .‬הצגה זו ארוכה מאוד וכ שונה מאוד מ‬
‫המראה של תוכנית מחשב‪ .‬במידה שהשימוש בתרשימי מסייע לכ‪ ,‬כדאי לכ להשתמש בה מדי‬
‫פע במהל פיתוח אלגורית‪.‬‬
‫לעיתי ננסח את התנאי באופ מילולי ולעיתי נעדי( לנסח אותו בעזרת סימני‪ .‬נית לבחור בכל‬
‫צורת ניסוח‪ ,‬כל עוד התנאי המתקבל הוא ברור וחדמשמעי‪.‬‬
‫למשל‪ ,‬עבור המשימה‪ :‬השוואת ערכי המשתני ‪ a‬ו‪ b‬והשמת הער הקט מביניה במשתנה ‪,min‬‬
‫נית לנסח הוראה לביצוע בתנאי בה התנאי מתואר במילי או הוראה בה התנאי כתוב בעזרת‬
‫סמלי‪:‬‬
‫‪íà‬‬
‫‪íà‬‬
‫‪b ìù åëøòî ïè÷ a ìù åëøò‬‬
‫‪min-á a ìù åëøò úà íùä‬‬
‫‪a<b‬‬
‫‪min-á a ìù åëøò úà íùä‬‬
‫‪úøçà‬‬
‫‪úøçà‬‬
‫‪min-á b ìù åëøò úà íùä‬‬
‫‪min-á b ìù åëøò úà íùä‬‬
‫נכיר ביטויי בוליאניי המצייני השוואה בי ערכי‪ ,‬משתני וביטויי חשבוניי‪ .‬למשל‪:‬‬
‫‪.a < b ,a + b > 0 , boysNum == girlsNum‬‬
‫לסיכו – נציג את אופ הכתיבה האלגוריתמית של הוראה לביצוע בתנאי ואת אופ יישומה כהוראה‬
‫בשפת ‪:Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-151-‬‬
‫מדעי המחשב‬
‫הוראה לביצוע בתנאי היא מהצורה‪:‬‬
‫‪íà‬‬
‫>‪<éðàéìåá éåèéá‬‬
‫>‪<1 úåàøåä úøãñ‬‬
‫‪úøçà‬‬
‫>‪<2 úåàøåä úøãñ‬‬
‫ביטוי‬
‫בוליאני מייצג תנאי‪ ,‬שערכו יכול להיות ‪) true‬אמיתי( או ‪) false‬שקרי(‪.‬‬
‫ביצוע של הוראה לביצוע בתנאי מתחיל תמיד בחישוב ערכו של הביטוי הבוליאני‪ .‬א ערכו אמיתי‪,‬‬
‫מבוצעת סדרת ההוראות הראשונה‪ ,‬אחרת מבוצעת סדרת ההוראות השנייה‪.‬‬
‫בשפת ‪ Java‬הוראה לביצוע בתנאי מיושמת על ידי משפט ‪.if‬‬
‫מבנה משפט ‪ if‬ב‪ Java‬הוא‪:‬‬
‫)ביטוי בוליאני( ‪if‬‬
‫{‬
‫ההוראות אשר מבוצעות אם התנאי מתקיים‬
‫}‬
‫‪else‬‬
‫{‬
‫ההוראות אשר מבוצעות אם התנאי אינו מתקיים‬
‫}‬
‫החלק שנמצא בתו זוג הסוגריי המסולסלי )}…{( הראשו נקרא תחו‬
‫ה‪ if‬ובו נמצאות‬
‫ההוראות אשר מבוצעות א התנאי מתקיי‪ .‬החלק שנמצא בתו זוג הסוגריי המסולסלי השני‬
‫נקרא תחו‬
‫ה‪ else‬ובו נמצאות ההוראות אשר מבוצעות א התנאי אינו מתקיי‪.‬‬
‫הביטוי הבוליאני שהופיע במשפט ‪ if‬שראינו בפתרו בעיה ‪ 1‬השתמש בסימ ההשוואה ==‪ .‬בשפת‬
‫‪ Java‬קיימי סימני השוואה נוספי‪ .‬בטבלה הבאה מסוכמי סימני ההשוואה בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-152-‬‬
‫מדעי המחשב‬
‫סימ ההשוואה‬
‫המקובל‬
‫במתמטיקה‬
‫=‬
‫דוגמה ב‪Java‬‬
‫דוגמה‬
‫במתמטיקה‬
‫סימ ההשוואה‬
‫ב‪Java‬‬
‫שווה‬
‫‪x == 5‬‬
‫‪x=5‬‬
‫=!‬
‫≠‬
‫שונה‬
‫‪x != y‬‬
‫‪x≠y‬‬
‫<‬
‫<‬
‫קט‬
‫‪x < 2‬‬
‫‪x<2‬‬
‫=<‬
‫≤‬
‫קט או שווה‬
‫‪x <= 1‬‬
‫‪x≤2‬‬
‫>‬
‫>‬
‫גדול‬
‫‪y > 0‬‬
‫‪y>0‬‬
‫=>‬
‫≥‬
‫גדול או שווה‬
‫‪y >= 8‬‬
‫‪y≥8‬‬
‫==‬
‫משמעות סימ‬
‫ההשוואה‬
‫סימני ההשוואה בשפת ‪Java‬‬
‫שימו ♥‪ :‬הסימני המתמטיי ≤‪ = ,≥ ,‬ו ≠ כתובי ב‪ Java‬בצורה שונה במקצת‪ .‬בשפת ‪Java‬‬
‫מתבצעת ההשוואה שבתו התנאי על ידי סימ הפעולה == ולא על ידי הסימ =‪ .‬הסימ = שמור ב‬
‫‪ Java‬להשמה‪.‬‬
‫שאלה ‪5.2‬‬
‫נסחו הוראה לביצוע בתנאי עבור כל אחת מ המשימות הבאות‪:‬‬
‫א‪ .‬השוואת ערכי המשתני ‪ a‬ו‪ b‬והצגת הודעה א הערכי שווי או שוני‪.‬‬
‫ב‪ .‬השוואת ערכי המשתני ‪ a‬ו‪ b‬והפחתת ערכו של המשתנה הקט יותר מהמשתנה הגדול‬
‫יותר‪.‬‬
‫שאלה ‪5.3‬‬
‫כתבו כל אחד מ התנאי המילוליי הבאי כביטוי בוליאני המשתמש בסמלי‪:‬‬
‫ביטוי בוליאני‬
‫תנאי‬
‫ער המשתנה ‪ a‬שווה ל‪.0‬‬
‫ער המשתנה ‪ a‬שווה לער המשתנה ‪.b‬‬
‫ער המשתנה ‪ a‬שווה לכפליי ערכו של המשתנה ‪.b‬‬
‫ער המשתנה ‪ a‬שונה מער המשתנה ‪.b‬‬
‫סכו ערכי המשתני ‪ a‬ו‪ b‬קט או שווה ל‪.10‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-153-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.4‬‬
‫נניח שערכי המשתני ‪ a‬ו‪ b‬ה ‪ 1‬ו‪ 2‬בהתאמה‪ .‬ציינו עבור כל אחד מ הביטויי הבוליאניי הבאי‬
‫הא ערכו ‪ true‬או ‪.false‬‬
‫ער‪#‬‬
‫ביטוי בוליאני‬
‫‪a == 1‬‬
‫‪a == b‬‬
‫‪3a == b + 1‬‬
‫‪2a<=b‬‬
‫‪2a!=b‬‬
‫שאלה ‪5.5‬‬
‫במשתני ‪ girafaHeight‬ו‪ girafHeight‬שמורי הגבהי של ג'יר( וג'ירפה‪ .‬כתבו משפט ‪if‬‬
‫מתאי לביצוע המשימות הבאות‪:‬‬
‫א‪ .‬הצגת הודעה הא הג'ירפה גבוהה מ‪ 1.70‬מ'‪ ,‬או לא‪.‬‬
‫ב‪ .‬הצגת הודעה הא הג'יר( גבוה יותר או אינו גבוה יותר מ הג'ירפה‪.‬‬
‫כפי שראינו בפתרו בעיה ‪ ,1‬בטבלת מעקב אחר מהל ביצוע תוכנית הכוללת משפט ‪ if‬נוח להוסי(‬
‫עמודה עבור הביטוי הבוליאני שבמשפט‪ ,‬ולציי בה את ער הביטוי בכניסה המתאימה‪ .‬בטבלה‬
‫שבפתרו בעיה ‪ 1‬כתבנו "מתקיי" או "לא מתקיי"‪ .‬מעתה נכתוב ‪ true‬או ‪.false‬‬
‫שימו ♥‪ :‬כאשר מופיע בתוכנית משפט ‪) if‬הוראה לביצוע בתנאי(‪ ,‬יש לבדוק את מהל הביצוע עבור‬
‫דוגמאות קלט מגוונות‪ .‬על הדוגמאות לכלול קלט שיביא לכ שערכו של הביטוי הבוליאני שבמשפט‬
‫יהיה ‪ true‬וכ קלט שיביא לכ שערכו של הביטוי הבוליאני שבמשפט יהיה ‪ .false‬קלטי כאלו‬
‫נקראי קלטי מייצגי‪.‬‬
‫לא מספיק לבדוק את מהל הביצוע רק עבור אחד משני המקרי‪ ,‬כיוו שמקרה אחד אינו מעיד על‬
‫האחר‪ ,‬כפי שמדגימה השאלה הבאה‪.‬‬
‫שאלה ‪5.6‬‬
‫מטרתו של משפט ה ‪ if‬הבא היא השמת הער הגדול מבי המשתני ‪ a‬ו‪ b‬במשתנה ‪ .max‬חישוב‬
‫מקסימו היא תבנית שימושית מאוד‪ ,‬שמשמשת בפתרו בעיות רבות‪.‬‬
‫)‪if (a > b‬‬
‫{‬
‫;‪max = a‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;‪max = b‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-154-‬‬
‫מדעי המחשב‬
‫בחרו שתי דוגמאות של קלטי מייצגי לבדיקת המשפט‪.‬‬
‫באחת יהיה ערכו התחילי של ‪ a‬גדול מערכו התחילי של ‪ ,b‬ובשנייה יהיה ערכו התחילי של ‪ a‬קט‬
‫מערכו התחילי של ‪.b‬‬
‫בדקו את מהל ביצוע המשפט באמצעות טבלאות מעקב עבור כל אחת מ הדוגמאות‪.‬‬
‫מה יהיה מהל ביצוע המשפט עבור המקרה שבו הערכי התחיליי של ‪ a‬ו‪ b‬שווי?‬
‫שאלה ‪5.7‬‬
‫ָפ ִלינְ ְדר* )‪ (palindrome‬הוא מילה‪ ,‬מספר או משפט שנית לקרוא משני הכיווני‪ ,‬משמאל לימי‬
‫ומימי לשמאל‪ ,‬ולקבל אותה תוצאה‪ .‬מקור המלה הוא יווני )‪ palin‬שוב ‪ dromus‬ריצה(‪ .‬למשל‪,‬‬
‫הש ישי הוא ש פלינדרומי‪ ,‬וכ המילי זוז‪ ,‬שמש‪ ,‬הסוסה‪ ,‬היפהפיה‪ .‬המילה הפלינדרומית הארוכה‬
‫ביותר בעברית שיש לה משמעות היא "ולכשתשכלו"‪ .‬הנה דוגמה למשפט פלינדרומי‪" :‬ילד כותב בתו‬
‫דלי"‪ .‬בדומה‪ ,‬המספר ‪ 787‬הוא פלינדרו והמספר ‪ 788‬אינו פלינדרו‪.‬‬
‫פתחו ויישמו אלגורית אשר הקלט שלו הוא מספר של חיובי תלתספרתי‪ ,‬והפלט שלו הוא הודעה‬
‫הא המספר הנתו הוא פלינדרו‪.‬‬
‫בניתוח הבעיה ובבדיקת הפתרו הקפידו על בחירת קלטי מייצגי‪ .‬בכתיבת האלגורית הקפידו על‬
‫ניסוח ברור של ההוראה לביצוע בתנאי‪.‬‬
‫הוראה לביצוע בתנאי במבנה ‪...íà‬‬
‫לעיתי ברצוננו לבצע חלק של אלגורית כאשר תנאי מסוי מתקיי‪ ,‬ואיננו רוצי לבצע מאומה‬
‫כאשר התנאי אינו מתקיי‪ .‬נראה זאת בפתרו הבעיה הבאה‪.‬‬
‫בעיה ‪2‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת הוראה לביצוע בתנאי במבנה ‪)...íà‬ללא החלק ‪.(...úøçà‬‬
‫תלמידי כיתות י' בבית הספר טסי לירח‪ .‬יש להזמי מספר מתאי של חלליות כ שלכל תלמיד יהיה‬
‫מקו ישיבה ומספר החלליות יהיה קט ככל האפשר‪.‬‬
‫פתחו ויישמו אלגורית להזמנת חלליות לירח כ שהקלט שלו הוא מספר התלמידי ומספר‬
‫המושבי בחללית והפלט שלו הוא מספר החלליות שיש להזמי‪.‬‬
‫ניתוח הבעיה בעזרת דוגמאות‬
‫ייתכ כי מספר התלמידי הינו כפולה של מספר המושבי בחללית‪ .‬במקרה כזה בכל החלליות‬
‫שיוזמנו יהיו כל המושבי תפוסי‪.‬‬
‫לעומת זאת‪ ,‬ייתכ כי מספר התלמידי אינו כפולה של מספר המושבי בחללית‪ .‬במקרה כזה תוזמ‬
‫ג חללית אחת אשר בה יהיו רק חלק מהמושבי תפוסי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-155-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.8‬‬
‫בחרו שתי דוגמאות קלט מייצגות וציינו את הפלט עבור כל אחת מה‪.‬‬
‫?‬
‫כיצד נחשב את מספר החלליות הדרוש?‬
‫יש לחשב את המנה והשארית של חלוקת מספר התלמידי במספר המושבי בחללית‪ .‬מנת החלוקה‬
‫שווה למספר החלליות המלאות‪ .‬שארית החלוקה תקבע א יש צור בחללית נוספת‪ .‬א שארית‬
‫החלוקה היא ‪ 0‬הרי שמספר התלמידי הינו כפולה של מספר המושבי בחללית‪ .‬אחרת‪ ,‬יש להזמי‬
‫חללית נוספת שתפוסתה תהיה חלקית ושווה לשארית‪.‬‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטת מספר התלמידים ומספר המושבים‬
‫‪ .2‬חישוב מספר החלליות המלאות‬
‫‪ .3‬חישוב מספר החלליות הכולל בהתאם לצורך בחללית נוספת‬
‫‪ .4‬הצגת הפלט‪ :‬מספר החלליות‬
‫את תתמשימה ‪ 3‬נוכל לפרק באופ הבא‪:‬‬
‫‪ .3.1‬חשב את מספר התלמידים שיישארו לאחר מילוי החלליות המלאות‬
‫‪ .3.2‬בהתאם למספר שחושב קבע את מספר החלליות הכולל‬
‫בחירת משתני‬
‫נבחר את המשתני הבאי מטיפוס של‪:‬‬
‫‪ – studentsNum‬ישמור את מספר התלמידי‪.‬‬
‫‪ – seatsPerShip‬ישמור את מספר המושבי בחללית‪.‬‬
‫‪ – shipsNum‬ישמור את מספר החלליות שיש להזמי‪.‬‬
‫‪ – leftoverNum‬ישמור את מספר התלמידי אשר יוותרו לאחר מילוי החלליות המלאות‪.‬‬
‫האלגורית‬
‫כיצד ננסח באלגורית את תתמשימה ‪?3.2‬‬
‫נית לתאר תתמשימה זו באופ הבא‪:‬‬
‫‪íà‬‬
‫‪0-î ìåãâ åøàùðù íéãéîìúä øôñî‬‬
‫‪shipsNum úà 1-á ìãâä‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-156-‬‬
‫מדעי המחשב‬
:‫הנה האלגורית המלא‬
seatsPerShip-á íéáùåîä øôñî úàå studentsNum-á íéãéîìúä øôñî úà èåì÷ .1
-á studentsNum ìù ä÷åìçä úðî éãé ìò úåàìîä úåéììçä øôñî úà áùç .2
shipsNum-á íùäå seatsPerShip
ìù ä÷åìçä úéøàù éãé ìò ,úåéììçä éåìéî øçàì åøúååéù íéãéîìúä øôñî úà áùç .3
leftoverNum-á íùäå seatsPerShip-á studentsNum
leftoverNum> 0
íà
.4
shipsNum ìù åëøò úà 1-á ìãâä .4.1
shipsNum ìù åëøò úà èìôë âöä .5
:( ...úøçà ‫)ללא החלק‬
...íà ‫באלגורית לפתרו הבעיה נכללה הוראה לביצוע בתנאי במבנה‬
‫היא שא התנאי שבהוראה מתקיי‬
...íà ‫המשמעות של הוראה לביצוע בתנאי במבנה‬
.‫ ואחרת לא מבוצע דבר‬,‫מבוצעות הוראות מתאימות‬
‫יישו האלגורית‬
/*
‫ מספר התלמידים והמושבים‬:‫קלט‬
‫ מספר החלליות להזמנה‬:‫פלט‬
*/
public class ShipspaceOrder
{
public static void main (String [] args)
{
// ‫הצהרה על משתנים בתוכנית‬
int studentsNum; // ‫מספר התלמידים‬
int seatsPerShip; //‫מספר המושבים בחללית‬
int shipsNum;
//‫מספר החלליות שיש להזמין‬
int leftoverNum;//
‫מספר התלמידים שיישארו לאחר מילוי החלליות‬
‫המלאות‬
// ‫קליטת המשתנים‬
1. studentsNum = In.readInt("Insert number of students");
2. seatsPerShip = In.readInt("Insert number of seats in a
spaceship");
‫מדעי המחשב‬
-157-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
// ‫חישוב מספר החלליות המלאות‬
3. shipsNum = studentsNum / seatsPerShip;
// ‫חישוב מספר התלמידים שיוותרו‬
4. leftoverNum = studentsNum % seatsPerShip;
//
‫ההוראה לביצוע בתנאי‬
5. if (leftoverNum > 0) //‫דרושה חללית נוספת שתפוסתה תהיה חלקית‬
{
5.1.
shipsNum = shipsNum + 1;
}
6. System.out.println("The number of spaceships is " + shipsNum);
} // main
} // class ShipspaceOrder
‫מעקב‬
.‫נבצע מעקב עבור כמה דוגמאות קלט מייצגות‬
‫ ותתקבל‬,‫ מושבי בחללית נחוצה חללית שתפוסתה תהיה חלקית‬60‫ תלמידי ו‬150 ‫עבור הקלט‬
:‫הטבלה‬
‫שורה‬
‫לביצוע‬
1
studentsNum
seatsNum
shipsNum
leftoverNum
‫פלט‬
leftoverNum
>0
?
?
?
?
?
150
?
?
?
?
Insert number
of students
2
150
60
?
?
?
Insert number
of seats in a
spaceship
3
150
60
2
?
?
4
150
60
2
0
?
5
150
60
2
30
true
5.1
150
60
3
30
6
150
60
3
30
The number of
spaceships is
3
‫מדעי המחשב‬
-158-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫עבור הקלט ‪ 120‬תלמידי ו‪ 60‬מושבי בחללית לא נחוצה חללית שתפוסתה תהיה חלקית‪ ,‬ותתקבל‬
‫הטבלה‪:‬‬
‫פלט‬
‫‪leftoverNum‬‬
‫‪shipsNum‬‬
‫‪leftoverNum‬‬
‫‪seatsNum‬‬
‫‪studentsNum‬‬
‫‪>0‬‬
‫‪Insert number‬‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫‪120‬‬
‫שורה‬
‫לביצוע‬
‫‪1‬‬
‫‪of students‬‬
‫‪Insert number‬‬
‫?‬
‫?‬
‫‪60‬‬
‫?‬
‫‪2‬‬
‫‪120‬‬
‫‪of seats in a‬‬
‫‪spaceship‬‬
‫?‬
‫?‬
‫‪2‬‬
‫‪60‬‬
‫‪120‬‬
‫‪3‬‬
‫?‬
‫‪0‬‬
‫‪2‬‬
‫‪60‬‬
‫‪120‬‬
‫‪4‬‬
‫‪false‬‬
‫‪0‬‬
‫‪2‬‬
‫‪60‬‬
‫‪120‬‬
‫‪5‬‬
‫‪0‬‬
‫‪2‬‬
‫‪60‬‬
‫‪120‬‬
‫‪6‬‬
‫‪The number of‬‬
‫‪spaceships is‬‬
‫‪2‬‬
‫שימו ♥ להבדל בי עמודות השורה לביצוע בשתי הטבלאות‪ .‬בטבלה הראשונה מופיעה שורה ‪5.1‬‬
‫)‪ (shipsNum = shipsNum + 1‬ואילו בטבלה השנייה לא מופיעה שורה זו מפני שהתנאי במשפט ה‬
‫‪ if‬אינו מתקיי‪.‬‬
‫סוף פתרון בעיה‬
‫‪2‬‬
‫נית להמחיש הוראה לביצוע בתנאי במבנה ‪ ...íà‬באמצעות תרשי הזרימה הבא‪:‬‬
‫כ‬
‫ביטוי‪-‬בוליאני‬
‫לא‬
‫ההוראות אשר‬
‫תבוצענה א‬
‫התנאי מתקיי‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-159-‬‬
‫מדעי המחשב‬
‫בשפת ‪ Java‬מבנה משפט ה‪ if‬ליישו הוראה לביצוע בתנאי במבנה ‪ ...íà‬הוא‪:‬‬
‫)ביטוי בוליאני( ‪if‬‬
‫{‬
‫ההוראות אשר מבוצעות אם התנאי מתקיים‬
‫}‬
‫שימו לב להערה שמלווה את התנאי )דרושה חללית‪ . (...‬הערה זו מבהירה ביטוי בוליאני שמשמעותו‬
‫איננה ברורה מיד ע קריאתו‪ .‬נקרא להערה זו תיאור משמעות קיו תנאי‪.‬‬
‫תיאור משמעות קיו תנאי‬
‫הוא תיעוד המסביר את תפקידו של ביטוי בוליאני בהוראה‬
‫לביצוע בתנאי‪.‬‬
‫תיאור משמעות קיו תנאי מסייע לנו בקריאת תוכנית ובהבנתה‪.‬‬
‫בתוכניות שנפתח נשתדל לצר( תיאורי משמעות קיו או איקיו תנאי במשפטי ‪ if‬אשר כדאי‬
‫להבהיר‪.‬‬
‫שאלה ‪5.9‬‬
‫בנו טבלת מעקב אחר ביצוע התוכנית ‪ SpaceshipOrder‬לפתרו בעיה ‪ 2‬עבור הקלט‪ 180 :‬תלמידי‬
‫ו‪ 60‬מושבי‪.‬‬
‫שאלה ‪5.10‬‬
‫ביטוי בוליאני עשוי לכלול השוואה בי ביטויי חשבוניי שאינ פשוטי‪ .‬למשל‪,‬‬
‫או)‪.(a + b) == (c + d‬‬
‫כתבו משפט ‪ if‬אשר בו‪:‬‬
‫‪(a / 2) == 0‬‬
‫א‪ .‬א ערכו של ‪ a‬גדול מפעמיי ערכו של ‪ ,b‬מוכפל ערכו של ‪ c‬ב‪.2‬‬
‫ב‪ .‬א ערכו של ‪ c‬קט מסכו ערכי ‪ a‬ו‪ ,b‬מופחת מ‪ c‬ערכו של ‪.a‬‬
‫ג‪ .‬א ערכו של ‪ a‬הוא כפולה של ‪ ,10‬מוש ב‪ b‬ערכו של ‪.a‬‬
‫ד‪ .‬א מכפלת ערכי ‪ a‬ו‪ b‬גדולה מסכו ערכי ‪ b‬ו‪ ,c‬סימנו של הער הנתו ב‪ c‬מתהפ‪.‬‬
‫שאלה ‪5.11‬‬
‫המשתנה ‪ a‬מכיל מספר של חיובי קט מ‪.100‬‬
‫השלימו תיאור משמעות קיו תנאי בכל אחד מ המשפטי הבאי‪ ,‬כלומר‪ ,‬הסבירו את תפקידו של‬
‫כל תנאי‪ ,‬ומה הוא בודק‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-160-‬‬
‫מדעי המחשב‬
//________________________
if (a == (a % 10))
{
System.out.println("A");
}
//_________________________
if ((a / 10) > 5)
{
System.out.println("Pass");
}
. ...íà ‫ והמבנה‬...úøçà...íà ‫ המבנה‬:‫ראינו שני מבני של הוראה לביצוע בתנאי‬
‫ כאשר באחד הוראה לביצוע בתנאי במבנה‬,‫עבור אותה בעיה נית להציג שני פתרונות שוני‬
‫ לעיתי אחד המבני מתאי‬,‫ ע זאת‬....íà ‫ובשני הוראה לביצוע בתנאי במבנה‬
...úøçà...íà
‫ הצגנו אלגורית‬2 ‫ בבעיה‬.‫יותר לבעיה הנתונה ובמקרה כזה עדי( להשתמש במבנה שמתאי יותר‬
‫ ובו ההוראה לביצוע‬2 ‫ נציג כעת פתרו אחר לבעיה‬. ...íà ‫לפתרו הבעיה שבו ההוראה היא במבנה‬
. ...úøçà...íà ‫בתנאי היא במבנה‬
:2 ‫אלגורית נוס( לפתרו בעיה‬
seatsPerShip-á íéáùåîä øôñî úàå studentsNum-á íéãéîìúä øôñî úà èåì÷ .1
íéáùåîä ìë\\ 0 àéä seatsPerShip-á studentsNum ìù ä÷åìçä úéøàù
íà
.2
íéñåôú úåéììçá
-á studentsNum ìù ä÷åìçä úðî éãé ìò úåàìîä úåéììçä øôñî úà áùç .2.1
shipsNum-á íùäå seatsPerShip
úé÷ìç äñåôú íò úçà úéììç\\
úøçà
.3
-á studentsNum ìù ä÷åìçä úðî éãé ìò úåàìîä úåéììçä øôñî úà áùç .3.1
shipsNum-á ìá÷úîä êøòä úà íùäå ,1 äæ êøòì óñåä ,seatsPerShip
shipsNum ìù åëøò úà èìôë âöä .4
‫מדעי המחשב‬
-161-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫שאלה ‪5.12‬‬
‫נתו קטע התוכנית הבא‪ ,‬שהמשתני בו ה מטיפוס של‪:‬‬
‫;‪max = a‬‬
‫)‪if (b > a‬‬
‫{‬
‫;‪max = b‬‬
‫}‬
‫א‪ .‬בנו טבלאות מעקב אחר מהל ביצוע קטע התוכנית עבור הערכי התחיליי ‪ 30‬ו‪ 30‬ועבור‬
‫הערכי התחיליי ‪ 40‬ו‪ 70‬במשתני ‪ a‬ו‪ b‬בהתאמה‪.‬‬
‫ב‪ .‬מהי מטרת קטע התוכנית?‬
‫ג‪ .‬נתו קטע התוכנית הבא‪:‬‬
‫)‪if (a >= b‬‬
‫{‬
‫;‪max = a‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;‪= b‬‬
‫‪max‬‬
‫}‬
‫הא יש הבדל בי מטרת קטע התוכנית הנתו בסעי( זה לבי מטרת קטע התוכנית שהוצג בתחילת‬
‫השאלה? הסבירו את תשובתכ‪.‬‬
‫להעמקה בתבנית מציאת מקסימום פנו לעמוד ‪.219‬‬
‫שאלה ‪5.13‬‬
‫פתחו אלגורית אשר הקלט שלו הוא שני ציוני של תלמיד‪ ,‬שערכ הוא מספר של בי ‪ 0‬ל‪100‬‬
‫והפלט שלו הוא מספר המציי כמה מ הציוני גבוהי מ‪.80‬‬
‫א‪ .‬מה ערכי הפלט האפשריי?‬
‫ב‪ .‬פתחו ויישמו את האלגורית‪.‬‬
‫התניית ביצוע של יותר מהוראה אחת‬
‫עד כה ראינו הוראות לביצוע בתנאי פשוטות‪ :‬א התנאי התקיי התבצעה הוראה יחידה‪ ,‬ועבור‬
‫הוראות לביצוע בתנאי במבנה ‪...úøçà...íà‬‬
‫ג במקרה שהתנאי לא התקיי התבצעה הוראה‬
‫יחידה‪ .‬בבעיה הבאה נציג הוראה לביצוע בתנאי שחלקיה השוני כוללי יותר מהוראה אחת‪ ,‬ומורי‬
‫על ביצוע כמה תתמשימות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-162-‬‬
‫מדעי המחשב‬
‫בעיה ‪3‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת הוראה לביצוע בתנאי שחלקיה כוללי מספר הוראות‪.‬‬
‫פתחו ויישמו אלגורית המתאר משחק שנקרא "שש אש"‪ .‬הקלט של האלגורית הוא מספר של ‪.x‬‬
‫א ‪ x‬מתחלק ב‪ 6‬הפלט הוא ההודעה "זכית ב‪ y‬שקלי" כאשר סכו הזכייה‪ ,y ,‬שווה ל‪ .x⋅6‬א‬
‫‪ x‬אינו מתחלק ב‪ 6‬הפלט הוא ההודעה "הפסדת ‪ y‬שקלי" כאשר סכו ההפסד‪ ,y ,‬שווה ל‪.x⋅10‬‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטת המספר‬
‫‪ .2‬חישוב סכום הזכייה או ההפסד‬
‫‪ .3‬הצגת הסכום בצירוף הודעה מתאימה‬
‫בחירת משתני‬
‫נבחר את המשתני הבאי מטיפוס של‪:‬‬
‫‪ – num‬לשמירת המספר הנית כקלט‬
‫‪ – sum‬לשמירת סכו הזכייה או ההפסד‬
‫האלגורית‬
‫‪num-á øôñî èåì÷ .1‬‬
‫‪.2‬‬
‫‪íà‬‬
‫‪úéøàù àìì 6-á ÷ìçúî num ìù åëøò‬‬
‫‪sum-á íùäå 6-á num úìôëî úà áùç .2.1‬‬
‫‪sum íåëñá äééëæ úòãåä èìôë âöä .2.2‬‬
‫‪úøçà .3‬‬
‫‪sum-á íùäå 10-á num úìôëî úà áùç .3.1‬‬
‫‪sum íåëñä ìù ãñôä úòãåä èìôë âöä .3.2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-163-‬‬
‫מדעי המחשב‬
‫יישו האלגורית‬
‫*‪/‬‬
‫קלט‪ :‬מספר שלם‬
‫פלט‪ :‬הודעה על זכייה אם המספר מתחלק ב‪ ,6-‬או על הפסד אם המספר אינו מתחלק‬
‫ב‪ .6-‬ההודעה תכלול את סכום הזכייה או ההפסד‬
‫‪*/‬‬
‫‪public class SheshEsh‬‬
‫{‬
‫)‪public static void main (String [] args‬‬
‫{‬
‫הצהרה על משתנים בתוכנית ‪//‬‬
‫המספר שנקלט‪int num; //‬‬
‫סכום הזכייה או ההפסד‪int sum; //‬‬
‫קליטת המשתנים ‪//‬‬
‫;)"‪1. num = In.readInt("Insert a number‬‬
‫ההוראה לביצוע בתנאי‪ :‬חישוב סכום הזכייה או ההפסד ‪//‬‬
‫)‪2. if (num % 6 == 0‬‬
‫הזכייה ‪//‬‬
‫{‬
‫;‪2.1. sum = num * 6‬‬
‫;)"‪2.2. System.out.println("You won " + sum + " shekels‬‬
‫}‬
‫‪3. else‬‬
‫ההפסד ‪//‬‬
‫{‬
‫;‪3.1. sum = num * 10‬‬
‫;)"‪lost " + sum + " shekels‬‬
‫‪3.2. System.out.println("You‬‬
‫}‬
‫‪}// main‬‬
‫‪}// class SheshEsh‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-164-‬‬
‫מדעי המחשב‬
‫מעקב‬
‫נעקוב אחר מהל ביצוע התוכנית ‪ SheshEsh‬עבור הקלט ‪:12‬‬
‫פלט‬
‫‪num%6==0‬‬
‫‪Insert a‬‬
‫‪number‬‬
‫‪num‬‬
‫?‬
‫?‬
‫?‬
‫‪12‬‬
‫‪1‬‬
‫‪num = In.readInt‬‬
‫)"‪("Insert a number‬‬
‫‪true‬‬
‫‪You won 72‬‬
‫‪shekels‬‬
‫‪sum‬‬
‫המשפט לביצוע‬
‫?‬
‫‪72‬‬
‫‪72‬‬
‫)‪0‬‬
‫== ‪if (num % 6‬‬
‫‪2‬‬
‫;‪sum = num * 6‬‬
‫‪2.1‬‬
‫‪12‬‬
‫‪12‬‬
‫‪2.2 System.out.println("You won " 12‬‬
‫)"‪+ sum + " shekels‬‬
‫סוף פתרון בעיה‬
‫‪3‬‬
‫שאלה ‪5.14‬‬
‫בנו טבלת מעקב אחר ביצוע התוכנית ‪ SheshEsh‬מפתרו בעיה ‪ 3‬עבור הקלט ‪.10‬‬
‫שימו ♥‪ :‬בשפת ‪ ,Java‬כאשר הוראה לביצוע בתנאי מתנה ביצוע של הוראה אחת בלבד נית לכתוב‬
‫אותה ג ללא סוגריי המגדירי את תחו ה‪ .if‬למשל‪:‬‬
‫)‪if (a > b‬‬
‫;)"‪System.out.println("A‬‬
‫‪else‬‬
‫;)"‪System.out.println("B‬‬
‫אבל‪ ,‬כאשר יש יותר מהוראה אחת חייבי להגדיר את תחו ה‪ if‬ואת תחו ה‪ else‬בעזרת‬
‫סוגריי מסולסלי‪ .‬מומל‪ 0‬להשתמש בכל מקרה בסוגריי מסולסלי להגדרת תחומי ה‪ if‬וה‬
‫‪ else‬מפני שזה הופ את התוכנית לקריאה וברורה יותר‪.‬‬
‫שאלה ‪5.15‬‬
‫במשתני ‪ x‬ו‪ y‬שמורי שני ערכי מטיפוס של‪.‬‬
‫מטרת התוכנית היא להציג כפלט קוד את המספר הגדול ואחריו את המספר הקט‪.‬‬
‫השלימו את משפט ה‪ if‬הבא באמצעות ביטוי בוליאני מתאי‪.‬‬
‫)‬
‫( ‪if‬‬
‫השלימו‬
‫{‬
‫;‪temp = x‬‬
‫;‪x = y‬‬
‫;‪y = temp‬‬
‫}‬
‫;)‪System.out.println(x + " " + y‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-165-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.16‬‬
‫פתחו אלגורית שהקלט שלו הוא שני מספרי חיוביי‪ .‬המספר הראשו מציי את משקלו של‬
‫החתול גארפילד והמספר השני מציי את משקלו של הכלב סנופי‪ .‬א משקלו של גארפילד גדול‬
‫ממשקלו של סנופי האלגורית צרי לחשב בכמה שוקל גארפילד יותר מסנופי ולהציג הודעה‬
‫מתאימה הכוללת את הער שחושב‪ .‬אחרת‪ ,‬האלגורית צרי לחשב בכמה שוקל סנופי יותר‬
‫מגארפילד ולהציג הודעה מתאימה הכוללת את הער שחושב‪.‬‬
‫למשל‪ ,‬פלט מתאי עבור הקלט ‪ 10 15‬הוא‪:‬‬
‫‪Snoopy is heavier than Garfield, the difference is 5 kg‬‬
‫פלט מתאי עבור הקלט ‪ 17 13‬הוא‪:‬‬
‫‪Garfield is heavier than Snoopy, the difference is 4 kg‬‬
‫ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪5.17‬‬
‫פתחו אלגורית שהקלט שלו הוא שני מספרי שלמי‪ .‬א המספר הראשו גדול מהשני‪ ,‬האלגורית‬
‫מחשב את סכומ ומציג אותו כפלט‪ .‬אחרת‪ ,‬הוא מחשב את מכפלת המספרי ומציגה כפלט‪ .‬ישמו‬
‫את האלגורית בשפת ‪.Java‬‬
‫ביטויים בוליאניים הכוללים תווים‬
‫הביטויי הבוליאניי שראינו עד כה כללו פעולות השוואה על מספרי‪ .‬אבל המספרי השלמי או‬
‫המספרי הממשיי אינ הטיפוסי היחידי שערכיה ניתני להשוואה‪ .‬בגלל ההתאמה‪,‬‬
‫המתאימה לכל תו מספר של‪ ,‬ג ערכיו של הטיפוס התווי ניתני להשוואה‪ ,‬כפי שמדגימה הבעיה‬
‫הבאה‪.‬‬
‫בעיה ‪4‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת פעולות השוואה על טיפוס תווי‪.‬‬
‫בסדרות סימני‪ ,‬הכוללות מספר סופי של סימני‪ ,‬ישנו סימ עוקב לכל סימ מלבד לסימ האחרו‪.‬‬
‫עבור סדרות כאלה נהוג להגדיר את הסימ הראשו כ"עוקב מעגלית" לסימ האחרו‪.‬‬
‫פתחו ויישמו אלגורית אשר הקלט שלו הוא אות מ ה‪) ABC‬האותיות הגדולות של הא"ב האנגלי(‪,‬‬
‫והפלט שלו הוא האות העוקבת "בצורה מעגלית" והודעה מתאימה‪ .‬עבור אות קלט השונה מהאות ‪Z‬‬
‫הפלט יהיה הודעה המכריזה על האות הבאה ב‪ ABC-‬כאות העוקבת‪ .‬עבור קלט שהוא ‪ Z‬הפלט יהיה‬
‫הודעה הכוללת את האות ‪ A‬ומכריזה על חזרה להתחלה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-166-‬‬
‫מדעי המחשב‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטת אות‬
‫‪ .2‬חישוב האות העוקבת "בצורה מעגלית"‬
‫‪ .3‬הצגת האות העוקבת בצירוף הודעה מתאימה‬
‫בחירת משתני‬
‫נבחר את המשתני הבאי מטיפוס תווי‪:‬‬
‫‪ – letter‬ישמור את האות הניתנת כקלט‬
‫‪ – nextLetter‬ישמור את האות העוקבת "בצורה מעגלית" לאות הקלט‬
‫האלגורית‬
‫‪letter-á úåà èåì÷ .1‬‬
‫‪.2‬‬
‫‪íà‬‬
‫‪'Z' àåä letter ìù åëøò‬‬
‫‪nextLetter-á 'A' úåàä úà íùä .2.1‬‬
‫‪nextLetter ìù åëøò úàå "Back to start: " äòãåää úà èìôë âöä .2.2‬‬
‫‪úøçà .3‬‬
‫‪nextLetter-á íùäå letter-á äðåúðä úåàì úá÷åòä úåàä úà áùç .3.1‬‬
‫‪nextLetter ìù åëøò úàå "The next letter is: " äòãåää úà èìôë âöä .3.2‬‬
‫יישו האלגורית‬
‫כיצד נבצע את ההשוואה בשורה ‪ 2‬של האלגורית? נית להשוות בי ערכי מטיפוס תווי‪ ,‬בדיוק כש‬
‫שנית להשוות בי ערכי מטיפוס של‪ ,‬או ממשי‪ ,‬על ידי שימוש באופרטור ההשוואה הרגיל של‬
‫השפה‪ .‬לכ‪ ,‬הביטוי הבוליאני המתאי הוא '‪.letter == 'Z‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-167-‬‬
‫מדעי המחשב‬
‫התוכנית המלאה‬
/*
‫ אות לועזית גדולה‬:‫קלט‬
‫מעגלית" לאות הנתונה‬-‫ הודעה הכוללת את האות העוקבת "בצורה‬:‫פלט‬
*/
public class NextLetterInCircle
{
public static void main (String [] args)
{
// ‫הצהרה על משתנים בתוכנית‬
char letter; // ‫אות הקלט‬
char nextLetter; // ‫האות העוקבת‬
// ‫קליטת המשתנים‬
1. letter = In.readChar("Insert a letter from the ABC");
// ‫ חישוב האות העוקבת‬:‫ההוראה לביצוע בתנאי‬
2. if (letter ==
{
'Z')
// ‫המקרה המיוחד – האות האחרונה‬
2.1. nextLetter = 'A';
2.2. System.out.println("Back to start: " + nextLetter);
} // if
3. else
{
// ‫האות איננה האחרונה‬
3.1. nextLetter = (char) (letter + 1); //‫( המרת טיפוס‬casting)
3.2. System.out.println("The next letter is: " + nextLetter);
} // else
} // main
} // class NextLetterInCircle
‫מעקב‬
:'C' ‫ עבור הקלט‬NextLetterInCircle ‫נעקוב אחר מהל ביצוע התוכנית‬
‫מדעי המחשב‬
-168-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫המשפט לביצוע‬
letter
nextLetter
‫פלט‬
letter==
'Z'
?
?
1
Letter = In.readChar
("Insert a letter from
the ABC")
'C'
?
2
if (letter == 'Z')
'C'
?
3.1
nextLetter
=
(char)
(letter + 1)
System.out.println("The
next letter is: " +
nextLetter)
'C'
'D'
'C'
'D'
3.2
4
Insert a
letter
from the
ABC
false
The next
letter is:
D
‫סוף פתרון בעיה‬
5.18 ‫שאלה‬
.'Z' ‫ עבור הקלט‬3 ‫ לפתרו בעיה‬NextLetterInCircle ‫בנו טבלת מעקב אחר ביצוע התוכנית‬
‫ נית להתייחס אל‬,‫ כלומר‬.'0','1',…'9' ‫ קבוצת התווי של המחשב כוללת ג את הספרות‬,‫כזכור‬
‫ השאלה‬.‫ ספרות עוקבות מסודרות כתווי עוקבי בקבוצת התווי‬.‫ספרה כאל ער מטיפוס תווי‬
.‫הבאה מתייחסת לספרות כאל תווי‬
5.19 ‫שאלה‬
:‫נתונה התוכנית הבאה‬
public class DigitAsChar
{
public static void main (String [] args)
{
char digit;
char x;
digit = In.readChar("Insert a digit between 0 and 9");
if (digit == '0')
{
x = '9';
}
else
{
x = (char)(digit - 1);
}
System.out.println(x);
} // main
} // class DigitAsChar
‫מדעי המחשב‬
-169-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫הקלט לתוכנית הוא ספרה בי '‪ '0‬ל'‪.'9‬‬
‫א‪ .‬מהו הפלט עבור הקלט '‪ ,'5‬ומהו הפלט עבור הקלט '‪?'0‬‬
‫ב‪ .‬מהו הקלט אשר הפלט עבורו יהיה ‪?8‬‬
‫ג‪ .‬מהי מטרת התוכנית?‬
‫מאחר שערכי הטיפוס התווי ניתני להשוואה‪ ,‬נית להשוות בי ערכי מטיפוס תווי ג באמצעות‬
‫הסימני <‪ ,<= ,>= ,> ,‬ולא רק באמצעות הסימני == ו=!‪.‬‬
‫למשל‪ ,‬נניח שערכי המשתני מטיפוס תווי ‪ let1‬ו‪ let2‬ה '‪ 'E‬ו'‪ 'T‬בהתאמה‪ .‬אז ערכו של כל אחד‬
‫מ הביטויי הבוליאניי הבאי הוא ‪ let1 >= 'E' ,'7' > '3' ,'A' < 'B' :true‬ו‪.let1 <= let2‬‬
‫ערכיו של הטיפוס התווי ניתני להשוואה‪ .‬לכ‪ ,‬נית לבצע את כל פעולות ההשוואה על תווי‬
‫בדומה לביצוע על ערכי מספריי‪.‬‬
‫שאלה ‪5.20‬‬
‫פתחו ויישמו אלגורית אשר הקלט שלו הוא שתי אותיות שונות מ ה‪ ,ABC‬והוא מציג את אותיות‬
‫הקלט כפלט פעמיי‪ :‬בשורה אחת ב"סדר עולה" ובשורה הבאה ב"סדר יורד"‪.‬‬
‫"סדר עולה" פירושו‪ :‬האות שמופיעה קוד ב‪ ABC‬תוצג משמאל‪ ,‬והאות האחרת תוצג מימינה‪.‬‬
‫"סדר יורד" הוא סדר הפו ל"סדר עולה"‪.‬‬
‫להעמקה בתבנית סידור ערכים בסדרה פנו לעמוד ‪.225‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-170-‬‬
‫מדעי המחשב‬
‫‪ 5.2‬תנאי מורכב‬
‫בסעי( זה נכיר תנאי מורכבי‪ .‬תנאי מורכבי ה תנאי הבנויי מקישור של תנאי פשוטי‬
‫יותר‪.‬‬
‫נבח את השרטוט הבא המתאר מערכת כבישי‪:‬‬
‫איור ‪ – 5.1‬מערכת כבישים‬
‫במערכת הכבישי המתוארת באיור ‪ 5.1‬נית להגיע מנקודה א לנקודה ג‪ .‬כדי לעשות זאת יש להגיע‬
‫מנקודה א לנקודה ב‪ ,‬ומנקודה ב לנקודה ג‪ .‬על הכבישי נמצאי מחסומי‪ .‬כדי להגיע מנקודה א‬
‫לנקודה ב יש לעבור במחסו ‪ 1‬ובמחסו ‪ .2‬כלומר‪ ,‬רק א אפשר לעבור בשני המחסומי‪ ,‬אפשר‬
‫להגיע מנקודה א לנקודה ב‪ .‬נית לתאר זאת כ‪:‬‬
‫‪íâå íøåî 1 íåñçî íà‬‬
‫‪íøåî 2 íåñçî‬‬
‫‪á äãå÷ðì à äãå÷ðî òéâäì ïúéð‬‬
‫‪úøçà‬‬
‫‪á äãå÷ðì à äãå÷ðî òéâäì ïúéð àì‬‬
‫תנאי המעבר מנקודה א לנקודה ב מתואר על ידי תנאי מורכב‪ ,‬שהוא קישור התנאי ‪íøåî 1 íåñçî‬‬
‫אל התנאי ‪ íøåî 2 íåñçî‬באמצעות המילה ‪.íâå‬‬
‫נתבונ כעת באפשרות להגיע מנקודה ב לנקודה ג‪ .‬כדי לעשות זאת יש לעבור במחסו ‪ 3‬או במחסו ‪.4‬‬
‫כלומר‪ ,‬א אפשר לעבור באחד המחסומי )א בשניה( אפשר להגיע מנקודה ב לנקודה ג‪ .‬נית לתאר‬
‫זאת כ‪:‬‬
‫‪åà íøåî 3 íåñçî íà‬‬
‫‪íøåî 4 íåñçî‬‬
‫‪â äãå÷ðì á äãå÷ðî òéâäì ïúéð‬‬
‫‪úøçà‬‬
‫‪â äãå÷ðì á äãå÷ðî òéâäì ïúéð àì‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-171-‬‬
‫מדעי המחשב‬
‫תנאי המעבר מנקודה ב לנקודה ג מתואר על ידי תנאי מורכב‪ ,‬שהוא קישור התנאי ‪ íøåî 3 íåñçî‬אל‬
‫התנאי ‪ íøåî 4 íåñçî‬באמצעות המילה ‪.åà‬‬
‫‪ íâå‬ו‪åà‬‬
‫ה‬
‫ַק ָשרי‬
‫לוגיי‪ ,‬המאפשרי ליצור מביטויי בוליאניי פשוטי ביטויי‬
‫בוליאניי מורכבי‪.‬‬
‫הק ָשר ‪íâå‬‬
‫ַ‬
‫ראשית‪ ,‬נתמקד בקשר הראשו מבי השניי שהודגמו בניתוח של איור ‪.5.1‬‬
‫בעיה ‪5‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת תנאי מורכב הכולל את הקשר ‪.íâå‬‬
‫סדרת מספרי נקראת "סדרה עולה ממש" א ערכו של כל איבר בסדרה קט ממש מערכו של האיבר‬
‫הבא אחריו‪ .‬כלומר‪ ,‬ערכו של האיבר הראשו בסדרה קט ממש מערכו של האיבר השני‪ ,‬ערכו של‬
‫האיבר השני קט ממש מערכו של האיבר השלישי‪ ,‬וכ הלאה‪ .‬למשל‪ ,‬סדרת הספרי ‪ 1 2 7 10‬היא‬
‫סדרה עולה ממש‪ ,‬וסדרת המספרי ‪ 1 1 3 7‬איננה סדרה עולה ממש‪.‬‬
‫פתחו אלגורית אשר הקלט שלו הוא סדרה של שלושה מספרי שלמי‪ ,‬והפלט שלו הוא הודעה‬
‫הא סדרת המספרי היא סדרה עולה ממש‪.‬‬
‫א הסדרה עולה ממש‪ ,‬יש לצר( להודעה את סדרת ההפרשי שבי איברי הסדרה המקורית‪ .‬כלומר‪,‬‬
‫את ההפרש בי המספרי השני והראשו‪ ,‬ואת ההפרש בי המספרי השלישי והשני‪.‬‬
‫ישמו את האלגורית בשפת התכנות ‪.Java‬‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטה של שלושת איברי הסדרה‪.‬‬
‫‪ .2‬בדיקה אם הסדרה עולה ממש והצגת הודעה מתאימה‪.‬‬
‫בחירת משתני‬
‫נבחר שלושה משתני‪ ,‬מטיפוס של‪ ,‬לשמירת שלושת איברי הסדרה‪:‬‬
‫‪ – num1, num2, num3‬ישמרו את שלושת מספרי הסדרה הנתונה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-172-‬‬
‫מדעי המחשב‬
‫האלגורית‬
‫?‬
‫בכתיבת האלגורית עלינו לנסח תנאי אשר יתקיי כאשר הסדרה הנתונה עולה ממש‪ ,‬ולא יתקיי‬
‫כאשר הסדרה איננה עולה ממש‪ .‬מה יהיה התנאי המתאי?‬
‫התנאי אשר משמעות קיומו היא שהסדרה עולה ממש יהיה‪:‬‬
‫‪íâå éðùä øôñîäî ìåãâ éùéìùä øôñîä‬‬
‫‪ïåùàøä øôñîäî ìåãâ éðùä øôñîä‬‬
‫נית לכתוב זאת ג כ‪:‬‬
‫‪íâå num2 < num3‬‬
‫‪num1<num2‬‬
‫תנאי זה הוא תנאי מורכב‪ ,‬הכולל קישור באמצעות המילה ‪ íâå‬בי שני תנאי‪.‬‬
‫נציג אלגורית לפתרו הבעיה‪ ,‬תו שימוש בתנאי שניסחנו‪:‬‬
‫‪num3-áå num2-á ,num1-á äøãñ éøáéà äùåìù èåì÷ .1‬‬
‫‪.2‬‬
‫‪íà‬‬
‫‪num2 < num3‬‬
‫‪íâå‬‬
‫‪num1<num2‬‬
‫‪ùîî äìåò äøãñä éë äòãåä èìôë âöä .2.1‬‬
‫‪num3-num2 ùøôää êøò úàå num2-num1 ùøôää êøò úà èìôë âöä .2.2‬‬
‫‪úøçà .3‬‬
‫‪ùîî äìåò äðéà äøãñä éë äòãåä èìôë âöä .3.1‬‬
‫שימו ♥‪ :‬באלגורית מופיעה הוראת פלט שכוללת ערכי הפרשי בי משתני‪ .‬לא בחרנו משתני‬
‫לשמירת ההפרשי‪ ,‬אלא כללנו בהוראת הפלט ביטויי המבטאי את ההפרשי‪.‬‬
‫יישו האלגורית‬
‫ב‪ ,Java‬הקשר ‪íâå‬‬
‫נכתב באמצעות הסימ &&‪.‬‬
‫*‪/‬‬
‫קלט‪ 3 :‬מספרים שלמים‬
‫פלט‪ :‬הודעה האם סדרת המספרים היא סדרה עולה ממש‬
‫‪*/‬‬
‫‪public class CheckSequence‬‬
‫{‬
‫)‪public static void main (String [] args‬‬
‫{‬
‫הצהרה על משתנים בתוכנית ‪//‬‬
‫;‪int num1, num2,num3‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-173-‬‬
‫מדעי המחשב‬
// ‫קליטת המשתנים‬
1. num1 = In.readInt("Insert the first number");
2. num2 = In.readInt("Insert the second number");
3. num3 = In.readInt("Insert the third number");
4. if ((num1 < num2) && (num2 < num3))
{
\\ ‫הסדרה עולה ממש‬
4.1. System.out.println("The
sequence
of
numbers
is
strongly
increasing");
4.2. System.out.println("The sequence of differences is " + (num3
- num2) + " " +(num2 - num1));
}
5. else
{
5.1. System.out.println("The sequence of numbers is not strongly
increasing");
}
} // main
} // class CheckSequence
‫ ערכ מחושב‬.4.2 ‫ כמו שנעשה במשפט‬,‫ נית לכלול ביטויי‬Java‫ ג בהוראת הפלט ב‬:♥ ‫שימו‬
.‫לפני פקודת ההדפסה‬
‫מעקב‬
:1 2 4 ‫נעקוב אחר מהל ביצוע התוכנית עבור הקלט‬
‫מספר‬
‫המשפט לביצוע‬
num1
num2
num3
?
?
?
1
?
?
1
2
?
1
2
4
1
2
4
num1<num2
num2<num3
‫פלט‬
‫שורה‬
1
num1=In.readInt("Insert
Insert the
first
number
Insert the
second
number
Insert the
third
number
the first number")
2
num2=In.readInt("Insert
the second number")
3
num3=In.readInt("Insert
the third number")
4
if ((num1 < num2) &&
true
true
(num2 < num3))
‫מדעי המחשב‬
-174-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫‪The‬‬
‫‪sequence of‬‬
‫‪numbers is‬‬
‫‪strongly‬‬
‫‪increasing‬‬
‫‪The‬‬
‫‪sequence of‬‬
‫‪differences‬‬
‫‪is 2 1‬‬
‫‪4‬‬
‫‪2‬‬
‫‪1‬‬
‫‪4‬‬
‫‪2‬‬
‫‪1‬‬
‫‪System.out.println("The‬‬
‫‪sequence of numbers is‬‬
‫)"‪strongly increasing‬‬
‫‪System.out.println("The‬‬
‫‪4.2‬‬
‫‪sequence of differences‬‬
‫)‪is"...‬‬
‫סוף פתרון בעיה‬
‫תנאי‬
‫‪4.1‬‬
‫‪5‬‬
‫מורכב הוא תנאי המורכב מקישור בי תנאי פשוטי )ביטויי בוליאני פשוטי(‪ .‬עד כה‬
‫ראינו דר אחת ליצור תנאי מורכב על ידי קישור תנאי פשוטי‪ :‬באמצעות הקשר ‪ ,(and) íâå‬אשר‬
‫משמעותו היא שהתנאי המורכב מתקיי רק כאשר שני התנאי הפשוטי מתקיימי‪.‬‬
‫הטבלה הבאה מתארת את ערכיו של ביטוי בוליאני המורכב מקשר ‪ íâå‬של שני ביטויי בוליאני‪.‬‬
‫הטבלה נקראת טבלת אמת של קשר ‪íâå‬‬
‫‪true‬‬
‫‪:‬‬
‫‪ false‬ביטוי ‪1‬‬
‫ביטוי ‪2‬‬
‫‪false‬‬
‫‪false‬‬
‫‪false‬‬
‫‪true‬‬
‫‪false‬‬
‫‪true‬‬
‫כפי שנית לראות בטבלה‪ ,‬ערכו של הביטוי הבוליאני המורכב הוא ‪) true‬אמיתי‪ ,‬נכו( רק כאשר ער‬
‫שני הביטויי ‪ 1‬ו‪ ,2‬הוא ‪ .true‬בכל מקרה אחר‪ ,‬ערכו של הביטוי הבוליאני המורכב הוא ‪) false‬שקרי‪,‬‬
‫לא נכו(‪.‬‬
‫הקשר ‪ íâå‬מיוש ב‪ Java‬על ידי סימ הפעולה &&‪ .‬יש להקי( בסוגריי את הביטויי הבוליאניי‬
‫המקושרי על ידי &&‪.‬‬
‫בטבלת מעקב אחר מהל ביצוע תוכנית‪ ,‬שבה משפט ‪ if‬הכולל ביטוי בוליאני מורכב‪ ,‬נקצה עמודה‬
‫לכל אחד מ הביטויי הבוליאניי הפשוטי המרכיבי את הביטוי הבוליאני המורכב‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-175-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.21‬‬
‫בתוכנית ‪ CheckSequence‬לפתרו בעיה ‪ 4‬מופיע הביטוי הבוליאני המורכב הבא‪:‬‬
‫))‪((num1 < num2) && (num2 < num3‬‬
‫השלימו את הטבלה הבאה‪:‬‬
‫פלט‬
‫&& )‪(num1 < num2‬‬
‫)‪(num2 < num3‬‬
‫‪num2 < num3‬‬
‫‪num1 < num2‬‬
‫‪num3‬‬
‫‪num2‬‬
‫‪num1‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪2‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪1‬‬
‫‪0‬‬
‫שאלה ‪5.22‬‬
‫השלימו תנאי מורכב מתאי בכל אחת מ ההוראות הבאות‪:‬‬
‫א‪íâå úéòéáøì äååù äðåùàøä úåàä íà .‬‬
‫‪...‬‬
‫‪íåøãðéìô àéä úåéúåàä òáøà úá äìéîä‬‬
‫ב‪.‬‬
‫‪íâå 1985-î äìåãâ êìù äãéìä úðù íà‬‬
‫‪...‬‬
‫‪1995-ì 1985 ïéá àéä êìù äãéìä úðù‬‬
‫ג‪.‬‬
‫‪íâå let>='A' íà‬‬
‫‪...‬‬
‫‪Z-ì A ïéá àåäù êøò ìéëî let‬‬
‫שאלה ‪5.23‬‬
‫כתבו את התנאי הבאי המנוסחי במילי‪ ,‬כביטויי בוליאניי‪:‬‬
‫א‪ .‬ערכו של המשתנה ‪ x‬גדול מ‪ 0‬וקט מ‪.50‬‬
‫ב‪ .‬ערכו של המשתנה ‪ let‬אינו התו '‪ 'a‬ואינו התו '‪.'z‬‬
‫ג‪ .‬הער המוחלט של הפרשי ערכי המשתני ‪ x‬ו‪ y‬גדול מערכו של ‪ x‬וקט מערכו של ‪.y‬‬
‫שאלה ‪5.24‬‬
‫ביטוי בוליאני מורכב יכול לכלול יותר משני ביטויי בוליאניי פשוטי‪.‬‬
‫במשתני ‪ temp2 ,temp1‬ו‪ temp3-‬ערכי כלשה‪.‬‬
‫א‪ .‬כתבו ביטוי בוליאני המבטא כי ערכי המשתני ‪ temp2 ,temp1‬ו‪ temp3‬שוני זה מזה‪.‬‬
‫ב‪ .‬כתבו ביטוי בוליאני המבטא כי ערכי המשתני ‪ temp2 ,temp1‬ו‪ temp3‬שווי זה לזה‪ .‬הא‬
‫נחוצי יותר משני ביטויי בוליאניי פשוטי לכתיבת הביטוי?‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-176-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.25‬‬
‫עבור כל אחד מ הביטויי הבוליאניי המורכבי הבאי‪ ,‬תנו דוגמה לער של המשתנה ‪ num‬או ‪let‬‬
‫אשר עבורו יהיה ערכו של הביטוי הבוליאני ‪ ,true‬ותנו דוגמה לער אשר עבורו יהיה ערכו של הביטוי‬
‫הבוליאני ‪.false‬‬
‫ביטוי‬
‫‪true false‬‬
‫)‪(num >= 0) && (num <= 5‬‬
‫)‪(num > 0) && (num != 1‬‬
‫)‪(num > 2) && ((num % 2) == 0‬‬
‫)'‪(let != 'z') && (let > 'x‬‬
‫שאלה ‪5.26‬‬
‫פתחו אלגורית אשר הקלט שלו הוא שלושה תווי‪ ,‬והפלט שלו הוא התו העוקב לגדול מבי התווי‪,‬‬
‫א שלושת התווי ה תווי עוקבי ונתוני בסדר עולה‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ B C D‬יהיה הפלט ‪ ,E‬ועבור הקלט ‪ A C D‬יהיה הפלט ריק )כלומר‪ ,‬לא יוצג דבר‪,‬‬
‫כיוו שהתווי אינ תווי עוקבי(‪.‬‬
‫ישמו את האלגורית בשפת התכנות ‪.Java‬‬
‫כתבו את חישוב התו העוקב כביטוי במשפט הפלט‪.‬‬
‫להעמקה בתבנית ערכים עוקבים? פנו לעמוד ‪.228‬‬
‫הק ָשר ‪åà‬‬
‫ַ‬
‫בניתוח של איור ‪ 5.1‬הזכרנו קשר נוס( – הקשר ‪ .åà‬נדו כעת בשימוש בקשר זה בכתיבת אלגוריתמי‬
‫וביישומ‪.‬‬
‫בעיה ‪6‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת תנאי מורכב הכולל את הקשר ‪.åà‬‬
‫פתחו אלגורית שהקלט שלו הוא שני מספרי שלמי חיוביי דו ספרתיי‪ ,‬והפלט שלו הוא הודעה‬
‫הא שני המספרי מורכבי מאות ספרות‪.‬‬
‫למשל‪ ,‬עבור הקלטי‪ 25 25 ,91 19 :‬הפלט יהיה הודעה שהמספרי מורכבי מאות ספרות‪ ,‬ועבור‬
‫הקלטי ‪ ,57 25 ,81 19‬הפלט יהיה הודעה שהמספרי אינ מורכבי מאות ספרות‪.‬‬
‫ישמו את האלגורית בשפת התכנות ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-177-‬‬
‫מדעי המחשב‬
‫ניתוח הבעיה בעזרת דוגמאות‬
‫נבח מספר דוגמאות קלט מגוונות אשר כוללות את המספר ‪:91‬‬
‫עבור כל אחד מ הקלטי‪ 91 19 ,19 91 ,91 91 :‬תוצג כפלט הודעה שהמספרי מורכבי מאות‬
‫ספרות‪.‬‬
‫עבור כל קלט אחר הכולל את המספר ‪ ,91‬מלבד שלושת הקלטי האלה‪ ,‬תוצג כפלט הודעה‬
‫שהמספרי אינ מורכבי מאות ספרות‪.‬‬
‫מהתבוננות בשלושת הקלטי המתוארי נית לראות שתוצג כפלט הודעה שהמספרי מורכבי‬
‫מאות ספרות א ורק א המספר הנוס( ל‪ 91‬הוא ‪ 91‬עצמו או שהוא ‪ ,19‬כלומר‪ ,‬המספר המתקבל‬
‫מ‪ 91‬על ידי היפו סדר הספרות‪.‬‬
‫פירוק הבעיה לתתמשימות‬
‫נוכל לנסח רעיו ראשוני לפתרו‪ :‬ראשית‪ ,‬נפרק את המספר הראשו לספרותיו ונבנה את המספר‬
‫המתקבל ממנו על ידי היפו בסדר הספרות‪ .‬נשווה את המספר השני למספר הראשו ואת המספר‬
‫השני למספר ההפו לראשו‪ .‬א המספר השני שווה לאחד משניה אז תוצג כפלט הודעה‬
‫שהמספרי מורכבי מאות ספרות‪.‬‬
‫נפרק לתתמשימות על פי הרעיו שהצענו‪:‬‬
‫‪ .1‬קליטת שני מספרים שלמים חיוביים דו‪-‬ספרתיים‬
‫‪ .2‬פירוק המספר הראשון לספרותיו‬
‫‪ .3‬הרכבת המספר שמתקבל מהמספר הראשון על ידי היפוך סדר הספרות‬
‫‪ .4‬השוואת המספר השני למספר הראשון ולמספר החדש‬
‫‪ .5‬הצגת הודעת פלט מתאימה‬
‫בחירת משתני‬
‫נבחר משתני מטיפוס של על פי התתמשימות המתוארות‪:‬‬
‫‪ – num1‬לשמירת המספר הראשו‬
‫‪ – num2‬לשמירת המספר השני‬
‫‪ – tens‬לשמירת ספרת העשרות של ‪num1‬‬
‫‪ – units‬לשמירת ספרת האחדות של ‪num1‬‬
‫‪ – invNum1‬לשמירת המספר ההפו )בסדר ספרותיו( ל‪num1‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-178-‬‬
‫מדעי המחשב‬
‫האלגורית‬
‫?‬
‫כיצד נבנה את המספר ההפו בסדר ספרותיו למספר הראשו?‬
‫זוהי תבנית בניית מספר דוספרתי‪ ,‬המוכרת לנו מפרק ‪ :4‬ספרת העשרות של המספר החדש היא‬
‫ספרת האחדות של המספר הראשו‪ .‬ספרת האחדות של המספר החדש היא ספרת העשרות של‬
‫המספר הראשו‪ .‬לכ יש להכפיל את ערכו של ‪ units‬ב‪ 10‬ולחבר למכפלה את ערכו של ‪.tens‬‬
‫?‬
‫בכתיבת האלגורית עלינו לנסח תנאי אשר יתקיי כאשר ‪ num2‬יהיה שווה לאחד מהמספרי‬
‫הנתוני ב‪ num1‬ו‪ .invNum1‬מהו התנאי המתאי?‬
‫התנאי הוא‪åà num2 ìù åëøòì äååù num1 ìù åëøò :‬‬
‫‪num2 ìù åëøòì äååù invNum1 ìù åëøò‬‬
‫תנאי זה הוא תנאי מורכב הכולל קישור בי שני תנאי באמצעות המילה ‪.åà‬‬
‫?‬
‫הא ייתכ שיתקיימו שני התנאי הפשוטי הכלולי בתנאי המורכב שניסחנו?‬
‫כ‪ ,‬זה ייתכ‪ .‬למשל א הקלט הוא ‪ .11 11‬במקרה כזה המספר השני שווה ג למספר הראשו‪ ,‬וג‬
‫למספר שמתקבל מהמספר הראשו על ידי היפו סדר הספרות‪ .‬ג במקרה כזה‪ ,‬אנחנו מעונייני‬
‫כמוב שהתנאי המורכב יתקיי‪ .‬כלומר‪ ,‬התנאי המורכב מתקיי כאשר ‪ num2‬שווה לאחד‬
‫מהמספרי הנתוני ב‪ num1‬ו‪ ,invNum1‬או לשניה‪.‬‬
‫נציג אלגורית לפתרו הבעיה‪ ,‬תו שימוש בתנאי שניסחנו‪:‬‬
‫‪num2-áå num1-á íééúøôñ åã íéøôñî éðù èåì÷ .1‬‬
‫‪-á íùäå 10-á num1 ìù ä÷åìçä úðî éãé ìò num1 ìù úåøùòä úøôñ úà áùç .2‬‬
‫‪tens‬‬
‫‪-á íùäå 10-á num1 ìù ä÷åìçä úéøàù éãé ìò num1 ìù úåãéçéä úøôñ úà áùç .3‬‬
‫‪units‬‬
‫‪-á íùäå units*10+tens éãé ìò num1-ì åéúåøôñ øãñá êåôää øôñîä úà áùç .4‬‬
‫‪invNum1‬‬
‫‪.5‬‬
‫‪íà‬‬
‫‪ìù åëøòì äååù invNum1 ìù åëøò åà num2 ìù åëøòì äååù num1 ìù åëøò‬‬
‫‪num2‬‬
‫‪úåøôñ ïúåàî íéáëøåî íéøôñîä éë äòãåä èìôë âöä .5.1‬‬
‫‪.6‬‬
‫‪úøçà‬‬
‫‪úåøôñ ïúåàî íéáëøåî íðéà íéøôñîä éë äòãåä èìôë âöä .6.1‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-179-‬‬
‫מדעי המחשב‬
‫יישו האלגורית‬
.(‫ נכתב באמצעות הסימ || )שני קווי אנכיי רצופי‬åà ‫ הקשר‬,Java‫ב‬
/*
‫ מספרים חיוביים שלמים‬2 :‫קלט‬
‫ הודעה האם המספרים מורכבים מאותן ספרות‬:‫פלט‬
*/
public class DigitEquality {
public static void main(String[] args)
{
// ‫הצהרה על משתנים בתוכנית‬
int num1;
// first number
int num2;
// second number
int tens; // tens digit of first number
int units; // unit digit of first number
int invNum1; // inversed second number
// ‫קליטת המשתנים‬
1. num1 = In.readInt("Insert the first number");
2. num2 = In.readInt("Insert the second number");
//‫חישוב ספרת היחידות העשרות והמספר ההפוך‬
3. tens = num1 / 10;
4. units = num1 % 10;
5. invNum1 = units * 10 + tens;
//‫בדיקה האם המספר השני שווה למספר הראשון או למספר ההפוך לו‬
6. if ((num2 == num1) || (num2 == invNum1))
{
6.1. System.out.println("The numbers have the same digits");
}
7. else
{
7.1. System.out.println("The
digits");
}
}// main
numbers
don't
have
the
same
}// class DigitEquality
‫מדעי המחשב‬
-180-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫מעקב‬
‫נעקוב אחר מהל ביצוע התוכנית עבור הקלט ‪:25 52‬‬
‫פלט‬
‫‪invNum1‬‬
‫‪== num2‬‬
‫==‪num1‬‬
‫‪num2‬‬
‫‪invNum1‬‬
‫‪Insert‬‬
‫‪the‬‬
‫‪first‬‬
‫‪number‬‬
‫‪Insert‬‬
‫‪the‬‬
‫‪second‬‬
‫‪number‬‬
‫‪units‬‬
‫‪num1‬‬
‫המשפט לביצוע‬
‫‪tens‬‬
‫‪num2‬‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫‪52‬‬
‫‪25‬‬
‫?‬
‫?‬
‫‪52‬‬
‫?‬
‫‪5‬‬
‫‪5‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪52‬‬
‫‪52‬‬
‫‪52‬‬
‫‪25‬‬
‫‪25‬‬
‫‪invNum1 = units * 25‬‬
‫‪52‬‬
‫‪5‬‬
‫‪2‬‬
‫‪52‬‬
‫‪25‬‬
‫‪52‬‬
‫‪5‬‬
‫‪2‬‬
‫‪52‬‬
‫‪25‬‬
‫?‬
‫‪num1 = In.readInt 25‬‬
‫מספר‬
‫שורה‬
‫‪1‬‬
‫‪("Insert the first‬‬
‫)"‪number‬‬
‫‪true‬‬
‫‪false‬‬
‫‪The‬‬
‫‪numbers‬‬
‫‪have‬‬
‫‪the‬‬
‫‪same‬‬
‫‪digits‬‬
‫‪num2 = In.readInt‬‬
‫‪("Insert‬‬
‫‪the‬‬
‫)"‪second number‬‬
‫‪2‬‬
‫‪tens = num1 / 10‬‬
‫‪units = num1 % 10‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪10 + tens‬‬
‫||)‪if ((num1==num2‬‬
‫))‪(num2==invNum1‬‬
‫‪System.out.println‬‬
‫‪("The numbers have‬‬
‫)"‪the same digits‬‬
‫סוף פתרון בעיה‬
‫דר נוספת ליצור תנאי מורכב על ידי קישור תנאי פשוטי היא באמצעות הקשר ‪åà‬‬
‫‪6‬‬
‫)‪ ,(or‬אשר‬
‫משמעותו היא שהתנאי המורכב מתקיי כאשר לפחות אחד משני התנאי הפשוטי מתקיי‪.‬‬
‫הטבלה הבאה מתארת את ערכיו של ביטוי בוליאני המורכב מקשר ‪åà‬‬
‫הטבלה נקראת טבלת אמת של קשר ‪åà‬‬
‫‪true‬‬
‫של שני ביטויי בוליאניי‪.‬‬
‫‪:‬‬
‫‪ false‬ביטוי ‪1‬‬
‫ביטוי ‪2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪true‬‬
‫‪false‬‬
‫‪false‬‬
‫‪true‬‬
‫‪true‬‬
‫‪true‬‬
‫‪-181-‬‬
‫מדעי המחשב‬
‫‪6‬‬
‫‪6.1‬‬
‫כפי שנית לראות בטבלה‪ ,‬ערכו של הביטוי הבוליאני המורכב הוא ‪ true‬כאשר לפחות ער אחד משני‬
‫הביטויי ‪ 1‬ו‪ ,2‬הוא ‪ .true‬רק א ערכי שני הביטויי ה ‪ false‬אז ערכו של הביטוי הבוליאני‬
‫המורכב הוא ‪.false‬‬
‫הקשר ‪åà‬‬
‫מיוש ב‪ Java‬על ידי סימ הפעולה ||‪ .‬יש להקי( בסוגריי את הביטויי הבוליאניי‬
‫המקושרי על ידי ||‪.‬‬
‫שאלה ‪5.27‬‬
‫בתוכנית ‪ DigitEquality‬לפתרו בעיה ‪ 5‬מופיע הביטוי הבוליאני המורכב הבא‪:‬‬
‫)‪(num1 == num2) || (invNum1 == num2‬‬
‫ציינו עבור כל אחד מ הקלטי הבאי‪ :‬מהו ערכו של הביטוי הפשוט השמאלי‪ ,‬מהו ערכו של הביטוי‬
‫הפשוט הימני‪ ,‬מהו ערכו של הביטוי המורכב‪ ,‬ומהו הפלט במהל ביצוע התוכנית‪.‬‬
‫קלט‬
‫‪invNum1 == num2‬‬
‫‪num1 == num2‬‬
‫|| )‪(num1 == num2‬‬
‫פלט‬
‫)‪(invNum1 == num2‬‬
‫‪25 56‬‬
‫‪25 25‬‬
‫‪25 52‬‬
‫‪55 55‬‬
‫שאלה ‪5.28‬‬
‫השלימו תנאי מורכב מתאי בכל אחת מ ההוראות הבאות‪:‬‬
‫א‪åà A àéä äðåùàøä úåàä íà .‬‬
‫‪...‬‬
‫‪A àéä úåéúåàä úçà úåçôì úåéúåà éúù úá äìéîá‬‬
‫ב‪.‬‬
‫‪åà 18-î êåîð êìéâ íà‬‬
‫‪...‬‬
‫‪øéãñ úåøéùá ìééç ìù ìáå÷îä ìéâä åððéà êìéâ‬‬
‫ג‪.‬‬
‫‪åà num > 10 íà‬‬
‫‪...‬‬
‫‪5-î ïè÷ åà 10-î ìåãâ àåäù êøò øîåù num‬‬
‫שאלה ‪5.29‬‬
‫כתבו את התנאי הבאי‪ ,‬המנוסחי במילי‪ ,‬כביטויי בוליאניי‪.‬‬
‫א‪ .‬ערכו של המשתנה ‪ x‬חיובי או ערכו של המשתנה ‪ y‬הוא התו '‪.'A‬‬
‫ב‪ .‬ערכו של המשתנה ‪ x‬קט מ‪ 1‬או גדול מ‪.7‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-182-‬‬
‫מדעי המחשב‬
‫ג‪ .‬ערכו של המשתנה ‪ x‬זוגי או מתחלק ב‪ 3‬ללא שארית‪.‬‬
‫להעמקה בתבנית זוגיות מספר פנו לעמוד ‪.230‬‬
‫להעמקה בתבנית מחלק של? פנו לעמוד ‪.232‬‬
‫שאלה ‪5.30‬‬
‫במשתני ‪ side2 ,side1‬ו‪ side3‬שמורי אורכי שלוש צלעות של משולש‪.‬‬
‫א‪ .‬כתבו ביטוי בוליאני המבטא שהמשולש שווה שוקיי )במשולש שווה שוקיי לפחות שתי צלעות‬
‫שוות(‪.‬‬
‫ב‪ .‬כתבו ביטוי בוליאני המבטא שהמשולש ישר זוית )במשולש ישר זוית סכו ריבועי שני הניצבי‬
‫שווה לריבוע היתר – משפט פיתגורס(‪.‬‬
‫שאלה ‪5.31‬‬
‫עבור כל אחד מ הביטויי הבוליאניי המורכבי הבאי‪ ,‬תנו דוגמא לער של המשתנה ‪ num‬אשר‬
‫עבורו יהיה ערכו של הביטוי הבוליאני ‪ ,true‬ותנו דוגמא לער אשר עבורו יהיה ערכו של הביטוי‬
‫הבוליאני ‪.false‬‬
‫ביטוי‬
‫ערכו של הביטוי ‪false‬‬
‫ערכו של הביטוי ‪true‬‬
‫‪num != 0‬‬
‫)‪(num < 2)||(num > 2‬‬
‫)‪(num > 0 )||(num == -5‬‬
‫)‪((num%2) == 0)||(num < 0‬‬
‫שאלה ‪5.32‬‬
‫לפעמי נית לצמצ ביטוי בוליאני מורכב לביטוי פשוט‪ .‬צמצמו כל אחד מ הביטויי המורכבי‬
‫לביטוי פשוט‪:‬‬
‫א‪.‬‬
‫)‪(num < -1) || (num > 1‬‬
‫ב‪.‬‬
‫)‪(num > -1) && (num < 1‬‬
‫שאלה ‪) 5.33‬מבגרות ‪(2003‬‬
‫לפניכ קטע תוכנית‪:‬‬
‫;)(‪a = In.readInt‬‬
‫;)(‪b = In.readInt‬‬
‫) ‪if ( a < b || a < 100‬‬
‫{‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-183-‬‬
‫מדעי המחשב‬
‫;)"‪System.out.println("The expression value: true‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("The expression value: false‬‬
‫}‬
‫בחרו במספר שייקלט ל‪ a‬ובמספר שייקלט ל‪ ,b‬כ שיתקבל הפלט‬
‫‪The expression value: false‬‬
‫נמקו את בחירתכ‪.‬‬
‫שאלה ‪5.34‬‬
‫פתחו ויישמו אלגורית אשר הקלט שלו הוא תו והוא בודק א התו הוא תו חוקי לניחוש בטופס‬
‫ספורטוטו )כלומר‪ 2 ,1 ,‬או ‪ .(x‬האלגורית מציג כפלט הודעה מתאימה‪.‬‬
‫שאלה ‪5.35‬‬
‫בתחרות קליעת כדור לארגז‪ ,‬נזרק כדור לארגז שאורכו מטר אחד‪ .‬תחילתו של הארגז היא במרחק ‪10‬‬
‫מטרי מ הזורק‪.‬‬
‫יש לפתח אלגורית אשר הקלט שלו הוא מרחק נפילת הכדור הנזרק )מ הזורק( והפלט שלו הוא‬
‫הודעה הא הכדור נכנס לארגז‪ .‬א הכדור לא נכנס לארגז‪ ,‬יש לצר( לפלט ג את המרחק בי מקו‬
‫נפילת הכדור לבי מרכז הארגז‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ 10.3‬הפלט הוא‪ :‬נכנס‪.‬‬
‫ועבור הקלט ‪ 12‬הפלט הוא‪ :‬לא נכנס‪ ,‬החטאת מרכז הארגז ב‪ 1.5-‬מ'‪.‬‬
‫נתחו תחילה את הבעיה )בעזרת דוגמאות קלט מייצגות( ובחרו משתני‪ .‬אחר כ‪:‬‬
‫א‪ .‬נסחו תנאי מורכב‪ ,‬באמצעות קשר ‪ ,íâå‬שיתקיי כאשר הכדור נכנס לארגז‪.‬‬
‫ב‪ .‬נסחו תנאי מורכב‪ ,‬באמצעות קשר ‪ ,åà‬שיתקיי כאשר הכדור לא נכנס לארגז‪.‬‬
‫ג‪ .‬נסחו את התנאי שבסעי( ב כתנאי לא מורכב‪.‬‬
‫ד‪ .‬כתבו את האלגורית לפתרו הבעיה )בחרו את אחד מ התנאי שבסעיפי אג(‪ ,‬ויישמו את‬
‫האלגורית על ידי תוכנית בשפת ‪.Java‬‬
‫שאלה ‪5.36‬‬
‫נתו הלוח הבא‪ ,‬שבו עשר משבצות הממוספרות מ‪ 1‬עד ‪:10‬‬
‫‪1‬‬
‫‪2‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪3‬‬
‫‪4‬‬
‫‪6‬‬
‫‪5‬‬
‫‪-184-‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬
‫‪10‬‬
‫מדעי המחשב‬
‫במשתנה ‪ x‬שמור מספר של בי ‪ 1‬ל‪ 10‬המבטא את מקו הכלי ‪ X‬על הלוח‪ .‬במשתנה ‪ y‬שמור מספר‬
‫בי ‪ 1‬ל‪ 10‬המבטא את מקו הכלי ‪ Y‬על הלוח‪.‬‬
‫א‪ .‬כתבו ביטוי בוליאני שערכו ‪ true‬א ורק א הכלי ‪ X‬נמצא בחצי השמאלי של הלוח )כלומר‪ ,‬על‬
‫אחת מחמש המשבצות השמאליות(‪.‬‬
‫ב‪ .‬השלימו את תיאור משמעות קיו התנאי במשפט ‪ if‬הבא‪:‬‬
‫___________________________ ‪if (Math.abs(x - y) == 1)//‬‬
‫{‬
‫;)"‪System.out.println("neighbours‬‬
‫}‬
‫ג‪ .‬הביטוי הבוליאני הבא אמור לבטא מצבי בה הכלי ‪ X‬נמצא מימי לכלי ‪ Y‬על הלוח‪:‬‬
‫‪x != y‬‬
‫הביטוי שגוי‪ .‬תקנו אותו‪.‬‬
‫ד‪ .‬כתבו ביטוי בוליאני פשוט )לא מורכב( שערכו ‪ true‬א ורק א הכלי ‪ Y‬נמצא על משבצת שחורה‪.‬‬
‫שימו לב שבביטוי עליכ לבטא את המשות( לחמש המשבצות השחורות‪.‬‬
‫ה‪ .‬השלימו את תיאורי משמעות קיו ואיקיו התנאי במשפט ‪ if‬הבא‪:‬‬
‫____________________________ ‪== 0) //‬‬
‫)‪if (((x - y) % 2‬‬
‫{‬
‫;)"="(‪System.out.println‬‬
‫}‬
‫_____________________________ ‪else //‬‬
‫{‬
‫;)"=!"(‪System.out.println‬‬
‫}‬
‫ו‪ .‬הביטוי הבוליאני הבא אמור לבטא מצבי בה שני הכלי נמצאי על משבצות בצבעי שוני‪:‬‬
‫)‪((x * y) % 2 == 0‬‬
‫הביטוי נכו רק עבור חלק מ המקרי האפשריי‪ .‬עבור אילו מקרי הביטוי נכו‪ ,‬ועבור אילו‬
‫מקרי איננו נכו? כתבו ביטוי שיהיה נכו עבור כל המקרי האפשריי‪.‬‬
‫תנאים מורכבים מעורבים‬
‫בעזרת הקשרי ‪ íâå‬ו‪åà‬‬
‫נית ליצור ביטויי מורכבי א( יותר מאלו שראינו עד כה‪ ,‬אשר‬
‫מערבי את שני הקשרי‪.‬‬
‫שאלה ‪5.37‬‬
‫עבור כל אחד מ הביטויי הבוליאניי המורכבי הבאי‪ ,‬תנו דוגמא לער של המשתנה ‪ num‬אשר‬
‫עבורו יהיה ערכו של הביטוי הבוליאני ‪ ,true‬ותנו דוגמא לער אשר עבורו יהיה ערכו של הביטוי‬
‫הבוליאני ‪.false‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-185-‬‬
‫מדעי המחשב‬
‫ערכו של הביטוי‬
‫‪false‬‬
‫ביטוי‬
‫ערכו של הביטוי‬
‫‪true‬‬
‫)‪((num != 0)&&(num >= 8))|| (num == 3‬‬
‫))‪((num<2)||(num>2))&&((num<7)||(num !=1‬‬
‫))‪(num == 0)&&((num > 0 )||(num == -5‬‬
‫בדומה לעדיפות המוגדרת ביחס לפעולות חשבוניות‪ ,‬מוגדרת ג עדיפות ביחס לקשרי בוליאניי‪:‬‬
‫עדיפות הקשר && גבוהה מעדיפות הקשר ||‪.‬‬
‫בכל זאת‪ ,‬לטובת בהירות וקריאות התוכנית עדי( להשתמש בסוגריי כדי להבהיר את טווח הפעולה‬
‫של כל קשר‪.‬‬
‫שאלה ‪) 5.38‬מבגרות ‪(2003‬‬
‫נתו הביטוי הבוליאני‪(z > x) || (x < 0) && (z - y > 9) :‬‬
‫מהו הער של הביטוי עבור הנתוני‪?z = 13 ,y = 5 ,x = -2 :‬‬
‫פרטו את כל שלבי החישוב‪.‬‬
‫‪ 5.3‬קינון של הוראה לביצוע בתנאי‬
‫בסעי( זה נראה כי לעיתי נוח ליצור הוראה מורכבת של ביצוע בתנאי‪ .‬זוהי הוראה לביצוע בתנאי‬
‫שאחת )או יותר( מהוראותיה א( היא הוראה לביצוע בתנאי‪.‬‬
‫בעיה ‪7‬‬
‫מטרת הבעיה ופתרונה‪:‬הצגת הוראה מקוננת לביצוע בתנאי‪.‬‬
‫באולימיפיאדת החיות מתקיימת תחרות ריצה למרחק ‪100‬מטר‪ .‬צבי אשר ר‪ 100 0‬מטר בזמ של ‪10‬‬
‫שניות או פחות נחשב לצבי מהיר‪ .‬צב שר‪ 100 0‬מטר בזמ של ‪ 10‬דקות או פחות נחשב לצב מהיר‪.‬‬
‫פתחו אלגורית אשר הקלט שלו הוא סוג החיה‪ (Turtle) T ,‬עבור צב ו‪ (Deer) D‬עבור צבי‪ ,‬ומספר‬
‫המציי זמ ריצה בשניות‪ .‬האלגורית יציג כפלט הודעה הא החיה הנתונה מהירה‪ .‬ישמו את‬
‫האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-186-‬‬
‫מדעי המחשב‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטת שם החיה‬
‫‪ .2‬קליטת תוצאת הריצה בשניות‬
‫‪ .3‬הצגה כפלט של הודעה האם החיה מהירה או לא‬
‫בחירת משתני‬
‫‪ – animalType‬משתנה מטיפוס תווי שישמור את ש החיה‬
‫‪ – scoreInSeconds‬משתנה מטיפוס של שישמור את תוצאת הריצה בשניות‬
‫האלגורית‬
‫?‬
‫כיצד נחליט הא החיה מהירה?‬
‫יש לבדוק תחילה הא החיה היא צבי או צב ואז להשוות את תוצאת הריצה שלה לזמ המגדיר צבי‬
‫מהיר או צב מהיר‪ ,‬בהתאמה‪.‬‬
‫נכתוב זאת בצורה הבאה‪:‬‬
‫‪íà‬‬
‫‪éáö \\ 'D' àåä äéçä âåñ‬‬
‫‪úåéðù 10-ì äöéøä úàöåú úà äååùä‬‬
‫‪úøçà‬‬
‫\\ ‪áö‬‬
‫‪úåéðù 600-ì äöéøä úàöåú úà äååùä‬‬
‫תיארנו כא מבנה של ‪ ...úøçà...íà‬שהוא מבנה של ביצוע בתנאי‪ .‬אבל‪ ,‬כדי לדעת הא הצבי מהיר‬
‫והא הצב מהיר יש לכלול בכל אחד מחלקי ההוראה לביצוע בתנאי הוראה נוספת לביצוע בתנאי‪.‬‬
‫המבנה המתקבל הוא של ‪...úøçà...íà‬‬
‫בתו ‪ ,...úøçà...íà‬כלומר‪ ,‬קינו של הוראות לביצוע‬
‫בתנאי‪.‬‬
‫נציג אלגורית לפתרו הבעיה‪ ,‬תו שימוש בתנאי שניסחנו‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-187-‬‬
‫מדעי המחשב‬
animalType-á äéçä íù úà èåì÷
scoreInSeconds-á äéçä ìù äöéøä úàöåú úà èåì÷ .1
éáö \\ 'D' àåä äéçä âåñ
úåéðù 10-ì äååù åà äðè÷ äöéøä úàöåú
íà
.2
íà .2.1
øéäî éáöä éë äòãåä èìôë âöä .2.1.1
úøçà .2.2
øéäî åðéà éáöä éë äòãåä èìôë âöä .2.2.1
áö \\
úåéðù 600-ì äååù åà äðè÷ äöéøä úàöåú
úøçà
íà
.3
.3.1
øéäî áöä éë äòãåä èìôë âöä .3.1.1
úøçà .3.2
øéäî åðéà áöä éë äòãåä èìôë âöä .3.2.1
.‫ אינדנטציה( בכתיבה המקוננת של ההוראות לביצוע בתנאי‬,‫שימו לב לאופ הכנסת השורות )הזחה‬
‫ ל‬úøçà ‫ משו שכ נוח לשיי כל‬,‫ מאוד להקפיד על כ‬0‫ א מומל‬,‫ השפה אינה מחייבת זאת‬,‫אמנ‬
.‫ בכ אנו הופכי את התוכנית לקריאה וברורה יותר‬.‫ המתאי‬íà
‫יישו האלגורית‬
/*
‫ תו המזהה חיה ותוצאת ריצתה למאה מטרים‬:‫קלט‬
‫ הודעה המציינת אם החיה מהירה או לא‬:‫פלט‬
*/
public class AnimalOlympics
{
public static void main(String[] args)
{
// ‫הצהרה על משתנים בתוכנית‬
char animalType;
int scoreInSeconds;
final int DEER_LIMIT = 10;
final int TURTLE_LIMIT = 600;
‫מדעי המחשב‬
-188-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
// ‫קליטת המשתנים‬
1. animalType = In.readChar("Insert the animal type – D for a deer
and T for a turtle");
2. scoreInSeconds= In.readInt("Insert the animal score in
seconds");
3. if (animalType == 'D')
// ‫אם צבי‬
{
3.1. if (scoreInSeconds <= DEER_LIMIT)//
‫האם מהיר לפי ההגדרה‬
‫המתאימה לצבי‬
{
3.1.1. System.out.println("The deer is fast");
}
3.2. else
{
3.2.1. System.out.println("The deer is not fast");
}
} // if animalType
4. else // ‫צב‬
{
4.1. if (scoreInSeconds <= TURTLE_LIMIT) // ‫האם מהיר לפי ההגדרה‬
‫המתאימה לצב‬
{
4.1.1. System.out.println("The turtle is fast");
}
4.2. else
{
4.2.1. System.out.println("The turtle is not fast");
}
} // else animalType
}//main
}// class AnimalOlympics
‫מדעי המחשב‬
-189-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫מעקב‬
‫נעקוב אחר מהל ביצוע התוכנית ‪ AnimalOlympics‬עבור הקלט ‪:T 700‬‬
‫פלט‬
‫‪scoreInSeconds‬‬
‫‪animalType‬‬
‫?‬
‫?‬
‫?‬
‫‪T‬‬
‫‪700‬‬
‫‪T‬‬
‫‪Insert the‬‬
‫‪animal type‬‬
‫‪– D for a‬‬
‫‪deer and T‬‬
‫‪for a turtle‬‬
‫‪Insert‬‬
‫‪the‬‬
‫‪animal score‬‬
‫‪in seconds‬‬
‫מספר‬
‫שורה‬
‫המשפט לביצוע‬
‫‪1‬‬
‫‪animalType =In.readChar‬‬
‫‪the‬‬
‫‪animal‬‬
‫‪("Insert‬‬
‫‪type – D for a deer and‬‬
‫)"‪T for a turtle‬‬
‫‪2‬‬
‫= ‪scoreInSeconds‬‬
‫‪In.readInt("Insert the‬‬
‫‪animal score in‬‬
‫;)"‪seconds‬‬
‫‪700‬‬
‫‪T‬‬
‫)'‪if (animalType == 'D‬‬
‫‪3‬‬
‫‪700‬‬
‫‪T‬‬
‫=< ‪if (scoreInSeconds‬‬
‫‪4.1‬‬
‫‪700‬‬
‫‪T‬‬
‫)‪TURTLE_LIMIT‬‬
‫‪The turtle‬‬
‫‪is not fast‬‬
‫‪System.out.println("The‬‬
‫‪4.2.1‬‬
‫;)"‪turtle is not fast‬‬
‫סוף פתרון בעיה‬
‫‪7‬‬
‫לפתרו בעיה ‪ 7‬היה מתאי להשתמש במבנה מקונ של הוראות לביצוע בתנאי‪.‬‬
‫ההוראה לביצוע בתנאי שתלויה בסוג החיה )ובתוכנית – במשתנה ‪ (animalType‬היא הוראה לביצוע‬
‫בתנאי חיצונית )בתוכנית היא יושמה על ידי משפט ‪ if‬חיצוני(‪ .‬הוראה זו מכילה שתי הוראות לביצוע‬
‫בתנאי פנימיות )בתוכנית – שני משפטי ‪ if‬פנימיי(‪ :‬האחת מוכלת בחלק ה‪íà‬‬
‫של ההוראה‬
‫החיצונית והשנייה מוכל בחלק ה‪ úøçà‬של ההוראה החיצונית‪ .‬ההוראות הפנימיות ה אלו שביצוע‬
‫תלוי בתוצאת הריצה )ובתוכנית – בער המשתנה ‪.(scoreInSeconds‬‬
‫שאלה ‪5.39‬‬
‫בנו טבלת מעקב אחר ביצוע התוכנית ‪ AnimalOlympics‬עבור הקלט ‪.D 5‬‬
‫לאילו חלקי במבנה המקונ של משפטי ה‪ if‬בתוכנית מנותב מהל הביצוע עבור הקלט הנתו?‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-190-‬‬
‫מדעי המחשב‬
‫לעיתי‪ ,‬כאשר יש לנתב את מהל הביצוע של אלגורית לאחת מבי שלוש או יותר אפשרויות‪,‬‬
‫התלויות ביותר מתנאי אחד‪ ,‬מתאי להשתמש במבנה מקונ של הוראות לביצוע בתנאי‪.‬‬
‫מבנה מקונ )‪ (nesting‬של ביצוע בתנאי‬
‫)משפטי ‪ (if‬כולל הוראה לביצוע בתנאי‪ ,‬אשר‬
‫אחת או יותר מבי הוראותיה הפנימיות היא בעצמה הוראה לביצוע בתנאי‪ .‬למשל‪ ,‬המבנה הבא הוא‬
‫מבנה מקונ של ביצוע בתנאי‪:‬‬
‫ב‪:Java‬‬
‫בכתיבה אלגוריתמית‪:‬‬
‫‪...íà‬‬
‫)‪if(. . .‬‬
‫{‬
‫‪...‬‬
‫‪...íà‬‬
‫‪...‬‬
‫‪úøçà‬‬
‫‪...‬‬
‫‪...‬‬
‫‪. . .‬‬
‫)‪if (. . .‬‬
‫}‪{. . .‬‬
‫‪else‬‬
‫}‪{. . .‬‬
‫‪. . .‬‬
‫}‬
‫‪úøçà‬‬
‫‪...‬‬
‫‪else‬‬
‫{‬
‫‪. . .‬‬
‫‪...íà‬‬
‫)‪if (. . .‬‬
‫‪...‬‬
‫‪úøçà‬‬
‫}‪{. . .‬‬
‫‪else‬‬
‫‪...‬‬
‫}‪{. . .‬‬
‫‪...‬‬
‫‪. . .‬‬
‫}‬
‫בכתיבת מבנה מקונ נקפיד על עימוד מתאי‪ .‬באלגורית ייכתב כל ‪ úøçà‬מתחת ל‪ íà‬המתאי‬
‫לו‪ .‬ב‪ Java‬ייכתב כל ‪ else‬מתחת ל‪ if‬המתאי לו‪.‬‬
‫ההוראה לביצוע בתנאי שכוללת את ההוראות האחרות לביצוע בתנאי נקראת הוראה לביצוע‬
‫בתנאי חיצונית‬
‫)משפט ‪ if‬חיצוני(‪ ,‬וכל אחד מההוראות לביצוע בתנאי הכלולות בהוראה‬
‫החיצונית נקראת הוראה לביצוע בתנאי‬
‫פנימית )משפט ‪ if‬פנימי(‪.‬‬
‫שימו ♥‪ :‬ההגדרה של קינו הוראות לביצוע בתנאי היא כללית למדי‪ ,‬ולכ ייתכנו מבני מקונני‬
‫בצורות שונות‪ .‬כל אחת מההוראות הפנימיות של הוראה לביצוע בתנאי יכולה להיות בעצמה הוראה‬
‫לביצוע בתנאי‪ .‬לכ ייתכ למשל‪ ,‬משפט ‪ if‬שחלק ה‪ if‬שלו מכיל שתי הוראות לביצוע בתנאי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-191-‬‬
‫מדעי המחשב‬
‫בנוס(‪ ,‬הוראה פנימית לביצוע בתנאי יכולה להיות הוראה לביצוע בתנאי מכל סוג שהוא – במבנה‬
‫‪ ,...úøçà ...íà‬במבנה ‪...íà‬‬
‫או אפילו הוראה מקוננת לביצוע בתנאי‪.‬‬
‫לכ‪ ,‬מהרגע שקינו נכנס לתמונה‪ ,‬המבני המתקבלי יכולי להיות מורכבי מאוד‪ .‬משו כ‪,‬‬
‫חשוב לזכור ולהקפיד על הערות המתארות משמעות קיו ואיקיו של תנאי‪ .‬הערות אלו מסייעות‬
‫לנו להבי מבנה מקונ של הוראות לביצוע בתנאי‪ .‬הערה המתארת משמעות קיו של תנאי במשפט ‪if‬‬
‫מבהירה בשפה ברורה וקריאה את הסיבה לניתוב מהל הביצוע של המשפט ‪ if‬אל חלק ה‪ if‬שלו‪.‬‬
‫בדומה‪ ,‬הערה המתארת משמעות איקיו של תנאי מבהירה בשפה ברורה וקריאה את הסיבה לניתוב‬
‫מהל הביצוע של המשפט ‪ if‬אל חלק ה‪ else‬שלו‪.‬‬
‫חשוב לצר( תיאורי כאלה למשפטי ‪ if‬לא מקונני‪ ,‬כפי שעשינו בתוכניות שהוצגו בפרק עד כה‪.‬‬
‫חשוב עוד יותר לצר( תיאורי כאלה לתיעוד מבני מקונני כדי להבהיר את קריאות‪.‬‬
‫הנה שתי דוגמאות למבני מקונני שוני‪ :‬בכל אחד משני המבני הבאי מחושב היחס )קט מ‪,‬‬
‫גדול מ‪ ,‬שווה( בי ערכי שני משתני )‪ var1‬ו‪.(var2‬‬
‫מבנה ‪:I‬‬
‫)‪if (var1 > var2‬‬
‫{‬
‫;)"‪System.out.println("var1 > var2‬‬
‫}‬
‫‪else‬‬
‫{‬
‫)‪if (var1 == var2‬‬
‫{‬
‫;)"‪System.out.println("var1 = var2‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("var1 < var2‬‬
‫}‬
‫}‬
‫מבנה ‪:II‬‬
‫)‪if (var1 >= var2‬‬
‫{‬
‫)‪if (var1 == var2‬‬
‫{‬
‫;)"‪System.out.println("var1 = var2‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("var1 > var2‬‬
‫}‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("var1 < var2‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-192-‬‬
‫מדעי המחשב‬
‫שני המבני כוללי הוראה אחת‪ ,‬שהיא הוראה לביצוע בתנאי‪ .‬במבנה ‪ I‬חלק ה‪ else‬של הוראה זו‬
‫מכיל הוראה אחת‪ ,‬שג היא הוראה לביצוע בתנאי‪ ,‬במבנה ‪...íà‬‬
‫‪ . ...úøçà‬לעומת זאת‪ ,‬במבנה ‪II‬‬
‫חלק ה‪ if‬מכיל הוראה לביצוע בתנאי‪ ,‬ג במבנה ‪...úøçà ...íà‬‬
‫‪.‬‬
‫כאמור‪ ,‬הקפדה על עימוד מתאי של משפטי ‪ if‬בתוכנית בשפת ‪ Java‬מיועדת לשמירה על קריאותה‪.‬‬
‫א המהדר של שפת ‪ Java‬אינו מייחס חשיבות לעימוד‪ .‬הוא אינו משיי חלק ‪ else‬למשפט‬
‫‪if‬‬
‫המתאי לו על פי העימוד‪ .‬השיו נקבע על פי הכלל הבא‪ ,‬שיודג מייד‪:‬‬
‫כלל השיו של ‪ else‬ל‪if‬‬
‫מתאי‪:‬‬
‫‪ else‬תמיד משויי ל‪ if‬אשר נמצא בתוכנית לפניו וקרוב אליו ביותר‪ ,‬בתנאי הבאי‪:‬‬
‫‪ .1‬ל‪ if‬זה לא משויי כבר ‪ else‬אחר‪ ,‬קרוב יותר‪.‬‬
‫‪ if .2‬זה איננו כלול בתחו שמסתיי עוד לפני ה‪.else‬‬
‫כלל זה הוא מורכב למדי‪ .‬הנה כמה דוגמאות שיסייעו בהבנתו‪:‬‬
‫♦ במבנה ‪ I‬שלעיל שיי ה‪ else‬הראשו ל‪ if‬הראשו )החיצוני( וה‪ else‬השני שיי ל‪ if‬השני‬
‫)הפנימי(‪ .‬כלומר‪ ,‬כל ‪ else‬משויי ל‪ if‬שנמצא לפניו וקרוב אליו ביותר‪.‬‬
‫♦ במבנה ‪ II‬שלעיל שיי ה‪ else‬הראשו ל‪ if‬השני )הפנימי( וה‪ else‬השני ל‪ if‬הראשו‬
‫)החיצוני(‪ .‬כלומר‪ ,‬ה‪ else‬הראשו משויי ל‪ if‬שנמצא לפניו וקרוב אליו ביותר‪ .‬לעומת זאת‪ ,‬ה‬
‫‪ else‬השני אינו משויי ל‪ if‬שנמצא לפניו וקרוב אליו ביותר‪ .‬זאת בגלל שתנאי ‪ 1‬אינו מתקיי‪:‬‬
‫ל‪ if‬זה כבר שויי ‪ else‬קרוב יותר‪ .‬לכ ה‪ else‬השני משויי ל‪ if‬הבא הקרוב ביותר‪ ,‬הלא‬
‫הוא ה‪ if‬הראשו‪.‬‬
‫♦ ג במבנה המקונ הבא ה‪ else‬איננו משוי ל‪ if‬שנמצא לפניו וקרוב ביותר אליו )ה‪ if‬השני(‪.‬‬
‫‪ if‬זה כלול בתחו שמסתיי עוד לפני ה‪ .else‬לכ ה‪else‬‬
‫הפע‪ ,‬בגלל שתנאי ‪ 2‬אינו מתקיי‪:‬‬
‫משויי ל‪ if‬הראשו )החיצוני( ולא ל‪ if‬השני )הפנימי(‪.‬‬
‫)‪if (var1 >= var2‬‬
‫{‬
‫)‪if (var1 == var2‬‬
‫{‬
‫;)"‪System.out.println("var1 = var2‬‬
‫}‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("var1 < var2‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-193-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.40‬‬
‫בכל אחד מהסעיפי הבאי נתו קטע תוכנית‪ .‬כמו כ‪ ,‬בכל סעי( נתונות כמה אפשרויות לערכי‬
‫התחיליי של משתני הקטע‪ .‬תארו את הפלטי של קטע התוכנית הנתו בכל אחד מ הסעיפי‬
‫הבאי‪ ,‬עבור כל אחת מהאפשרויות לערכי התחיליי של משתני הקטע‪.‬‬
‫א‪ .‬ערכי תחיליי של ‪.-10 ,10 ,0 :num‬‬
‫)‪if (num > 0‬‬
‫{‬
‫;)"‪System.out.println("+‬‬
‫}‬
‫‪else‬‬
‫{‬
‫)‪if (num == 0‬‬
‫{‬
‫;)"‪System.out.println("0‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("-‬‬
‫}‬
‫}‬
‫ב‪ .‬ערכי התחלתיי ל‪ num1‬ול‪) num2‬משמאל לימי בכל זוג(‪.5 -1 ,5 -5 ,0 -1 :‬‬
‫)‪if (num1 > 0‬‬
‫{‬
‫)‪if (num2 > 0‬‬
‫{‬
‫;)"‪System.out.println("+‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("+-‬‬
‫}‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("-‬‬
‫}‬
‫ג‪ .‬ערכי התחלתיי ל‪ num1‬ול‪) num2‬משמאל לימי בכל זוג(‪.0 0 ,-1 -1 ,1 -1 :‬‬
‫)‪if (num1 < 0‬‬
‫{‬
‫)‪if (num2 < 0‬‬
‫{‬
‫;)‪System.out.println(num1 * num2‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-194-‬‬
‫מדעי המחשב‬
‫}‬
‫‪else‬‬
‫{‬
‫;)‪System.out.println(num1‬‬
‫)‪if (num2 < 0‬‬
‫{‬
‫;)‪System.out.println(num1 + num2‬‬
‫}‬
‫}‬
‫שאלה ‪5.41‬‬
‫הקלט לכל אחד מקטעי התוכניות הבאי הוא אות מ ה‪ .ABC‬מטרת כל אחד מקטעי התוכניות היא‬
‫להציג כפלט הודעה הא האות הנקלטת היא האות ‪ ,N‬אחת האותיות שקודמות ל‪ N‬ב‪ ABC‬או‬
‫אחת האותיות שמופיעות אחרי ‪ N‬ב‪.ABC‬‬
‫השלימו את קטעי התוכניות‪:‬‬
‫א‪ .‬קטע תוכנית א‬
‫;)"‪letter = In.readChar("Insert the animal name‬‬
‫)'‪if (letter == 'N‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫ב‪ .‬קטע תוכנית ב‬
‫;)"‪letter = In.readChar("Insert the animal name‬‬
‫)'‪if (letter != 'N‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫כפי שמראה התרגיל הבא‪ ,‬נית לעיתי להמיר הוראה מקוננת לביצוע בתנאי בהוראה לביצוע בתנאי‬
‫שאינה מקוננת‪ ,‬א כוללת תנאי מורכבי‪ .‬ע זאת‪ ,‬במקרי מסוימי‪ ,‬השימוש בקינו יוצר תוכנית‬
‫קריאה וברורה יותר‪.‬‬
‫שאלה ‪5.42‬‬
‫המירו את הפתרו לבעיה ‪ ,AnimalOlympics ,7‬לפתרו הכולל תנאי מורכבי‪ ,‬ואינו כולל קינו‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-195-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.43‬‬
‫קבוצת חייזרי ממאדי או נוגה באה לבקר בכדור האר‪ .0‬יש לכתוב אלגורית המבר אות‪ ,‬על פי‬
‫כללי הטקס המסובכי הנהוגי בחלל‪.‬‬
‫שמה של קבוצת החייזרי ממאדי הוא תו כלשהו‪ .‬לעומתה‪ ,‬שמה של קבוצת החייזרי מנוגה הוא‬
‫מספר כלשהו‪ .‬פתחו אלגורית הקולט מהיכ הגיעה הקבוצה‪ (Venus) V:‬מנוגה ו‪M‬‬
‫)‪(Mars‬‬
‫ממאדי‪ .‬א הקבוצה מנוגה‪ ,‬יש לקלוט את שמה )מספר( וא הוא גדול מ‪ 10‬להציג כפלט את‬
‫ההודעה "‪ "hello‬ואחרת‪ ,‬להציג כפלט את ההודעה "‪ ."hi‬א הקבוצה ממאדי יש להציג כפלט את‬
‫ההודעה "‪."how are you‬‬
‫ישמו את האלגורית בשפת ‪.Java‬‬
‫הא נית לכתוב אלגורית הפותר שאלה זו‪ ,‬נעזר בתנאי מורכבי ואינו משתמש בקינו של‬
‫הוראות לביצוע בתנאי‪ ,‬כפי שנעשה בתרגיל ‪ ?5.42‬א כ‪ ,‬הראו כיצד‪ .‬א לא‪ ,‬הסבירו מדוע‪.‬‬
‫שאלה ‪5.44‬‬
‫נתו קטע התוכנית הבא‪ ,‬כאשר ‪ letter2 ,letter1‬ו‪ letter3‬ה משתני מטיפוס תווי‬
‫השומרי אותיות מה‪:ABC‬‬
‫))‪if ((letter1 ==letter2) || (letter2 == letter3) || (letter1 == letter3‬‬
‫{‬
‫))‪if ((letter1 ==letter2) && (letter2 == letter3‬‬
‫{‬
‫;)"‪System.out.println("1‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("2‬‬
‫}‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("3‬‬
‫}‬
‫א‪ .‬הביאו דוגמת קלט שהפלט עבורה הוא ‪ ,1‬דוגמת קלט שהפלט עבורה הוא ‪ ,2‬ודוגמת קלט שהפלט‬
‫עבורה הוא ‪.3‬‬
‫ב‪ .‬צרפו תיאורי משמעות קיו ואיקיו תנאי לחלק ה‪ if‬ולחלק ה‪ else‬שבמבנה המקונ‪.‬‬
‫ג‪ .‬מהי מטרת קטע התוכנית?‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-196-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.45‬‬
‫נתוני שני קטעי התוכניות הבאי‪ ,‬כאשר בשניה ‪ num‬הוא מטיפוס של‪:‬‬
‫)‪if(num < 0‬‬
‫{‬
‫;)"‪System.out.println("-1‬‬
‫}‬
‫)‪if (num == 0‬‬
‫)‪if (num < 0‬‬
‫{‬
‫;)"‪System.out.println("-1‬‬
‫}‬
‫‪else‬‬
‫{‬
‫{‬
‫;)"‪System.out.println("0‬‬
‫}‬
‫__________‪else //1‬‬
‫{‬
‫;)"‪System.out.println("1‬‬
‫)‪if (num == 0‬‬
‫{‬
‫;)"‪System.out.println("0‬‬
‫}‬
‫‪else‬‬
‫_______‪//2‬‬
‫}‬
‫{‬
‫;)"‪System.out.println("1‬‬
‫}‬
‫}‬
‫א‪ .‬צרפו תיאורי משמעות איקיו תנאי במקומות המסומני‬
‫ב‪ .‬הא שני קטעי התוכניות שקולי )כלומר‪ ,‬עבור כל קלט נתו יתקבל בשניה אותו הפלט(? א כ‪,‬‬
‫הסבירו מדוע‪ .‬א לא‪ ,‬הביאו דוגמת קלט אשר עבורה יתקבלו פלטי שוני‪.‬‬
‫* ‪ 5.4‬הוראת שרשרת לביצוע בתנאי‬
‫לעיתי נוח לכתוב הוראה לביצוע בתנאי המתאימה לשרשרת של תנאי‪ ,‬שצריכי להיבדק האחד‬
‫אחרי השני‪ .‬בסעי( זה נתמקד בהוראות כאלו‪ ,‬במבנה ‪... íà úøçà ...íà‬‬
‫‪....úøçà‬‬
‫בעיה ‪8‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת הוראת שרשרת לביצוע בתנאי במבנה‬
‫‪... íà úøçà ...íà‬‬
‫‪....úøçà‬‬
‫פתחו ויישמו אלגורית שהקלט שלו הוא מספר המציי ציו במבח והפלט שלו הוא הציו המילולי‬
‫בתעודה‪ ,‬על פי המפתח הבא‪ :‬כל ציו בי ‪ 90‬ל‪ 100‬במבח זוכה לציו ‪ A‬בתעודה‪ .‬כל ציו בי ‪ 80‬ל‬
‫‪ 89‬במבח זוכה לציו ‪ B‬בתעודה‪ .‬כל ציו בי ‪ 70‬ל‪ 79‬במבח זוכה בציו ‪ C‬בתעודה‪ .‬כל ציו בי ‪60‬‬
‫ל‪ 69‬במבח זוכה בציו ‪ D‬בתעודה וכל ציו של פחות מ‪ 60‬במבח זוכה בציו ‪ F‬בתעודה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-197-‬‬
‫מדעי המחשב‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטת הציון במבחן‬
‫‪ .2‬חישוב הציון המילולי בתעודה‬
‫‪ .3‬הצגה כפלט של הודעה הכוללת את הציון המילולי בתעודה‬
‫בחירת משתני‬
‫‪ – score‬משתנה מטיפוס של לשמירת ציו המבח‬
‫‪ – grade‬משתנה מטיפוס תווי לשמירת הציו המילולי בתעודה‬
‫האלגורית‬
‫?‬
‫בכתיבת האלגורית עלינו לנסח תנאי אשר יחשב את ציו התעודה המתאי לציו המבח‪ .‬מה‬
‫יהיה התנאי הנחו‪?0‬‬
‫הציו המילולי בתעודה מוכתב על ידי כמה תנאי‪:‬‬
‫‪ .1‬ציו התעודה הוא ‪ A‬א מתקיי התנאי‪ :‬הציו במבח גדול או שווה ל‪.90‬‬
‫‪ .2‬ציו התעודה הוא ‪ B‬א מתקיי התנאי‪ :‬הציו במבח קט מ‪ 90‬אבל גדול או שווה ל‪.80‬‬
‫זהו תנאי מורכב‪ ,‬שמשמעותו‪ :‬תנאי ‪ 1‬לא מתקיי וג ציו המבח גדול או שווה ל‪.80‬‬
‫‪ .3‬ציו התעודה הוא ‪ C‬א מתקיי התנאי‪ :‬הציו במבח קט מ‪ 80‬אבל גדול או שווה ל‪.70‬‬
‫זהו תנאי מורכב‪ ,‬שמשמעותו‪ :‬תנאי ‪ 1‬ו‪ 2‬לא מתקיימי וג ציו המבח גדול או שווה‪.70‬‬
‫‪ .4‬ציו התעודה הוא ‪ D‬א מתקיי התנאי‪ :‬הציו במבח קט מ‪ 70‬אבל גדול או שווה ל‪.60‬‬
‫זהו תנאי מורכב‪ ,‬שמשמעותו‪ :‬תנאי ‪ 2 ,1‬ו‪ 3‬לא מתקיימי וג ציו המבח גדול או שווה ל‪.60‬‬
‫‪ .5‬ציו התעודה הוא ‪ D‬א מתקיי התנאי‪ :‬הציו במבח קט מ‪.60‬‬
‫נוכל לבטא את ההתניה הזאת על ידי שרשרת מורכבת של משפטי תנאי מקונני‪ ,‬או על ידי שימוש‬
‫בתנאי מורכבי )ראו תרגילי בהמש(‪ .‬אבל‪ ,‬נית להיעזר בהוראה במבנה‬
‫‪...íà úøçà ...íà‬‬
‫‪ ...úøçà‬שיוצרת מבנה ברור ופשוט למדי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-198-‬‬
‫מדעי המחשב‬
:‫ שמשתמש בהוראה לביטוי שרשרת התנאי שניסחנו‬,‫נציג אלגורית לפתרו הבעיה‬
score-á ïçáîä ïåéö úà èåì÷ .1
score ≥ 90
íà
.2
'A' åúä úà grade-á íùä .2.1
score ≥ 80
íà úøçà
.3
'B' åúä úà grade-á íùä .3.1
score ≥ 70
íà úøçà
.4
'C' åúä úà grade-á íùä .4.1
score ≥ 60
íà úøçà
.5
'D' åúä úà grade-á íùä .5.1
úøçà
.6
'F' åúä úà grade-á íùä .6.1
‫יישו האלגורית‬
/*
100-‫ ל‬0 ‫ בין‬,‫ ציון במבחן‬:‫קלט‬
‫ ציון תעודה מילולי מתאים‬:‫פלט‬
*/
public class TermGrade
{
public static void main(String[] args)
{
// ‫הצהרה על משתנים בתוכנית‬
int score;
char grade;
// ‫קליטת המשתנים‬
1. score = In.readInt("Insert test score");
2. if (score >= 90)
{
2.1. grade = 'A';
}
3. else if (score >= 80)
{
3.1. grade = 'B';
‫מדעי המחשב‬
-199-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
}
4. else if (score >= 70)
{
4.1. grade = 'C';
}
5. else if (score >= 60)
{
5.1. grade = 'D';
}
6. else
{
6.1. grade = 'F';
}
7. System.out.println("Grade = " + grade);
} // main
}// class TermGrade
‫מעקב‬
:76 ‫ עבור הקלט‬TermGrade ‫נעקוב אחר מהל ביצוע התוכנית‬
‫מספר‬
‫שורה‬
1
‫המשפט לביצוע‬
score=In.readInt
score
grade
?
?
76
?
score>=?
‫פלט‬
Insert
test
score
("Insert test score")
2
if (score >= 90)
76
?
false
3
else if (score >= 80)
76
?
false
4
else if (score >= 70)
76
?
true
4.1
grade = 'C'
76
C
7
System.out.println("Grade =
Grade
=C
" + grade);
8 ‫סוף פתרון בעיה‬
‫ השתמשנו‬,‫ לצור כ‬.‫ מהל הביצוע של האלגורית נקבע על פי שרשרת של תנאי‬8 ‫בפתרו בעיה‬
.‫ של הוראות לביצוע בתנאי‬úøçà...íà
‫מדעי המחשב‬
-200-
úøçà..íà ‫במבנה‬
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫הוראת שרשרת לביצוע בתנאי‬
‫כוללת סדרה של תנאי‪ ,‬והוראות לביצוע עבור כל תנאי‪.‬‬
‫משמעות ההוראה כי התנאי נבדקי לפי הסדר‪ ,‬עד שאחד מה מתקיי‪ .‬ברגע שתנאי מסוי‬
‫מתקיי‪ ,‬מתבצעות ההוראות שהוגדרו עבורו‪ ,‬ושאר התנאי לא נבדקי‪.‬‬
‫הוראת שרשרת לביצוע בתנאי כ )בצד ימי בכתיבה אלגוריתמית ובצד שמאל ב‪:(Java‬‬
‫‪íà‬‬
‫>‪<1 éàðú‬‬
‫>תנאי ‪if <1‬‬
‫>÷‪<1 úåàøåä úöåá‬‬
‫}‪{. . .‬‬
‫‪íà úøçà‬‬
‫>‪<2 éàðú‬‬
‫>תנאי‬
‫‪<2‬‬
‫>÷‪<2 úåàøåä úöåá‬‬
‫}‪{. . .‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪íà úøçà‬‬
‫‪if‬‬
‫‪else‬‬
‫>‪<k éàðú‬‬
‫>תנאי‬
‫‪<k‬‬
‫>÷‪<k úåàøåä úöåá‬‬
‫‪if‬‬
‫‪else‬‬
‫}‪{. . .‬‬
‫‪úøçà‬‬
‫‪else‬‬
‫>÷‪<k+1 úåàøåä úöåá‬‬
‫}‪{. . .‬‬
‫שאלה ‪5.46‬‬
‫פתחו אלגורית המחשב את דרגת החוכמה של תוכי‪ ,‬הנקבעת באופ הבא‪ :‬א התוכי יודע לומר‬
‫יותר מ‪ 10‬מילי הוא תוכי חכ מאוד‪ .‬א התוכי יודע לומר בי ‪ 5‬ל‪ 10‬מילי הוא תוכי חכ‪ .‬א‬
‫התוכי יודע לומר בי מילה אחת ל‪ 5‬מילי הוא תוכי ממוצע‪ .‬א התוכי לא יודע לומר א( מילה הוא‬
‫תוכי שתק‪.‬‬
‫האלגורית מקבל כקלט את מספר המילי השונות שתוכי יודע להגיד‪ ,‬ומציג כפלט הודעה המציינת‬
‫את דרגת החוכמה של התוכי‪.‬‬
‫ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪5.47‬‬
‫פתחו אלגורית אשר הקלט שלו הוא מקדמי של משוואה ריבועית‪ b ,a ,‬ו‪ ,c‬והפלט הוא מספר‬
‫הפתרונות הממשיי של המשוואה הריבועית )‪ 0‬פתרונות‪ ,‬פתרו אחד או ‪ 2‬פתרונות( והפתרונות‬
‫עצמ‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫‪− b ± b 2 − 4ac‬‬
‫להזכירכ‪ ,‬הנה הנוסחה לחישוב פתרונותיה של משוואה ריבועית‪:‬‬
‫‪2a‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-201-‬‬
‫= ‪X 1,2‬‬
‫מדעי המחשב‬
‫שאלה ‪5.48‬‬
‫נתוני שני קטעי התוכניות הבאי אשר בכל אחד מה ‪ num‬הוא מטיפוס של‪.‬‬
‫הא שני קטעי התוכנית שקולי )כלומר‪ ,‬עבור כל קלט נתו יתקבל בשניה אותו הפלט?( א כ‪,‬‬
‫הסבירו מדוע‪ .‬א לא‪ ,‬הביאו דוגמת קלט אשר עבורה יתקבלו פלטי שוני‪.‬‬
‫)‪if (num < 0‬‬
‫)‪if (num < 0‬‬
‫{‬
‫{‬
‫;)"‪System.out.println("-1‬‬
‫}‬
‫)‪else if (num == 0‬‬
‫}‬
‫‪else‬‬
‫{‬
‫{‬
‫;)"‪System.out.println("0‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("1‬‬
‫}‬
‫;)"‪System.out.println("-1‬‬
‫)‪if (num == 0‬‬
‫{‬
‫;)"‪System.out.println("0‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪System.out.println("1‬‬
‫}‬
‫}‬
‫במוב מסוי‪ ,‬המבנה ‪úøçà ...íà úøçà ...íà‬‬
‫אינו חיוני‪ .‬כפי שמראי התרגילי הבאי‬
‫נית להסתדר ג בלעדיו‪ .‬אבל השימוש בו מקל לעיתי על הכתיבה‪ ,‬ויכול להפו את התוכנית‬
‫לקריאה יותר‪.‬‬
‫שאלה ‪5.49‬‬
‫המירו את האלגורית שבפתרו בעיה ‪ ,7‬לאלגורית שמשתמש בהוראה של ביצוע בתנאי במבנה‬
‫מקונ במקו בהוראת שרשרת לביצוע בתנאי‪.‬‬
‫שאלה ‪5.50‬‬
‫המירו את האלגורית שבפתרו בעיה ‪ ,7‬לאלגורית שמשתמש בתנאי מורכבי במקו בהוראת‬
‫שרשרת לביצוע בתנאי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-202-‬‬
‫מדעי המחשב‬
‫* ‪ 5.5‬הוראת בחירה‬
‫במקרי רבי ביצוע של משימה נשלט על ידי ערכו של ביטוי‪ ,‬היכול לקבל אחד מבי כמה ערכי‪ ,‬ויש‬
‫לבצע תתמשימה שונה עבור כל ער אפשרי‪ .‬בכתיבת אלגורית המתאי למשימה כזאת נוח‬
‫להשתמש בהוראת בחירה‪ ,‬אותה נכיר בסעי( זה‪.‬‬
‫בעיה ‪9‬‬
‫מטרת הבעיה ופתרונה‪ :‬הצגת הוראה בחירה המיושמת ב‪ Java‬על ידי משפט ‪.switch‬‬
‫פתחו ויישמו אלגורית אשר מדמה מחשבו פשוט מאוד‪ .‬הקלט הוא מספר ממשי‪ ,‬אחריו אחד‬
‫מסימני הפעולה ‪ * ,- ,+‬או ‪ ,/‬ואחריו מספר ממשי נוס(‪ .‬הפלט הוא תוצאת החישוב של הפעולה בי‬
‫שני המספרי הנתוני‪.‬‬
‫למשל‪ ,‬עבור הקלט‪ 1.1 + -3.4 :‬יהיה הפלט ‪-2.3‬‬
‫עבור הקלט‪4.8 / 1.2 :‬‬
‫יהיה הפלט ‪4‬‬
‫פירוק הבעיה לתתמשימות‬
‫‪ .1‬קליטת נתוני הקלט‬
‫‪ .2‬ביצוע החישוב‬
‫‪ .3‬הצגה כפלט של תוצאת החישוב‪.‬‬
‫בחירת משתני‬
‫‪ – num1‬משתנה מטיפוס ממשי‪ ,‬לשמירת המספר הראשו הנית כקלט‪.‬‬
‫‪ – num2‬משתנה מטיפוס ממשי‪ ,‬לשמירת המספר השני הנית כקלט‪.‬‬
‫‪ – operator‬משתנה מטיפוס תווי‪ ,‬לשמירת סימ הפעולה הנית כקלט‪.‬‬
‫‪ – result‬משתנה מטיפוס ממשי‪ ,‬לשמירת תוצאת החישוב‪.‬‬
‫האלגורית‬
‫?‬
‫התתמשימה המשמעותית היא התתמשימה השניה‪ ,‬בה יש לבצע את החישוב‪ .‬בתתמשימה זו יש‬
‫לבצע אחד מארבעה חישובי‪ :‬חיבור‪ ,‬חיסור‪ ,‬כפל או חילוק‪ ,‬בהתא לסימ הפעולה הנקלט‪ .‬כיצד‬
‫ננסח זאת?‬
‫דר אחת לניסוח החישוב היא באמצעות המבנה המקונ הבא‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-203-‬‬
‫מדעי המחשב‬
‫‪íà‬‬
‫‪'+' àåä äìåòôä ïîéñ‬‬
‫‪íéøôñîä éðù úà øáç‬‬
‫‪úøçà‬‬
‫‪íà‬‬
‫‪'-' àåä äìåòôä ïîéñ‬‬
‫‪ïåùàøä ïî éðùä øôñîä úà øñç‬‬
‫‪úøçà‬‬
‫‪'*' àåä äìåòôä ïîéñ íà‬‬
‫‪íéøôñîä éðù úà ìôëä‬‬
‫‪úøçà‬‬
‫‪éðùá ïåùàøä øôñîä úà ÷ìç‬‬
‫דר אחרת לניסוח החישוב היא באמצעות הוראת שרשרת‪:‬‬
‫‪íà‬‬
‫‪'+' àåä äìåòôä ïîéñ‬‬
‫‪íéøôñîä éðù úà øáç‬‬
‫‪íà úøçà‬‬
‫‪'-' àåä äìåòôä ïîéñ‬‬
‫‪ïåùàøä ïî éðùä øôñîä úà øñç‬‬
‫‪íà úøçà‬‬
‫‪'*' àåä äìåòôä ïîéñ‬‬
‫‪íéøôñîä éðù úà ìôëä‬‬
‫‪úøçà‬‬
‫‪éðùá ïåùàøä øôñîä úà ÷ìç‬‬
‫במקרה זה‪ ,‬שני המבני ה מסורבלי יחסית‪ .‬נוח יותר לכתוב הוראה בה מפורטות אפשרויות‬
‫בחירה שונות בהתא לערכו של סימ הפעולה‪ ,‬ועבור כל אפשרות מנוסחת הוראת פעולה מתאימה‪.‬‬
‫ננסח את הפירוט של האפשרויות השונות באמצעות הוראת הבחירה הבאה‪:‬‬
‫‪:äìåòôä ïîéñ ìù íéàúîä êøòä øåáò òöá‬‬
‫'‪íéøôñîä éðù úà øáç :'+‬‬
‫'‪ïåùàøä ïî éðùä øôñîä úà øñç :'-‬‬
‫'*'‪íéøôñîä éðù úà ìôëä :‬‬
‫'‪éðùá ïåùàøä øôñîä úà ÷ìç :'/‬‬
‫שימו ♥‪ :‬הפעולות חיבור‪ ,‬חיסור וכפל ניתנות לביצוע עבור כל זוג מספרי ממשיי‪ ,‬א בפעולת‬
‫חילוק יש להיזהר – אי לחלק ב‪ .0‬א המחלק הוא ‪ ,0‬אי לבצע חלוקה‪ ,‬אלא רק להציג כפלט הודעת‬
‫שגיאה על ניסיו חלוקה ב‪ .0‬נכלול זאת באלגורית המלא‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-204-‬‬
‫מדעי המחשב‬
:‫ תו שימוש בתנאי שניסחנו‬,‫נציג אלגורית לפתרו הבעיה‬
äîàúäá ,num2-å operator ,num1-á øôñîå äìåòô ïîéñ ,øôñî èåì÷ .1
:operator ìù íéàúîä êøòä øåáò òöá
.2
:'+' .2.1
íéøôñîä éðù úà øáç .2.1.1
áåùéçä úàöåú úà èìôë âöä .2.1.2
:'-' .2.2
ïåùàøä ïî éðùä øôñîä úà øñç .2.2.1
áåùéçä úàöåú úà èìôë âöä .2.2.2
:'*' .2.3
íéøôñîä éðù úà ìôëä .2.3.1
áåùéçä úàöåú úà èìôë âöä .2.3.2
:'/' .2.4
num2 != 0
íà
.2.4.1
éðùá ïåùàøä øôñîä úà ÷ìç .2.4.1.1
áåùéçä úàöåú úà èìôë âöä .2.4.1.2
úøçà
.2.4.2
0-á ä÷åìç èìôë âöä .2.4.2.1
‫יישו האלגורית‬
‫ כפי שנית לראות בתוכנית המלאה ליישו‬,switch ‫ על ידי משפט‬Java‫הוראת בחירה מיושמת ב‬
:‫האלגורית שכתבנו‬
public class Calculator
{
public static void main(String[] args)
{
// ‫הצהרה על משתנים בתוכנית‬
double num1; // first operand
double num2; // second operand
char operator;
double result;
// ‫קליטת המשתנים‬
1. num1 = In.readDouble("Insert the first number");
‫מדעי המחשב‬
-205-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
2. num2 = In.readDouble("Insert the second number");
3. operator = In.readChar("Insert the operator");
4. switch (operator)
{
4.1. case '+':
4.1.1. result = num1 + num2;
4.1.2. System.out.println(num1 + " + " + num2 + " = " +
result);
break;
4.2. case '-':
4.2.1. result = num1 - num2;
4.2.2. System.out.println(num1 + " - " + num2 + " = " +
result);
break;
4.3. case '*':
4.3.1. result = num1 * num2;
4.3.2. System.out.println(num1 + " * " + num2 + " = " +
result);
break;
4.4. case '/':
4.4.1. if (num2 != 0)
{
4.4.1.1. result = num1 / num2;
4.4.1.2.
System.out.println(num1 + " / " + num2 + " = " +
result);
}
4.4.2. else
{
4.4.2.1. System.out.println("Division in 0");
}
break;
4.5. default: System.out.println("Illegal operator");
} // switch
} // main
} // class Calculator
‫ ומושווה‬,(operator ‫ הביטוי הפשוט‬,‫ בהוראת בחירה נבח ערכו של ביטוי )במקרה זה‬,‫א כ‬
. ‫ כל ער וער ברשימה‬case ‫ מקדימה המילה‬Java ‫ ביישו בשפת‬.‫לרשימת ערכי אפשריי‬
‫מדעי המחשב‬
-206-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫שימו ♥‪ :‬כפי שהוראת בחירה מיושמת ב‪ ,Java‬ה‪ case‬המתאי‪ ,‬שמפרט את הער עבורו‬
‫ההשוואה מתקיימת‪ ,‬מהווה למעשה את נקודת הכניסה למשפט ה‪ .switch‬ממנו מתחילות להתבצע‬
‫כל ההוראות שבתו המשפט‪ ,‬האחת אחרי השנייה‪ ,‬ג א ה שייכות ל‪ case‬עוקב‪.‬‬
‫במקרי רבי‪ ,‬כמו במקרה זה‪ ,‬כוונתנו היא שיתבצעו רק ההוראות המתאימות ל‪ case‬עבורו‬
‫ההשוואה מתקיימת‪ ,‬ולא תהיה "נפילה" דר ‪ case‬אחרי‪ .‬משו כ השתמשנו במילה ‪ break‬אשר‬
‫מורה על יציאה ממשפט ה‪ switch‬ועל סיו ביצועו‪ .‬א לא היינו משתמשי במילה ‪break‬‬
‫בתוכנית שלעיל‪ ,‬הרי א‪ ,‬למשל‪ ,‬התו הנקרא היה '*'‪ ,‬היו מתבצעות ההוראות המטפלות בכפל‪,‬‬
‫ואחריה ההוראות המטפלות בחילוק‪ .‬א התו הנקרא היה '‪ ,'+‬היו מתבצעות ההוראות המטפלות‬
‫בכל ארבע הפעולות‪.‬‬
‫קבוצת ההוראות הצמודה למקרה ‪ default‬מתאימה לטיפול בערכי שאינ מכוסי על ידי א(‬
‫‪ ,case‬כלומר‪ ,‬כאשר ערכו של הביטוי המושווה אינו שווה לא( אחד מהערכי המפורטי במשפט‪.‬‬
‫ה‪switch‬‬
‫אי חובה לכלול במשפט ה‪ switch‬חלק המטפל בערכי כאלה‪ .‬א לא כלולה במשפט‬
‫אפשרות ‪ ,default‬אז כאשר אי התאמה בי ער הביטוי המושווה לא( אחד מהערכי המפורטי‬
‫במשפט לא מתבצע דבר‪.‬‬
‫המעקב‬
‫המעקב אחר ביצוע משפט ‪ switch‬דומה למעקב אחר ביצוע משפט ‪ .if‬כלומר‪ ,‬בשורה המתאימה‬
‫בטבלת המעקב נרש המשפט ‪ switch case:‬לביצוע‪ ,‬ובשורה שאחריה נרש המשפט הנבחר‬
‫לביצוע‪ .‬הנה טבלת המעקב אחר מהל ביצוע התוכנית ‪ Calculator‬עבור הקלט ‪ 2 ,5‬והסימ '‪:'/‬‬
‫פלט‬
‫‪Insert‬‬
‫‪the‬‬
‫‪first‬‬
‫‪number‬‬
‫‪Insert‬‬
‫‪the‬‬
‫‪second‬‬
‫‪number‬‬
‫‪Insert‬‬
‫‪the‬‬
‫‪operator‬‬
‫= ‪5 / 2‬‬
‫‪2.5‬‬
‫מספר‬
‫שורה‬
‫המשפט לביצוע‬
‫‪result‬‬
‫‪operator‬‬
‫‪num2‬‬
‫‪num1‬‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫?‬
‫‪5‬‬
‫?‬
‫?‬
‫‪2‬‬
‫‪5‬‬
‫?‬
‫‪/‬‬
‫‪2‬‬
‫‪5‬‬
‫?‬
‫?‬
‫‪2.5‬‬
‫‪2.5‬‬
‫‪/‬‬
‫‪/‬‬
‫‪/‬‬
‫‪/‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪5‬‬
‫‪4.4.1‬‬
‫)‪if (num2 != 0‬‬
‫‪5‬‬
‫‪4.4.1.1 result = num1 / num2‬‬
‫‪5‬‬
‫‪4.4.1.2 System.out.println(...); 5‬‬
‫‪num1 = In.readDouble‬‬
‫‪first‬‬
‫‪the‬‬
‫‪1‬‬
‫‪("Insert‬‬
‫)"‪number‬‬
‫‪num1 = In.readDouble‬‬
‫‪second‬‬
‫‪the‬‬
‫‪2‬‬
‫‪("Insert‬‬
‫)"‪number‬‬
‫‪operator = In.readChar‬‬
‫‪3‬‬
‫)"‪("Insert the operator‬‬
‫‪switch case: /‬‬
‫‪4.4‬‬
‫סוף פתרון בעיה ‪9‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-207-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.51‬‬
‫בנו טבלת מעקב אחר ביצוע התוכנית ‪ Calculator‬עבור הקלט * ‪.0 5.3‬‬
‫כאשר עלינו לנתב את מהל הביצוע על פי בחירה באחת מכמה אפשרויות של ערכי בדידי מתאי‬
‫יותר להשתמש בהוראת‬
‫בחירה מאשר בהוראת שרשרת לביצוע בתנאי‪.‬‬
‫המבנה הכללי של הוראת בחירה הוא‪:‬‬
‫‪ìù íéàúîä êøòä øåáò‬‬
‫‪1-äàøåä :1 êøò‬‬
‫‪2-äàøåä :2 êøò‬‬
‫‪:òöá éåèéá‬‬
‫‪...‬‬
‫‪k-äàøåä :k êøò‬‬
‫בביצוע ההוראה מחושב תחילה ערכו של הביטוי ובהתא לער זה מבוצעת ההוראה המתאימה‬
‫)שיכולה להיות הוראה מורכבת בפני עצמה(‪.‬‬
‫הוראת בחירה מיושמת ב‪ Java‬על ידי משפט ‪switch‬‬
‫המבנה הכללי של משפט ‪ switch‬הוא‪:‬‬
‫)ביטוי( ‪switch‬‬
‫{‬
‫;‪; break‬משפט ‪:‬ערך ‪case‬‬
‫;‪; break‬משפט ‪:‬ערך ‪case‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫;‪; break‬משפט ‪default:‬‬
‫}‬
‫תפקיד משפט‬
‫ה‪ break‬הוא לגרו לסיו ביצוע הוראת ה‪ .switch‬בלעדיו‪ ,‬ממשי ביצוע‬
‫סדרתי של כל ההוראות במשפט ה‪ ,switch‬ג א ה ב‪ case‬עוקבי‪.‬‬
‫תפקיד חלק ברירת המחדל )‪ (default‬הוא לבצע הוראות במקרה שערכו של הביטוי המושווה‬
‫אינו א( אחד מהערכי המפורטי‪ .‬אי חובה לכלול טיפול ברירת מחדל‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-208-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.52‬‬
‫בקטע התוכנית הבא יש שימוש ב‪ break‬רק בחלק מהמקרי‪:‬‬
‫)‪switch (month‬‬
‫{‬
‫‪case 1:‬‬
‫‪case 3:‬‬
‫‪case 5:‬‬
‫‪case 7:‬‬
‫‪case 8:‬‬
‫‪case 10:‬‬
‫‪case 12:‬‬
‫;‪numDays = 31‬‬
‫;‪break‬‬
‫‪case 4:‬‬
‫‪case 6:‬‬
‫‪case 9:‬‬
‫‪case 11:‬‬
‫;‪numDays = 30‬‬
‫;‪break‬‬
‫‪case 2:‬‬
‫) )‪if ( ((year%4 == 0) && !(year%100 == 0)) || (year%400 == 0‬‬
‫{‬
‫;‪numDays = 29‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;‪numDays = 28‬‬
‫}‬
‫;‪break‬‬
‫‪default:‬‬
‫‪1-‬‬
‫‪System.out.println("Error, Acceptable values for months are‬‬
‫;)"‪12‬‬
‫;‪break‬‬
‫‪} // switch‬‬
‫א‪ .‬מהי מטרת קטע התוכנית?‬
‫ב‪ .‬תנו דוגמה לקלט עבורו יגיע ביצוע משפט ה‪ switch‬אל חלק ברירת המחדל‪.‬‬
‫ג‪ .‬תנו דוגמה לקלט עבורו ערכו של המשתנה ‪ numDays‬בתו ביצוע משפט ה‪ switch‬יהיה ‪28‬‬
‫ודוגמה לער עבורו ערכו של המשתנה ‪ numDays‬בתו ביצוע משפט ה‪ switch‬יהיה ‪.29‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-209-‬‬
‫מדעי המחשב‬
‫שאלה ‪5.53‬‬
‫פתחו ויישמו אלגורית אשר הקלט שלו הוא שלושה מספרי שלמי המצייני יו‪ ,‬חודש ושנה של‬
‫תארי‪ .‬הפלט הוא תיאור התארי בצורה יותר ברורה על ידי הצגת ש החודש‪ ,‬במקו מספרו‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ 12 10 1995‬יהיה הפלט ‪ 12‬באוקטובר ‪.1995‬‬
‫שאלה ‪5.51‬‬
‫במבח ‪ 10‬שאלות אמריקאיות‪ ,‬והציו עבור כל שאלה הוא ‪ 10‬נקודות או ‪ 0‬נקודות‪ .‬כלומר‪ ,‬ציו‬
‫המבח יכול להיות רק אחד מאחד עשר הציוני ‪.0, 10, 20, …, 90, 100‬‬
‫פתחו אלגורית שהקלט שלו הוא ציו במבח )כמספר של(‪ ,‬והפלט שלו הוא הציו המילולי‬
‫המתאי לו‪ ,‬כאשר לציו ‪ 100‬במבח מתאי הציו ‪ ,A‬ל‪ 90‬מתאי ‪ ,B‬ל‪ 80‬מתאי ‪ ,C‬ל‪70‬‬
‫מתאי ‪ ,D‬ולכל ציו של ‪ 60‬ומטה מתאי ‪.F‬‬
‫סיכום‬
‫בפרק זה ראינו כיצד להורות על מהלכי ביצוע שוני של אלגורית על פי קיו או איקיו של תנאי‪.‬‬
‫הדבר נעשה באמצעות הוראה לביצוע בתנאי‪.‬‬
‫הוראה לביצוע בתנאי מורה על בחירה על פי תנאי בי ביצוע תתמשימה )פשוטה או מורכבת( אחת‬
‫לבי ביצוע תתמשימה אחרת‪...íà :‬‬
‫‪ ,...úøçà‬או על בחירה על פי תנאי הא לבצע או לא לבצע‬
‫תת משימה‪....íà :‬‬
‫התנאי המופיע בהוראה לביצוע בתנאי יכול להיות תנאי פשוט‪ ,‬או תנאי מורכב הבנוי מצירו( של‬
‫תנאי פשוטי על ידי הקשרי ‪ íâå‬ו‪.åà‬‬
‫ביטוי בוליאני מבטא תנאי‪ .‬א התנאי שמייצג הביטוי הבוליאני מתקיי אז ערכו של הביטוי‬
‫הבוליאני הוא ‪) true‬אמת(‪ .‬א התנאי שמייצג הביטוי הבוליאני אינו מתקיי אז ערכו של הביטוי‬
‫הבוליאני הוא ‪) false‬שקר(‪.‬‬
‫כאשר ביטוי בוליאני מורכב מקישור ביטויי בוליאניי על ידי הקשר ‪åà‬‬
‫ערכו הוא ‪ true‬כאשר‬
‫לפחות אחד מערכי הביטויי הבוליאניי המקושרי הוא ‪ .true‬כאשר ביטוי בוליאני מורכב מקישור‬
‫ביטויי בוליאניי על ידי הקשר ‪íâå‬‬
‫ערכו הוא ‪ true‬רק כאשר ערכי שני הביטויי הבוליאניי‬
‫המקושרי ה ‪.true‬‬
‫כאשר יש לנתב את מהל הביצוע של האלגורית לבחירה בי יותר משתי אפשרויות‪ ,‬נית לעיתי‬
‫להשתמש בהוראות לביצוע בתנאי מורכבות‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-210-‬‬
‫מדעי המחשב‬
‫מבנה מקונ של הוראות לביצוע בתנאי הוא הוראה לביצוע בתנאי שאחת )או יותר( מהוראותיה‬
‫הפנימיות א( היא הוראה לביצוע בתנאי )פשוטה או מורכבת(‪.‬‬
‫הוראת שרשרת לביצוע בתנאי מתאימה לשרשרת של תנאי‪ ,‬שצריכי להיבדק האחד אחרי השני‪.‬‬
‫התנאי נבדקי לפי הסדר‪ ,‬עד שאחד מה מתקיי‪ .‬ברגע שתנאי מסוי מתקיי‪ ,‬מתבצעות‬
‫ההוראות שהוגדרו עבורו‪ ,‬ושאר התנאי לא נבדקי‪.‬‬
‫בהוראת בחירה נבח ערכו של ביטוי‪ ,‬ומושווה לרשימת ערכי אפשריי‪ .‬בהתא לתוצאת ההשוואה‬
‫מתבצעת קבוצת הוראות‪.‬‬
‫כאשר מופיעה באלגורית הוראה לביצוע בתנאי יש לבדוק את מהל האלגורית עבור קלטי‬
‫מייצגי‪ ,‬כלומר‪ ,‬לפחות דוגמת קלט אחת שתביא לכ שהתנאי יתקיי ולפחות דוגמת קלט אחת‬
‫שתביא לכ שהתנאי לא יתקיי‪.‬‬
‫תיאורי משמעות קיו ואיקיו של תנאי ה הערות המתארות את משמעות קיומ ואיקיומ של‬
‫תנאי‪ .‬ה עוזרי לנו בקריאת תוכנית‪ .‬יש לצר( תיאורי כאלה לתנאי אשר כדאי להבהיר את‬
‫משמעות‪.‬‬
‫סיכום מרכיבי שפת ‪ Java‬שנלמדו בפרק ‪5‬‬
‫הוראה לביצוע בתנאי במבנה‬
‫‪...íà‬‬
‫הוראה לביצוע בתנאי במבנה‬
‫‪...íà‬‬
‫‪ ...úøçà‬נכתבת בשפת ‪ Java‬על ידי משפט ‪ if‬באופ הבא‪:‬‬
‫)ביטוי בוליאני( ‪if‬‬
‫{‬
‫ההוראות אשר מבוצעות אם התנאי מתקיים‬
‫}‬
‫‪else‬‬
‫{‬
‫ההוראות אשר מבוצעות אם התנאי אינו מתקיים‬
‫}‬
‫נכתבת בשפת ‪ Java‬על ידי משפט ‪ if‬באופ הבא‪:‬‬
‫)ביטוי בוליאני( ‪if‬‬
‫{‬
‫ההוראות אשר מבוצעות אם התנאי מתקיים‬
‫}‬
‫ליצירת ביטויי בוליאניי פשוטי ב‪ Java‬נית להשתמש בכל אחד מסימני ההשוואה של השפה‪.‬‬
‫נית להשתמש בסימני ההשוואה כדי להשוות ערכי מכל טיפוס שערכיו ניתני להשוואה‪ .‬בפרט‪,‬‬
‫נית להשוות בי תווי‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-211-‬‬
‫מדעי המחשב‬
‫הקשר ‪ åà‬מסומ ב‪ Java‬על ידי סימ הפעולה || והקשר ‪íâå‬‬
‫מסומ על ידי סימ הפעולה &&‪.‬‬
‫עדיפות הקשר && גבוהה מעדיפות הקשר ||‪ ,‬א מומל‪ 0‬בכל מקרה לסמ בבירור את טווח הפעולה‬
‫של כל קשר בעזרת סוגריי‪ ,‬כדי ליצור ביטויי ברורי וקריאי‪.‬‬
‫כל אחת מההוראות בתו משפט ‪ if‬ב‪ Java‬יכולה להיות בעצמה הוראה לביצוע בתנאי מכל סוג‬
‫שהוא‪ .‬בכ מתקבל קינו של הוראות לביצוע בתנאי‪.‬‬
‫בהוראה מקוננת לביצוע בתנאי‪ ,‬השיו של ‪ else‬ל‪ if‬המתאי לו מתבצע על פי הכלל הבא‪:‬‬
‫‪ else‬תמיד משויי ל‪ if‬אשר נמצא בתוכנית לפניו וקרוב אליו ביותר‪ ,‬בתנאי הבאי‪:‬‬
‫♦ ל‪ if‬זה לא משויי כבר ‪ else‬אחר‪ ,‬קרוב יותר‪.‬‬
‫♦ ‪ if‬זה איננו כלול בתחו שמסתיי עוד לפני ה‪.else‬‬
‫הוראת שרשרת לביצוע בתנאי נכתבת בשפת ‪ Java‬באופ הבא‪:‬‬
‫)ביטוי בוליאני ‪if (1‬‬
‫{‬
‫ההוראות אשר מבוצעות אם ערכו של ביטוי ‪ 1‬הוא ‪true‬‬
‫}‬
‫)ביטוי בוליאני ‪else if (2‬‬
‫{‬
‫ההוראות אשר מבוצעות אם ערכו של ביטוי ‪ 2‬הוא ‪true‬‬
‫}‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪else‬‬
‫{‬
‫ההוראות אשר מבוצעות אם ערכם של כל הביטויים הוא ‪false‬‬
‫}‬
‫הוראת בחירה נכתבת בשפת ‪ Java‬על ידי משפט ‪ switch‬באופ הבא‪:‬‬
‫)ביטוי( ‪switch‬‬
‫{‬
‫;‪> break‬קבוצת הוראות< ‪:‬ערך ‪case‬‬
‫;‪> break‬קבוצת הוראות< ‪:‬ערך ‪case‬‬
‫‪.‬‬
‫‪.‬‬
‫;‪> break‬קבוצת הוראות< ‪default:‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-212-‬‬
‫מדעי המחשב‬
‫ערכו של הביטוי מושווה לכל אחד מהערכי המפורטי‪ .‬נקודת הכניסה למשפט ‪ switch‬היא‬
‫המשפט הצמוד לער שעבורו הצליחה ההשוואה‪ .‬מנקודת הכניסה מתבצעות כל ההוראות‪ ,‬עד לסיו‬
‫המשפט ‪ switch‬או עד להוראת ‪ .break‬תפקיד הוראת ‪ break‬הוא לגרו לסיו ביצוע הוראת ה‬
‫‪ .switch‬לכ‪ ,‬א אי הוראת ‪ break‬בסו( קבוצת הוראות מסוימת‪ ,‬מיד אחרי ביצוע קבוצת הוראות‬
‫זו הביצוע ממשי לקבוצת ההוראות הבאה‪.‬‬
‫קבוצת ההוראות הצמודה לחלק ברירת המחדל )‪ (default‬מתבצעת א ערכו של הביטוי המושווה‬
‫אינו א( אחד מהערכי המפורטי‪ .‬אי חובה לכלול טיפול ברירת מחדל‪ .‬א משפט ‪ switch‬אינו‬
‫כולל חלק ברירת מחדל‪ ,‬ובמהל הביצוע ערכו של הביטוי המושווה אינו שווה לא( אחד מהערכי‬
‫המפורטי‪ ,‬לא תבוצע א( הוראה‪.‬‬
‫שאלות נוספות‬
‫שאלות נוספות לסעיף ‪5.1‬‬
‫‪ .1‬נתוני שני קטעי התוכניות הבאי‪ ,‬אשר המשתני בה ה מטיפוס של‪:‬‬
‫קטע תוכנית ‪:1‬‬
‫)‪if (num < 0‬‬
‫{‬
‫;‪num = -num‬‬
‫}‬
‫;)‪System.out.println("num is " + num‬‬
‫קטע תוכנית ‪:2‬‬
‫) ‪if (num1 > num2‬‬
‫{‬
‫;‪diff = num1 - num2‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;‪diff = num2 - num1‬‬
‫}‬
‫;)‪System.out.println("diff is " + diff‬‬
‫א‪ .‬עבור כל קטע תוכנית‪ ,‬בחרו שתי דוגמאות קלט כ שעבור האחת יתקיי התנאי המופיע בקטע‬
‫התוכנית ועבור השנייה לא יתקיי התנאי‪.‬‬
‫ב‪ .‬מהי מטרת כל קטע תוכנית?‬
‫ג‪ .‬עבור כל קטע תוכנית‪ ,‬כתבו קטע תוכנית אחר‪ ,‬ללא משפט ‪ ,if‬המשיג את אותה המטרה‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-213-‬‬
‫מדעי המחשב‬
‫‪ .2‬התערי( לתשלו עבור צריכת גז ביתי לחימו הוא‪ 10 :‬שקלי עבור כל אחד מחמשת הליטרי‬
‫הראשוני הנצרכי ו‪ 7‬שקלי עבור כל ליטר נוס(‪.‬‬
‫נתו קטע התוכנית החלקי הבא אשר הקלט שלו הוא כמות ליטרי שנצרכה‪ ,‬נתונה כמספר ממשי‪,‬‬
‫והפלט שלו הוא התשלו הכולל והתשלו הממוצע עבור ליטר נצר‪.‬‬
‫משתני קטע התוכנית ה מטיפוס ממשי‪ consumption :‬שומר את כמות הליטרי שנצרכה‪,‬‬
‫‪ payment‬שומר את התשלו הכולל ו‪ average‬שומר את התשלו הממוצע עבור ליטר נצר‪.‬‬
‫)‪if (consumption <= 5‬‬
‫{‬
‫השלימו‬
‫}‬
‫‪else‬‬
‫{‬
‫השלימו‬
‫}‬
‫‪ .3‬אחד השימושי של מחשב הוא הצפנת הודעות‪ .‬דר אחת להצפנת הודעות היא על ידי החלפת‬
‫תווי בתווי אחרי‪ ,‬ועל ידי "ריפוד" בתווי נוספי‪.‬‬
‫פתחו ויישמו אלגורית אשר הקלט שלו הוא זוג אותיות שונות מ ה‪ ,abc‬והפלט שלו הוא שלושה‬
‫תווי לפי החוקיות הבאה‪ :‬א אות הקלט הראשונה מופיעה ב‪ abc‬לפני אות הקלט השנייה אז‬
‫הפלט הוא האות העוקבת ב‪ abc‬לאות הקלט הראשונה‪ ,‬אחריה הסימ '‪ '+‬ולבסו( האות הקודמת‬
‫ב‪ abc‬לאות הקלט השנייה‪ .‬אחרת‪ ,‬הפלט הוא האות הקודמת ב‪ abc‬לאות הקלט הראשונה‪,‬‬
‫אחריה הסימ '‪ '-‬ולבסו( האות העוקבת ב‪ abc‬לאות הקלט השנייה‪.‬‬
‫למשל‪ ,‬עבור הקלט ‪ ac‬יהיה הפלט ‪ b+b‬ועבור הקלט ‪ da‬יהיה הפלט ‪.c-b‬‬
‫שאלות נוספות לסעיף ‪5.2‬‬
‫‪ .1‬מהירות הנסיעה המותרת בכביש מהיר היא ‪ 55‬קמ"ש לכל הפחות ו‪ 100‬קמ"ש לכל היותר‪ .‬פתחו‬
‫אלגורית אשר הקלט שלו הוא מהירות נסיעה של מכונית‪ ,‬והפלט שלו הוא הודעה הא נהג‬
‫המכונית חרג מגבולות המהירות המותרת‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫‪ .2‬פתחו ויישמו אלגורית אשר הקלט שלו הוא מספר של חיובי קט מ‪ 100‬והפלט שלו הוא‬
‫המילה בום א המספר הנתו מתחלק ב‪ 7‬או כולל את הספרה ‪.7‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-214-‬‬
‫מדעי המחשב‬
‫שאלות נוספות לסעיף ‪5.3‬‬
‫‪ .1‬פתחו אלגורית הקולט תו‪ .‬א התו שווה ל'‪ ,'m‬האלגורית קורא מהקלט שני מספרי שלמי‪,‬‬
‫ומציג כפלט את המספר הגדול מביניה‪ .‬א תו הקלט שווה ל'‪ ,'n‬האלגורית קורא תו נוס(‪ .‬א‬
‫התו הנוס( שווה ל'‪ ,'o‬האלגורית מציג כפלט את ההודעה תחשוב חיובי‪ ,‬ואחרת‪ ,‬הוא קולט‬
‫מספר ומציג כפלט את ההודעה אתה המספר שנקלט ואת המספר עצמו‪ .‬ישמו את האלגורית‬
‫בשפת ‪.Java‬‬
‫שאלות נוספות לסעיף ‪5.4‬‬
‫‪ .1‬בחברת ההייטק "הייטק" ישנ ‪ 10‬דרגות לעובדי‪ .‬כל העובדי שה מעל דרגה ‪ 7‬ה מנהלי‪,‬‬
‫כל העובדי מעל דרגה ‪ 4‬ה ראשי צוותי‪ ,‬כל העובדי מעל דרגה ‪ 2‬ה עובדי קבועי‪ ,‬וכל‬
‫השאר ה סטודנטי‪ .‬פתחו אלגורית )לשימוש מחלקת משאבי האנוש של החברה( הקולט את‬
‫דרגת העובד ומציג כפלט את תיאורו של העובד )מנהל‪ ,‬ראש צוות‪ ,‬עובד קבוע או סטודנט(‪ .‬ישמו‬
‫את האלגורית בשפת ‪.Java‬‬
‫שאלות נוספות לסעיף ‪5.5‬‬
‫‪ .1‬עזרו לזברה )בבוקר יו א הזברה קמה‪ .(...‬פתחו אלגורית הקולט מספר בי ‪ 1‬ל‪ 7‬ומציג כפלט‬
‫את הש של היו המתאי )‪ .(Sunday, Monday...‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלות מסכמות לפרק ‪5‬‬
‫‪ .1‬בכל המשפטי שלהל ‪ x‬הוא משתנה מטיפוס ממשי‪ .‬כתבו עבור כל זוג ממשפטי ה ‪ if‬הנתוני‬
‫משפט ‪ if‬אחד שקול‪ ,‬כלומר‪ ,‬שביצועו שקול לביצוע שני משפטי ה‪ ,if‬בזה אחר זה‪:‬‬
‫ב‪.‬‬
‫א‪.‬‬
‫)‪if (x <= 9‬‬
‫)‪if (x >= 5‬‬
‫{‬
‫{‬
‫;‪x = x * 4‬‬
‫;‪x = x - 1‬‬
‫}‬
‫}‬
‫)‪if (x > 9‬‬
‫)‪if (x >= 20‬‬
‫{‬
‫{‬
‫;‪x = x / 2‬‬
‫;‪x = x + 1‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-215-‬‬
‫}‬
‫מדעי המחשב‬
‫ד‪.‬‬
‫ג‪.‬‬
‫)‪if (x == -1‬‬
‫)‪if (x <- 1‬‬
‫{‬
‫{‬
‫;‪x = -x‬‬
‫;‪x = 1‬‬
‫}‬
‫}‬
‫)‪if (x > 0‬‬
‫)‪if (x > 1‬‬
‫{‬
‫{‬
‫;‪x = -x‬‬
‫;‪x = -x‬‬
‫}‬
‫}‬
‫‪ .2‬על לוח שח מוצבי שני כלי בלבד – צריח ור‪0‬‬
‫השורות בלוח ממוספרות מ‪ 1‬עד ‪ ,8‬וג העמודות ממוספרות מ‪ 1‬עד ‪:8‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪5‬‬
‫‪4‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫צריח )‪ Rook‬באנגלית( מאיי על כלי הנמצא עימו באותה שורה או באותה עמודה‪.‬‬
‫ר‪ Bishop) 0‬באנגלית ( מאיי על כלי הנמצא עימו על אותו אלכסו‪.‬‬
‫במשתני ‪ rookRow‬ו ‪ rookCol‬שמורי מספרי השורה והעמודה עליה מוצב הצריח‪.‬‬
‫במשתני ‪ bishopRow‬ו ‪ bishopCol‬שמורי מספרי השורה והעמודה עליה מוצב הר‪.0‬‬
‫א‪ .‬השלימו את תיאור משמעות קיו התנאי במשפט ‪ if‬הבא‪:‬‬
‫)‪1‬‬
‫== )‪% 2‬‬
‫)‪if((rookRow + rookCol‬‬
‫‪{ //‬‬
‫;)"… ‪System.out.println("The rook is on‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-216-‬‬
‫מדעי המחשב‬
‫ב‪ .‬כתבו ביטוי בוליאני שערכו ‪ true‬א ורק א הצריח מאיי על הר‪.0‬‬
‫ג‪ .‬הביטוי הבוליאני הבא אמור לבטא מצב לוח בו הר‪ 0‬מאיי על הצריח‪:‬‬
‫)‪(bishopRow – rookRow) == (bishopCol – rookCol‬‬
‫הביטוי כולל רק חלק מ המקרי האפשריי‪ .‬מה המקרי הנכללי בו? מה המקרי‬
‫שאינ נכללי בו?‬
‫הרחיבו את הביטוי כ שיכלול את כל המקרי האפשריי ורק אות‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-217-‬‬
‫מדעי המחשב‬
‫תבניות – פרק ‪5‬‬
‫מציאת מקסימום ומינימום בסדרה‬
‫נתבונ בשתי הבעיות האלגוריתמיות הבאות‪:‬‬
‫בעיה ‪ :1‬תלמיד רשאי לגשת לבחינת הבגרות במתמטיקה בשני מועדי שוני‪ :‬מועד א' ומועד ב'‪.‬‬
‫ציונו של התלמיד בבחינה נקבע על פי הציו הגבוה מבי השניי‪ .‬כתבו אלגורית שהקלט שלו‬
‫הוא ציוניה של לירו )כמספרי שלמי( בבחינת הבגרות במתמטיקה במועד א' ובמועד ב'‪ ,‬והפלט‬
‫שלו הוא הציו הקובע של לירו בבחינה‪.‬‬
‫בעיה ‪ :2‬כתבו אלגורית שהקלט שלו הוא שתי אותיות גדולות ב‪ ABC‬והפלט שלו הוא האות‬
‫המאוחרת על פי הסדר המילוני‪ .‬הניחו שהאותיות שונות זו מזו‪.‬‬
‫אנו רואי כי בשתי הבעיות האלגוריתמיות יש למצוא את המקסימו בסדרה בת שני ערכי‪.‬‬
‫בבעיה הראשונה יש למצוא את המקסימו בסדרה בת שני ערכי מספריי ובבעיה השנייה יש‬
‫למצוא את המקסימו בסדרה בת שני ערכי תוויי‪ .‬באופ דומה ישנ בעיות אלגוריתמיות‬
‫שעבור יש למצוא את המינימו בסדרת ערכי‪ .‬מציאת הער! הגדול או הקט ביותר בסדרת‬
‫ערכי הינה אחת התבניות הבסיסיות ביותר במדעי המחשב‪ .‬תבנית זו שימושית ה בפני עצמה‬
‫וה כמרכיב בתבניות מורכבות יותר כמו תבניות של מיו סדרת ערכי‪ ,‬שנכיר בהמש! לימודינו‪.‬‬
‫נתבונ בשני האלגוריתמי הללו‪:‬‬
‫‪math2-áå math1-á ïåøéì ìù íéðåéö èåì÷ .1‬‬
‫‪letter2-áå letter1-á úåéúåà éúù èåì÷ .1‬‬
‫‪math1 ìù åëøò úà max-á íùä .2‬‬
‫‪letter1 ìù åëøò úà max-á íùä .2‬‬
‫‪.3‬‬
‫‪íà‬‬
‫‪íà .3‬‬
‫‪math2 > max‬‬
‫‪letter2 > max‬‬
‫‪letter2 ìù åëøò úà max-á íùä .3.1‬‬
‫‪math2 ìù åëøò úà max-á íùä .3.1‬‬
‫‪max êøòä úà èìôë âöä .4‬‬
‫‪max êøòä úà èìôë âöä .4‬‬
‫אנו רואי כי בשני הפתרונות נקבע באופ שרירותי כי הער! של המשתנה הראשו הוא‬
‫המקסימלי ולכ נשמר ערכו במשתנה ‪ .max‬לאחר מכ‪ ,‬נבדק ערכו של המשתנה השני‪ :‬א הוא‬
‫גדול יותר מהמקסימו שנקבע אז ערכו של ‪ max‬מוחל" בער! האיבר השני‪.‬‬
‫הבחירה השרירותית במשתנה הראשו כער! התחלתי ל‪ max‬נראית לכאורה מיותרת‪ .‬ואכ‪ ,‬נית‬
‫לוותר עליה‪ ,‬ולהשתמש בהוראה במבנה ‪...íà‬‬
‫‪ ,...úøçà‬המשווה בי שני הערכי ומשימה‬
‫בהתא לתוצאת ההשוואה את ערכו של אחד מה ב‪) max‬בדומה למה שנעשה בשאלה ‪ .(5.6‬בכל‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-219-‬‬
‫מדעי המחשב‬
‫זאת‪ ,‬נעדי" את הפתרונות כפי שהוצגו‪ ,‬משו שקל יהיה להרחיב למציאת מקסימו בסדרה‬
‫שבה יותר משני איברי‪ ,‬כפי שנראה בשלב מאוחר יותר‪.‬‬
‫נפריד את מאפייני התבנית מציאת מקסימום ומינימום בסדרה לשתי תתתבניות‪ :‬ראשית‪ ,‬נציג‬
‫את מאפייני התבנית מציאת מקסימום בסדרה ואחר כ! נציג את מאפייני התבנית מציאת‬
‫מינימום בסדרה‪.‬‬
‫ש התבנית‪ :‬מציאת מקסימו בסדרה‬
‫נקודת מוצא‪ :‬שני ערכי במשתני ‪ element1‬ו‪element2‬‬
‫מטרה‪ :‬מציאת הער! הגדול ביותר בי שני הערכי‬
‫אלגורית‪:‬‬
‫‪íùä .1‬‬
‫‪.2‬‬
‫‪íà‬‬
‫‪max-á‬‬
‫‪ìù êøòä úà‬‬
‫‪element1‬‬
‫‪element2 > max‬‬
‫‪íùä 2.1‬‬
‫‪max-á‬‬
‫‪ìù êøòä úà‬‬
‫‪element2‬‬
‫יישו ב‪:Java‬‬
‫;‪max = element1‬‬
‫)‪if (element2 > max‬‬
‫{‬
‫;‪max = element2‬‬
‫}‬
‫ש התבנית‪ :‬מציאת מינימו בסדרה‬
‫נקודת מוצא‪ :‬שני ערכי במשתני ‪ element1‬ו‪element2‬‬
‫מטרה‪ :‬מציאת הער! הקט ביותר בי שני הערכי‬
‫אלגורית‪:‬‬
‫‪íùä .1‬‬
‫‪min-á‬‬
‫‪íà .2‬‬
‫‪element2 < min‬‬
‫‪íùä 2.1‬‬
‫‪ìù êøòä úà‬‬
‫‪min-á‬‬
‫‪element1‬‬
‫‪ìù êøòä úà‬‬
‫‪element2‬‬
‫יישו ב‪:Java‬‬
‫;‪min = element1‬‬
‫)‪if (element2 < min‬‬
‫{‬
‫;‪min = element2‬‬
‫}‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-220-‬‬
‫מדעי המחשב‬
‫שאלה ‪1‬‬
‫א‪.‬‬
‫‪ .1‬ישמו בשפת ‪ Java‬את האלגורית לחישוב הציו הקובע של לירו במתמטיקה‪.‬‬
‫‪ .2‬הרחיבו את התוכנית שכתבת בסעי" א‪ 1.‬כ! שיוצג כפלט ג מועד הבחינה )א' או ב'( שבו‬
‫הושג הציו הגבוה יותר‪.‬‬
‫‪ .3‬איזה מועד בחינה יוצג כפלט במקרה שציוניה של לירו זהי בשני המועדי? הסבירו‪.‬‬
‫ב‪.‬‬
‫‪ .1‬ישמו בשפת ‪ Java‬את האלגורית למציאת האות המאוחרת יותר‪.‬‬
‫‪ .2‬שנו את התוכנית שכתבת בסעי" ב‪ 1.‬כ! שתוצג כפלט האות המוקדמת יותר על פי סדר‬
‫מילוני‪.‬‬
‫שאלה ‪2‬‬
‫נתו אלגורית שהקלט שלו הוא שני מספרי ממשיי‪:‬‬
‫‪ num1-á íééùîî íéøôñî éðù èåì÷ .1‬ו‪num2‬‬
‫‪ .2‬מצא מקסימום בסדרה ‪max-á åëøò úà íùäå num1,num2‬‬
‫‪ .3‬מצא מינימום בסדרה ‪min-á åëøò úà íùäå num1,num2‬‬
‫‪max − min éðåáùçä éåèéáä ìù åëøò úà èìôë âöä .4‬‬
‫א‪ .‬מהו הפלט עבור הקלט ‪?5.3 6.9‬‬
‫ב‪ .‬תנו שתי דוגמאות קלט שונות שעבור יוצג כפלט הער! ‪.9.1‬‬
‫ג‪ .‬מהי מטרת האלגורית?‬
‫ד‪ .‬כתבו אלגורית המשיג את אותה המטרה ללא שימוש בתבניות מציאת מקסימום בסדרה ו‬
‫מציאת מינימום בסדרה‪.‬‬
‫שאלה ‪3‬‬
‫נתו אלגורית שהקלט שלו הוא שני מספרי שלמי שוני והפלט שלו הוא המספר הדוספרתי‬
‫הקט ביותר מבי ערכי הקלט‪ .‬הניחו שלפחות אחד מבי שני המספרי שבקלט הוא דוספרתי‪.‬‬
‫‪num2 , num1-á íéîìù íéøôñî éðù èåì÷ .1‬‬
‫‪ .2‬מצא מינימום בסדרה ‪ num1, num2‬ו‪åëøò úà èìôë âöä‬‬
‫האלגורית שגוי‪.‬‬
‫א‪ .‬תנו דוגמת קלט שעבורה לא נית לראות כי האלגורית שגוי‪ .‬מהו המאפיי של הדוגמה?‬
‫ב‪ .‬תנו שתי דוגמאות קלט שונות שעבור נית לראות כי האלגורית שגוי‪ .‬מהו המאפיי של כל‬
‫אחת מהדוגמאות?‬
‫ג‪ .‬הסבירו במלי מדוע האלגורית שגוי‪.‬‬
‫ד‪ .‬תקנו את האלגורית‪.‬‬
‫ה‪ .‬ישמו את האלגורית כקטע תוכנית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-221-‬‬
‫מדעי המחשב‬
‫שאלה ‪4‬‬
‫נתו אלגורית שהקלט שלו הוא ‪ 3‬מספרי שלמי השוני זה מזה‪:‬‬
‫‪num3-áå num2 ,num1-á íéîìù íéøôñî 3 èåì÷ .1‬‬
‫‪ .2‬מצא מינימום בסדרה ‪min-á åëøò úà íùäå num1, num2‬‬
‫‪ .3‬מצא מינימום בסדרה ‪min-á åëøò úà íùäå min, num3‬‬
‫‪min ìù åëøò úà èìôë âöä .4‬‬
‫א‪ .‬מה יוצג כפלט עבור הקלט ‪?816 34 57‬‬
‫ב‪ .‬תנו שלוש דוגמאות קלט שונות שעבור יהיה הפלט ‪ .5‬מהו המאפיי של כל אחת מדוגמאות‬
‫הקלט?‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪) 5‬שאלה זו מתאימה לאחר לימוד סעי" ‪ – 5.3‬קינו של הוראה לביצוע בתנאי(‬
‫נתונה הבעיה האלגוריתמית הבאה‪:‬‬
‫כתבו אלגורית שהקלט שלו הוא ‪ 3‬גבהי של שחקני כדורסל והפלט שלו הוא הגובה המקסימלי‬
‫מבי שלושת נתוני הקלט‪ .‬הניחו שהגבהי שוני זה מזה‪.‬‬
‫זוהי למעשה בעיית מציאת מקסימו בסדרה בת ‪ 3‬ערכי‪ .‬אנה‪ ,‬ב‪ ,‬ענר ומשה הציעו‬
‫אלגוריתמי שוני לפתרו הבעיה‪.‬‬
‫האלגורית של אנה‪:‬‬
‫‪height3-áå height2 , height1-á ìñøåãëä éð÷çù ìù íéäáâ 3 èåì÷ .1‬‬
‫‪ìù åëøò úà max-á íùä .2‬‬
‫‪.3‬‬
‫‪íà‬‬
‫‪height2 > max‬‬
‫‪íùä .3.1‬‬
‫‪.4‬‬
‫‪íà‬‬
‫‪height1‬‬
‫‪max-á‬‬
‫‪ìù åëøò úà‬‬
‫‪height2‬‬
‫‪height3 > max‬‬
‫‪íùä .4.1‬‬
‫‪max-á‬‬
‫‪ìù åëøò úà‬‬
‫‪ìù åëøò úà èìôë âöä .5‬‬
‫‪height3‬‬
‫‪max‬‬
‫האלגורית של ב‪:‬‬
‫‪height3-áå height2 , height1-á ìñøåãëä éð÷çù ìù íéäáâ 3 èåì÷ .1‬‬
‫‪.2‬‬
‫‪íâå height1 > height2 íà‬‬
‫‪height2 > height3‬‬
‫‪ìù åëøò úà èìôë âöä .2.1‬‬
‫‪.3‬‬
‫‪íâå height2 > height3 íà‬‬
‫‪height3 > height1‬‬
‫‪ìù åëøò úà èìôë âöä .3.1‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪height1‬‬
‫‪height2‬‬
‫‪-222-‬‬
‫מדעי המחשב‬
height1 > height2
height3
íâå height3 > height1 íà
.4
ìù åëøò úà èìôë âöä .4.1
:‫האלגורית של ענר‬
height3-áå height2 , height1-á ìñøåãëä éð÷çù ìù íéäáâ 3 èåì÷ .1
height1 > height3
height1
íâå height2 > height1 íà
.3
ìù åëøò úà èìôë âöä .3.1
height3 > height2
height3
.2
ìù åëøò úà èìôë âöä .2.1
height2 > height3
height2
íâå height1 > height2 íà
íâå height3 > height1 íà
.4
ìù åëøò úà èìôë âöä .4.1
:‫האלגורית של משה‬
height3-áå height2 , height1-á ìñøåãëä éð÷çù ìù íéäáâ 3 èåì÷ .1
height1 > height2
íà
íà
.2.1
height1 > height3
height1
ìù åëøò úà èìôë âöä .2.1.1
úøçà
height3
.2.2
ìù åëøò úà èìôë âöä .2.2.1
úøçà
height2 > height3
height2
íà
.3
.3.1
ìù åëøò úà èìôë âöä .3.1.1
úøçà
height3
.2
.3.2
ìù åëøò úà èìôë âöä .3.2.1
:‫עבור כל אחד מהאלגוריתמי המוצעי ענו על הסעיפי הבאי‬
:‫ א האלגורית נכו‬.‫א‬
.1.94 2.05 1.98 ‫ בנו טבלת מעקב עבור הקלט‬.1
.‫ הסבירו במלי את הרעיו עליו מתבסס האלגורית‬.2
:‫ א האלגורית אינו נכו‬.‫ב‬
‫ אפיינו את דוגמת‬.‫ תנו לפחות דוגמת קלט אחת שעבורה נית לראות כי האלגורית שגוי‬.1
.‫הקלט‬
‫מדעי המחשב‬
-223-
‫אביב‬-‫ אוניברסיטת תל‬,‫הוראת המדעים‬
‫‪ .2‬תנו לפחות דוגמת קלט אחת שעבורה לא נית לראות כי האלגורית שגוי‪ .‬אפיינו את‬
‫דוגמת הקלט‪.‬‬
‫שאלה ‪6‬‬
‫נתו אלגורית חלקי שהקלט שלו הוא ‪ 4‬מספרי שלמי השוני זה מזה והפלט שלו הוא‬
‫המספר הקט ביותר מבי נתוני הקלט‪:‬‬
‫‪num4-áå num3 ,num2 , num1-á íéîìù íéøôñî 4 èåì÷ .1‬‬
‫‪ .2‬מצא מינימום בסדרה _______‪________-á íùäå _______,‬‬
‫‪ .3‬מצא מינימום בסדרה _______‪________-á íùäå _______,‬‬
‫‪ .4‬מצא מינימום בסדרה _______‪________-á íùäå _______,‬‬
‫‪min ìù åëøò úà èìôë âöä .5‬‬
‫א‪ .‬הציעו שתי דרכי שונות להשלמת האלגורית‪ .‬עבור כל אחת מדרכי הפתרו שהצעת‬
‫הסבירו את הרעיו עליו היא מתבססת‪.‬‬
‫ב‪ .‬באלגורית זה יש שימוש שלוש פעמי בתבנית מציאת מינימום בסדרה בת שני ערכי‪.‬‬
‫רשמו אלגורית שקול )כלומר‪ ,‬המשיג אותה מטרה(‪ ,‬המשתמש בתבנית מציאת מינימום‬
‫בסדרה בת שלושה ערכי‪.‬‬
‫שאלה ‪7‬‬
‫א‪ .‬כתבו אלגורית שהקלט שלו הוא ‪ 4‬מספרי שלמי והפלט שלו הוא המספר הגדול ביותר‬
‫מבי הארבעה וכ מספר הפעמי שהופיע מספר זה בקלט‪.‬‬
‫לדוגמה‪ ,‬עבור הקלט‪ 54 54 13 54 :‬הפלט המתאי הוא‪.54 3 :‬‬
‫ב‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪8‬‬
‫א‪ .‬כתבו אלגורית שהקלט שלו הוא מספר דוספרתי‪ ,‬והפלט שלו הוא המספר הגדול יותר מבי‬
‫המספר הנתו והמספר המתקבל מהיפו! ספרותיו של המספר הנתו‪.‬‬
‫ב‪ .‬ציינו באילו תבניות השתמשת בפתרו הבעיה‪.‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-224-‬‬
‫מדעי המחשב‬
‫סידור ערכים בסדרה‬
‫סידור ערכים בסדרה היא תבנית של מיו ערכי סדרה נתונה‪ .‬נית לסדר את ערכי הסדרה בסדר‬
‫עולה או לסדר בסדר יורד‪.‬‬
‫התבנית סידור ערכים בסדר עולה בסדרה מביאה למצב בו איברי הסדרה ממויני בסדר‬
‫עולה‪ .‬מכא נובע כי הער! המינימלי בסדרה נמצא בקצה השמאלי של הסדרה והער! המקסימלי‬
‫נמצא בקצה הימני של הסדרה‪.‬‬
‫התבנית סידור ערכים בסדר יורד בסדרה מביאה למצב בו איברי הסדרה ממויני בסדר יורד‪.‬‬
‫מכא נובע כי הער! המקסימלי בסדרה נמצא בקצה השמאלי של הסדרה והער! המינימלי נמצא‬
‫בקצה הימני של הסדרה‪.‬‬
‫נפריד את מאפייני התבנית סידור ערכים בסדרה לשתי תתתבניות‪ :‬ראשית נציג את מאפייני‬
‫התבנית סידור ערכים בסדר עולה בסדרה ואחר כ! נציג את מאפייני התבנית סידור ערכים‬
‫בסדר עולה בסדרה‪.‬‬
‫תחילה נציג את התבניות לסידור ערכי בסדרה בת שני ערכי בסדר עולה ובסדר יורד‪ ,‬לאחר‬
‫מכ נרחיב לסדרה בת ‪ 3‬ערכי ובהמש! נראה אלגורית כללי יותר לסידור מספר גדול יותר של‬
‫ערכי בסדרה‪.‬‬
‫ש התבנית‪ :‬סידור ערכי בסדר עולה בסדרה‬
‫נקודת מוצא‪ :‬שני ערכי במשתני ‪ element1‬ו‪element2‬‬
‫מטרה‪ :‬השמת הער! הקט יותר ב‪ element1‬והער! הגדול יותר ב‪element2‬‬
‫אלגורית‪:‬‬
‫‪íà .1‬‬
‫‪element1 > element2‬‬
‫‪ 1.2‬החלף את ערכי ‪ element1‬ו‪element2-‬‬
‫ש התבנית‪ :‬סידור ערכי בסדר יורד בסדרה‬
‫נקודת מוצא‪ :‬שני ערכי במשתני ‪ element1‬ו‪element2‬‬
‫מטרה‪ :‬השמת הער! הגדול יותר ב‪ element1‬והער! הקט יותר ב‪element2‬‬
‫אלגורית‪:‬‬
‫‪íà .1‬‬
‫‪element1 < element2‬‬
‫‪ 1.2‬החלף את ערכי ‪ element1‬ו‪element2-‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-225-‬‬
‫מדעי המחשב‬
‫שאלה ‪9‬‬
‫ישמו כל אחד מ האלגוריתמי לסידור הערכי ‪ element1‬ו‪ element2‬כקטע תוכנית בשפת‬
‫‪.Java‬‬
‫שימו לב כי כדי לייש את התבניות של סידור ערכים בסדרה עליכ להשתמש ביישו של‬
‫התבנית החלפת ערכים בין שני משתנים‪.‬‬
‫שאלה ‪10‬‬
‫א‪ .‬פתחו אלגורית שהקלט שלו הוא מספר דוספרתי ‪ num‬והפלט שלו הוא המספר הגדול ביותר‬
‫שנית להרכיב מספרות המספר הנתו‪.‬‬
‫ב‪ .‬ציינו באילו תבניות השתמשת עבור כתיבת האלגורית‪.‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪11‬‬
‫נתונה סדרה של שלושה ערכי‪ .element1, element2, element3 :‬ידוע כי הער! השני בגודלו‬
‫אינו נמצא ב‪ .element2‬נתו אלגורית חלקי‪ ,‬שמטרתו לסדר את ערכי הסדרה בסדר עולה‪:‬‬
‫‪________ :éàðú íåé÷ øåàéú // element1 < element2 íà .1‬‬
‫‪ .1.1‬החלף את ערכי ________ ו‪________ -‬‬
‫‪ .1.2‬סדר בסדר עולה את איברי הסדרה ________‪________ ,‬‬
‫‪.2‬‬
‫‪úøçà‬‬
‫‪________ :éàðú íåé÷-éà øåàéú //‬‬
‫‪ .2.1‬החלף את ערכי ________ ו‪________ -‬‬
‫‪ .2.2‬סדר בסדר עולה את איברי הסדרה ________‪________ ,‬‬
‫א‪ .‬השלימו את האלגורית‪ .‬הוסיפו תיאורי קיו ואיקיו תנאי במקומות המסומני‪.‬‬
‫ב‪ .‬שנו את האלגורית שכתבת כ! שיסדר את ערכי הסדרה בסדר יורד‪.‬‬
‫ג‪ .‬ישמו את שני האלגוריתמי כקטעי תוכניות בשפת ‪.Java‬‬
‫שאלה ‪12‬‬
‫א‪ .‬כתבו אלגורית שהקלט שלו הוא סדרה של ‪ 3‬מספרי שלמי שוני והפלט שלו הוא סידור‬
‫של המספרי‪ ,‬כ! שעבור הסידור המתקבל שני הערכי המוחלטי של הפרשי המספרי יהיו‬
‫בסדר עולה‪.‬‬
‫ב‪ .‬ציינו באילו תבניות השתמשת עבור כתיבת האלגורית‪.‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪13‬‬
‫נתו אלגורית‪ ,‬שהקלט שלו הוא סדרה של שלושה ערכי ‪:element1, element2, element3‬‬
‫‪element1, element2, element3-á íéîìù íéøôñî äùåìù èåì÷ .1‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-226-‬‬
‫מדעי המחשב‬
‫‪ .2‬סדר בסדר עולה את איברי הסדרה ‪element1, element2‬‬
‫‪ .3‬סדר בסדר עולה את איברי הסדרה ‪element2, element3‬‬
‫‪ .4‬סדר בסדר עולה את איברי הסדרה ‪element1, element2‬‬
‫‪element1, element2, element3 ìù íéëøòä úà èìôë âöä .5‬‬
‫א‪ .‬מה יהיה הפלט עבור הקלט ‪?8 13 6‬‬
‫ב‪ .‬מהי מטרת האלגורית?‬
‫ג‪ .‬באלגורית נעשה שלוש פעמי שימוש בתבנית סידור ערכים בסדר עולה בסדרה‪.‬‬
‫‪ .1‬תנו דוגמה לקלט שעבורו מתבצעת החלפת ערכי המשתני שלוש פעמי‪.‬‬
‫‪ .2‬תנו דוגמה לקלט שעבורו לא מתבצעת החלפת ערכי המשתני כלל‪.‬‬
‫ד‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-227-‬‬
‫מדעי המחשב‬
‫ערכים עוקבים‬
‫ש התבנית‪ :‬ערכי עוקבי?‬
‫נקודת מוצא‪ :‬שני ערכי ‪ element1‬ו‪element2‬‬
‫מטרה‪ :‬חישוב הער! ‪ true‬א ‪ element2‬עוקב ל‪ ,element1‬והער! ‪ false‬א ‪ element2‬אינו‬
‫עוקב ל‪element1‬‬
‫אלגורית )ביטוי בוליאני(‪:‬‬
‫‪element1 + 1 = element2‬‬
‫יישו ב‪:Java‬‬
‫)‪(element1 + 1 == element2‬‬
‫התבנית ערכים עוקבים? היא תבנית המחשבת ער! בוליאני‪ ,‬כלומר‪ true ,‬או ‪ .false‬משו כ!‪,‬‬
‫האלגורית שמממש את התבנית‪ ,‬וכמוהו ג יישומו בשפת ‪ Java‬כוללי למעשה ביטוי בוליאני‪.‬‬
‫את הער! המחושב על ידי התבנית נית לשלב בביטוי בוליאני‪.‬‬
‫שימו ♥‪ :‬הערכי ‪ element1‬ו‪ element2‬עשויי להיות מספרי שלמי‪ ,‬תווי וכ כל זוג‬
‫ערכי בדידי שניתני לסידור‪.‬‬
‫שאלה ‪14‬‬
‫לפניכ שימוש בתבנית ערכים עוקבים?‪:‬‬
‫‪ 5 íà .1‬ערך עוקב ל‪num-‬‬
‫‪"úîà" èìôë âöä .1.1‬‬
‫‪.2‬‬
‫‪úøçà‬‬
‫‪"ø÷ù" èìôë âöä .2.1‬‬
‫א‪ .‬תנו דוגמה לער! של ‪ num‬שעבורו יוצג כפלט "אמת"‪.‬‬
‫ב‪ .‬תנו שתי דוגמאות לער! של ‪ num‬שעבורו יוצג כפלט "שקר"‪.‬‬
‫שאלה ‪15‬‬
‫נתוני שני מספרי שלמי ‪ num1‬ו‪ .num2‬עבור כל אחד מהסעיפי הבאי כתבו ביטוי בוליאני‬
‫מתאי‪:‬‬
‫א‪ .‬המספר הראשו אינו עוקב למספר השני‪.‬‬
‫ב‪ .‬שני המספרי עוקבי )הסדר אינו משנה(‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-228-‬‬
‫מדעי המחשב‬
‫שאלה ‪16‬‬
‫נתוני שני תווי ‪ ch1‬ו‪ .ch2‬עבור כל אחד מהסעיפי הבאי כתבו ביטוי בוליאני מתאי‪:‬‬
‫א‪ .‬שני התווי ה אותיות קטנות עוקבות ב‪ abc‬או ששני התווי ה אותיות גדולות עוקבות ב‬
‫‪.ABC‬‬
‫ב‪ .‬שני התווי ה ספרות עוקבות )בי '‪ '0‬ל'‪.('9‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-229-‬‬
‫מדעי המחשב‬
‫זוגיות מספר‬
‫בדיקת זוגיות של מספר שימושית בהקשרי רבי במדעי המחשב‪ .‬למשל‪ ,‬נזכור כי בזיכרו‬
‫המחשב נשמרי ערכי כסדרות של סיביות‪ .‬א מתייחסי לסדרת סיביות כאל מספר‪ ,‬אז‬
‫בדיקת הזוגיות של המספר מעידה הא הסיבית הימנית ביותר במספר היא ‪ 0‬או ‪.1‬‬
‫נפריד את מאפייני התבנית זוגיות מספר לשתי תתתבניות‪ :‬ראשית נציג את מאפייני התבנית‬
‫מספר זוגי? ואחר כ! נציג את מאפייני התבנית מספר אי‪-‬זוגי?‪ .‬שתי התבניות מחשבות ערכי‬
‫בוליאניי‪ ,‬בדומה לתבנית ערכים עוקבים?‪.‬‬
‫ש התבנית‪ :‬מספר זוגי?‬
‫נקודת מוצא‪ :‬מספר של ‪num‬‬
‫מטרה‪ :‬חישוב הער! ‪ true‬א ‪ num‬זוגי והער! ‪ false‬א ‪ num‬איזוגי‬
‫אלגורית )ביטוי בוליאני(‪:‬‬
‫שארית החלוקה של ‪ num‬פריטים ל‪ 2-‬קבוצות ‪0-ì äååù‬‬
‫ש התבנית‪ :‬מספר איזוגי?‬
‫נקודת מוצא‪ :‬מספר של ‪num‬‬
‫מטרה‪ :‬חישוב הער! ‪ true‬א ‪ num‬איזוגי והער! ‪ false‬א ‪ num‬זוגי‬
‫אלגורית )ביטוי בוליאני(‪:‬‬
‫שארית החלוקה של ‪ num‬פריטים ל‪ 2-‬קבוצות ‪1-ì äååù‬‬
‫שימו ♥‪ :‬שתי התתתבניות מספר זוגי? ומספר אי‪-‬זוגי? ה שתי תבניות המשלימות זו את‬
‫זו‪ .‬כלומר‪ ,‬עבור מספר של מסוי‪ ,‬חישוב הער! ‪ true‬בשימוש בתבנית אחת יגרור חישוב הער!‬
‫‪ false‬בשימוש בתבנית השנייה‪ ,‬ולהיפ!‪.‬‬
‫שאלה ‪17‬‬
‫נתוני שני מספרי שלמי ‪ num1‬ו‪ .num2‬לפניכ מספר ביטויי בוליאניי חלקיי‬
‫המחזירי ער! ‪ true‬א אחד משני המספרי זוגי והאחר איזוגי‪ ,‬ו‪ false‬אחרת‪.‬‬
‫השלימו את הביטויי הבוליאניי‪:‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-230-‬‬
‫מדעי המחשב‬
‫א‪ ________) .‬מספר זוגי‬
‫‪íâå‬‬
‫________ מספר אי‪-‬זוגי (‬
‫‪åà‬‬
‫)________ מספר זוגי ‪ ________ íâå‬מספר אי‪-‬זוגי (‬
‫ב‪) .‬שארית החלוקה של ‪ num1‬פריטים ל‪ 2-‬קבוצות ‪) ________ (1-ì äååù‬שארית החלוקה‬
‫של ‪ num1‬פריטים ל‪ 2-‬קבוצות ‪(1-ì äååù‬‬
‫ג‪________) .‬מספר זוגי(‬
‫שאלה ‪18‬‬
‫נתו אלגורית שהקלט שלו הוא מספר של ‪:num‬‬
‫‪.1‬‬
‫÷‪num-á íìù øôñî èåì‬‬
‫‪.1.1‬‬
‫‪íà‬‬
‫‪.1.1.1‬‬
‫‪.1.2‬‬
‫‪2 éô num ìù åëøò úà ïè÷ä‬‬
‫‪úøçà‬‬
‫‪.1.2.1‬‬
‫‪.2‬‬
‫‪ num‬מספר זוגי‬
‫‪2 éô num ìù åëøò úà ìãâä‬‬
‫‪num ìù åëøò úà èìôë âöä‬‬
‫א‪ .‬מה יהיה הפלט עבור הקלט ‪ ?15‬היעזרו בטבלת מעקב‪.‬‬
‫ב‪ .‬תנו שתי דוגמאות קלט שונות‪ ,‬שעבור יוצג כפלט הער! ‪.10‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫שאלה ‪19‬‬
‫בחברת "מודיעי אזרחי" לכל לקוח יש מספר ייחודי משלו‪ .‬החברה מצפינה את מספרי לקוחותיה‬
‫באופ הבא‪ :‬כל ספרה איזוגית הופכת לזוגית על ידי הפחתה של ‪ .1‬שאר הספרות נותרות ללא‬
‫שינוי‪ .‬למשל‪ ,‬עבור מספר הלקוח ‪ 921‬יתקבל הקוד ‪ 820‬ועבור מספר הלקוח ‪ 129‬יתקבל הקוד ‪28‬‬
‫)הספרה ‪ 1‬הפכה ל‪ ,0‬ומשו שהייתה ספרה מובילה נעלמה(‪.‬‬
‫א‪ .‬כתבו אלגורית‪ ,‬שהקלט שלו הוא מספר תלתספרתי של לקוח והפלט שלו הוא המספר‬
‫המוצפ‪.‬‬
‫ב‪ .‬ציינו באילו תבניות השתמשת בכתיבת האלגורית‪.‬‬
‫ג‪ .‬לאחר שנה החליטה החברה להצפי שוב את מספרי לקוחותיה‪ .‬הפע בחרה בשיטת הצפנה זו‪:‬‬
‫כל ספרה איזוגית הופכת לזוגית על ידי הוספת ‪ 1‬ב"צורה מעגלית" )כלומר‪ 9 ,‬הופכת ל‪.(0‬‬
‫שאר הספרות נשארות ללא שינוי‪ .‬למשל‪ ,‬עבור מספר הלקוח ‪ 976‬יתקבל הקוד ‪ 86‬ועבור‬
‫מספר הלקוח ‪ 439‬יתקבל הקוד ‪ .440‬הרחיבו את האלגורית שכתבת ג עבור שיטת‬
‫ההצפנה השנייה‪.‬‬
‫ד‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-231-‬‬
‫מדעי המחשב‬
‫מחלק של מספר‬
‫התבנית מחלק של? היא הרחבה של התבנית מספר זוגי?‪ .‬נאמר על מספר של ‪ num2‬שהוא‬
‫מחלק את המספר השל ‪ num1‬א ‪ num1‬מתחלק ב‪ num2‬ללא שארית‪ .‬למעשה‪ ,‬התבנית‬
‫מספר זוגי? בודקת הא ‪ 2‬הוא מחלק של מספר נתו‪ ,‬ולכ שימוש בתבנית מחלק של? עבור‬
‫שני מספרי ‪ num1‬ו‪ ,num2‬כאשר ערכו של ‪ num2‬הוא ‪ ,2‬שקול לשימוש בתבנית מספר זוגי?‬
‫עבור ‪ .num1‬כמו מספר זוגי? ג מחלק של? היא תבנית המחשבת ער! בוליאני‪.‬‬
‫ש התבנית‪ :‬מחלק של?‬
‫נקודת מוצא‪ :‬שני מספרי שלמי ‪ num1‬ו‪num2‬‬
‫מטרה‪ :‬חישוב הער! ‪ true‬א ‪ num2‬מחלק את ‪ num1‬והער! ‪ false‬א ‪ num2‬אינו מחלק את‬
‫‪num1‬‬
‫אלגורית )ביטוי בוליאני(‪:‬‬
‫שארית החלוקה של ‪ num1‬פריטים ל‪ num2-‬קבוצות ‪0-ì äååù‬‬
‫שאלה ‪20‬‬
‫נתוני שני מספרי שלמי ‪ num1‬ו‪ .num2‬עבור כל אחד מהסעיפי הבאי כתבו ביטוי בוליאני‬
‫מתאי‪:‬‬
‫א‪ .‬סכו שני המספרי מתחלק ב‪ 4‬ללא שארית‪.‬‬
‫ב‪ .‬המספר הראשו זוגי ואינו מתחלק ב‪.3‬‬
‫ג‪ .‬המספר הראשו הוא מספר דוספרתי הגדול מ‪ ,50‬וספרת העשרות שלו שווה לספרת האחדות‬
‫של המספר השני‪.‬‬
‫שאלה ‪21‬‬
‫נתו הביטוי הבוליאני הבא עבור מספר של חיובי ‪:num‬‬
‫)‪ num‬מספר זוגי( ‪íâå‬‬
‫)שארית החלוקה של ‪ num‬פריטים ל‪ 5-‬קבוצות ‪(0-ì äååù‬‬
‫א‪ .‬כתבו את הביטוי הבוליאני בשפת ‪.Java‬‬
‫ב‪ .‬תנו דוגמה לער! של ‪ ,num‬שעבורו יהיה ער! הביטוי ‪ .true‬הסבירו‪.‬‬
‫ג‪ .‬תנו דוגמה לער! של ‪ ,num‬שעבורו יהיה ער! הביטוי ‪ .false‬הסבירו‪.‬‬
‫ד‪ .‬כתבו ביטוי בוליאני פשוט השקול לביטוי הנתו‪.‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-232-‬‬
‫מדעי המחשב‬
‫שאלה ‪22‬‬
‫מורה מעוניינת לחלק את תלמידיה לזוגות לצור! מבצע התרמה שבו ה נוטלי חלק‪.‬‬
‫א‪ .‬כתבו תוכנית בשפת ‪ ,Java‬שהקלט שלה הוא מספר התלמידי בכיתה והפלט שלה הוא הודעה‬
‫הא נית להתאי בזוג לכל תלמיד‪.‬‬
‫ב‪ .‬מאחר שהמורה ראתה כי לא נית להתאי בזוג לכל תלמיד החליטה לחלק את הכיתה‬
‫לקבוצות של שלושה תלמידי‪.‬‬
‫‪ .1‬שנו את התוכנית שכתבת בסעי" א כ! שתוצג כפלט הודעה הא נית לחלק את הכיתה‬
‫לקבוצות של שלושה תלמידי‪.‬‬
‫‪ .2‬הא עתה נפתרה בעייתה של המורה? א כ‪ ,‬הסבירו‪ .‬א לא‪ ,‬תנו דוגמת קלט שעבורה‬
‫נית לראות כי המורה שגתה בהחלטתה‪.‬‬
‫שאלה ‪23‬‬
‫א‪ .‬כתבו אלגורית שהקלט שלו הוא זמ המיוצג בשעות ובדקות‪ ,‬והפלט שלו הוא הזמ הנותר‬
‫בשעות ובדקות עד שעת חצות‪.‬‬
‫ב‪ .‬ציינו באילו תבניות השתמשת בכתיבת האלגורית‪.‬‬
‫ג‪ .‬ישמו את האלגורית בשפת ‪.Java‬‬
‫הוראת המדעים‪ ,‬אוניברסיטת תל‪-‬אביב‬
‫‪-233-‬‬
‫מדעי המחשב‬