Uploaded by bizusefull

סמסטר ב 2023 מועד ב

advertisement
‫המחלקה להנדסת תעשייה וניהול‬
‫קורס ‪ :‬מבוא לתכנות למהנדסים‬
‫‪ - 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‬‬
Download