Presentation is loading. Please wait.

Presentation is loading. Please wait.

שאלות ממבחנים לי-טל משיח

Similar presentations


Presentation on theme: "שאלות ממבחנים לי-טל משיח"— Presentation transcript:

1 שאלות ממבחנים לי-טל משיח litalma@cs.technion.ac.il

2 מבחן מועד ב' סמסטר אביב 2006 מבני נתונים מופשטים - ADT (40 נקודות) לצורך בקרת כניסה למתקן סודי של המוסד הוחלט להקים מערכת המצלמת את פניהם של הבאים למתקן ומאפשרת את כניסתם רק במידה והפנים זוהו כפנים של אחד העובדים. לכל עובד יש שם ומספר ת"ז (ייחודי). בעת התקנת המערכת יצולם כל אחד מהעובדים ממספר זוויות צילום שונות (יתכן מספר שונה של תמונות לכל עובד) והתמונות ישמרו במערכת. מנשק ומימוש המערכת נעזר ב-ADT בשם Image המייצג תמונה דיגיטאלית ותומך בין היתר בפעולות הבאות: imageCopy – הפונקציה מקבלת תמונה ומחזירה העתק שלה imageDestroy – משחררת את כל משאבי התמונה imagesSimilarity – מקבלת שתי תמונות ומחזירה מספר ממשי בין 0 ל- 1 המשקף את מידת הדמיון בין התמונות. ניתן להתייחס אל Image כאל "קופסא שחורה", אין צורך לתאר את מבנה הנתונים או המימוש שלו.

3 מבחן מועד ב' סמסטר אביב 2006 סעיף א' (20 נקודות) ממשו את קובץ המנשק של המודול SurveillanceSystem או בקיצור SurSys על המנשק לתמוך בפונקציות הבאות בלבד: CreateSurSys 1 יצירת SurSys AddWorker 2 הוספת עובד חדש למערכת (הפונקציה מקבלת את שמו ות"ז שלו) AddWorkerImage 3 הוספת תמונה של עובד הקיים במערכת (מחזירה מספר סידורי לתמונה זו. מספר זה הנו ייחודי לעובד זה בלבד, אולם יתכן כי לעובדים אחרים ישנן תמונות עם מספר סידורי זהה) RemoveWorker 4 מחיקת עובד מהמערכת (כולל כל התמונות שלו) RemoveWorkerImage 5 מחיקת תמונה של עובד (על-פי ת"ז של העובד והמספר הסידורי של התמונה) GetWorkerImages 6 החזרת אוסף כל התמונות של עובד מסוים CheckSimilarity 7 זיהוי עובד על סמך תמונה חדשה (הסבר בהמשך...) DestroySurSys 8 הריסת ה- SurSys פונקציה מס' 7 מקבלת כפרמטר תמונה (Image) ומספר – threshold בין 0 ל- 1. על פונקציה זו להשוות את התמונה (ע"י שימוש בפונקציה imagesSimilarity) לכל תמונות העובדים שנשמרו במערכת. במידה ונמצאה תמונה שמידת הדמיון שלה גבוהה מה- threshold הפונקציה תחזיר ערך המשקף זיהוי מוצלח. אחרת, הפונקציה תחזיר ערך המשקף חוסר זיהוי. בנוסף, תחזיר הפונקציה בכל מקרה את ת"ז ושמו של העובד עבורו נמצא הדמיון הגדול ביותר.

4 פתרון סעיף א' #ifndef SURSYS_H #define SURSYS_H #include "image.h" typedef enum {FALSE, TRUE} Boolean; typedef enum {SUCCESS =1, FAILURE =-1} Result; typedef struct SurSys_t *SurSys; SurSys CreateSurSys(); // or Result CreateSurSys(SurSys *); Result AddWorker(SurSys,int, const char *); Result AddWorkerImage(SurSys,int, Image, int*); Result RemoveWorker(SurSys,int); Result RemoveWorkerImage(SurSys,int,int); Result GetWorkerImages(SurSys,int,Image**,int *); // id, Array of Image, size Result CheckSimilarity(SurSys,Image,double,Boolean *,int *, char**); Result DestroySurSys(SurSys); #endif CreateSurSys 1 AddWorker 2 AddWorkerImage 3 RemoveWorker 4 RemoveWorkerImage 5 GetWorkerImages 6 CheckSimilarity 7 DestroySurSys 8

