בגרות מדעי המחשב 899271, קיץ 2026 מועד מיוחד
תאריך הבחינה: לא ידוע
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
לתלמידי ותלמידות היחידות המתקדמות במדעי המחשב — כולל שלושת מסלולי הבחירה: אלגוריתמים, מודלים חישוביים ותכנות מונחה עצמים.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 12 שאלות המבחן — את כולן תוכלו לפתור אונליין.
נתונה המחלקה DigitCount עם digit (ערך ספרה 0-9) ו-count (מספר מופעים). יש לבנות רשימה מקושרת ממוינת יורד לפי ערך הספרה (buildList), ולהשתמש בה כדי לבנות את המספר המקסימלי האפשרי מהספרות של num (buildMaxNum).
דוגמה: עבור num=3389920 וגם num=9389302 תוחזר הרשימה (head->tail)
head -> [digit=9,count=2] -> [digit=8,count=1] -> [digit=3,count=2] -> [digit=2,count=1] -> [digit=0,count=1] -> null
ממשו את הפעולה שלפניכם. הפעולה מקבלת מספר שלם חיובי num הגדול מ-0 ומחזירה רשימה מקושרת מסוג DigitCount. עבור כל ספרה (0-9) במספר num יישמר ברשימה עצם מן המחלקה DigitCount שערכיו הספרה עצמה ומספר המופעים שלה במספר num. הרשימה תורכב לפי הכללים: הרשימה ממוינת לפי ערך הספרות בסדר יורד (מהגדולה לקטנה); כל ספרה תופיע פעם אחת בלבד; רק הספרות שמופיעות במספר num יופיעו ברשימה.
public static Node<DigitCount> buildList (int num)
ממשו את הפעולה שלפניכם. הפעולה מקבלת מספר שלם num הגדול מ-0 ומחזירה את המספר הגדול ביותר שניתן ליצור באמצעות הספרות במספר num, לפי מספר המופעים של כל ספרה. הערה: ניתן להשתמש בפעולה שכתבתם בסעיף א. דוגמה: עבור num=3389920 וגם num=9389302 הפעולה תחזיר את המספר 9983320 -- המספר המקסימלי שניתן ליצור באמצעות שינוי סדר הספרות במספר num.
public static int buildMaxNum (int num)
נתונות המחלקות Cube (size, type) ו-Box (מערך cubes בגודל 3 + count; הבנאי ו-add/Add נתונים). יש לממש isPerfect הבודקת אם קופסה מכילה 3 קוביות מאותו סוג וגודל, ואז לארוז קוביות מתור לקופסאות לפי סדר הגעתן (packBox, packAll).
דוגמה לתור q (ראש..סוף) לסעיף ב
head: Cube(1,'a'), Cube(2,'a'), Cube(2,'b'), Cube(1,'a'), Cube(1,'a'), Cube(1,'a'), Cube(3,'b'), Cube(3,'a') :tail
packBox(q) result + queue state after, per example
Box returned: count=2, cubes=[Cube(1,'a'),Cube(2,'a'),null]; queue after: Cube(2,'b'),Cube(1,'a'),Cube(1,'a'),Cube(1,'a'),Cube(3,'b'),Cube(3,'a')
packAll(q) result for the full original queue -- 4 boxes, prints 'perfect'
Box1{cubes=[1a,2a,null],count=2} Box2{cubes=[2b,null,null],count=1} Box3{cubes=[1a,1a,1a],count=3} Box4{cubes=[3b,3a,null],count=2} -- Box3 is 'perfect'
קופסה נקראת "מושלמת" אם יש בה 3 קוביות מאותו הסוג וגם מאותו הגודל. ממשו את הפעולה הפנימית שלפניכם במחלקה Box, המחזירה true אם הקופסה מושלמת, אחרת false.
public boolean isPerfect ()
במפעל צעצועים אורזים קוביות לקופסאות לפי סדר הגעתן. ממשו את הפעולה החיצונית שלפניכם: מקבלת תור של קוביות ומחזירה עצם מסוג Box. הפעולה תכניס קוביות מהתור (לפי סדר הופעתן) לקופסה, כל עוד פעולת ההכנסה אפשרית (לפי add/Add). אם לא ניתן להכניס את הקובייה הבאה בתור, הפעולה תעצור ותחזיר את הקופסה שנוצרה. הערה: בסיום הפעולה סדר הקוביות בתור המקורי נשמר, ללא הקוביות שהוכנסו לקופסה.
public static Box packBox (Queue<Cube> q)
כתבו פעולה חיצונית בשם packAll בשפת Java או PackAll בשפת C# המקבלת תור q של עצמים מסוג Cube. הפעולה: תחזיר תור מסוג Box לאחר הכנסת כל הקוביות לקופסאות לפי הכללים לעיל; תדפיס perfect לאחר הכנסת כל הקוביות לקופסאות, אם קיימת לפחות קופסה אחת "מושלמת", אחרת תדפיס not perfect.
public static Queue<Box> packAll (Queue<Cube> q)
לפניכם עץ בינארי ששורשו root, המכיל מספרים שלמים. יש לבצע מעקב אחרי הזימונים something(root)/Something(root) (ולהסביר מה מבצעת הפעולה בכלל) ואחרי sod(root)/Sod(root) עם העץ הנתון.
public static int something (BinNode<Integer> root) {
if (root == null)
return 0;
if (root.getLeft() == null && root.getRight() == null)
return root.getValue ();
int ans1 = something(root.getLeft());
int ans2 = something(root.getRight());
if (ans1 > ans2)
return ans1 + root.getValue();
return ans2 + root.getValue();
}
העץ הבינארי הנתון (root ומטה)
root=-10; left(-10)=7 [left(7)=6, right(7)=-3 [left(-3)=-5, right(-3)=20]]; right(-10)=10 [right(10)=12]
נתונה הפעולה something בשפת Java ו-Something בשפת C# (קוד מלא נתון). (1) מהו הערך שתחזיר הפעולה עבור הזימון something(root)/Something(root) עם העץ הנתון? יש להציג מעקב על ביצוע הפעולה. (2) הסבירו מה מבצעת הפעולה עבור כל עץ של מספרים שלמים.
public static int something (BinNode<Integer> root) { if (root == null) return 0; if (root.getLeft() == null && root.getRight() == null) return root.getValue (); int ans1 = something(root.getLeft()); int ans2 = something(root.getRight()); if (ans1 > ans2) return ans1 + root.getValue(); return ans2 + root.getValue(); }
נתונה הפעולה sod בשפת Java ו-Sod בשפת C# (קוד מלא נתון), המקבלת עץ בינארי של מספרים שלמים, בתחום הערכים -100 עד 100. מהו הערך שתחזיר הפעולה עבור הזימון sod(root)/Sod(root) עם העץ הנתון לעיל? יש להציג מעקב על ביצוע הפעולה. אין צורך לבצע מעקב אחרי הפעולה something/Something אלא רק לציין את הערך שחוזר מהפעולה.
public static int sod (BinNode<Integer> root) { if (root == null) return -101; int x = something (root); int left = sod (root.getLeft()); int right = sod (root.getRight()); return Math.max (x, Math.max (left, right)); }
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←