בגרות מדעי המחשב 899271, קיץ 2017 מועד א'
תאריך הבחינה: 16.5.2017
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
לתלמידי ותלמידות היחידות המתקדמות במדעי המחשב — כולל שלושת מסלולי הבחירה: אלגוריתמים, מודלים חישוביים ותכנות מונחה עצמים.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 7 שאלות המבחן — את כולן תוכלו לפתור אונליין.
לפניך הגדרה של חמש פעולות הפועלות על מבנה נתונים כלשהו (שמות הפעולות אינם כתובים ב-Java): insert(x) — מכניסה איבר x שערכו נתון (שלם) למבנה. showMin() — מחזירה את הערך הנמוך ביותר במבנה, בלי לשנות את המבנה. getMax() — מחזירה את האיבר שערכו הגדול ביותר במבנה, ומוציאה אותו מן המבנה (אם יש יותר מאיבר אחד בעל אותו הערך המקסימלי, מוציאה ומחזירה את זה שמופיע ראשון מבין השווים). exists(x) — פעולה בוליאנית: true אם קיים במבנה איבר שערכו x, אחרת false. div7() — פעולה בוליאנית: true אם קיים במבנה איבר שערכו מתחלק ב-7 בלי שארית, אחרת false.
השאלון עצמו נותן דוגמה פתורה (לא לביצוע): מבנה נתונים לביצוע insert ו-showMin בסיבוכיות O(1) ו-exists ו-getMax בסיבוכיות O(n) — הפתרון המוצע שם הוא רשימה מקושרת דו-כיוונית lst מטיפוס שלם, עם מצביע נוסף min לאיבר המינימלי: insert מכניס לראש הרשימה ומעדכן את min אם צריך (O(1)); showMin מחזיר את הערך שמצביע עליו min (O(1)); exists ו-getMax עוברים על כל הרשימה (O(n)).
בשני הסעיפים הבאים (א-ב) יש להציע — לכל אחד בנפרד — מבנה נתונים מתאים לדרישת הסיבוכיות השונה הנתונה, להסביר כיצד ממומשת כל פעולה, ולנמק מדוע המימוש עומד בדרישת הסיבוכיות.
הדוגמה הפתורה שבשאלון: רשימה מקושרת דו-כיוונית + מצביע min
lst (doubly linked, unsorted): head <-> ... <-> tail
min -> pointer to the current minimum node
הצע מבנה נתונים המאפשר לבצע את הפעולות insert ו-showMin בסיבוכיות O(n), ואת הפעולות getMax ו-exists בסיבוכיות O(1). לכל פעולה הסבר כיצד היא ממומשת, ונמק מדוע המימוש עומד בדרישת הסיבוכיות.
הצע מבנה נתונים המאפשר לבצע את הפעולות insert ו-getMax בסיבוכיות O(n), ואת הפעולה div7 בסיבוכיות O(1). הסבר כיצד ממומשות הפעולות, ונמק מדוע המימוש עומד בדרישת הסיבוכיות.
לפניך הפעולה check(t1, t2) ב-Java. הפעולה מקבלת שני עצים בינריים לא ריקים מטיפוס שלם, t1 ו-t2, ומחזירה רשימה המכילה את כל המספרים הנמצאים בעץ t1 ואינם נמצאים בעץ t2. הפעולה מזמנת פעולה נוספת המקבלת שלושה פרמטרים.
public class BinNode<T> {
private T value;
private BinNode<T> left;
private BinNode<T> right;
public BinNode(T value) { this.value = value; this.left = null; this.right = null; }
public T getValue() { return value; }
public void setValue(T value) { this.value = value; }
public BinNode<T> getLeft() { return left; }
public void setLeft(BinNode<T> left) { this.left = left; }
public BinNode<T> getRight() { return right; }
public void setRight(BinNode<T> right) { this.right = right; }
}
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; }
}
// הפעולה check(t1,t2) הבאה נתונה (אינה חלק מהמימוש):
public static Node<Integer> check(BinNode<Integer> t1, BinNode<Integer> t2) {
Node<Integer> first = new Node<Integer>(-1);
first = check(t1, t2, first);
return first.getNext();
}
ממש פעולה חיצונית exist. הפעולה מקבלת עץ בינרי t וערך x, ומחזירה true אם x קיים בעץ, אחרת false.
public static boolean exist (BinNode<Integer> t, int x)
לפניך הפעולה check(t1, t2) (הפעולה מקבלת שני עצים בינריים לא ריקים t1 ו-t2, ומחזירה רשימה חדשה (Node<Integer>) המכילה את כל המספרים הנמצאים בעץ t1 ואינם נמצאים בעץ t2). הפעולה נעזרת בפעולה נוספת בעלת שלושה פרמטרים. ממש את הפעולה: public static Node<Integer> check(BinNode<Integer> t1, BinNode<Integer> t2, Node<Integer> list). אתה יכול להשתמש בפעולה שמימשת בסעיף א.
public static Node<Integer> check (BinNode<Integer> t1, BinNode<Integer> t2, Node<Integer> list)
מהי סיבוכיות זמן הריצה של הפעולה שמימשת בסעיף ב? נמק את תשובתך.
הגרף G = (V , E) הוא גרף לא מכוון המיוצג על ידי רשימת הסמיכויות שלפניך: a → b → c → d b → a → c c → a → b d → a → f → e e → d → f f → e → d
רשימת הסמיכויות של G כפי שנדפסה בשאלון
a: b, c, d
b: a, c
c: a, b
d: a, f, e
e: d, f
f: e, d
סרטט את הגרף G המיוצג על ידי רשימת הסמיכויות שלפניך.
האם הגרף הנתון הוא גרף קשיר? נמק.
הפעל אלגוריתם סריקה לעומק (DFS) על הגרף הנתון החל בקדקוד a. סרטט רק את העץ הפורש שמתקבל. התבסס על ההיצג הנתון על ידי רשימת הסמיכויות (סדר השכנים כפי שנדפס).
הפעל אלגוריתם סריקה לרוחב (BFS) על הגרף הנתון החל בקדקוד a. סרטט רק את העץ הפורש שמתקבל. התבסס על ההיצג הנתון על ידי רשימת הסמיכויות.
כל שאלות המבחן — 7 שאלות, כל אחת עם פתרון מלא
לפי סדר המבחן. לוחצים על שאלה והמבחן נפתח בה: עונים, רואים פתרון מלא ומוסבר, וממשיכים לשאלה הבאה.
- שאלה 4
שאלה 4 — עיצוב מבנה נתונים לפי דרישות סיבוכיות
- שאלה 6
קיום ערך בעץ בינרי והשוואת שני עצים
- שאלה 10
ייצוג גרף ברשימת סמיכויות וסריקות DFS/BFS
- שאלה 11
שאלה 11 — אוטומטים סופיים: מונה זוגיות/מודולו, והימנעות מתת-מחרוזות אסורות
- שאלה 12
שאלה 12 — PDA ומכונת טיורינג עבור aⁿbᵐcⁿ⁺ᵐ
- שאלה 13
שאלה 13 — ממשקים מרובים, מימוש חובה, ותקינות המרות
- שאלה 14
שאלה 14 — המרות טיפוסים, שחזור היררכיית ירושה, גישה מוגנת, ושדה סטטי
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←