אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,חורף 3102 תרגיל בית מספר - 2להגשה עד 81בנובמבר בשעה 25:22 קיראו בעיון את קובץ הנחיות הגשת תרגילי בית שמופיע באתר. את הפונקציות מ שאלות 3ו 5 -הגישו בקובץ pyאחד .הקובץ צריך להכיל את שתי הפונקציות בלבד ולא שום דבר נוסף (למשל ,אין להוסיף קריאות לפונקציות) .הקפידו על שמות הפונקציות כפי שהן מצויינות בשאלות. את התשובות לשאלות 2 ,1ו ,4 -וכן העתק של הקוד שכתבתם כדי לענות על שאלות אלו ,הגישו בקובץ docאו docxאחד. בסה"כ מגישים שני קבצים בלבד. הקפידו לענות על כל מה שנשאלתם. שאלה – 0לא להגשה (שאלת "חימום") סעיף א מה הפלט של כל אחת מההדפסות הבאות? ( שימו לב – חלק מהפקודות לא חוקיות!). חישבו קודם לבד ואח"כ הריצו ובידקו. ]]my_list = [6, -4.7, "bla", [5,6 )print(my_list *2 )print(my_list[2][0]*2 )print(my_list[1] *2 )print(my_list[2] *2 )print("*"*50 )"!print(my_list[1] *2 + "BLA )]"print(my_list *2 + [13]+["13 )"!print("he" + my_list[2][1] *2 + "o ))]print(len(my_list + my_list[3 ))]print(len(my_list + my_list[3][0 סעיף ב נניח שהגדרנו את הרשימה ] ,lst = [1,2,3,4,5וב רצוננו להפוך את סדר האיברים בה ,במקום (,)in-place כלומר ,לשנות את איברי lstעצמה מבלי לייצר רשימה חדשה. .1האם הפקודה ] x=x[::-1עושה זאת ? בידקו באמצעות הפונקציה )(.id .2כיתבו פונקציה )( reverseשמקבלת רשימה ,והופכת את סדר האיברים שלה ,במקום. .3כעת בחנו את התנהגות הפונקציה )( reverseשל המחלקה .listבצעו ) lst2 = list.reverse(lstונסו להבין מה מתרחש .האם ההיפוך מתבצע במקום? מה מחזירה הפונקציה ? שאלה 8 סדרת מחלקים היא סדרת מספרים ,שהראשון שבהם הוא מספר טבעי כלשהו ,הבא אחריו הוא סכום המחלקים ממש של הקודם (כולל ,1לא כולל את המספר עצמו) ,השלישי הוא סכום מחלקי השני ,וכך הלאה .אם מגיעים ל - 0 -עוצרים (שכן ל 0 -אין מחלקים). למשל ,להלן סדרת מחלקים שמתחילה ב :45 - סדרות מחלקים נחלקות ל 3 -סוגים : .1סדרות שמסתיימות ב ( 0 -סדרות סופיות). .2סדרות שלא מגיעות ל 0 -לעולם (אינסופיות) ,שנכנסות למעגל מחזורי כלשהו. .3סדרות שלא מגיעות ל 0 -לעולם (אינסופיות) ,שלא נכנסות למעגל מחזורי כלשהו (סדרות כאלו חייבות להיות בלתי חסומות). ישנן סדרות שלא ידוע לאיזה סוג הן שייכות .למעשה לא ידוע אם בכלל יש סדרות מהסוג השלישי – זוהי שאלה פתוחה במתמטיקה. א .הסבירו בקצרה מדוע יש אינסוף סדרות מהסוג הראשון (רמז :מספרים ראשוניים) ,ומדוע יש סדרות מהסוג השני (רמז :מספרים מושלמים). ב .כמה מספרים בין 1ל 275 -הם התחלה של סדרות מהסוג הראשון? ומהסוג השני? (כל המספרים בתחום זה פותחים סדרה ששייכת לאחד משני הסוגים הללו .לגבי 272אגב ,לא ידוע כיום לאיזה סוג הוא שייך.)... ג .כמה פעמים מופיעה הספרה 3בכל איברי סדרת המחלקים שמתחילה ב ?107 - לשם הבהרה ,עבור ,45הספרה 3מופיעה 3פעמים .לצורך עזרה בבדיקת תקינות :בסדרה שמתחילה ב - 131הספרה 3מופיעה 101פעמים. שאלה 2 למספר 5200000כמעט 140000ספרות בכתיב עשרוני. א .מיצאו את הסכום המקסימלי של 5ספרות עוקבות במספר .לשם הבהרה :אם נחפש את הסכום המקסימלי של 5ספרות עוקבות במספר 123452711התשובה תהיה .)562676161( 35האם התשובה מפתיעה ? ב .מיצאו את הסכום המקסימלי של 20000ספרות עוקבות במספר .לשם עזרה בבדיקת תקינות :עבור 5100000התוצאה היא .221304 טיפ :כדאי לתת דעתכם על יעילות הקוד שלכם .קוד בלתי יעיל ,שיכול להתאים לסעיף א' ,עלול לרוץ משך זמן בלתי סביר עבור סעיף ב' .פתרון יעיל לסעיף ב' אמור להסתיים תוך מספר שניות עד דקה על מחשב סביר. עמוד 2מתוך 3 שאלה 5 כיתבו פונקציה בשם .spellitלפונקציה קלט יחיד ,nשהוא מספר השייך ל .range(1000000) -על הפונקציה להחזיר מחרוזת ובה המספר ,nכפי שהוא נכתב באנגלית .מותר להניח שהקלט חוקי ואין צורך לבדוק זאת. דוגמאות : )>>> spellit(11 ''eleven )>>> spellit(123 ''one hundred twenty three )>>> spellit(999999 ''nine hundred ninety nine thousand nine hundred ninety nine שאלה 4 ציירו את תמונת הזיכרון ("בלונים" ,נלמד בתרגול השלישי) לאחר ביצוע הקוד הבא .אין צורך לצייר מצבי ביניים ,אלא רק את המצב הסופי. ]"x = ["bye ]y = ["x", x , 3 ]x = x+[1000 ]y[0] = y[1][0 )list.append(y, 1000 שאלה 2 כיתבו פונקציה בשם ) read_number(s,bשמקבלת כקלט מחרוזת sומספר bמתוך ).range(2,37 הפונקציה מחזירה כפלט את המספר הממשי החיובי שהייצוג שלו בבסיס bהוא .s לדוגמה: )>>> read_number("123.45", 10 123.45 )>>> read_number("3e8.6", 16 1000.375 )>>> read_number("10q", 30 926 אין להשתמש בפונקציות intאו .floatניתן להניח שתווי sהם ספרות בבסיס bאו התו '( '.שמציין את המעבר מהחלק השלם לשיברי). בהצלחה עמוד 3מתוך 3
© Copyright 2024