טוען...
טוען...
שימו לב
בכל שאלה שנדרש בה מימוש אפשר להשתמש בפעולות של המחלקות: תור, מחסנית, עץ בינרי וחוליה, בלי לממש אותן. אם משתמשים בפעולות נוספות, יש לממש אותן.
נתונה המחלקה Order – הזמנה של לקוח, ולה שתי תכונות:
id – מספר זהות של הלקוח, מטיפוס שלםcount – כמות המוצרים שהוזמנו, מטיפוס שלםהניחו שיש פעולות get ו־set לתכונות המחלקה, ופעולה בונה המקבלת ערכים בעבור תכונות המחלקה.
בחברת המשלוחים "ברק" נבנה תור – qOrder מטיפוס Order, השומר את ההזמנות השונות של הלקוחות ביום מסוים, שחברת המשלוחים צריכה לספק.
הערות
- ייתכן שיהיו בתור כמה הזמנות של אותו הלקוח –
id(אם יש ללקוח יותר מהזמנה אחת באותו היום).- מיקום ההזמנות בתור אינו לפי סדר כלשהו (וגם ההזמנות של אותו הלקוח יכולות להופיע במקומות שונים בתור).
בסוף היום, כדי לייעל את המשלוחים, מבצעים בתור חדש איחוד הזמנות לפי מזהה לקוח (id), כך שלכל לקוח נשמרת בתור הזמנה אחת בלבד, עם סך כל המוצרים שהוא הזמין בכל ההזמנות (count). כך למשל, אם יש בתור qOrder שלוש הזמנות של אותו הלקוח: הזמנה של 20 מוצרים, הזמנה של 15 מוצרים והזמנה של 30 מוצרים, לאחר האיחוד יופיע הלקוח רק פעם אחת בתור החדש – עם הזמנה של 65 מוצרים.
(1) ממשו את הפעולה שלפניכם:
java1public static Queue<Order> uniteOrders (Queue<Order> qOrder)
הפעולה מקבלת תור שיש בו הזמנות – qOrder ובו אותו לקוח יכול להופיע יותר מפעם אחת, ומחזירה תור חדש ובו יש איחוד הזמנות כפי שהוסבר לעיל.
הערות
- אין חשיבות לסדר ההזמנות לאחר איחוד ההזמנות.
- אין להשתמש בסעיף זה במערך או ברשימה מקושרת (או בשום מבנה נתונים אחר פרט לתור). פתרון הכולל שימוש בהם לא יזוכה בנקודות.
- אפשר לשנות את התור שהתקבל.
(2) מהי סיבוכיות זמן הריצה של הפעולה? נמקו את תשובתכם.
(1) "לקוח רגיל" הוא לקוח שהזמין פחות מ־10 מוצרים סך הכול ביום מסוים, ו"לקוח מועדף" הוא לקוח שהזמין 10 מוצרים ומעלה סך הכול ביום מסוים.
ממשו את הפעולה שלפניכם:
java1public static Queue<Integer> preferredClients (Queue<Order> qOrder)
הפעולה מקבלת תור הזמנות של יום מסוים – qOrder מטיפוס Order (תור "לא מאוחד", שבו אותו לקוח יכול להופיע כמה פעמים), ומחזירה תור מטיפוס שלם. בתחילת התור המוחזר יופיעו מספרי הזהות (id) של כל מי שהוא , ואחריהם יופיעו מספרי הזהות (id) של כל מי שהוא (ללא חשיבות לסדר הלקוחות בכל קבוצה).
אפשר להשתמש בפעולה שכתבתם בסעיף א.
הערות
- כל לקוח (
id) יופיע פעם אחת בלבד בתור המוחזר.- אין להשתמש בסעיף זה במערך או ברשימה מקושרת (או בשום מבנה נתונים אחר פרט לתור). פתרון הכולל שימוש בהם לא יזוכה בנקודות.
- אפשר לשנות את התור שהתקבל.
(2) מהי סיבוכיות זמן הריצה של הפעולה? נמקו את תשובתכם.
שימו לב
בכל שאלה שנדרש בה מימוש אפשר להשתמש בפעולות של המחלקות: תור, מחסנית, עץ בינרי וחוליה, בלי לממש אותן. אם משתמשים בפעולות נוספות, יש לממש אותן.
נתונה המחלקה Order – הזמנה של לקוח, ולה שתי תכונות:
id – מספר זהות של הלקוח, מטיפוס שלםcount – כמות המוצרים שהוזמנו, מטיפוס שלםהניחו שיש פעולות get ו־set לתכונות המחלקה, ופעולה בונה המקבלת ערכים בעבור תכונות המחלקה.
בחברת המשלוחים "ברק" נבנה תור – qOrder מטיפוס Order, השומר את ההזמנות השונות של הלקוחות ביום מסוים, שחברת המשלוחים צריכה לספק.
הערות
- ייתכן שיהיו בתור כמה הזמנות של אותו הלקוח –
id(אם יש ללקוח יותר מהזמנה אחת באותו היום).- מיקום ההזמנות בתור אינו לפי סדר כלשהו (וגם ההזמנות של אותו הלקוח יכולות להופיע במקומות שונים בתור).
בסוף היום, כדי לייעל את המשלוחים, מבצעים בתור חדש איחוד הזמנות לפי מזהה לקוח (id), כך שלכל לקוח נשמרת בתור הזמנה אחת בלבד, עם סך כל המוצרים שהוא הזמין בכל ההזמנות (count). כך למשל, אם יש בתור qOrder שלוש הזמנות של אותו הלקוח: הזמנה של 20 מוצרים, הזמנה של 15 מוצרים והזמנה של 30 מוצרים, לאחר האיחוד יופיע הלקוח רק פעם אחת בתור החדש – עם הזמנה של 65 מוצרים.
(1) ממשו את הפעולה שלפניכם:
java1public static Queue<Order> uniteOrders (Queue<Order> qOrder)
הפעולה מקבלת תור שיש בו הזמנות – qOrder ובו אותו לקוח יכול להופיע יותר מפעם אחת, ומחזירה תור חדש ובו יש איחוד הזמנות כפי שהוסבר לעיל.
הערות
- אין חשיבות לסדר ההזמנות לאחר איחוד ההזמנות.
- אין להשתמש בסעיף זה במערך או ברשימה מקושרת (או בשום מבנה נתונים אחר פרט לתור). פתרון הכולל שימוש בהם לא יזוכה בנקודות.
- אפשר לשנות את התור שהתקבל.
(2) מהי סיבוכיות זמן הריצה של הפעולה? נמקו את תשובתכם.
(1) "לקוח רגיל" הוא לקוח שהזמין פחות מ־10 מוצרים סך הכול ביום מסוים, ו"לקוח מועדף" הוא לקוח שהזמין 10 מוצרים ומעלה סך הכול ביום מסוים.
ממשו את הפעולה שלפניכם:
java1public static Queue<Integer> preferredClients (Queue<Order> qOrder)
הפעולה מקבלת תור הזמנות של יום מסוים – qOrder מטיפוס Order (תור "לא מאוחד", שבו אותו לקוח יכול להופיע כמה פעמים), ומחזירה תור מטיפוס שלם. בתחילת התור המוחזר יופיעו מספרי הזהות (id) של כל מי שהוא , ואחריהם יופיעו מספרי הזהות (id) של כל מי שהוא (ללא חשיבות לסדר הלקוחות בכל קבוצה).
אפשר להשתמש בפעולה שכתבתם בסעיף א.
הערות
- כל לקוח (
id) יופיע פעם אחת בלבד בתור המוחזר.- אין להשתמש בסעיף זה במערך או ברשימה מקושרת (או בשום מבנה נתונים אחר פרט לתור). פתרון הכולל שימוש בהם לא יזוכה בנקודות.
- אפשר לשנות את התור שהתקבל.
(2) מהי סיבוכיות זמן הריצה של הפעולה? נמקו את תשובתכם.