נתונה המחלקה Order - הזמנה של לקוח, ולה שתי תכונות: id - מספר זהות של הלקוח (שלם), count - כמות המוצרים שהוזמנו (שלם). יש לה get/set וקונסטרוקטור:
נתונה המחלקה Order - הזמנה של לקוח, ולה שתי תכונות: id - מספר זהות של הלקוח (שלם), count - כמות המוצרים שהוזמנו (שלם). יש לה get/set וקונסטרוקטור:
בחברת המשלוחים "ברק" נבנה תור qOrder מטיפוס Order, השומר את הזמנות הלקוחות ביום מסוים. ייתכן שאותו לקוח (id) יופיע כמה פעמים בתור (כמה הזמנות באותו יום), ומיקום ההזמנות בתור אינו לפי סדר כלשהו. בסוף היום מבצעים בתור חדש איחוד הזמנות לפי מזהה לקוח (id): לכל לקוח נשמרת הזמנה אחת בלבד, עם סך כל המוצרים שהוא הזמין. דוגמה: 3 הזמנות של אותו לקוח - 20, 15, 30 מוצרים - הופכות לאחר האיחוד להזמנה אחת של 65 מוצרים.
מגבלה החלה על שני הסעיפים: אסור להשתמש במערך, ברשימה, או בכל מבנה נתונים אחר פרט לתור (Queue) עצמו - פתרון שמשתמש במבנה אחר לא יזוכה בנקודות.
public class Order { int id; int count; /* get/set + constructor as described */ }
ממשו את הפעולה שלפניכם: הפעולה מקבלת תור שיש בו הזמנות – qOrder – ובו אותו לקוח יכול להופיע יותר מפעם אחת, ומחזירה תור חדש ובו יש איחוד הזמנות כפי שהוסבר לעיל. הערות: – אין חשיבות לסדר ההזמנות לאחר איחוד ההזמנות. – אין להשתמש בסעיף זה במערך או ברשימה או במבנה נתונים אחר פרט לתור (או בשום מבנה נגדית שיש בו גרסה נגדית דוגמה אחר פרט לתור). פתרון הכולל שימוש בהם לא יזוכה בנקודות. – אפשר לשנות את התור שהתקבל.
public static Queue<Order> uniteOrders (Queue<Order> qOrder)
מהי סיבוכיות זמן הריצה של הפעולה? נמקו את תשובתכם.
"לקוח רגיל" הוא לקוח שהזמין לקוח שהזמין פחות מ-10 מוצרים סך הכול ביום מסוים, ו"לקוח מועדף" הוא לקוח שהזמין 10 מוצרים ומעלה סך הכול ביום מסוים. ממשו את הפעולה שלפניכם: הפעולה מקבלת תור הזמנות של יום מסוים – qOrder מטיפוס Order (תור "לא מאוחד", שבו אותו לקוח יכול להופיע כמה פעמים), ומחזירה תור חדש שבו כל מי שהוא "לקוח מועדף" יופיעו מספרי הזהות (id) של כל מי שהוא "לקוח רגיל" (של סדר הלקוחות בכל קבוצה). אפשר להשתמש בפעולה שכתבתם בסעיף א. הערות: – כל לקוח (id) יופיע פעם אחת בלבד בתור המוחזר. – אין להשתמש בסעיף זה במערך או ברשימה או במבנה נתונים אחר פרט לתור (או בשום מבנה נתונים אחר פרט לתור). פתרון הכולל שימוש בהם לא יזוכה בנקודות. – אפשר לשנות את התור שהתקבל.
public static Queue<Integer> preferredClients (Queue<Order> qOrder)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.