המחלקה להנדסת תעשייה וניהול קורס :מבוא לתכנות למהנדסים - 4212510מועד ב ' – – 2.3.2023תשפ" ג – סמסטר א ' ד"ר ינון צוקרמן ,ד"ר חן חג'ג' משך המבחן :שעתיים וחצי ( 150דקות) חומר עזר: ללא חומר עזר (גם לא מחשבון) הוראות כלליות: א. יש לענות על כל השאלות (שימו לב שלשאלה 4יש ה' סעיפים). ב. יש לכתוב את כל התשובות במחברות הבחינה. ג. תשובות לא מנומקות לא יקבלו ניקוד. ד. ומידה ולא יודעים תשובה לשאלה ,ניתן לכתוב "לא יודע\ת" ולקבל 20%מהניקוד. בהצלחה! © אין לשכפל ,להעתיק ,לצלם ,להקליט ,לאחסן במאגר מידע לשדר או לקלוט בכל דרך או בכל אמצעי אלקטרוני אופטי או אחר כל חלק שהוא ממבחן זה ,אלא באישור מפורש של מרצה הקורס. שאלה 20( 1נק') כתבו תכנית שקוראת קובץ CSVומחשבת את הממוצע של עמודה ספציפית .התוכנית תבקש מהמשתמש את שם הקובץ ואת שם העמודה המבוקשת ותדפיס את הממוצע שלה. נניח שנתון לנו הקובץ הבא: Name,Age,Height Alice,25,1.65 Bob,30,1.80 Charlie,35,1.75 הנה דוגמת הרצה: Enter the name of the CSV file: data.csv Enter the name of the column to calculate the average of: Age The average age is 30.0. להזכירכם ,זהו הקוד לקריאת קובץ :csv ד"ר ינון צוקרמן ,ד"ר חן חג'ג' – "מבוא לתכנות למהנדסים" – תשפ"ג – סתיו ,מועד ב' -הנדסת תעשייה וניהול 2 © אין לשכפל ,להעתיק ,לצלם ,להקליט ,לאחסן במאגר מידע לשדר או לקלוט בכל דרך או בכל אמצעי אלקטרוני אופטי או אחר כל חלק שהוא ממבחן זה ,אלא באישור מפורש של מרצה הקורס. שאלה 20( 2נק') כתבו תכנית רקורסיבית שמבקשת מהמשתמש להכניס מחרוזת ובודקת האם המחרוזת היא פולינדרום .פולינדרום הוא מחרוזת שאפשר לקרוא אותו קדימה או אחורה והוא יוצא אותו הדבר ,לדוגמה “kayak” :או ”.“level • התכנית חייבת להיות רקורסיבית. • התכנית צריכה להתעלם מרווחים בין מילים או מאותיות גדולות. לדוגמה המשפט ” “A man a plan a canal Panamaהוא פולינדרום. Enter a string: A man a plan a canal Panama The string is a palindrome. ד"ר ינון צוקרמן ,ד"ר חן חג'ג' – "מבוא לתכנות למהנדסים" – תשפ"ג – סתיו ,מועד ב' -הנדסת תעשייה וניהול 3 © אין לשכפל ,להעתיק ,לצלם ,להקליט ,לאחסן במאגר מידע לשדר או לקלוט בכל דרך או בכל אמצעי אלקטרוני אופטי או אחר כל חלק שהוא ממבחן זה ,אלא באישור מפורש של מרצה הקורס. שאלה 20( 3נק') כתבו פונקציה בשם longIncSubשמקבלת רשימה של מספרים שלמים ומחזירה את תת הרשימה הארוכה ביותר שבה המספרים רק עולים. לדוגמה ,בהינתן הרשימה ][10, 9, 2, 5, 3, 7, 101, 18 הפונקציה תחזיר את תת הרשימה ][2, 5, 7, 101 ד"ר ינון צוקרמן ,ד"ר חן חג'ג' – "מבוא לתכנות למהנדסים" – תשפ"ג – סתיו ,מועד ב' -הנדסת תעשייה וניהול 4 © אין לשכפל ,להעתיק ,לצלם ,להקליט ,לאחסן במאגר מידע לשדר או לקלוט בכל דרך או בכל אמצעי אלקטרוני אופטי או אחר כל חלק שהוא ממבחן זה ,אלא באישור מפורש של מרצה הקורס. שאלה 40( 4נק') בשאלה זו נממש משחק דומינו .דומינו הוא משחק המורכב מ 22-אבני דומינו .אבני המשחק מלבניות וקו מחלק אותן באמצע לשני ריבועים ,שעל כל אחד מהם מסומנות נקודות .נהוג להשתמש באבנים בעלות ערכים בין אפס עד שש נקודות .האפשרות לאבן ריקה (הערך )0 יוצרת שבעה מצבים ,ושילוב של שני מצבים יוצר 28אפשרויות (.)28=1+2+3+4+5+6+7 בתחילת המשחק מונחת על לוח המשחק אבן דומינו אחת ,כל שחקן מקבל שבע אבנים ,ושאר האבנים נותרות בחבילה .כל שחקן לוקח מתוך אבניו אבן שאחד מריבועיה זהה לריבוע של האבן שנמצאת על השולחן ומניח אותה בסמוך .השחקן הבא בתור חוזר על פעולה זאת ,כך שמתקבל מראה של זוגות מספרים זהים ,לדוגמה (כל מלבן מייצג אבן דומינו אחת): 1|2 2|0 0|3 3|4 4|1 1|5 אם לשחקן אין אבן אותה הוא יכול להניח על הלוח עליו לשלוף אבן מהחבילה עד שיש לו אבן מתאימה .המשחק נגמר כאשר לאחד השחקנים לא נותרות אבנים ,שחקן זה מוכרז כמנצח .אם החבילה מתרוקנת לפני כן ,המשחק מוכרז כתיקו ואין מנצחים. להזכירכם ,יש צורך לוודא שאובייקטים נמצאים במצב תקין. א) ( 10נק') צרו את המחלקה Blockהמתארת אבן דומינו בודדת. • הבנאי יקבל 2מספרים שלמים אשר יופיעו בשני צדי אבן הדומינו. • המתודה __reprתחזיר מחרוזת של שני מספרים המופרדים על ידי התו רווח • המתודה reverseתחזיר אובייקט חדש של Blockעם אותם ערכים אך בסדר הפוך • המתודה check_rightתקבל אובייקט נוסף של Blockותבדוק אם אפשר לשים אותו מימין לאבן הנוכחית • המתודה check_leftתקבל אובייקט נוסף של Blockותבדוק אם אפשר לשים אותו משמאל לאבן הנוכחית דוגמת הרצה: )>>my_block = Block(1,2 )>>print(my_block 1 2 )))>>print(reverse(Block(3,2 2 3 )>>b2 = Block(2,3 ))>> print(my_block.check_right(b2 True ד"ר ינון צוקרמן ,ד"ר חן חג'ג' – "מבוא לתכנות למהנדסים" – תשפ"ג – סתיו ,מועד ב' -הנדסת תעשייה וניהול 5 © אין לשכפל ,להעתיק ,לצלם ,להקליט ,לאחסן במאגר מידע לשדר או לקלוט בכל דרך או בכל אמצעי אלקטרוני אופטי או אחר כל חלק שהוא ממבחן זה ,אלא באישור מפורש של מרצה הקורס. ב) ( 10נק') צרו מחלקה בשם Deckהמייצגת חבילת אבני דומינו .במחלקה זו ,ממשו את המתודות הבאות: • המתודה__ __initמאתחלת את המופע עם משתנה פנימי אשר מכיל את כל אבני המשחק האפשריות (ראו הסבר בתחילת השאלה) .יש לייצר את כל אבני המשחק הנדרשות במתודה זו. • המתודה__ __reprמחזירה ייצוג של כל אבני המשחק שנותרו בחבילה ע"י מחרוזת. • המתודה drawשולפת אבן דומינו אחת באקראי מהחבילה .המתודה מחזירה אבן דומינו ומוציאה אותה מהמשתנה הפנימי שהוגדר באתחול המופע .להזכירכם ,ניתן לייצר מספר שלם אקראי בעזרת הפונקציה )randint(low,high מהספריה . randomהמתודה מחזירה מספר שלם אקראי בין lowו - high , כולל. • המתודה is_emptyמחזירה Trueאם לא נותרו עוד אבני משחק בחבילה או Falseאחרת. דוגמת הרצה: )(>>> deck = Deck )(>>> deck.is_empty False )(>>> deck.draw 1 2 )(>>> deck.draw 4 6 )(>>> deck.draw 0 4 )>>> print)deck [0 0, 0 1, 0 2, 0 3, 0 5, 0 6, 1 1, 1 3, 1 4, 1 5, 1 6, 2 1, 2 2, 2 3, 2 4, 2 5, 2 6, 3 1, 3 2, 3 3, 3 4, 3 5, 3 6, 4 1, 4 2, 4 3, 4 4, 4 5, 5 1, 5 2, 5 3 ],5 4, 5 5, 5 6, 6 1, 6 2, 6 3, 6 4, 6 5, 6 6 ד"ר ינון צוקרמן ,ד"ר חן חג'ג' – "מבוא לתכנות למהנדסים" – תשפ"ג – סתיו ,מועד ב' -הנדסת תעשייה וניהול 6 © אין לשכפל ,להעתיק ,לצלם ,להקליט ,לאחסן במאגר מידע לשדר או לקלוט בכל דרך או בכל אמצעי אלקטרוני אופטי או אחר כל חלק שהוא ממבחן זה ,אלא באישור מפורש של מרצה הקורס. ג) ( 10נק') לבסוף ממשו את המחלקה Boardאשר מייצגת לוח משחק. למחלקה יהיה משתנה פנימי אשר יכיל את אבני המשחק שהונחו על הלוח .תוכלו לבחור את הטיפוס המתאים בעצמכם ,אך זכרו כי יש חשיבות לסדר האבנים כפי שהוא מונח על לוח המשחק וכי ניתן להוסיף אבנים רק לקצוות של לוח המשחק. • הבנאי מקבל אבן דומינו אחת שתשמש לפתיחת לוח המשחק .המתודה תאתחל את לוח המשחק ותשמור את הקלט במשתנה הפנימי שתואר לעיל. • המתודה __ __reprמחזירה ייצוג של לוח המשחק ע"י מחרוזת .שימו לב לחשיבות הסדר האבנים בלוח המשחק. • המתודות add_rightו add_left-בודקות האם ניתן להוסיף אבן דומינו המועברת למתודות בתור קלט מצדו הימני או השמאלי של לוח המשחק (כל מתודה בודקת צד אחד בלבד) .אם כן ,הן מוסיפות את האבן הזו למקום המתאים במשתנה הפנימי של המחלקה ומחזירות . Trueאם לא ניתן להוסיף את האבן שהתקבלה בתור קלט למתודה ,המתודות יחזירו .False דוגמת הרצה: ))>>> board = Board(Block(0,2 >>> board ][0 2 )>>> blk = Block(1,0 )>>> board.add_right(blk False )>>> board.add_left(blk True >>> board ][1 0, 0 2 ד) ( 5נק') מה יהיה פלט התכנית? (נמקו והסבירו את תשבתכם) def foo(lst): if len(lst) == 0: return 0 )]return lst[0] + foo(lst[1: ))]print(foo([1, 2, 3, 4, 5 ה) ( 5נק') הסבירו מהו פולימורפיזם ולמה נרצה להשתמש בו. ד"ר ינון צוקרמן ,ד"ר חן חג'ג' – "מבוא לתכנות למהנדסים" – תשפ"ג – סתיו ,מועד ב' -הנדסת תעשייה וניהול 7