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

בגרות מדעי המחשב 899271, קיץ 2025 מועד א'

תאריך הבחינה: 27.5.2025

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

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

לתלמידי ותלמידות היחידות המתקדמות במדעי המחשב — כולל שלושת מסלולי הבחירה: אלגוריתמים, מודלים חישוביים ותכנות מונחה עצמים.

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

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

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

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

שאלה 1

נתונה המחלקה Game – משחק מחשב, ולה שתי תכונות: • name – שם המשחק, מטיפוס מחרוזת. • price – מחיר המשחק – מספר הגדול מ־0 , מטיפוס שלם. הניחו שיש פעולות get ו־set לתכונות המחלקה. נתונה המחלקה Store – חנות משחקי מחשב, ולה תכונה אחת: • lst – הפניה לשרשרת חוליות שאינה ריקה, מטיפוס Game . כל חוליה בשרשרת מכילה משחק הנמכר בחנות. הערה: המשחקים אינם מסודרים בשרשרת בסדר מסוים, וכל משחק מופיע פעם אחת בלבד.

סעיף א

ממשו את הפעולה של ממשק המחלקה Store שלפניכם: public int remove (int n, int pr) הפעולה תמחק מן השרשרת n משחקים שמחיר כל אחד מהם pr . אם יש יותר מ־n משחקים שמחירם pr , יימחקו רק n המשחקים הראשונים מביניהם. אם יש פחות מ־n משחקים שמחירם pr , רק הם יימחקו. הפעולה תחזיר את כמות המשחקים שנמחקו (כלומר מקסימום n , אך ייתכן שפחות). הניחו ש־n ו־pr גדולים מ־0 . הערה: שאר המשחקים בשרשרת יישארו באותו הסדר. אם אין בשרשרת שום משחק במחיר pr , השרשרת תישאר ללא שום שינוי והפעולה תחזיר 0 . דוגמה: בעבור n = 3 , pr = 30 והשרשרת lst שלפניכם: lst → ("a", 30) → ("g", 30) → ("b", 27) → ("v", 99) → ("k", 30) → ("c", 25) → ("p", 30) → null

(בכל חוליה מוצגים שם המשחק ומחירו.) הפעולה תחזיר 3 והשרשרת תיראה כך בתום הפעולה: lst → ("b", 27) → ("v", 99) → ("c", 25) → ("p", 30) → null הסבר: יש בשרשרת ארבעה משחקים שמחירם 30 . מכיוון ש־n = 3 , נמחקו שלושת המשחקים הראשונים בשרשרת שמחירם 30 , והפעולה החזירה 3 . דוגמה נוספת: בעבור אותה השרשרת מן הדוגמה המקורית שלעיל ו־n = 5 , pr = 30 , הפעולה תחזיר 4 והשרשרת תיראה כך בתום הפעולה: lst → ("b", 27) → ("v", 99) → ("c", 25) → null הסבר: יש רק ארבעה משחקים שמחירם 30 . לכן נמחקו מן השרשרת ארבעת המשחקים שמחירם 30 , והפעולה החזירה 4 .

סעיף ב

ממשו את הפעולה של ממשק המחלקה Store שלפניכם: public int removeCheap (int num) הפעולה תמחק מן השרשרת את num המשחקים הזולים ביותר. הפעולה תחזיר את סכום המחירים הכולל של כל המשחקים שנמחקו. הניחו ש־num גדול מ־0 וקטן מכמות המשחקים בשרשרת. הערות: – המשחקים בשרשרת שלא נמחקו יישארו באותו הסדר. – אם כמות המשחקים שמחירם זהה גדולה מכמות המשחקים שצריך למחוק מהם, אין חשיבות איזה מהם יימחק. – אפשר להשתמש בפעולה שבסעיף א. דוגמה: בעבור אותה השרשרת מן הדוגמה המקורית בסעיף א ו־num = 5 , הפעולה תחזיר 142 , והשרשרת תיראה כך: lst → ("v", 99) → ("p", 30) → null הסבר: חמשת המשחקים הזולים יותר (25+27+30+30+30) נמחקו מן השרשרת וסכום מחירם הכולל הוא 142 . בשרשרת נשאר משחק אחד שמחירו 99 ואחד שמחירו 30 (אפשר להשאיר בשרשרת משחק אחר שעולה 30 , אין חשיבות איזה מהם יישאר).

שאלה 2
public static boolean mmm (Queue<Integer> q, int z)
{
    q.insert (0);
    int num = q.head();
    int y = 0;
    while (q.head() > 0)
    {
        if (y < z)
        {
            if (q.head() == num)
            {
                y++;
            }
            else
            {
                num = q.head();
                y = 1;
            }
        }
        q.insert (q.remove());
    }
    q.remove();
    return y == z;
}

public static int what (Queue<Integer> q, int n)
{
    if (mmm (q, n))
        return n;
    return what (q, n - 1);
}

התור q הנתון לסעיף א

התור q (ראש התור משמאל, סוף התור מימין):
| 1 | 3 | 1 | 1 | 1 | 2 |

טבלת המעקב הריקה של סעיף א(1)

| התור q | num | y | y < z | q.head() == num |
|---|---|---|---|---|
|  |  |  |  |  |

התור q הנתון לסעיף ב (זהה לתור של סעיף א)

התור q (ראש התור משמאל, סוף התור מימין):
| 1 | 3 | 1 | 1 | 1 | 2 |

טבלת המעקב המוצעת של סעיף ב(1)

