![]() |
.. (לתיקייה המכילה) | |
האם ניתן לממש יותר ממילון אחד? | |
לא, חייב להיות מימוש יחיד של המילון, על יותר מאחד יירדו נקודות. תהיה הורדת נק' מסיבית על מימוש כפול / דומה זה כולל כפילות בין חלק א' לחלק ב', דהיינו אם כתבתם קוד עבור המילון ושכפלתם אותו לטובת מבנה נתונים אחר או זהה בחלק ב' אתם תאבדו ניקוד. |
האם יש להחזיר העתק של שם שבט או מצביע לשם שבט בפונקציה | |
יש להחזיר העתק של שם השבט |
אם אזור מסוים לא הצביע לאף שבט, איזה מספר זיהוי שבט ימופה עבור מזהה של אותו אזור בפונקציה | |
מספר זיהוי השבט יהיה המספר בעל ה-id הנמוך ביותר |
בפונקציה mergeSortedLists, מה יש להחזיר אם אחת מהרשימות המתקבלות כפרמטר מכילות את הערך NULL? | |
מספיק שרשימה אחת מקבלת את הערך NULL על מנת שיוחזר ערך השגיאה EMPTY_LIST |
מה יש לבצע בעת התרחשות השגיאה ELECTION_OUT_OF_MEMORY? | |
במקרה זה, יש לשחרר את כל הזכרון שהוקצה באותה הפונקציה הנוכחית עד לנקודת התרחשות השגיאה. לאחר מכן יש להחזיר את ערך השגיאה ELECTION_OUT_OF_MEMORY. (על המשתמש ב-ADT מסוג Election לבדוק בעת שימוש בפונקציות את ערך החזרה המתקבל, במידה והתקבל ערך החזרה הנ"ל הוא ישחרר כל זכרון נוסף שהקצה ויסיים את ריצת התכנית.) |
האם חייבים ליצור ADTs עבור שבט ואיזור? | |
לא חובה ליצור ADTs כאלה אם אין בהם צורך. |
מה חלוקת הנק' בין חלקי התרגיל? | |
באופן אינדיקטיבי, 20 נק' על השאלות היבשות, 25 נק' על הבדיקה ה"יבשה" של הקוד (עקרונות תכן, קונוונציות), השאר על בדיקה "רטובה". בדומה לתרגיל 0 - מקרה בדיקה יקבל ניקוד אם הוא נותן פלט זהה למצופה (הן ב-stdout וב-stderr), וגם עובר ללא שגיאות זיכרון (מסוג כלשהו - כולל דליפות, קריאות וכתיבות לא חוקיות) כלל. |
בחלק א', האם חייבים להפריד את המימוש של הרשימה המקושרת לתוך ADT נפרד? | |
מותר, אבל לא חובה (לא יירדו נק' במקרה שלא). |
שרשור שאלות שהועברו ע"י נציג הסמסטר | |
> רוב תלמידי הקורס סיימו את המימוש כבר לפני למעלה משבוע, אך עקב חוסר הוודאות > כעת נמצאים במעין לוט בערפל. > שוחחתי עם יורי המתרגל האחראי בזום. השיחה הייתה נעימה, ונדמה היה שאכפת לו > מאוד מההבנה שלנו (דבר שאין ספק לגביו), אך כבר שלושה ימים עברו ועדיין אין > פתרון. אין קווי מתאר לתרגיל (מה מותר מה אוסר) ואין פתרון לחסרון העצום של > האיי די טי הגנרי. > .... > אנו מבקשים הבהרות בנוגע לתרגיל. מה מותר מה אסור. שלום רועי, ראשית אומר, כפי שכבר אמרתי בעבר, שהמטרה של התרגיל באופן כללי היא לתרגל כתיבת קוד נכון ובהתאם לעקרונות שנלמדו בקורס. כדי להבין מה מותר ומה אסור, יש להכיר את העקרונות שנלמדו בשיעורים (ואכן רוב הסטודנטים מכירים), ולחשוב כיצד המימוש עומד בעקרונות אלו (וכאן מתקבל קצת רושם שחלק מהסטודנטים במקום לחשוב עצמאית ולהסיק אם הקוד שלהם טוב, מעדיפים להראות למתרגל את המימוש שלהם ולשאול האם התכן "עומד בדרישות"). עקרון מרכזי ששוחחנו עליו הינו השאיפה לצמצם שכפול קוד. זה לא אומר ש"אסור" בשום אופן לכתוב קטעי קוד שחוזרים על עצמם, אבל אנו רוצים לצמצם זאת כמה שאפשר. זאת תוך איזון עם עקרונות אחרים שנלמדו, כגון קריאות הקוד, מודולריות, ושמירה על גמישות התוכנה לשינויים, וכמובן תוך שימוש בכלים העומדים לרשותנו (הסמסטר מבני נתונים גנריים לא נלמדו, ולכן אנחנו לא מצפים שתשתמשו בהם). דרך אחת לצמצם כפילות קוד היא להפוך את הקוד שלא רוצים לשכפל למודול, כך שאפשר יהיה לחזור ולהשתמש בו שוב בעתיד במקום לשכפל בשינויים קלים - זה בדיוק עקרון התכנות המודולרי, כפי שלמדנו בשיעורים. דוגמה למודול כזה היא המילון שאתם מממשים בחלק א', בהתאם לממשק שהגדרנו. כפי שדובר (וממה שהתרשמתי סטודנטים גם לרוב הבינו עצמאית), ניתן בקלות להשתמש בו כדי לשמור כל סוג של נתונים, וזאת על ידי המרה של הנתונים למחרוזות. עם זאת, אני מניח שאת הנ"ל הסטודנטים בקורס כבר בעצם יודעים. אני מנחש שהנקודה העקרונית בפנייה שלך היא שסטודנטים מנסים להבין מה בעצם התכן ה"נכון" שאנחנו מכוונים אליו - זאת בעצם השאלה העיקרית (מדי סמסטר ומדי תרגיל במת"מ אגב) והסיבה שסטודנטים מרגישים אי-ודאות. אז קודם כל, כמו שכתבתי: הנ"ל (תכן נכון) הוא בדיוק מהות התרגיל - אם ניתן לכם בדיוק את הפתרון, לא יישאר הרבה תרגיל.. אבל קצת יותר לעניין - אני רוצה להדגיש שאין פתרון אחד "נכון" שאנחנו מחפשים אותו. כל פתרון שמקיים את עקרונות התכן למעלה - וקיימות כמה גישות סבירות שאנחנו מודעים אליהן - ייתקבל. בתכנון התרגיל אתם אמורים למשקל את שיקולי התכן השונים, ולבוא עם גישה סבירה לפתרון, באמצעות הכלים שנלמדו ועומדים לרשותכם. במילים אחרות ובהתייחס לניסוח שלך של השאלה - "מותר" כל דבר (ממש ככה), כל עוד הוא לא סותר באופן בוטה את עקרונות התכן שלמדנו. > במהלך השיחה העליתי את הבעיה שלא לימדו אותנו איי די טי גנרי, והמתרגל האחראי > יורי אמר לנו שלא ירד לנו ניקוד על יצירת איי די טי נוסף לרשימה מקושרת. אך > טרם עודכן הדבר בFAQ, עובדה שמעלה תהייה. למיטב הבנתי (ותקן אותי אם אני טועה) - השאלה היא זאת: אמרנו כבר שעקרון מרכזי הוא לא לשכפל קוד. נניח שבחלק חלק א' מימוש המילון נעשה באמצעות רשימה מקושרת פנימית, כלומר לא כ-ADT נפרד. במצב זה, אם נרצה להשתמש ברשימה מקושרת גם בחלק אחר בתוכנית, נאלץ לשכפל הרבה מהקוד הזה בשינויים קלים בלבד - וזה עומד כנראה בסתירה לעקרונות התכן שנלמדו. אם כן, לשאלתך, כמובן שהדבר עומד בסתירה לדרישות תכנות נכון שלמדנו, ונראה לי שלא צריך אותי כדי להבין את זה.. מן הסתם אם צריך רשימה מקושרת דומה במקום אחר בתרגיל, רצוי לממש את הרשימה כמודול נפרד ולעשות בו שימוש חוזר. על אף זאת, בשיחה בינינו סיכמנו באופן מפורש שכדי להקל על הסטודנטים אנחנו לא נקנוס ספציפית שכפול קוד של רשימה מקושרת בין חלק א' לחלק ב'. כלומר, למרות שתמיד רצוי לכתוב קוד כך שמתאפשר שימוש חוזר בו, ספציפית אם מימוש המילון בחלק א' הוא עם רשימה מקושרת פנימית שאינה ניתנת לשימוש חוזר - אנחנו לא נוריד על כך נק' אפילו אם יהיה מימוש נוסף של רשימה מקושרת בחלק ב'. לבסוף, אציין שבסופו של דבר, על אף שאנחנו מאפשרים שכפול קוד ספציפי בין חלק א' לחלק ב', בהחלט לא הייתי אומר שזה הפתרון הפשוט ביותר לשאלה - לטעמי גישה פשוטה בהרבה לחלק ב' היא לעשות שימוש חוזר במפה של חלק א', ולא להגיע לשכפול הקוד המדובר מלכתחילה. זה מקצר את הפתרון, מצמצם באגים, ובאופן כללי מקל על הקידוד. מסיבה זאת אנחנו גם מעדיפים שלא להתייחס לנקודה זו ב-FAQ הרשמי, כיוון שלא היינו רוצים ליצור תחושה שאנחנו מכוונים לפתרון הזה, שלטעמנו הוא פחות מומלץ (אפילו שאנחנו לא קונסים עליו). > למיטב הבנתי, באתר הקורס פורסם כי 20 נקודות יינתנו על החלק היבש ( יישאר > כפי > שהיה), ו 25 נקודות יינתנו על הבדיקה היבשה של התרגיל (קונבנציה ועקרונות > תכן), שזה השתנה מ15%. הניסוח המדויק שפורסם באתר הקורס תחת שאלות ותשובות לתרגיל הוא שהמשקל יהיה בסביבות 25% (אינדיקטיבי=מהווה אינדיקציה, הכוונה). החלוקה המדוייקת בין הבדיקה הידנית והאוטומטית של החלק הרטוב עדיין לא נסגרה סופית, ולכן הניסוח הזה. אדגיש עם זאת שהחלוקה בין המשקל של החלק היבש בתרגיל, והמשקל (הכולל) של החלק הרטוב בתרגיל, כן סגורה, ולכן מבחינת הסטודנטים, מידת הזמן וההשקעה בכל אחד מהחלקים הללו בתרגיל לא אמורה להיות מושפעת משינויים פנימיים בחלוקת הניקוד בתוך חלק כזה או אחר. בכל מקרה, הנקודה היא זאת - בבדיקת החלק הרטוב אנחנו נבדוק גם איכות קוד (בבדיקה הידנית) וגם נכונות קוד (בבדיקה האוטומטית), ולכן מבחינתכם אתם אמורים בכל מקרה להקפיד על שני הדברים - ללא תלות באחוז הספציפי של כל גורם בניקוד. אני מקווה שהנ"ל עונה לשאלות ומבהיר את אשר אנחנו מצפים בתרגיל הזה. יורי |