divicidivici·איזיפס·פשוט להצליח

מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנה — קיץ 2025 מועד ב' (97105)

תאריך הבחינה: לא ידוע

טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).

פתרו את המבחן אונליין — בשפה שלכם:JavaC#

למגמת הנדסת תוכנה — מבנה נתונים ותכנות מונחה עצמים. נבחנים ב-Java או ב-C#, ובוחרים שפה בכניסה למבחן.

✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם

פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.

שאלות לדוגמה מהמבחן — פתרו עכשיו

בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 9 שאלות המבחן — את כולן תוכלו לפתור אונליין.

שאלה 1

הגדרה: מחסנית של מספרים שלמים וחיוביים נקראת "מחסנית תקינה עבור הספרה K", אם יש לפחות מספר אחד שמתחיל בספרה K וכל המספרים שמתחילים ב-K נמצאים ברצף ולא נמצאים באף מיקום אחר במחסנית.

לדוגמה: המחסנית שלפניכם היא "מחסנית תקינה" עבור הספרות K=2,5,9 אבל לא תקינה עבור ספרות אחרות.

⚠️ ערכי המחסנית בעמוד המקורי מוצגים כטור אנכי (תרשים מחסנית); הערכים שחולצו (סדר לא ודאי – עליון/תחתון): 31, 307, 2, 2215, 3, 900, 987, 91, 40, 37, 4, 555, 41. יש לאמת את סדר הערכים המדויק מול עמוד המקור (עמ' 3 C# / עמ' 15 Java) לפני שימוש.

סעיף א

כתבו פעולה המקבלת מחסנית של מספרים שלמים וחיוביים st וספרה k. הפעולה תבדוק אם מחסנית היא "מחסנית תקינה" עבור ספרה זו. אם כן – הפעולה תחזיר ערך true, ואם לא – הפעולה תחזיר ערך false. כותרת הפעולה:

public static boolean isProperK(Stack<Integer> st, int k)
סעיף ב

כתבו פעולה המקבלת מחסנית של מספרים שלמים st וספרה k. הפעולה תבדוק אם המחסנית היא "מחסנית תקינה עבור k". אם כן – הפעולה לא תבצע דבר, ואם לא – הפעולה תשנה את סדר המספרים במחסנית כך שהיא תהיה "תקינה עבור k". אפשר להניח שבמחסנית יש לפחות מספר אחד אשר מתחיל ב-k. כותרת הפעולה:

public static void fixIt(Stack<Integer> st, int k)
סעיף ג

מהי סיבוכיות הפעולות שכתבתם בסעיפים א'–ב'? הסבירו את תשובתכם.

שאלה 2

באוניברסיטה מפתחים מערכת למעקב אחר כוכבים חדשים שמתגלים מדי יום. מספר הכוכבים הוא גדול מאוד, לכן הוחלט לייצג את המספר באמצעות שרשרת חוליות של ספרות. סדר החוליות הוא לפי סדר הופעת הספרות במספר, כך שספרת האחדות היא החולייה האחרונה בשרשרת.

לדוגמה:

  • השרשרת 2➔8➔5 מייצגת את המספר 258.
  • השרשרת 1➔2➔0➔9➔4➔5 מייצגת את המספר 120,945.

המחלקה StarCount אחראית על ספירת הכוכבים ביקום.

public class StarCount
{
    private Node<Integer> number;
}

הערך ההתחלתי של מספר הכוכבים ביקום הוזן באופן ידני ובגלל טעויות הקלדה בחלק מהחוליות בשרשרת number הופיעו מספרים שאינם חד-ספרתיים.

סעיף א

כתבו פעולה פנימית המתקנת את שרשרת החוליות number כך שכל החוליות יכילו ספרה אחת. חוליה המכילה מספר דו-ספרתי תפוצל לשתי חוליות, חוליה מכילה מספר תלת-ספרתי תפוצל לשלוש חוליות וכן הלאה. לדוגמה: השרשרת: 23➔5➔174➔6 תהפוך לשרשרת: 2➔3➔5➔1➔7➔4➔6 כותרת הפעולה:

public void fixNumber()
סעיף ב

בכל יום מתגלים כוכבים חדשים על ידי טלסקופים הפזורים במקומות שונים בכדור הארץ. כדי לשמור על הנתונים מעודכנים, נדרש לאפשר ביצוע של פעולות חשבון על המספרים המיוצגים על ידי שרשרת החוליות. הפעולה הבסיסית ביותר הנדרשת היא addOne - פעולה המגדילה ב-1 את מספר הכוכבים. לדוגמה:

שרשרת החוליות לפני addOneשרשרת החוליות אחרי addOne
1➔2➔81➔2➔9
4➔7➔5➔94➔7➔6➔0
9➔91➔0➔0

ממשו את הפעולה הפנימית addOne המגדילה את מספר הכוכבים ב-1. שימו לב! מספר הכוכבים הוא עצום, הרבה מעבר ליכולת הייצוג של טיפוסי נתונים רגילים כמו int, double או long ולכן אין לחבר את חוליות השרשרת כדי ליצור מספר שלם.

סעיף ג

מהי סיבוכיות הפעולה addOne שכתבתם בסעיף ב'? הסבירו את תשובתכם.

שאלה 3

נתון פרויקט שבו הוגדרו מחלקות V, W, X, Y, Z. הפעולה stam() מומשה בשתי מחלקות. במחלקה נוספת באותו פרויקט, בשם Tester, נכתב קטע הקוד הבא בפעולה main, והוא תקין:

V v1 = new V(9);
V v2 = new Y("9");
V v3 = new Z(new V(6));
W w1 = new W(z1, v2);
Y y1 = new Y("5");
Z z1 = new W(4, 1.1, 'Z', true);
Z z2 = new Z();
Z z3 = new X();

z2.stam();  // תקין ומדפיס "Good"
z3.stam();  // תקין ומדפיס "Good"
w1.stam();  // תקין ומדפיס "Bad"

// חמש הפקודות האלה גורמות לשגיאות:
X x1 = new W();           // שגיאת קומפילציה
v1.stam();              // שגיאת קומפילציה
y1.stam();              // שגיאת קומפילציה
((Z)y1).stam();         // שגיאת קומפילציה
((Z)v2).stam();         // שגיאת זמן ריצה
סעיף א

שרטטו תרשים היררכיה UML המתאר עץ ירושה אפשרי עבור מחלקות הפרויקט.

סעיף ב

ציינו באילו מחלקות מומשה הפעולה stam().

סעיף ג

כתבו את כותרות כל המחלקות וכותרות הפעולות הבונות (הבנאים) הנדרשות. אין צורך לממש את הבנאים.

הנושאים הרשמיים בבחינה 97105

לפי תוכנית הלימודים הרשמית של מה"ט (מבנה נתונים ותכנות מונחה עצמים) — אלו הנושאים שהבחינה נשענת עליהם:

המקור: תוכנית הלימודים הרשמית של מה"ט (משרד העבודה).

פתרו את המבחן המלא — עם משוב על כל תשובה

כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.

התחילו לתרגל — חינם ←