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

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

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

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

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

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

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

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

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

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

שאלה 1

"איבר קסם" הוא איבר בתור מספרים שערכו שווה לסכום הערכים של האיבר שלפניו והאיבר שאחריו; האיבר הראשון והאחרון בתור אינם יכולים להיות "איברי קסם" (אין להם שכן משני הצדדים). בשני הסעיפים אסור להשתמש במערך או ברשימה מקושרת — פתרון שמשתמש בהם לא יזוכה בנקודות; פותרים אך ורק עם פעולות התור (insert/remove/head/isEmpty). לדוגמה: התור (מראש לסוף) 5, 11, 6, 9, 3, 6, 3.

התור שבדוגמה (מראש התור לסופו), המקומות 1 עד 7:

התור שבדוגמה

ראש התור →  5 | 11 | 6 | 9 | 3 | 6 | 3  ← סוף התור
   מקום:     1    2   3   4   5   6   7
סעיף א

כתבו פעולה ששמה isMagic בשפת Java או IsMagic בשפת C#, המקבלת תור – q מטיפוס שלם, ומספר שלם – m הגדול מ-0 וקטן או שווה לגודל התור. הפעולה תחזיר true אם האיבר במקום ה-m בתור הוא "איבר קסם", אחרת היא תחזיר false. הערות: – בסיום הפעולה חובה לשמור על מבנה התור כפי שהתקבל. – אין להשתמש בסעיף זה במערך או ברשימה מקושרת. פתרון הכולל שימוש בהם לא יזוכה בנקודות. לדוגמה: עבור התור שלפניכם (מראש התור לסופו): 5, 11, 6, 9, 3, 6, 3 עבור m = 1 הפעולה תחזיר false (המספר הראשון בתור אינו "איבר קסם"). עבור m = 2 הפעולה תחזיר true (5 + 6 = 11). עבור m = 3 הפעולה תחזיר false (11 + 9 ≠ 6).

public static boolean isMagic (Queue<Integer> q, int m)

סעיף ב

כתבו פעולה ששמה nMagic בשפת Java או NMagic בשפת C#, המקבלת תור מטיפוס שלם – q, ומספר שלם n הגדול מ-0 וקטן או שווה לגודל התור. הפעולה תחזיר true אם כל האיברים הנמצאים במקומות שהם כפולה של n (המקום ה-n בתור, המקום ה-2n בתור וכן הלאה בדילוגים של n מקומות) הם "איברי קסם". אחרת הפעולה תחזיר false. אפשר להשתמש בפעולה שכתבתם בסעיף א. הערות: – בפעולה זו אין צורך לשמור על התור שהתקבל. – אין להשתמש בסעיף זה במערך או ברשימה מקושרת. פתרון הכולל שימוש בהם לא יזוכה בנקודות. דוגמאות: עבור התור שבדוגמה שלעיל: עבור n = 2 הפעולה תחזיר true מכיוון שכל האיברים הנמצאים במקומות שהם כפולה של 2 (2, 4, 6) הם "איברי קסם". עבור n = 4 הפעולה תחזיר true מכיוון שהאיבר במקום ה-4 הוא "איבר קסם" (אין בתור איברים נוספים במקומות שהם כפולה של 4). עבור n = 3 הפעולה תחזיר false מכיוון שהאיבר במקום ה-3 אינו "איבר קסם".

public static boolean nMagic (Queue<Integer> q, int n)

שאלה 2

נתונה המחלקה Patient (id, priority — 1 עד 10, ככל שגבוה יותר הדחיפות גבוהה יותר) והמחלקה PriorQueue שמחזיקה q — הפניה לתור Patient. סדר הטיפול: קודם עדיפות גבוהה יותר; באותה עדיפות — מי שהגיע קודם. הדוגמה המשמשת לאורך השאלה: [13893,7] → [28834,7] → [72890,6] → [12223,4] → [13335,4] → [33800,4] (מראש התור לסופו). שני הסעיפים משתמשים אך ורק בפעולות התור.

public class Patient {
    private int id;
    private int priority;   // 1..10, higher = more urgent
    // get/set for both fields (given)
}

public class PriorQueue {
    private Queue<Patient> q;
    // get/set for q (given)
}

דוגמה לתור q (מראש התור לסופו):

התור q שבדוגמה

ראש התור → [id=13893, priority=7] → [id=28834, priority=7] → [id=72890, priority=6] → [id=12223, priority=4] → [id=13335, priority=4] → [id=33800, priority=4] ← סוף התור

העצם p והתור לאחר ההכנסה (סעיף א):

העצם p והתור לאחר ההכנסה (סעיף א)

סעיף א

ממשו את הפעולה שלפניכם השייכת לממשק המחלקה PriorQueue: הפעולה מקבלת חולה חדש – p ומכניסה אותו לתור q בהתאם לכללים של חדר המיון הכתובים לעיל. לדוגמה: עבור התור המוצג לעיל והעצם p שלפניכם: [id = 11210, priority = 6] התור ייראה כך לאחר ההכנסה (מראש התור לסופו): [13893, 7] → [28834, 7] → [72890, 6] → [11210, 6] → [12223, 4] → [13335, 4] → [33800, 4]

public void priorityInsert (Patient p)

סעיף ב

מדי פעם רמת הדחיפות של חולה מסוים משתנה במהלך שהותו בחדר המיון. ממשו את הפעולה שלפניכם השייכת לממשק המחלקה PriorQueue: הפעולה מקבלת מספר זהות של חולה הנמצא בתור – id, ומספר – pri המייצג את רמת הדחיפות המעודכנת שלו. הפעולה תעדכן את התכונה priority של החולה ותמקם אותו בתור לטיפול במקום המתאים לו (בהתאם לרמת הדחיפות המעודכנת – pri). אם בתור יש כבר חולים אחרים באותה רמת דחיפות – pri, החולה הנוכחי – id יוצב אחריהם כאילו הגיע אחריהם לחדר המיון.

public void update (int id, int pri)

שאלה 3

שאלה זו מודפסת בשני נוסחים שקולים: Java (עמוד 5) ו-C# (עמוד 6). נתונה שרשרת חוליות lst מטיפוס שלם: lst → 1 → 3 → 5 → 3 → 1 → 9 → 4 → null. נתונות שתי הפעולות הרקורסיביות what (מקבלת רשימה וערך x) ו-guess (מקבלת רשימה) — הקוד המלא מודפס בשאלון ומובא כלשונו בכל תשובה.

public static Node<Integer> what (Node<Integer> lst, int x)
{
    if (lst == null)
        return null;
    Node<Integer> temp = what (lst.getNext(), x);
    if (lst.getValue() == x)
        return temp;
    lst.setNext (temp);
    return lst;
}

public static void guess (Node<Integer> lst)
{
    if (lst != null)   {
        Node<Integer> temp = what (lst.getNext(), lst.getValue());
        lst.setNext (temp);
        guess (lst.getNext());
    }
}

השרשרת lst:

השרשרת lst

lst → 1 → 3 → 5 → 3 → 1 → 9 → 4 → null
סעיף א(1)

נתונה הפעולה what (ראו הקוד לעיל). עקבו אחר הפעולה what (lst, 1), והציגו את השרשרת שהפעולה מחזירה.

סעיף א(2)

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

סעיף א(3)

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

סעיף ב(1)

נתונה הפעולה guess (ראו הקוד לעיל). עקבו אחר הפעולה guess (lst), והציגו את השרשרת lst בסיום הפעולה. בסעיף זה אין צורך לעקוב אחר הפעולה what.

סעיף ב(2)

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

סעיף ב(3)

מהי סיבוכיות הפעולה guess? נמקו את תשובתכם.

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

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

  1. שאלה 1

    איבר קסם בתור — isMagic / NMagic

  2. שאלה 2

    תור עדיפויות בחדר מיון — PriorQueue

  3. שאלה 3

    שרשרת חוליות — הפעולות what ו-guess

  4. שאלה 4

    תחנת אוטובוס — BusStation

  5. שאלה 5

    תת-סדרה נגדית בשרשרת חוליות

  6. שאלה 6

    גרף לא מכוון — מסלולים מקודקוד ורכיב קשירות מינימלי

  7. שאלה 7

    שש טענות על גרפים — נכון / לא נכון

  8. שאלה 8

    גרף ממושקל — מסלולים קצרים ביותר מקודקוד S

  9. שאלה 9

    שפות רגולריות ובניית אוטומט סופי דטרמיניסטי

  10. שאלה 10

    פעולות על שפות ובניית אוטומט מחסנית דטרמיניסטי

  11. שאלה 11

    מכונת טיורינג - מעקב ומה המכונה מחשבת

  12. שאלה 12

    השכרת כלי רכב — היררכיית מחלקות, בונים ותשלום

  13. שאלה 13

    המחלקות AA ו-BB — הפעולות הבונות שיוצרות את תרשים העצמים

  14. שאלה 14

    המחלקות AA ו-BB — מה הקוד מדפיס

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

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

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

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

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

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