בגרות מדעי המחשב 899271, קיץ 2018 מועד א'
תאריך הבחינה: לא ידוע
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
לתלמידי ותלמידות היחידות המתקדמות במדעי המחשב — כולל שלושת מסלולי הבחירה: אלגוריתמים, מודלים חישוביים ותכנות מונחה עצמים.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 8 שאלות המבחן — את כולן תוכלו לפתור אונליין.
ענה על שתיים מן השאלות 4-6 (25 נקודות לכל שאלה). בכל שאלה שנדרש בה שימוש תוכל להיעזר בפעולות המחלקות תור, מחסנית, עץ בינרי וחוליה — בלי להשתמש באוגן, אם אתה משתמש בעולות נוספות, עליך למש אותן.
public class TwoItems
{
private int num1;
private int num2;
public TwoItems(int number1, int number2)
{
this.num1 = number1;
this.num2 = number2;
}
// get/set generated for num1, num2
}
המחסנית stk1 לפני הפעולה (מהראש לתחתית): 1,6,32,5,5,7,4,9. לאחר הפעולה תיראה כך: 9,4,7,5,5,32,6,1 (א). בסעיף ב אותה stk1 מתפרקת לזוגות TwoItems: (1,9),(6,4),(32,7),(5,5) מהראש לתחתית.
stk1 (top->bottom): 1 6 32 5 5 7 4 9
כתוב פעולה חיצונית lastAndRemove ב-Java (או LastAndRemove ב-C#) המקבלת מחסנית, מוחקת את האיבר התחתון במחסנית, ומחזירה את ערכו. בסיום הפעולה האיברים האחרים במחסנית נשארים ללא שינוי. הנח שהמחסנית אינה ריקה.
public static int lastAndRemove(Stack<Integer> stk)
נתונה המחלקה TwoItems (שדות num1, num2; בנאי TwoItems(int number1, int number2); get/set). כתוב פעולה חיצונית stackTwoItems ב-Java (StackTwoItems ב-C#) המקבלת מחסנית stk1 שאינה ריקה, ובגודל זוגי, ומחזירה מחסנית חדשה מטיפוס TwoItems. האיבר התחתון במחסנית המוחזרת יכיל ב-num1 את האיבר התחתון שהיה במחסנית stk1, וב-num2 את האיבר התחתון שהיה מעליו... וכן הלאה, כך שהאיברים שבראש המחסנית המוחזרת של TwoItems הם שני איברים סמוכים באמצע המחסנית stk1. עליך להיעזר בפעולה שכתבת בסעיף א. אין צורך לשמור על התוכן המקורי של מחסנית stk1.
public static Stack<TwoItems> stackTwoItems(Stack<Integer> stk1)
שים לב: לשאלה זו נוסח אחד ב-Java (עמוד זה) ונוסח אחר ב-C# (בעמוד הבא). לפניך הפעולה sod1, המקבלת הפניה lst לשרשרת חוליות ותו ch, ומחזירה הפניה לחוליה הראשונה בשרשרת שערכה שווה ל-ch (או null אם אינו מופיע).
public static Node<Character> sod1(Node<Character> lst, char ch)
{
if (lst == null)
return null;
if (lst.getValue() == ch)
return lst;
return sod1(lst.getNext(), ch);
}
public static boolean sod2(Node<Character> lst)
{
if (sod1(lst,'a') != null && sod1(lst,'b') != null)
return true;
return false;
}
דוגמת מעקב לסעיף א: שרשרת c->d->v->h, קריאה sod1(lst,'v').
lst: c -> d -> v -> h -> null
דוגמאות לסעיף ג: y-b-a (b,a סמוכים, true); m-a-b-l (a,b סמוכים, true); w-a-c-b (a,b קיימים אך לא סמוכים, false).
y->b->a | m->a->b->l | w->a->c->b
עקוב אחר הפעולה וכתוב מה יוחזר עבור ch='v' וההפניה lst לשרשרת חוליות של תווים c,d,v,h.
public static Node<Character> sod1(Node<Character> lst, char ch)
מהי מטרת הפעולה sod1?
מהי סיבוכיות זמן הריצה של הפעולה sod1? נמק.
נתונה הפעולה sod2 (מקבלת lst, קוראת ל-sod1 פעמיים על 'a' ו-'b'). מה מטרת הפעולה sod2?
public static boolean sod2(Node<Character> lst)
כתוב פעולה בוליאנית המקבלת הפניה לשרשרת חוליות של תווים ומחזירה true אם מופיעות בה שתי חוליות סמוכות שערכיהן 'a' 'b' או 'b' 'a', אחרת — הפעולה מחזירה false. עליך להשתמש בפעולה sod1.
public static boolean adjacentAB(Node<Character> lst)
נתונה הפעולה הבאה (הפעולה מחזירה true אם x קטן מכל הערכים בעץ t, אחרת מחזירה false; סיבוכיות זמן הריצה של הפעולה היא O(n), כאשר n מייצג את מספר הצמתים בעץ t):
public static boolean lessThanTree(BinNode<Integer> t, int x)
{
if (t == null)
return true;
if (!(x < t.getValue()))
return false;
return lessThanTree(t.getLeft(), x) && lessThanTree(t.getRight(), x);
}
// lessThanTree מוחזרת true אם x קטן מכל הערכים בעץ t, אחרת false. סיבוכיות זמן הריצה היא O(n), כאשר n מייצג את מספר הצמתים בעץ t.
כתוב פעולה חיצונית treeLessThanTree ב-Java (TreeLessThanTree ב-C#), המקבלת שני עצים בינאריים t1 ו-t2 של ערכים שלמים. הפעולה מחזירה true אם כל ערך בעץ t1 קטן מכל ערך בעץ t2, אחרת — הפעולה מחזירה false. אם t1 הוא null — הפעולה תחזיר true. אפשר להשתמש בפעולה הנתונה בלי לממש אותה בעצמך; אם אתה משתמש בפעולות אחרות, עליך לממש אותן.
public static boolean treeLessThanTree(BinNode<Integer> t1, BinNode<Integer> t2)
מהי סיבוכיות זמן הריצה של הפעולה שכתבת בסעיף א? נמק.
כל שאלות המבחן — 8 שאלות, כל אחת עם פתרון מלא
לפי סדר המבחן. לוחצים על שאלה ועוברים לעמוד שלה: השאלה המלאה, השרטוט, ופתרון מלא ומוסבר צעד אחרי צעד.
- שאלה 4
שאלה 4 — מחסנית: lastAndRemove ו-stackTwoItems
- שאלה 5
שאלה 5 — שרשרת חוליות: sod1/sod2 ופעולת adjacentAB
- שאלה 6
שאלה 6 — עץ בינרי: treeLessThanTree תוך שימוש ב-lessThanTree
- שאלה 10
שאלה 10 — רכיבי קשירות חזקה בגרף מכוון הנתון כמטריצת סמיכויות
- שאלה 11
שאלה 11 — השלמת אוטומט לספירת הפרש c-d, ותכונות סגירות של שפות
- שאלה 12
שאלה 12 — אוטומט מחסנית ל-a²b^k a^n (n<k), ומכונת טיורינג לפונקציה מקטעית
- שאלה 13
שאלה 13 — חידת ירושת יהלום — שחזור עץ הירושה מרמזי הידור/זמן-ריצה
- שאלה 14
שאלה 14 — מס ארנונה: היררכיית Resident פולימורפית
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←