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

כדי לממש מערכת לניהול משימות הגדירו את המחלקה Task (משימה) שיש לה ארבע תכונות: כותרת המשימה – title, מטיפוס מחרוזת String; מספר הדקות הנדרש לסיום ביצוע המשימה – minutes, מטיפוס מספר שלם int; דרגת העדיפות של המשימה – priority, שהיא מספר שלם חיובי int (מספר גבוה יותר מייצג דרגת עדיפות גבוהה יותר); האם המשימה בוצעה? – isComplete, מטיפוס בוליאני boolean (הערך false משמעותו שהמשימה לא הסתיימה). ניתן להניח כי פעולות get, set הוגדרו לכל התכונות. כדי לנהל את המשימות הוגדרה המחלקה TaskManager המכילה 2 תכונות: מערך של משימות – tasks, בגודל 100 של Task; מספר שלם numOfTasks המציין את מספר המשימות שיש כרגע. בכל הפעולות במחלקה זו עליכם לוודא שהערך numOfTasks מעודכן.

סעיף א

כתוב במחלקה Task את הפעולה int doIt(int num). הפעולה מקבלת מספר דקות num לביצוע המשימה. אם הפרמטר num גדול ממספר הדקות הנדרש לביצוע המשימה, הפעולה מחזירה את מספר הדקות ה"עודפות" (כלומר הדקות שיותר ממה שנדרש), אחרת היא מחזירה 0. הפעולה גם מעדכנת תכונות minutes ו-isComplete בהתאם.

public int doIt(int num)

סעיף ב

כתוב במחלקה TaskManager את הפעולה boolean addTask(Task t). הפעולה מקבלת משימה חדשה t ומכניסה אותה למקום הראשון הפנוי במערך המשימות, אם אין מקום, הפעולה תחפש משימה שהסתיימה כבר, ותכניס במקומה את המשימה החדשה. הפעולה תחזיר true אם המשימה הוכנסה, אחרת הפעולה תחזיר false. הפעולה גם תעדכן את התכונה numOfTasks בהתאם.

public boolean addTask(Task t)

סעיף ג

כתוב במחלקה TaskManager את הפעולה int importantTask(). הפעולה מחזירה את המיקום במערך tasks של המשימה בעדיפות הגבוהה ביותר שהביצוע שלה עוד לא הסתיים. אם יש כמה משימות בעדיפות הגבוהה ביותר שלא הושלמו, הפעולה תחזיר מיקום (אינדקס) של אחת מהן. אם אין אף משימה שביצועה עדיין לא הסתיים, הפעולה תחזיר את הערך -1.

public int importantTask()

סעיף ד

כתוב במחלקה TaskManager את הפעולה void work(int num). הפעולה מקבלת מספר שלם המייצג את הזמן בדקות שהוקצה לעבודה. הפעולה תשקיע את הזמן בביצוע משימה כלשהי שעדיין לא הסתיימה ובעדיפות הגבוהה ביותר שיש במערך tasks. הפעולה תעדכן את תכונות המשימה בהתאם. אם אחרי ביצוע המשימה יישאר זמן, הפעולה תמצא משימה נוספת בעדיפות הגבוהה ביותר שעוד לא הסתיימה ותטפל בה. הפעולה תסיים את העבודה כאשר יסתיים ביצוע של כל המשימות או יגמר הזמן שהוקצה לעבודה.

public void work(int num)

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

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

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

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