5 מבחן מועד ב' סמסטר אביב 2006 סעיף ב' (20 נקודות) 1.(8 נקודות) הציגו את מבנה הנתונים של SurSys כפי שיופיע בקובץ SurSys.c, עם כל ההגדרות הנלוות הנדרשות. אין צורך לממש אף פונקציה בסעיף זה. 2.(9 נקודות) ממשו את פונקציה 7 מסעיף א' על פי מבנה הנתונים שבחרתם בסעיף ב' 1. על המימוש להיות נכון ויעיל. המימוש צריך לתאר את האלגוריתם העיקרי במלואו (בפונקציה אחת או יותר), אי צורך לממש פונקציות מנשק של ADTs בסיסיים וגם לא פונקציות מנשק אחרות של SurSys. 3.(3 נקודות) ציינו 3 קודי שגיאה אפשריים שונים (ספציפיים ל- SurSys) המוחזרים ע"י פונקציות המנשק (אין לציין "בעיה בהקצאת זיכרון", וגם לא קודי שגיאה של ADT(s) בסיסיים).

6 פתרון סעיף ב' 1 #include “SurSys.h” #include "set.h" struct SurSys_t { Set workSet; }; struct Worker_t { int id; char* name; Set workerImagesSet; }; struct Image_t { int id; Image im; }; SurSys

7 מבחן מועד ב' סמסטר אביב 2006 סעיף ב' (20 נקודות) 1.(8 נקודות) הציגו את מבנה הנתונים של SurSys כפי שיופיע בקובץ SurSys.c, עם כל ההגדרות הנלוות הנדרשות. אין צורך לממש אף פונקציה בסעיף זה. 2.(9 נקודות) ממשו את פונקציה 7 מסעיף א' על פי מבנה הנתונים שבחרתם בסעיף ב' 1. על המימוש להיות נכון ויעיל. המימוש צריך לתאר את האלגוריתם העיקרי במלואו (בפונקציה אחת או יותר), אין צורך לממש פונקציות מנשק של ADTs בסיסיים וגם לא פונקציות מנשק אחרות של SurSys. 3.(3 נקודות) ציינו 3 קודי שגיאה אפשריים שונים (ספציפיים ל- SurSys) המוחזרים ע"י פונקציות המנשק (אין לציין "בעיה בהקצאת זיכרון", וגם לא קודי שגיאה של ADT(s) בסיסיים).

8 פתרון סעיף ב' 2 Result CheckSimilarity(SurSys s,Image im,double threshold, Boolean *ret_val,int *id, char** name){ double sim,max_sim = 0.0; Worker *curr_w; Image *curr_im; char* tmp_name= NULL; if (s==NULL || ret_val==NULL || id == NULL || name ==NULL) return WRONG_PARAM; if (threshold 1) return INVALID_THRESHOLD; SET_FOREACH(curr_w,s->workerSet){ SET_FOREACH(curr_im, curr_w->workerImagesSet){ sim = imagesSimilarity(curr_im,im); if (sim > max_sim){ max_sim = sim; *id =curr_w->id; tmp_name = curr_w->name; } if (tmp_name!=NULL){ *name = (char*)malloc(strlen(tmp_name)+1); if (*name == NULL) return ALLOC_FAIL; strcpy(*name, tmp_name); } if (max_sim > threshold) *ret_val = TRUE; else *ret_val = FALSE; return SUCCESS; } #define SET_FOREACH(e,s) \ for (e=setFirst(s); e!=NULL; e=setNext(s)) !!

9 מבחן מועד ב' סמסטר אביב 2006 סעיף ב' (20 נקודות) 1.(8 נקודות) הציגו את מבנה הנתונים של SurSys כפי שיופיע בקובץ SurSys.c, עם כל ההגדרות הנלוות הנדרשות. אין צורך לממש אף פונקציה בסעיף זה. 2.(9 נקודות) ממשו את פונקציה 7 מסעיף א' על פי מבנה הנתונים שבחרתם בסעיף ב' 1. על המימוש להיות נכון ויעיל. המימוש צריך לתאר את האלגוריתם העיקרי במלואו (בפונקציה אחת או יותר), אי צורך לממש פונקציות מנשק של ADTs בסיסיים וגם לא פונקציות מנשק אחרות של SurSys. 3.(3 נקודות) ציינו 3 קודי שגיאה אפשריים שונים (ספציפיים ל- SurSys) המוחזרים ע"י פונקציות המנשק (אין לציין "בעיה בהקצאת זיכרון", וגם לא קודי שגיאה של ADT(s) בסיסיים).

10 פתרון סעיף ב' 3 INVALID_THRESHOLD IMAGE_DOENT_EXIST WORKER_ALREADY_EXIST


Download ppt "שאלות ממבחנים לי-טל משיח"

Similar presentations


Ads by Google