.. (לתיקייה המכילה) | ||
למדנו בקורס שצריך לחלק את העבודה לADT שונים. | |
הייעוד הוא למימוש פנימי של הממשקים שהגדרנו. למטרה הזו זה בסדר לממש רק מה שאתם צריכים. |
האם צריך לעדכן בפונקציה pqChangePriority את האלמנט עם העתק של המצביע לאלמנט שמועבר לפונקציה | |
כן. צריך למחוק את הגרסא הקודמת שנשמרה במבנה נתונים ולעדכן עם העתק חדש (2 האלמנטים שווים לפי פונקצית ההשוואה). (מומלץ להשתמש בפונקציה pqInsert) יש לשים לב שלאחר השימוש בpqChangePriority, אותו מצביע פנימי שאולי הוחזר בעבר (לפני השימוש בפונקציה pqChangePriority) בpqGetFirst,pqGetNext יהיה לא ולדי. |
האם בפונקציות pqGetFirst,pqGetNext אנו אמורים להחזיר את האלמנט עצמו או את ההעתק שלו? | |
מצביע לאלמנט עצמו שמאוחסן במבנה נתונים. |
בחלק היבש שאלה 2.1.1 סעיף א' בחלק היבש נכתב כי "מותר להניח שהקלט תקין", מה הכוונה? | |
הכוונה היא שאין צורך בבדיקת תקינות קלט (כלומר ניתן להניח שהמשתמש תמיד שולח קלט תקין), בניגוד למה שלמדתם בתרגולים. בפרט ניתן להניח כי times > 0 (גם כותב הקוד מניח את זה) |
האם יש צורך בתיעוד קבצי h? | |
יש צורך בתיעוד כל קבצי ה-h, פרט לקובץ event_manager.h והקבצים שניתנו לכם ותועדו. רמת הפירוט הנדרשת היא הוספת הסבר מעל לכל פונקציה - איך משתמשים בה, מה היא עושה - כפי שראיתם בתרגול. |
בפונקציה emGetNextEvent. אם המשתמש קורא פעמיים לפונקציה זאת ברציפות, האם הוא יקבל את אותו אירוע | |
כן, מכיוון שהזמן במערכת לא השתנה. |
האם ניתן להניח כי ל-dateTick יועבר תאריך עבורו לא יהיה מצב של int overflow עבור שנת התאריך? | |
כן. |
האם ניתן להשתמש במימוש שונה מן הסגל ל-priority queue? | |
לא, פקודת ה-gcc המופיעה במסמך מקשרת את מימוש הסגל בעת יצירת קובץ ההרצה בעת הבדיקה. |
האם ניתן להשתמש בספרייה string.h? | |
כן, זוהי ספרייה סטנדרטית. יש לבצע include <string.h> |
האם עדיפות חברי הוועד עשויה להשתנות כאשר emTick מזיז את התאריך קדימה? אם כן האם זה משפיע על ההדפסה? | |
כן, זה עשוי להשפיע על הדפסת חברי הוועד. |
האם מותר לשנות את קבצי ה-Header שסופקו על ידי הסגל? | |
לא, אתם לא מגישים את הקבצים הללו ולכן לא ניתן לשנותם (בעת הבדיקה לא תוכלו לשלוח את קבצי ה-header ששיניתם). |
האם חייבים לתעד את הפונקציות הסטטיות? | |
כן |
האם בפונקציה emCreate יש להעתיק את התאריך הניתן כקלט? | |
כן. |
בפונקציות ההדפסה (PrintAllEvents ו -PrintAllResponsibleMembers) - אם אין אירועים במקרה הראשון ואין חברי ועד במקרה השני, צריך ליצור קובץ ריק או לא ליצור את הקובץ בכלל? | |
יש ליצור קובץ ריק. |
בפונקציה emAddEventByDate - האם יש צורך בהעתקת event_name ו-date? | |
כן. |
במקרה שמוחזר EM_OUT_OF_MEMORY, האם באחריות המשתמש לשחרר את המידע שהוקצה על ידי המערכת? | |
שחרור המערכת em באחריות המשתמש, צריך לשים לב שיש לשחרר את כל הזיכרון שהוקצה בפונקציה עד ליציאה מן הפונקציה (בשורה בה מוחזרת השגיאה, אחרת יהיו דליפות זכרון) |
In emPrintAllEvents, if the order is: | |
event2 event1 |
האם יכול להיות אירוע שאינו מנוהל על ידי חברי ועד? | |
כן. במקרה זה בפונקציה emPrintAllEvents יודפס הפלט הבא: day,1.1.2002 כלומר, יש להדפיס את האירועים ללא שמות חברי הוועד. |
האם יש צורך ביצירת קובץ header לכל ADT חדש? | |
כן. |
בעת מעבר על האיברים באמצעות האיטרטור, האם יש סדר מסוים בו צריך לעבור? | |
כן, כפי שנכתב במסמך התרגיל האיטרציה על איברי התור צריכה להבטיח למשתמש מעבר על האיברים בסדר יורד לפי העדיפות שלהם (מהאיבר עם העדיפות הגבוהה ביותר, לאיבר עם העדיפות הנמוכה ביותר), נדע לעשות זאת באמצעות פונקציית השוואת העדיפויות (comparePriority) אשר מסופקת העת יצירת התור. פונקציית compare מחזירה 0 אם שני האיברים שהיא מקבלת שווים, ערך חיובי אם המפתח הראשון גדול מהשני וערך שלילי אם המפתח השני גדול מהראשון (בדומה לstrcmp). במקרה שישנן שתי עדיפויות זהות, האיטרטור יחזיר את האיברים לפי סדר הכנסתם לתור. |
כאשר מתבצעת קריאה לפונקציה עבורה נדרש כי ה-iterator לא יהיה מוגדר בסוף הפונקציה מה אמור להיות ערכו? | |
ערכו אמור להיות NULL, כלומר אם יש קריאה ישר אחרי הפונקציה הנ"ל לפונקציה pqGetNext יוחזר אמורה להחזיר את הערך NULL. |
בפונקציה printAllEvents, אם קיים כבר קובץ עם אותו שם על הפונקציה לדרוס את התוכן או לשרשר? | |
לדרוס את תוכן הקובץ |
ב-pqInsert, האם ה-priority גם צריך להיות מועתק (כמו ה-element)? | |
כן. |
ב-pqRemove אם מועבר תור ריק (כלומר תור תקין ללא איברים), האם יש להחזיר success? | |
כן |
בפונקציה emPrintAllResponsibleMembers, אם אחד הפרמטרים מקבל NULL מה יש לעשות? | |
יש לצאת מהפונקציה מבלי להדפיס כלום. |
בפונקציה emGetNextEvent, אם אין אירועים במערכת מה יש להחזיר? | |
יש להחזיר NULL. |
ב-priority queue מה קורה בפונקציות עבורן לא מוגדר ערך האיטרטור? | |
יש לשמור על האיטרטור במצב שהיה לפני הקריאה לפונקציה. |
1. האם קיימות הנחות עליהן נוכל להתבסס בהקשר לפונקציית Copy של המשתמש? | |
1. כמובן שצריך לבדוק שערך ההחזרה הוא לא NULL, ואפשר להניח שאם היא מחזירה NULL אז הmalloc נכשל. 2. התנהגות לא צפויה - אין צורך להתמודד עם double destroy. |
בפונקציה emPrintAllResponsibleMembers, אם הקובץ file_name לא קיים, מה יש לעשות? | |
יש ליצור את הקובץ. |
האם יש שימוש ב-PQ_ITEM_DOES_NOT_EXIST? | |
לא, אין צורך להשתמש בקוד שגיאה זה. |
מה אמור להיות מוחזר כאשר קוראים לפונקציה pqGetNext לפני שהפונקציה pqGetFirst נקראה? | |
הפונקציה pqGetNext צריכה להחזיר NULL. |
The exercise states that when incrementing the date of the event manager, all events which occur in the timeframe must be removed from the manager. | |
It should include events that occur on the current date of the system |
בחלק הראשון (התור) מה הכוונה שהאיטרטור הוא למשתמשי התור ולא לנו?האם אסור לנו להשתמש בו במהלך התכנית שלנו? | |
It just means that there's a public iterator that must follow the interface defined by pqGetFirst and pqGetNext. If a user tries to use this iterator, it should look to the user as if the iterator iterates over all the elements in the priority queue, in the correct order and without skipping any element. If your implementation uses this iterator internally, it might change the iterator state and break the expectation of the user (i.e., it breaks the interface, so it is a bug). (some functions are supposed to change the iterator's state, see the documentation) |
האם יש הגבלה על מספר האירועים במערכת? | |
כן, ניתן להניח שיש ש פחות מ-2 בחזקת 32 אירועים, כלומר ניתן להציג את ה-id של אירוע באמצעות משתנה מטיפוס int. |
בפונקציה emPrintAllEvents, האם יש חובה לרדת שורה בסוף הקובץ שנוצר? | |
כן. |