עבור לתוכן

עזרה בתרגיל בשפת C

Featured Replies

פורסם

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

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

המבנים שיצרתי הם:

מבנה לכונן הקשיח:

typedef struct Drive_t

{

char* name;

double MaxSpace;

double FreeSpace;

Folder* MainFolder;

};

מבנה לתיקייה:

typedef struct Folder_t

{

char* name;

double size;

int deleted;

struct Folder* ListOfFolder;

File* ListOfFiles;

};

מבנה לקובץ:

typedef struct File_t

{

char* name;

char* suffix;

double size;

int ReadOnly;

int hidden;

int deleted;

struct File* next;

};

פורסם

שלום וברוכה הבאה לפורום.

מומלץ לך לערוך את ההודעה ולשים את הקוד בתוך תג קוד (כפתור שנראה כמו #).

השאלה שלך לא כל כך ברורה לי. מה הכוונה ב"רשימה גנרית"? גנרית מאיזו בחינה?

פורסם

אם זה ADT, אז רשימה גנרית תכיל void* במקום הטיפוס שברשימה. הרשימה מנהלת מצביעים כלליים והיא אינה יודעת את הטיפוס הספציפי של מה שהוכנס. ואז תוכלי להשתמש ברשימת קבצים, רשימת תיקיות וכו'.

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

בזמן הוצאת איבר מהרשימה את ממירה את המצביע מטיפוס void* לטיפוס הנכון. חשוב מאוד להכניס לכל רשימה רק מצביעים מטיפוס מסויים, ואת זו שצריכה לנהל את ההמרות הללו. C לא יודעת איזה מצביע באמת את מכניסה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים