תכנות, רקורסיה, מערכים, מחרוזות, עצים בינאריים ורשימות מקושרות
Filter<T> המכיל שיטה בוליאנית accept(T element) המחזירה ערך true אם"ם האיבר element מתקבל על ידי הפילטר.Iterable בשם someElements ועצם מטיפוס Iterable בשם someFilters. השיטה מחזירה true אם ורק אם כל אחד מהאיברים ב-someElements מתקבל על ידי לפחות מסנן אחד ב-someFilters.someFilters מכיל לפחות איבר אחד והעצם someElements מכיל לפחות איבר אחד.FlatMatrix המממשת את הממשק Matrix (ראו תיאור בנספח) ומייצגת מטריצה אשר ממומשת כמערך חד-מימדי של איברים מטיפוס double. מערך זה שמור כשדה matrix במחלקה. השדות rows ו-columns מייצגים את מספר השורות והעמודות של המטריצה בהתאמה.set (5 נקודות) ואת הבנאי המעתיק (5 נקודות). לנוחיותכם, מעטפת חלקית של המחלקה מופיעה סביב שתי השיטות. אין צורך להשתמש בשיטות מחלקה שאינן נתונות לכם.set מקבלת שני אינדקסים ו-, ומעדכנת את הערך בתא של המטריצה ל-value.IllegalArgumentException.otherMatrix כפרמטר, ויוצר מטריצה חדשה על ידי העתקה עמוקה:otherMatrix, ו- הם גם אינדקסים חוקיים במטריצה החדשה ותוכן התא בשתי המטריצות שווה. יש להניח שהקלט אינו null. 5
/ \
1 8
\ / \
2 6 9
/
7
BinarySearchTree את השיטה searchPathString(T element) אשר מקבלת איבר element ומחזירה את מחרוזת החיפוש של element בעץ.BinarySearchNode. השיטה במחלקה זו מקבלת איבר element ופרמטר נוסף אותו עליכם לקבוע.GraphMinimalNeighbourPathIterator המממשת את הממשק Iterator ומייצגת איטראטור של מספרים בגרף לא מכוון .next() את הקודקוד הבא ב-"מסלול שכן מינימלי מ-".graph, מספר שלם nextVertex ושדה נוסף אותו עליכם להגדיר.graph וקודקוד vertex. יש להניח כי בגרף יש לפחות קודקוד אחד.hasNext().findNextVertex() המעדכנת את השדה nextVertex. קריאה לשיטה זו מתרחשת בעת קידום האיטרטור – בשיטה next().next().GraphBlackAndWhiteEdgesIterator המממשת את הממשק Iterator<Edge> ומתארת איטרטור שעובר על כל הקשתות בגרף G שהן קשתות לבנות-שחורות (ורק עליהן). לא מוגדר סדר מסויים לפיו האיטרטור מחזיר את הקשתות.graph, מערך בוליאני whiteVertices וקשת nextEdge.MysteryGraph (ראו נספח) ולה בנאי מעתיק המקבל פרמטר מטיפוס Graph (ראו נספח) ויוצר גרף בעל אותו מספר קודקודים וקשתות.graph וקבוצת קודקודים לבנים whiteVertices. יש להניח כי בגרף יש לפחות קודקוד אחד וכי כל קודקוד שאינו לבן הוא שחור.hasNext().findNextEdge המעדכנת את השדה nextEdge.next().treeComparator) וכמו כן הוא "קטן" מכל הערכים בתת-העץ הימני שלו. בעץ אין איברים שווים.BinarySearchNode<T>, כמפורט בסעיפים א' וב'. בנוסף, עומדות לרשותכם שתי שיטות בהן תוכלו להיעזר כרצונכם:T findMin() מחזירה את הערך המינימלי בתת-העץ המושרש בקודקוד הנוכחי.T findMax() מחזירה את הערך המקסימלי בתת-העץ המושרש בקודקוד הנוכחי.private boolean replace(T newData) אשר מקבלת ערך newData ובודקת האם ניתן להחליף בינו לערך השדה data כך שתת העץ המושרש בקודקוד הנוכחי נשאר עץ חיפוש בינארי. אם התשובה חיובית, השיטה מבצעת את ההחלפה ומחזירה true. אחרת השיטה מחזירה false, וערך השדה data אינו משתנה.return מעבר לפקודה הניתנת בתבנית (השורה האחרונה בשיטה). 7
/ \\
2 11
/ \ \\
1 4 13
\\
14
true כי אם מחליפים את ערכו של השורש ב-5 תת-העץ המושרש בו נשאר עץ חיפוש בינארי.false והעץ לא ישתנה, כי תת-העץ המתקבל לאחר החלפת ערכו של השורש ב-3, 12 או 0 איננו עץ חיפוש בינארי.public boolean replace(T replaceMe, T newData) המקבלת שני ערכים replaceMe ו-newData.replaceMe בערך newData אם ניתן לעשות זאת - ניתן לבצע את ההחלפה אם קיים קודקוד בתת העץ שערכו replaceMe ולאחר ההחלפה העץ נשאר עץ חיפוש בינארי.false.node:node:
7
/ \\
2 11
/ \ \\
1 4 13
\\
14
node.replace(2,3):
7
/ \\
3 11
/ \ \\
1 4 13
\\
14
node.replace(2, 3) יוחזר הערך true ויתקבל תת העץ מימין.node.replace(2, 6) יוחזר הערך false ולא יבוצע שינוי בעץ מאחר שאם תתבצע ההחלפה העץ לא יישאר עץ חיפוש בינארי.node.replace(5, 6) יוחזר false ולא יבוצע שינוי בעץ מאחר שלא קיים בתת-העץ שמושרש ב-node קודקוד שערכו 5.return מעבר לפקודה הניתנת בתבנית (השורה האחרונה בשיטה).A, B, C, D, E.f() בשתי מחלקות.f().Driver נכתב קטע הקוד הבא בשיטה main אשר יוצר את העצמים הבאים, והוא תקין.Driver נכתב הקטע הבא, ולידו כתוב מה קרה בעקבות כל פקודה:B יורשת ישירות מהמחלקה A, ציירו זאת כך:A, B, C, D ו- E. (חתימות בלבד!)f().f() בכל המחלקות שציינתם בסעיף ג.a4 = o1;o2 = o1;((A)o1).toString();a4.toString();((A)o2).toString();E, F, K, L, N, Pf() בשלוש מחלקות והשיטה g() במחלקה אחת בלבד.equals לא מומשה באף אחת מהמחלקות.f() ו g(). (הערך המוחזר של שתי השיטות הוא מטיפוס String)Driver נכתב קטע הקוד הבא בשיטה main אשר יוצר את העצמים הבאים, והוא תקין.Driver בהמשך השיטה main נכתבו פקודות נוספות (כל פקודה לא תלויה בפקודות האחרות), בהערה בסוף כל שורה, כתוב מה קרה בעקבות הוספת פקודה זו:f().f().main במחלקה Driver נכתבו הפקודות הבאות, והן תקינות.arr[3] = lf;lf = arr[3];System.out.println(o2 instanceof Object);System.out.println(o2 instanceof E);System.out.println(e2.equals(o2));System.out.println(((E)o1).equals(e2));שאלות תרגול במבוא למדעי המחשב בנושא תכנות מונחה עצמים ממבחנים של האוניברסיטה הפתוחה, אוניברסיטת תל אביב, אוניברסיטת בר-אילן, הטכניון. השאלות ממוינות לפי רמת קושי, עם פתרונות לבדיקה עצמית - כך שניתן ללמוד מטעויות ולהבין את דרך הפתרון לפני הבחינה. ניתן לאתר שאלות חוזרות ולהריץ מבחני סימולציה ממוקדים בנושא תכנות מונחה עצמים.