מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנה — אביב 2023 מועד א' (97105)
תאריך הבחינה: 26.2.2023
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
למגמת הנדסת תוכנה — מבנה נתונים ותכנות מונחה עצמים. נבחנים ב-Java או ב-C#, ובוחרים שפה בכניסה למבחן.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 10 שאלות המבחן — את כולן תוכלו לפתור אונליין.
ציוני תלמידים שמורים בשני תורים: marks (כל הציונים ברצף) ו-tests (לכל תלמיד — כמה ציונים השלים). הדוגמה: תלמיד ראשון 80,90,100; שני 75,96; שלישי 100,100,97,96; רביעי 94,88 — ותוצאה צפויה 90.0, 85.5, 98.25, 91.0.
דוגמה: תור הציונים marks (18 ערכים, לפי סדר התלמידים) ותור הבחינות tests (4 ערכים: 3,2,4,2) — התור marks: 80,90,100, 75,96, 100,100,97,96, 94,88 (מחולק ל-4 קבוצות רצופות לפי tests); התוצאה הצפויה: 91.0, 85.5, 98.25, 91.0 (סדר לפי סדר התלמידים בתור tests).
marks (ראש→סוף): 80,90,100 | 75,96 | 100,100,97,96 | 94,88
tests (ראש→סוף): 3, 2, 4, 2
תוצאה (ראש→סוף): 90.0, 85.5, 98.25, 91.0
כתבו פעולה בשם averageQueue המקבלת שני תורים ומחזירה תור חדש של ממוצעי ציונים של כל התלמידים יחד. עבור שני התורים שבדוגמה הפעולה תחזיר תור חדש המכיל את ממוצע הציונים של כל אחד מבין ארבעת התלמידים.
public static Queue<Double> averageQueue(Queue<Integer> marks, Queue<Integer> tests)
מהי סיבוכיות הפעולה שכתבתם בסעיף א'? הסבירו את תשובתכם.
מספר שלם חיובי גדול מיוצג כשרשרת חוליות — חוליה = ספרה, החוליה הראשונה מכילה את הספרה המשמעותית ביותר והאחרונה את ספרת האחדות. דוגמה: 2321418 = 2→3→2→1→4→1→8.
שרשרת החוליות המייצגת את המספר 2321418:
2 → 3 → 2 → 1 → 4 → 1 → 8 → null
כתבו פעולה חיצונית בשם numDigits המקבלת הפניה לחוליה ראשונה של שרשרת חוליות המייצגת מספר שלם וחיובי. הפעולה תחזיר כמות ספרות של המספר.
public static int numDigits(Node<Integer> n)
כתבו פעולה חיצונית בשם compare המקבלת הפניות לשתי שרשראות חוליות n1 ו-n2 המייצגות שני מספרים שלמים חיוביים. אם המספר המיוצג בשרשרת הראשונה גדול מהמספר המיוצג בשרשרת השנייה, הפעולה תחזיר 1. אם המספר המיוצג בשרשרת הראשונה קטן מהמספר המיוצג בשרשרת השנייה, הפעולה תחזיר 2. אם שני המספרים שווים, הפעולה תחזיר 0.
public static int compare(Node<Integer> n1, Node<Integer> n2)
מהי סיבוכיות הפעולה compare מהסעיף הקודם? הסבירו את תשובתכם.
public class Fruit {
protected int weight;
public Fruit(int val) { weight = val; }
public int getWeight() { return weight; }
}
public class Apple extends Fruit {
private String color;
public Apple(int val, String col) {
super(val);
color = col;
}
public boolean validWeight() {
return weight > 80 && weight < 140;
}
}
לפניכם חמישה היגדים. קבעו לכל אחד מהם אם הוא נכון או אינו נכון, ונמקו את קביעתכם:
- המחלקה Fruit יורשת את הפעולה validWeight() מהמחלקה Apple.
- המחלקה Apple יורשת את כל התכונות ואת כל הפעולות של המחלקה Fruit.
- המחלקה Apple יכולה לגשת ישירות לתכונה weight של המחלקה Fruit.
- המחלקה Fruit יכולה לגשת לתכונה color של המחלקה Apple.
- למחלקה Apple אין פעולה toString().
לפניכם קטע קוד מהפעולה הראשית (main) של המחלקה TestFruit: Fruit first = new Apple(100, "RED"); Fruit second = new Fruit(90); Apple third = new Apple(100, "RED"); בעבור כל אחת מההוראות שלפניכם קבעו אם היא תקינה או אינה תקינה. אם היא אינה תקינה, כתבו אם זו שגיאת ריצה או שגיאת הידור (קומפילציה):
- boolean b = first.validWeight();
- boolean b = second.validWeight();
- boolean b = ((Apple)first).validWeight();
- boolean b = ((Apple)second).validWeight();
- boolean b = ((Apple)first).color.equals(third.color);
כתבו פעולה המקבלת מערך עצמים מטיפוס Object. הפעולה תדפיס כמה עצמים הם מטיפוס Apple, כמה עצמים מטיפוס Fruit ואינם מטיפוס Apple, וכמה עצמים הם לא מטיפוס Fruit.
public static void countTypes(Object[] arr)
כל שאלות המבחן — 10 שאלות, כל אחת עם פתרון מלא
לפי סדר המבחן. לוחצים על שאלה והמבחן נפתח בה: עונים, רואים פתרון מלא ומוסבר, וממשיכים לשאלה הבאה.
- שאלה 1
ממוצע ציונים משני תורים — averageQueue
- שאלה 2
שרשרת חוליות המייצגת מספר גדול — numDigits ו-compare
- שאלה 3
ירושה, גישה לתכונות ובדיקות תקינות — Fruit ו-Apple
- שאלה 4
בנאים, דריסה והעמסה — מחלקות A ו-B
- שאלה 5
"מרחק" של ערך בשרשרת חוליות — distance ו-minDistanceValue
- שאלה 6
היררכיית מחלקות עם ממשקים — Sport ומשפחת הספורט
- שאלה 7
שני זימונים על עץ בינרי — what ו-why
- שאלה 8
דריסת פעולה ומעקב אחרי מערך עצמים — One, Two ו-Tester
- שאלה 9
חציון באמצעות מחסנית ובחירה אקראית — what, createSmall ו-randChoice
- שאלה 10
תור מחסניות מושלם — isPerfect
הנושאים הרשמיים בבחינה 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 ש'
המקור: תוכנית הלימודים הרשמית של מה"ט (משרד העבודה).
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←