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

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

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

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

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

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

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

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

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

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

שאלה 1

נתונה המחלקה Range (טווח), ולה שתי תכונות: low ו-high, המקיימות high ≥ low, עם get/set. מספר x "מוכל" בעצם Range אם low ≤ x ≤ high. שרשרת חוליות lst1 מטיפוס מספר שלם "מוכלת" בשרשרת חוליות lst2 מטיפוס Range אם עבור כל מספר בשרשרת lst1 קיימת חוליה בשרשרת lst2 שמכילה אותו. הנחות: lst1 ו-lst2 אינן null; כל העצמים בשרשרת lst2 אינם null; השרשרת lst1 ממוינת בסדר עולה; השרשרת lst2 ממוינת בסדר עולה, כלומר עבור כל חוליה קטן ה-high שלה מה-low של החוליה הבאה אחריה בשרשרת.

public class Node<T> {
    private T value;
    private Node<T> next;
    public Node(T value) { this.value = value; this.next = null; }
    public T getValue() { return value; }
    public void setValue(T value) { this.value = value; }
    public Node<T> getNext() { return next; }
    public void setNext(Node<T> next) { this.next = next; }
}

public class Range {
    private int low;
    private int high;
    public Range(int low, int high) { this.low = low; this.high = high; }
    public int getLow() { return low; }
    public void setLow(int low) { this.low = low; }
    public int getHigh() { return high; }
    public void setHigh(int high) { this.high = high; }
}

שרשרת lst1 המוכלת בשרשרת lst2 (דוגמת השאלון)

lst1: (-9)->(-8)->(-7)->(12)->(14)->(15)->null
lst2: [-20,-10]->[-9,0]->[2,4]->[12,12]->[14,17]->null
סעיף א

ממשו את הפעולה החיצונית שלהלן: הפעולה מחזירה true אם lst1 "מוכלת" ב-lst2, אחרת מחזירה false. הפעולה חייבת לעבוד בסיבוכיות זמן ריצה של O(N), כאשר N הוא אורך השרשרת הארוכה מבין שתי השרשראות.

public static boolean isIncluded (Node<Integer> lst1, Node<Range> lst2)

שאלה 2

נתונה המחלקה TwoStack, ולה שתי תכונות: numbers (מחסנית מטיפוס שלם) ו-sums (מחסנית מטיפוס שלם). היחס בין numbers ל-sums: המספר בסוף המחסנית sums שווה למספר בראש המחסנית numbers; המספר השני מסוף sums שווה לסכום שני המספרים האחרונים ב-numbers; המספר השלישי מסוף sums שווה לסכום שלושת המספרים האחרונים ב-numbers; וכן הלאה עד המספר בראש sums, שהוא סכום כל המספרים ב-numbers. במילים אחרות: sums מחזיקה, מהתחתית לראש, את הסכום המצטבר של numbers מהתחתית שלה כלפי מעלה.

המחסניות המקבילות בדוגמת השאלון (numbers מלמטה: 2,-1,4,3,-9)

numbers (top->bottom): -9,3,4,-1,2   sums (top->bottom): -1,8,5,1,2
סעיף א

ממשו את הפעולה הפנימית שלהלן: מקבלת מספר x השווה לאחד המספרים במחסנית sums, ומחזירה מחסנית חדשה מטיפוס שלם שבה מופיעים המספרים מן numbers שסכומם שווה ל-x. הניחו ש-x קיים במחסנית sums ומופיע בה רק פעם אחת. אפשר לשנות את המחסניות של המחלקה (כסקראצ'); אין חשיבות לסדר המספרים במחסנית המוחזרת.

public Stack<Integer> getNums (int x)

סעיף ב

ממשו את הפעולה הפנימית שלהלן: מוחקת את המספר x מן numbers ומתקנת את sums בהתאם. הניחו ש-x קיים במחסנית numbers ומופיע בה רק פעם אחת. יש לשמור על סדר המספרים שנשארו במחסנית numbers.

public void eraseNum (int x)

שאלה 3

נתונות שתי הפעולות הרקורסיביות הבאות, הפועלות על מחסנית st מטיפוס שלם. סעיף א עוסק ב-stackSod1, וסעיף ב עוסק ב-stackSod2 (המשתמשת ב-stackSod1 מסעיף א).

public static void stackSod1(Stack<Integer> st, int element)
{
    if(st.isEmpty())
        st.push(element);
    else
    {
        int val = st.pop();
        stackSod1(st, element);
        st.push(val);
    }
}

public static void stackSod2 (Stack<Integer> st)
{
    if(!st.isEmpty())
    {
        int val = st.pop();
        stackSod2(st);
        stackSod1(st, val);
        st.push(val);
    }
}

המחסנית הנתונה בשני הסעיפים (מהראש לתחתית: 6,3,7,4)

st (top->bottom): 6,3,7,4
סעיף א1

סרטטו את המחסנית כפי שתיראה תיכף לאחר זימון הפעולה stackSod1(st, 9). יש להראות מעקב.

סעיף א2

מהי מטרת הפעולה stackSod1?

סעיף א3

מהי סיבוכיות זמן הריצה של הפעולה stackSod1?

סעיף ב1

סרטטו את המחסנית כפי שתיראה תיכף לאחר זימון הפעולה stackSod2(st). יש להראות מעקב מפורט (בסעיף זה אין צורך לבצע מעקב אחר stackSod1 בתוך הפעולה).

סעיף ב2

מהי מטרת הפעולה stackSod2?

סעיף ב3

מהי סיבוכיות זמן הריצה של הפעולה stackSod2?

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

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

  1. שאלה 4

    שאלה — הכלה בין שרשרת מספרים לשרשרת טווחים

  2. שאלה 5

    שאלה — TwoStack — מניפולציה על זוג מחסניות מקבילות

  3. שאלה 6

    שאלה — מעקב רקורסיבי אחרי מחסנית — stackSod1 ו-stackSod2

  4. שאלה 7

    שאלה — התאמת מילה למסלול מהשורש בעץ בינארי

  5. שאלה 12

    שאלה — אוטומט סופי — שפת a^n b^m עם תנאי מודולרי

  6. שאלה 13

    שאלה — אוטומט מחסנית ושרשור-עם-היפוך — השפות L1 ו-L2

  7. שאלה 14

    שאלה — חנות בגדים מקוונת — עיצוב מחלקות, Product מופשט, הנחה פולימורפית

  8. שאלה 15

    שאלה — Mammal/Antelope/Beaver — העמסה מול דריסה, קישור סטטי מול דינמי

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

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

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

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

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

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