אתם מתרגלים שאלה מתוך מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנהמבחן 2023 · קיץ מועד א · שאלה 9כל שאלות המבחן ←
מבנים לינארייםתורים

פעולה רקורסיבית what המוציאה מהתור רק רצף רציף השווה לערך נתון, ופעולה secret המשתמשת בה כדי לצבור מכפלות 'ערך·אורך-ריצה' ולבנות מהן תור חדש. שני סעיפי מעקב: what לבדה, ו-secret כולל שחזור התור המקורי מתוך הפלט.

public  static  int  what (Queue<Integer> q , int x)
{
if ( q.isEmpty() || x != q.head() )
return 0;
    x = q.remove();
    return   1 + what(q , x);
}

public  static  int  secret(Queue<Integer> q)
{
    if (q.isEmpty())  return 0;
    int x = q.head();
    int z = x * what(q, x);
    int y = 1 + secret(q);
    q.insert(z);
    return y;
}
סעיף א

עקבו אחר ביצוע הפעולה what (ראו קוד לעיל). ענו:

  1. מה יחזיר זימון הפעולה what(q,5) עבור התור q:[5,5,5,3,3,2,8] (5 בראש התור)? יש להראות מעקב אחרי ביצוע הפעולה.
  2. אחרי זימון הפעולה what(q, x) עבור התור q לא ריק, התור q נשאר ללא שינוי. האם הטענה 'ערך x לא מופיע בתור' נכונה? הסבירו את תשובתכם.
  3. תנו דוגמה של תור q שעבורו זימון הפעולה what(q, 7) תחזיר 4. איך ייראה התור אחרי זימון הפעולה?
  4. מה מבצעת הפעולה?
סעיף ב

נתונה הפעולה secret (ראו קוד לעיל). עקבו אחר הפעולה secret(q) עבור התור q:[5,5,1,1,4,4,4,5,6] (5 בראש התור). אין צורך לפרט את המעקב אחרי הפעולה what. ענו:

  1. מהו הערך המוחזר מהפעולה secret?
  2. איך ייראה התור בסיום הפעולה secret?
  3. אחרי זימון הפעולה secret(q) התור q נראה כך: q:[6,16,2,3] (6 בראש התור). איך נראה התור q לפני זימון הפעולה?
שאלות ותגובות על השאלה

🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות

שאלו כאן — ותקבלו מענה מוסמך.

🎓 מרצה לתכנות עונה כאן — תקבלו מענה מקצועי