| התור q שמתקבל בפעולה | הערך n שמתקבל בפעולה | mmm (q, n) == true | ערך מוחזר |
|---|---|---|---|
|  |  |  |  |

סעיף א(1)

לפניכם הפעולה mmm , המקבלת תור – q ובו מספרים הגדולים מ־0 , ומספר שלם z – הגדול מ־0 . (הקוד מופיע בתחילת השאלה.) נתון תור q מטיפוס שלם: ראש התור → 1, 3, 1, 1, 1, 2 ← סוף התור עקבו בעזרת טבלת המעקב שלפניכם אחר הפעולה mmm (q , 4) , וכתבו מה הפעולה מחזירה.

mmm (q, 4)

סעיף א(2)

הסבירו מה הפעולה mmm עושה.

סעיף א(3)

מהי סיבוכיות זמן הריצה של הפעולה mmm ? נמקו את תשובתכם.

סעיף ב(1)

לפניכם הפעולה what , המקבלת תור – q ובו מספרים הגדולים מ־0 , ואת גודל התור – n . (הקוד מופיע בתחילת השאלה.) נתון תור – q מטיפוס שלם: ראש התור → 1, 3, 1, 1, 1, 2 ← סוף התור עקבו אחר הפעולה what (q, 6) , וכתבו מה הפעולה מחזירה (אין צורך לעקוב אחר הפעולה mmm). המעקב יכלול בכל קריאה את הערכים של q , n ואת הערך המוחזר. לפניכם הצעה לטבלת מעקב (אין חובה להשתמש בטבלה זו).

סעיף ב(2)

הסבירו מה הפעולה what עושה.

סעיף ב(3)

מהי סיבוכיות זמן הריצה של הפעולה what ? נמקו את תשובתכם.

שאלה 3

"עץ K־שמאלי" הוא עץ בינרי ובו כל מסלול משורש העץ לעלה כלשהו מכיל לכל היותר K קשתות הפונות שמאלה (כלומר מקסימום K בנים שמאליים). שימו לב: ב"עץ K־שמאלי" ייתכן שאין שום מסלול המכיל K קשתות הפונות שמאלה (כלומר ייתכן שבכל אחד מן המסלולים יש פחות קשתות שמאליות מ־K). דוגמה: (בתרשים: עץ בינרי בן 8 צמתים. לשורש בן שמאלי ובן ימני. לבן השמאלי של השורש בן ימני יחיד, שהוא עלה. לבן הימני של השורש בן שמאלי ובן ימני; הבן הימני שלו הוא עלה, ולבן השמאלי שלו שני בנים שהם עלים. המסלול המקווקו: מהשורש לבנו הימני, משם לבנו השמאלי, ומשם לבנו השמאלי — קשת ימנית אחת ואחריה שתי קשתות שמאליות.) עץ זה אינו "עץ 1־שמאלי" כי בעץ יש מסלול שבו יש יותר מקשת אחת שמאלית (במסלול המקווקו יש שתי קשתות שמאליות). לעומת זאת, עץ זה הוא "עץ 2־שמאלי" כי אין בו מסלול שבו יותר משתי קשתות שמאליות (ובאותה מידה הוא גם "עץ 3־שמאלי", וגם "עץ 4־שמאלי" וכן הלאה).

סעיף א

סרטטו "עץ 1־שמאלי" (כלומר שבכל מסלול של העץ יש קשת שמאלית אחת לכל היותר), ובו 8 צמתים ומקסימום 4 רמות.

סעיף ב

כתבו פעולה חיצונית ששמה isLeftK המקבלת עץ בינרי – root מטיפוס שלם שאינו ריק, וערך K שאינו שלילי, ומחזירה true אם העץ הוא "עץ K־שמאלי", ואם לא – היא מחזירה false .

public static boolean isLeftK (BinNode<Integer> root, int K)

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

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

  1. שאלה 1

    המחלקות Game ו-Store – remove ו-removeCheap על שרשרת חוליות

  2. שאלה 2

    הפעולות mmm ו-what על תור – מעקב, הסבר וסיבוכיות

  3. שאלה 3

    «עץ K-שמאלי» – סרטוט ופעולה isLeftK

  4. שאלה 4

    שש טענות בתורת הגרפים ועצי DFS אפשריים מקודקוד a

  5. שאלה 5

    מסלול קצר בגרף ממושקל G1 וסריקות DFS בגרף מכוון G

  6. שאלה 6

    "גרף־כמעט־עץ" — סרטוט, מניית קשתות ורכיבי קשירות, אלגוריתם זיהוי

  7. שאלה 7

    רגולריות של L1–L3 מעל {a,b} + השפה L מעל {a,b,c} והשלמת אוטומט

  8. שאלה 8

    שלוש טענות על פעולות בין שפות + אוטומט מחסנית ל-L

  9. שאלה 9

    מכונת טיורינג – חצי המספר האונרי הזוגי / המספר האי־זוגי פחות 1

  10. שאלה 10

    גן החיות – Animal, Bird, Parrot, Fish, Snake: ירושה, בנאים, toString ופולימורפיזם

  11. שאלה 11

    One, Two, Three – שדה סטטי count, השלמת שש יצירות לפי פלט נתון, ושינוי הכותרת של Three

  12. שאלה 12

    A, B, C, D – תרשים היררכיה, ציור עצמים, והעמסת יתר מול דריסה של foo

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

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

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

לא עוד דף פתרונות — כאן מתרגלים, נבחנים ומשתפרים

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

וכמובן — פתרון מלא ומוסבר לכל שאלה מהבגרויות האמיתיות. מתחילים לתרגל — חינם, בלי כרטיס ←