נתונה המחלקה Cube - קוביה, ולה שתי תכונות:
- size – גודל הקוביה בסמ"ר, מטיפוס מספר שלם.
- type – סוג הקוביה, מטיפוס תו.
הניחו שיש פעולות get לתכונות המחלקה.
נתונה המחלקה Box - קופסה, ולה שתי תכונות:
- cubes - מערך בגודל 3 מטיפוס Cube, בו שומרים את הקוביות. ניתן להכניס למערך קוביות או שכולן מאותו סוג או שכולן מאותו גודל.
- count – כמות הקוביות במערך.
לפניכם פעולות המחלקה Box. ניתן להשתמש בפעולות ללא צורך במימוש:
public Box() { cubes = new Cube[3]; count = 0; }— פעולה בונה.public boolean add(Cube c)— הפעולה מקבלת עצם מסוג Cube. אם ניתן להכניס את העצם למערך (בהתאם לדרישות לעיל), הפעולה מכניסה אותה למקום הראשון שפנוי במערך (ומעדכנת את ערך המשתנה count) ומחזירה true. אחרת (אם המערך מלא או שהעצם אינו עונה על הדרישות לעיל), הפעולה מחזירה false ללא שינוי ערכי המערך.
דוגמה לתור q (מראש התור עד סופו) לסעיף ב
ראש התור: Cube(1,'a'), Cube(2,'a'), Cube(2,'b'), Cube(1,'a'), Cube(1,'a'), Cube(1,'a'), Cube(3,'b'), Cube(3,'a') :סוף התור
קופסה נקראת "מושלמת" אם יש בה 3 קוביות מאותו הסוג וגם מאותו הגודל. ממשו את הפעולה הפנימית שלפניכם במחלקה Box, המחזירה true אם הקופסה מושלמת, אחרת false.
public boolean isPerfect ()
במפעל צעצועים אורזים קוביות לקופסאות לפי סדר הגעתן. ממשו את הפעולה החיצונית שלפניכם: מקבלת תור של קוביות ומחזירה עצם מסוג Box. הפעולה תכניס קוביות מהתור (לפי סדר הופעתן) לקופסה, כל עוד פעולת ההכנסה אפשרית (לפי add). אם לא ניתן להכניס את הקובייה הבאה בתור, הפעולה תעצור ותחזיר את הקופסה שנוצרה. הערה: בסיום הפעולה סדר הקוביות בתור המקורי נשמר, ללא הקוביות שהוכנסו לקופסה.
דוגמה: עבור התור שבשאלה, הפעולה תחזיר עצם מסוג Box ובו הערך של count הוא 2 והמערך cubes הוא: Cube(1,'a'), Cube(2,'a'), null. מצב התור בסוף הפעולה הוא: ראש התור: Cube(2,'b'), Cube(1,'a'), Cube(1,'a'), Cube(1,'a'), Cube(3,'b'), Cube(3,'a') :סוף התור. הסבר: הסוג של שתי הקוביות הראשונות זהה ולכן ניתן להכניסן לקופסה. הקובייה השלישית מסוג שונה ולכן לא נכנסת לקופסה.
public static Box packBox (Queue<Cube> q)
כתבו פעולה חיצונית בשם packAll המקבלת תור q של עצמים מסוג Cube. הפעולה: תחזיר תור מסוג Box לאחר הכנסת כל הקוביות לקופסאות לפי הכללים לעיל; תדפיס perfect לאחר הכנסת כל הקוביות לקופסאות, אם קיימת לפחות קופסה אחת "מושלמת", אחרת תדפיס not perfect.
דוגמה: עבור התור מסעיף א הפעולה תחזיר את התור שלפניכם ותדפיס perfect: ראש התור: Box(cubes: Cube(1,'a'), Cube(2,'a'), null; count = 2), Box(cubes: Cube(2,'b'), null, null; count = 1), Box(cubes: Cube(1,'a'), Cube(1,'a'), Cube(1,'a'); count = 3), Box(cubes: Cube(3,'b'), Cube(3,'a'), null; count = 2) :סוף התור. הסבר: בהתאם לדרישות האמורות לעיל, יש צורך בארבע קופסאות. הקופסה השלישית בתור היא קופסה מושלמת.
public static Queue<Box> packAll (Queue<Cube> q)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.