שאלות תרגיל בית 1

ערעור על ציון בדיקה ידנית

ערעור על ציון בדיקה ידנית

על ידי תמיר שור בתאריך
מספר תגובות: 3

שלום רב, אני מאמין שיש טעות בבדיקת הקובץ הידני שהגשתי (יחד עם השותפה):

קיבלנו את ההערה הבאה:D1: tribe.c and area.c both implementing a map -45. 

ייתכן כי לא הבנתי נכון את ההערה, אבל אין לנו שום דבר בקבצים area.c או tribe.c (או בכל מקום אחר בקוד, פרט לmap.c) שמזכיר מימוש של map, ובפרט tribe אפילו לא משתמש ב-map כשדה (area כן משתמש כשדה, ולפי הפורום הבנתי שהדבר תקין ואף נדרש, כל עוד לא מימשנו שני ADTS שונים).

אני לא רואה את הקשר בין ההערה לבין הקובץ שהגשנו, ולכן אשמח לקבל הבהרה או בירור חוזר בעניין.

כמובן שנוכל לספק קבצים עם חתימת תאריך מתאימה שמראים כי לא מימשנו map נוסף בקוד

בתגובה ל: תמיר שור

תשובה ל: ערעור על ציון בדיקה ידנית

על ידי אורטל כהן בתאריך
היי,

ממה שראיתי גם tribe וגם area מהווים מפה בפני עצמם וזה משהו שנאמר שאסור לעשות. (כלומר שניהם מממשים מחדש מפה - גם אם זה לא נקרא ככה בקבצים שלכם -יש כמה "רמזים" לכך - השדות של המצביעים למבנים שלהם, כגון struct area_t* next (שנמצא בתוך המבנה area_t), רומז על זה וגם הפונקציות של tribeAdd או areaAdd).
בתגובה ל: אורטל כהן

תשובה ל: ערעור על ציון בדיקה ידנית

על ידי תמיר שור בתאריך
היי תודה על המענה. אני מבין עכשיו מההערה את הבעייתיות, אבל הוגדר לנו שאסור לממש map. לא הוגדר מה זה map - בתכנון הבנו שההוראה של איסור שכפול של map מתייחסת לשכפול ADT של זוגות key ו-value.
בתור מישהו שפעם ראשונה נתקל במושג map, קשה להבין כי מימוש שיש בו רשימה מקושרת ופונקצית הוספה בהכרח עונה על ההגדרה הזו, ובמיוחד כאשר הוגדר לנו לממש פונקצית הוספה של שבטים ושל אזורים, ומימוש כל הקוד בelection יהיה מאוד מסורבל, כך שנראה היה הגיוני לפצל ל-ADT שמממש הוספה.
השדה struct area_t* next הכרחי למימוש רשימה מקושרת (שהיה כתוב שמותר לממש). מימשנו שתיים כאלה (אחת לשבטים ואחת לאזורים) כי יש הבדל בין השדות של area ושל tribe.

אני מבין שיש נקודות דמיון בין המימוש שלנו לבין טיפוס של Map מההסבר שלך, אבל היות וההגדרה לא הייתה ברורה למה זה קוד שהוא map, ולאור העובדה שמימוש הפונקציות שכתבת שרומזות על דמיון לmap דרושות בהגדרת התרגיל, אשמח אם יישקל להוריד מעט פחות מחצי מהציון על הבדיקה הידנית כולה - בכל זאת הקוד אינו map בעצמו, אם כי מכיל אספקטים של טיפוס זה, ובכל שאר החלק הידני ענינו על כל הדרישות (לא קיבלנו הערות נוספות).
תודה מראש!
בתגובה ל: תמיר שור

תשובה ל: ערעור על ציון בדיקה ידנית

על ידי יורי פלדמן בתאריך

אני רוצה לחדד את מה שאורטל אמרה והבודק סימן לכם
יש לכם חלקים נרחבים בקוד שהם משוכפלים בשינויים מינימליים. חלק מהדוגמאות (המספרים מציינים שורות):

area.ctribe.c
91-137 39-79
140-185 104-147
348-364 222-231
391-399 233-244

זאת תוצאה ישירה של זה שמימשתם מבנה נתונים פעמיים במקום להבין איך אתם יכולים לכתוב קוד שתוכלו לפתח ולבדוק אותו פעם אחת ולהשתמש בו אח”כ פעמים רבות (ומנוגד בדיוק לעיקרון שנלמד בקורס לצמצם בכתיבת הקוד ובמיוחד עותקים של קוד עם פונקציונליות דומה).

במילים אחרות code is not an asset, but a liability - אתם רוצים לצמצם בכתיבת קוד (למקסם את הפונקציונליות במינימום קוד).