בגרות מדעי המחשב 899271, קיץ 2019 מועד א'
תאריך הבחינה: לא ידוע
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
לתלמידי ותלמידות היחידות המתקדמות במדעי המחשב — כולל שלושת מסלולי הבחירה: אלגוריתמים, מודלים חישוביים ותכנות מונחה עצמים.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 8 שאלות המבחן — את כולן תוכלו לפתור אונליין.
לפניך הפעולה secret1:
public static boolean secret1 (int num, int digit) {
if (num < 10)
return ( num % 2 == digit % 2 );
if ( num % 2 != digit % 2 )
return false;
return secret1 ( num / 10, digit );
}
לפניך הפעולה secret2:
public static boolean secret2 ( Stack<Integer> s ) {
boolean ok;
int x;
if ( s.isEmpty() )
ok = true;
else {
x = s.pop();
if ( !(secret1 (x, x % 10)) )
ok = false;
else
ok = secret2(s);
}
return ok;
}
כתוב מה תחזיר הקריאה secret1(937, 5) (ב-C#: Secret1(937, 5)). עליך להראות מעקב.
הבא דוגמה למספר num בעל 3 ספרות, שעבורו הקריאה secret1(num, 5) תחזיר ערך שונה ממה שהתקבל בסעיף הקודם. עליך להראות מעקב.
כתוב במשפט אחד מה מבצעת הפעולה הבוליאנית secret1, כלומר מהי השאלה שעליה הפעולה מחזירה true או false.
עבור המחסנית s שלפניך (ראש המחסנית: 426, ולאחריו 25, 531, 321), כתוב מה תחזיר הפעולה secret2. עליך להראות מעקב (אין צורך להראות מעקב אחר קריאות הפעולה secret1).
כתוב במשפט אחד מה מבצעת הפעולה הבוליאנית secret2, כלומר מהי השאלה שעליה הפעולה מחזירה true או false.
"תור מספר" הוא תור (המיוצג כשרשרת חוליות מטיפוס Node<Integer>) של ספרות בין 1 ל-9 (כולל), המייצג מספר שלם -- החולייה הראשונה (ראש התור) היא ספרת האחדות, השנייה ספרת העשרות וכן הלאה (למשל התור [6,9,1] מייצג את 196). הנח שמספר הספרות האפשרי בתור לא חורג ממה שטיפוס int יכול להכיל. המחלקה הגנרית Node<T> (עם getValue/setValue/getNext/setNext, ובC# Get/Set-PascalCase) אינה מודפסת מחדש בעמוד זה של השאלון -- היא המחלקה הסטנדרטית של הקורס לשרשראות חוליות, הזהה לזו שמופיעה מפורשות בשאלות שרשרת-חוליות אחרות באותה סדרת בחינות (למשל 899381/2022 שאלה 4).
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; }
}
תור-מספר בודד המייצג את 196: ראש התור (יחידות)=6, לאחריו 9 (עשרות), 1 (מאות)
q -> [6] -> [9] -> [1] -> null (ראש=יחידות)
שרשרת של ארבעה תורי-מספר, המייצגים (בהתאמה) את 62, 427, 82, 691
lst -> [q:2,6] -> [q:7,2,4] -> [q:2,8] -> [q:1,9,6] -> null
כתוב פעולה בשם toNumber (ב-C#: ToNumber), המקבלת "תור מספר" q, ומחזירה את המספר המיוצג בתור. הערה: אין חובה לשמור על מבנה התור.
public static int toNumber (Node<Integer> q)
נתונה שרשרת חוליות ובה כל חולייה מכילה "תור מספר" (כהגדרתו בסעיף א). כתוב פעולה בשם bigNumber (ב-C#: BigNumber), המקבלת הפניה lst לשרשרת החוליות, ומחזירה את המספר הגדול ביותר מבין המספרים המיוצגים בשרשרת החוליות. חובה להשתמש בפעולה שהוגדרה בסעיף א.
public static int bigNumber (Node<Node<Integer>> lst)
נתונה המחלקה Range שיש לה שתי תכונות: low -- מספר מטיפוס שלם. high -- מספר מטיפוס שלם, גדול מ-low. הנח שלכל תכונה הוגדרו ב-Java הפעולות get/set (ובC# Get/Set). עץ טווחים הוא עץ שאיבריו הם אובייקטי Range. עץ טווחים מסודר הוא עץ ריק, או עץ שבו לכל צומת מתקיימים: (1) אם יש בן שמאלי -- ה-low של הצומת שווה ל-low של הבן השמאלי, וה-high של הצומת גדול או שווה ל-high של הבן השמאלי; (2) אם יש בן ימני -- ה-high של הצומת שווה ל-high של הבן הימני, וה-low של הצומת קטן או שווה ל-low של הבן הימני; (3) אם יש שני בנים -- ה-high של הבן השמאלי קטן מה-low של הבן הימני. השאלה כוללת סעיף יחיד (ללא תת-סעיפים נוספים) ולכן מסומנת כסעיף א.
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; }
}
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; }
}
דוגמה לעץ טווחים מסודר: שורש [1,10]; בן שמאלי [1,4] עם בן שמאלי [1,3]; בן ימני [5,10] עם בנים [5,6] ו-[8,10]
[1,10]
/ \
[1,4] [5,10]
/ / \
[1,3] [5,6] [8,10]
כתוב פעולה חיצונית בוליאנית בשם order (ב-C#: Order), המקבלת עץ טווחים (או עץ ריק), ומחזירה true אם העץ הוא עץ טווחים מסודר, אחרת -- מחזירה false.
public static boolean order (BinNode<Range> tree)
כל שאלות המבחן — 8 שאלות, כל אחת עם פתרון מלא
לפי סדר המבחן. לוחצים על שאלה ועוברים לעמוד שלה: השאלה המלאה, השרטוט, ופתרון מלא ומוסבר צעד אחרי צעד.
- שאלה 4
שאלה — פעולות נסתרות: רקורסיה על ספרות מספר ועל מחסנית
- שאלה 5
שאלה — תור-מספר כשרשרת חוליות, ושרשרת של תורי-מספר
- שאלה 6
שאלה — עץ טווחים מסודר (Range Tree)
- שאלה 10
שאלה — גרף מכוון-משוקלל: מטריצת סמיכויות ומסלולים קצרים ביותר
- שאלה 11
שאלה — שפות פורמליות L1, L2: רגולריות מול אי-רגולריות, ובניית אוטומט מתאים
- שאלה 12
שאלה — מכונת טיורינג: סינון ספרות 1 מתוך מילה בינארית
- שאלה 13
שאלה — עומס-יתר (Overloading) מול דריסה (Overriding): equals רב-חתימתי
- שאלה 14
שאלה — היררכיה, הרכבה ושרשור בנאים: First / Second / Third
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←