שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2017 - מעקב אחר קוד
שאלה 2 (20 נקודות)
המחלקה
קטע הקוד הבא מוצג:
א. מה יתפיס החוק הבא (4 נקודות):
הערה: להניח כי הרישומי מכילויות Integer בלבד, ולא מכילויות אחרות
המחלקה
ElementwiseSum משמשת שתי רשימות (בדוגמה זו, רשימות עם יחידות אחרות) וקובעת לבצע על האלמנטים שלהן איזושהי פעולה.קטע הקוד הבא מוצג:
א. מה יתפיס החוק הבא (4 נקודות):
הערה: להניח כי הרישומי מכילויות Integer בלבד, ולא מכילויות אחרות
null.העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2017סמסטר ב
★★★★★
מעקב אחר קודאובייקטיםאיטרטוריםגנריות
פתור את הביטוי מהפנים אל החוץ. ראשית, קבע מהו רצף המספרים שנוצר על ידי
new ElementwiseSum(L, L). לאחר מכן, השתמש בתוצאה זו כדי לקבוע את הרצף שנוצר על ידי ES.כדי לפענח את הפלט, עלינו לעקוב אחר יצירת האובייקטים והרצפים שהם מייצרים שלב אחר שלב, מהביטוי הפנימי ביותר החוצה.
המחלקה
1. הגדרת הרשימה `L`:
הרשימה
2. חישוב הביטוי הפנימי:
ניצור אובייקט
.
3. חישוב האובייקט `ES`:
האובייקט
א. הרשימה
ב. האובייקט מהשלב הקודם, שהרצף שלו הוא .
האיטרטור של
.
4. ניתוח הלולאה החיצונית:
הלולאה עוברת על אובייקט
הרצף הסופי שיופק על ידי האיטרטור של הלולאה הוא:
.
לכן, הלולאה תדפיס את הערכים ברצף .
הפלט הסופי יהיה:
lacksquare
המחלקה
ElementwiseSum היא Iterable, כלומר ניתן לעבור על איבריה בלולאת for-each. על פי הדוגמאות, איטרטור של ElementwiseSum מחזיר סכום של איברים מתאימים משתי רשימות (או שני Iterable-ים) שהוא מקבל בבנאי. האיטרציה נעצרת כאשר אחד משני ה-Iterable-ים המקוריים נגמר.1. הגדרת הרשימה `L`:
הרשימה
L מאותחלת עם הערכים: .2. חישוב הביטוי הפנימי:
new ElementwiseSum(L, L).ניצור אובייקט
ElementwiseSum שמקבל את L פעמיים. האיטרטור שלו יפיק את הרצף הבא, שהוא סכום איבר-איבר של L עם עצמה:.
3. חישוב האובייקט `ES`:
ES = new ElementwiseSum(L, new ElementwiseSum(L, L)).האובייקט
ES נוצר עם שני ארגומנטים:א. הרשימה
L, שהרצף שלה הוא .ב. האובייקט מהשלב הקודם, שהרצף שלו הוא .
האיטרטור של
ES יפיק רצף חדש , שהוא סכום איבר-איבר של שני הרצפים הנ"ל:.
4. ניתוח הלולאה החיצונית:
for (Integer i : new ElementwiseSum(ES, ES)).הלולאה עוברת על אובייקט
ElementwiseSum חדש שמקבל את ES פעמיים. כלומר, הוא יבצע סכום איבר-איבר של הרצף ש-ES מייצר () עם עצמו.הרצף הסופי שיופק על ידי האיטרטור של הלולאה הוא:
.
לכן, הלולאה תדפיס את הערכים ברצף .
הפלט הסופי יהיה:
i=6 i=12 i=18
lacksquare