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- מדעי המחשב