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

הזיכרון מיוצג כשרשרת חוליות Node<Data>, כל חוליה מקטע (size, free). isDangerous בודקת אם היחס של הזיכרון הפנוי נמוך מ-10%. firstFit מיישמת את אלגוריתם ה-First Fit: מוצאת את המקטע הפנוי הראשון שמכיל את num, ומפצלת אותו לשני מקטעים — תפוס בגודל num, ופנוי בשארית — תוך שימוש ב-isDangerous כשומר-סף.

public class Data{
private bool free;
private int size;
//constructor
public Data (int size) {
    this.free = true;
    this.size = size;
  }
public bool IsFree() { return free; }
public int GetSize() { return size; }
public void SetFree(bool free) {this.free = free; }
public void SetSize(int size){ this.size = size;}
}
public class Memory {
private Node<Data> start;
public Memory(int totalSize) {
    this.start = new Node<Data>(new Data(totalSize));
 }
}

דוגמה לזיכרון שיש בו מקטע פנוי בגודל 137, אחריו מקטע תפוס בגודל 97, ולבסוף מקטע פנוי בגודל 342. אחרי זימון firstFit(142): מקטע פנוי 137, מקטע תפוס 97, מקטע תפוס חדש 142, ומקטע פנוי חדש 200 (הפעולה מחזירה true).

לפני: start -> [true,137] -> [false,97] -> [true,342] -> null
אחרי firstFit(142): start -> [true,137] -> [false,97] -> [false,142] -> [true,200] -> null
סעיף א

כתבו פעולה פנימית במחלקה Memory הבודקת את מצב הזיכרון, ומחזירה true אם הוא ב"מצב מסוכן", ולא — הפעולה מחזירה false. כאשר המעבד צריך להקצות זיכרון בגודל מסוים (num), הוא יכול להשתמש באלגוריתם First Fit: האלגוריתם מחפש את מקטע הזיכרון הפנוי הראשון שיכול להכיל את num (כלומר, שגודלו לפחות num), ומקצה לו מקום בזיכרון (קובע שמקטע הזיכרון במצב תפוס). אם הזיכרון ב"מצב מסוכן" האלגוריתם אינו מבצע דבר.

public bool IsDangerous()

סעיף ב

כתבו במחלקה Memory פעולה המממשת את האלגוריתם. כותרת הפעולה: boolean firstFit(int num). הפעולה מקבלת כפרמטר את num שהוא גודל הזיכרון הנדרש, מאתרת את המקטע הראשון הפנוי שגדול או שווה ל-num, משנה את הרשימה באמצעות הכנסת חוליה המייצגת מקטע תפוס בגודל num ומעדכנת את גודל המקטע הפנוי. הפעולה מחזירה true אם נמצא מקום כזה, ו-false אם לא נמצא מקום. אם הזיכרון נמצא ב"מצב מסוכן" הפעולה מחזירה false.

public bool FirstFit(int num)

שאלות ותגובות על השאלה

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

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

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