מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנה — אביב 2023 מועד ב' (97105)
תאריך הבחינה: לא ידוע
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
למגמת הנדסת תוכנה — מבנה נתונים ותכנות מונחה עצמים. נבחנים ב-Java או ב-C#, ובוחרים שפה בכניסה למבחן.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 10 שאלות המבחן — את כולן תוכלו לפתור אונליין.
ציוני תלמידים שמורים בתור אחד (marks) כאשר קבוצת הציונים של כל תלמיד מופרדת מהקבוצה שאחריה בערך 1-. arrangeData/ArrangeData בונה תור שני (tests) עם מספר הציונים (=מספר הבחינות) של כל תלמיד, ובמקביל מנקה את marks מערכי ההפרדה. לדוגמה: marks לפני = 80,90,100,-1,75,96,-1,100,100,97,96,-1,-1,88,94,-1 (חמישה תלמידים, כולל תלמיד רביעי ללא ציונים כלל); marks אחרי = 80,90,100,75,96,100,100,97,96,88,94; tests = 3,2,4,0,2.
תור הציונים marks לדוגמה, לפני העדכון (מראש התור לסופו). ה-1- מפריד בין קבוצות הציונים של תלמיד לתלמיד; ריבוע אפור = תא הפרדה.
ראש התור → 80 | 90 | 100 | -1 | 75 | 96 | -1 | 100 | 100 | 97 | 96 | -1 | -1 | 88 | 94 | -1 ← סוף התור
תור הציונים marks לדוגמה, אחרי העדכון (ללא ערכי ההפרדה) — הפלט של arrangeData דרך הפרמטר עצמו.
ראש התור → 80 | 90 | 100 | 75 | 96 | 100 | 100 | 97 | 96 | 88 | 94 ← סוף התור
תור הבחינות tests לדוגמה — מספר הבחינות שהשלים כל תלמיד, לפי אותו סדר תלמידים (זהו הערך המוחזר מ-arrangeData).
ראש התור → 3 | 2 | 4 | 0 | 2 ← סוף התור
כתבו פעולה בשם arrangeData המקבלת תור ציונים ומחזירה תור חדש המכיל עבור כל אחד מהתלמידים את מספר הבחינות שהשלים. הפעולה גם צריכה לעדכן את תור הציונים כך שיכיל רק ציונים ללא ערך ההפרדה 1-. כותרת הפעולה: public static Queue<Integer> arrangeData(Queue<Integer> marks)
מהי סיבוכיות הפעולה arrangeData שכתבתם בסעיף א'? הסבירו את תשובתכם.
שרשרת חוליות המכילה מספרים שלמים (חיוביים, שליליים ואפסים) נקראת "מאוזנת" אם אורכה זוגי וסכום כל הערכים שווה לאפס. balance/Balance מקבלת הפניה לראש שרשרת ואם היא אינה מאוזנת, מוסיפה לסופה איבר אחד או שניים כדי לאזן אותה (ללא דוגמה מספרית מודפסת בשאלון לסעיף זה).
כתבו פעולה המקבלת הפניה לחוליה הראשונה של שרשרת חוליות. אם השרשרת "מאוזנת", הפעולה לא עושה דבר. אם לא — הפעולה תוסיף לסוף השרשרת איבר אחד או שני איברים כדי "לאזן" את השרשרת. כותרת הפעולה: public static void balance(Node<Integer> chain)
מהי סיבוכיות הפעולה balance שכתבתם בסעיף א'? הסבירו את תשובתכם.
Square מכילה width, color, בונה, ואת paint/Paint ו-perimeter/Perimeter. Rectangle יורשת מ-Square, מוסיפה length ומעמיסה equals(Rectangle)/Equals(Rectangle) (לא דריסה של equals(Object)). שלושת הסעיפים בודקים העמסה חוקית, דריסה חוקית, ומעקב אחרי איזו equals נבחרת בפועל בכל קריאה.
public class Square {
protected double width;
protected String color;
public Square(double val){ width = val; color = "black"; }
public void paint(double scale, String color){ ... }
public double perimeter(double scale){ ... }
}
public class Rectangle extends Square {
private double length;
public Rectangle(double val1, double val2){
super(val1);
length = val2;
}
public boolean equals(Rectangle other){
return width == other.width && length == other.length;
}
}
אילו מהחתימות הבאות היא העמסה (overloading) חוקית של הפעולה paint? הסבירו את תשובתכם!
- public int paint (double y, String x)
- public void paint (int x)
- public double paint (double a, char b)
- private void paint(double x, String y)
- private double paint (String y, double x)
נתונה המחלקה Rectangle (מלבן) היורשת מ-Square (ראו את קוד המחלקה למעלה). עבור כל אחת מבין הפעולות הבאות קבעו אם אפשר להוסיף אותה למחלקה Rectangle? הסבירו את תשובתכם!
- private double perimeter (double x){...}
- public double perimeter (double y) {...}
- public void perimeter (){...}
- public int perimeter (int y) {...}
- public void perimeter (double x) {...}
לפניכם קטע קוד מהתוכנית הראשית: Square sqr1 = new Square(1); Square sqr2 = new Square(1); Square sqrRec = new Rectangle(1,2); Rectangle rec = new Rectangle(1,2); System.out.println(sqr1.equals(sqr2)); System.out.println(sqrRec.equals(rec)); System.out.println(sqrRec.equals((Square)rec)); System.out.println(((Rectangle)sqrRec).equals(rec)); System.out.println(rec.equals(sqrRec)); עקבו אחרי ביצוע קטע הקוד ורשמו מה יהיה הפלט.
הנושאים הרשמיים בבחינה 97105
לפי תוכנית הלימודים הרשמית של מה"ט (מבנה נתונים ותכנות מונחה עצמים) — אלו הנושאים שהבחינה נשענת עליהם:
- חזרה ותרגול בתמ"ע, דגש על שימוש במחלקה נתונה על בסיס ממשק הפעולות · 6 ש'
- פעולות על מערך - טיפוס נתונים סדרתי · 10 ש'
- מחלקה גנרית · 4 ש'
- רקורסיה · 12 ש'
- יעילות · 11 ש'
- מחסנית – Stack · 11 ש'
- תור – Queue · 11 ש'
- המחלקה הגנרית Node – מחלקה גנרית ייצוג חוליה בסיסית · 8 ש'
- חוליה בינארית - רשימות מקושרות דו כיווניות, עץ בינארי · 17 ש'
- OOP · 8 ש'
- שימוש ב-UML לשם מידול ופישוט OOP · 11 ש'
- הורשה · 8 ש'
- פולימורפיזם · 8 ש'
- פולימורפיזם מופשט · 13 ש'
- מבני נתונים וחבילות · 8 ש'
- Design Patterns · 28 ש'
- פרויקט סיכום הנחיות · 4 ש'
המקור: תוכנית הלימודים הרשמית של מה"ט (משרד העבודה).
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←