בגרות מדעי המחשב 899271, קיץ 2025 מועד מיוחד
תאריך הבחינה: לא ידוע
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
לתלמידי ותלמידות היחידות המתקדמות במדעי המחשב — כולל שלושת מסלולי הבחירה: אלגוריתמים, מודלים חישוביים ותכנות מונחה עצמים.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 12 שאלות המבחן — את כולן תוכלו לפתור אונליין.
נתונות שתי רשימות מקושרות של מספרים שלמים lst1 ו-lst2. יש לכתוב שתי פעולות חיצוניות: createUnion שמחזירה רשימה חדשה עם כל הערכים שמופיעים בלפחות אחת הרשימות (ללא כפילויות), ו-intersection שמחזירה רשימה חדשה עם רק הערכים המשותפים לשתיהן (ללא כפילויות). בשני הסעיפים סדר הערכים ברשימה המוחזרת אינו חשוב.
דוגמה לרשימות lst1, lst2 שלפניכם
lst1: 5 -> 2 -> 2 -> 4 -> null
lst2: 3 -> 4 -> 7 -> null
lst3 = createUnion(lst1, lst2) - איחוד (ללא כפילויות, ללא חשיבות לסדר)
lst3: 5 -> 2 -> 4 -> 3 -> 7 -> null
lst3 = intersection(lst1, lst2) - חיתוך (ללא כפילויות)
lst3: 4 -> null
כתבו פעולה חיצונית בשם createUnion בשפת Java או CreateUnion בשפת C#. הפעולה מקבלת את שתי הרשימות ומחזירה רשימה חדשה המכילה את כל המספרים המופיעים לפחות באחת מהרשימות. סדר המספרים ברשימה המוחזרת אינו חשוב וכל מספר מופיע פעם אחת בלבד. דוגמה: עבור זימון הפעולה עם הרשימות lst1, lst2 שלפניכם (ר' תמונה): תוחזר הרשימה הבאה (אין חשיבות לסדר המשתנים): lst3 = 5->2->4->3->7->null. הסבר: כל מספר שהופיע לפחות באחת הרשימות, מופיע ברשימה החדשה. כמו כן, ברשימה החדשה כל מספר מופיע פעם אחת בלבד (ללא כפילות).
public static Node<Integer> createUnion (Node<Integer> lst1, Node<Integer> lst2)
כתבו פעולה חיצונית בשם intersection בשפת Java או Intersection בשפת C#. הפעולה מקבלת את שתי הרשימות ומחזירה רשימה חדשה המכילה רק את המספרים המופיעים גם ב-lst1 וגם ב-lst2. סדר המספרים ברשימה המוחזרת אינו חשוב וכל מספר חייב מופיע פעם אחת בלבד. אם אין אף מספר משותף, תוחזר רשימה ריקה. דוגמה: עבור זימון הפעולה עם הרשימות lst1, lst2 הנתונות בדוגמה לעיל (בסעיף א), תוחזר הרשימה הבאה: lst3 -> 4 -> null. הסבר: רק המספר 4 מופיע בשתי הרשימות.
public static Node<Integer> intersection (Node<Integer> lst1, Node<Integer> lst2)
שני תורים הם "M-מחוברים" אם ערכם של M האיברים האחרונים של התור הראשון זהים (לפי אותו סדר) לערכם של M האיברים הראשונים של התור השני. יש לפתור באמצעות פעולות התור בלבד (insert/remove/head/isEmpty), ללא מערך או רשימה מקושרת, ולשמור על מבנה שני התורים בסיום כל פעולה.
q1, q2 לדוגמה
q1 (ראש->סוף): 2,5,4,4,7,2,6
q2 (ראש->סוף): 2,6,7,1,4,2,1,8,1
כתבו פעולה ששמה isMConnect בשפת Java או IsMConnect בשפת C#, המקבלת תור ראשון - q1, ותור שני - q2 (שניהם מטיפוס שלם) ומשתנה שלם M. הפעולה תחזיר true אם התור q1 הוא "M-מחובר" לתור q2, אחרת היא תחזיר false. הערות:
- בסיום הפעולה חובה לשמור על מבנה שני התורים כפי שהתקבלו.
- אין להשתמש בסעיף זה במערך או ברשימה מקושרת. פתרון הכולל שימוש בהם לא יזוכה בנקודות.
- הניחו ש-M קטן או שווה מאורך 2 התורים. דוגמה: עבור התורים q1,q2 שלפניכם: עבור M=1 יוחזר false (ערך האיבר האחרון של q1 - 6, שונה מערך האיבר הראשון של q2 - 2). עבור M=2 יוחזר true (ערכי שני האיברים האחרונים של q1 שווים לפי אותו סדר לערכי שני האיברים הראשונים של q2). עבור M=3 יוחזר false (ערכי שלושת האיברים האחרונים של q1 - 7,2,6, אינם שווים לפי אותו סדר לערכי שלושת האיברים הראשונים של q2 - 2,6,7).
public static boolean isMConnect (Queue<Integer> q1, Queue<Integer> q2, int M)
כתבו פעולה בשם maxConnect בשפת Java או MaxConnect בשפת C#, המקבלת תור ראשון q1, ותור שני q2 (שניהם מטיפוס שלם). הפעולה תחזיר את ה-M הגדול ביותר שעבורו שני התורים הם "M-מחוברים", אם הם לא מחוברים בכלל, יוחזר 0. הערה: ניתן להשתמש בפעולה מסעיף א. דוגמאות: עבור שני התורים מהדוגמה בסעיף א, והזימון maxConnect(q1,q2) יוחזר המספר 2 (יש שני איברים בסוף q1 שזהים לתחילת q2. כאשר מגדילים את M הם אינם זהים). עבור אותם התורים והזימון maxConnect(q2,q1) יוחזר המספר 0 (אין איברים בסוף q2 שמתאימים לתחילת q1 אף עבור M=1).
public static int maxConnect (Queue<Integer> q1, Queue<Integer> q2)
לפניכם עץ בינארי ששורשו root.
נתונות הפעולות sod ו-secret:
public static boolean sod(BinNode<Integer> root, int num)
{
if (root == null)
return false;
if (root.getValue() == num)
return true;
return sod(root.getLeft(), num) || sod(root.getRight(), num);
}
public static int secret(BinNode<Integer> root, int x)
{
if (!sod(root,x))
return 0;
if ((root.getLeft() != null && root.getLeft().getValue() == x) ||
(root.getRight() != null && root.getRight().getValue() == x))
{
return root.getValue()+ secret(root.getLeft(),x)+
secret(root.getRight(),x);
}
return secret(root.getLeft(),x)+secret(root.getRight(),x);
}
עץ בינארי ששורשו root
root=50
L=20, R=25
20.L=10, 20.R=15(a)
10.L=15(b) [leaf]
15(a).L=10(c) [leaf], 15(a).R=5 [leaf]
25.R=15(d) [leaf]
מהו הערך שיוחזר מהפעולה עבור הזימון sod(root, 25)? יש לבצע מעקב על הקוד.
כתבו זימון נוסף שעבורו ערך שונה מהערך מהוחזר מהערך שהוחזר בסעיף 1.
sod(root, ?)
הסבירו מה מבצעת הפעולה sod/Sod.
מהו הערך שיוחזר מהפעולה עבור הזימון secret(root, 10)? יש לבצע מעקב מעקב. אין צורך לבצע מעקב על הקריאה לפעולה sod/Sod אלא רק לציין את הערך שחוזר מהפעולה.
מהו הערך שיוחזר מהפעולה עבור הזימון secret(root, 5)? אין צורך לבצע מעקב.
כתבו זימון נוסף שעבורו יוחזר הערך 50. אין צורך לבצע מעקב.
secret(root, ?)
הסבירו מה מבצעת הפעולה secret/Secret.
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←