31
תתתתת תתתתתתתחח חחחח- חח[email protected]

שאלות ממבחנים לי-טל משיח [email protected]

  • View
    237

  • Download
    13

Embed Size (px)

Citation preview

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

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

[email protected]לי-טל משיח

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

מבחן מועד ב' סמסטר אביב 2006

נקודותADT( 40)מבני נתונים מופשטים - לצורך בקרת כניסה למתקן סודי של המוסד הוחלט להקים מערכת המצלמת את פניהם של הבאים

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

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

בפעולות הבאות:

imageCopyהפונקציה מקבלת תמונה ומחזירה העתק שלה – imageDestroyמשחררת את כל משאבי התמונה –

imagesSimilarity המשקף את מידת1 ל- 0 – מקבלת שתי תמונות ומחזירה מספר ממשי בין הדמיון בין התמונות.

כאל "קופסא שחורה", אין צורך לתאר את מבנה הנתונים או Imageניתן להתייחס אל המימוש שלו .

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

מבחן מועד ב' סמסטר אביב נקודות(20סעיף א' ) 2006

SurSys או בקיצור SurveillanceSystemממשו את קובץ המנשק של המודול על המנשק לתמוך בפונקציות הבאות בלבד:

CreateSurSys 1 יצירת SurSysAddWorker 2 )הוספת עובד חדש למערכת )הפונקציה מקבלת את שמו ות"ז שלו

AddWorkerImage 3 .הוספת תמונה של עובד הקיים במערכת )מחזירה מספר סידורי לתמונה זו מספר זה הנו ייחודי לעובד זה בלבד, אולם יתכן כי לעובדים אחרים ישנן תמונות עם מספר סידורי זהה(

RemoveWorker 4 )מחיקת עובד מהמערכת )כולל כל התמונות שלו RemoveWorkerImage 5 מחיקת תמונה של עובד )על-פי ת"ז של העובד והמספר הסידורי של

התמונה( GetWorkerImages 6 החזרת אוסף כל התמונות של עובד מסוים

CheckSimilarity 7 )...זיהוי עובד על סמך תמונה חדשה )הסבר בהמשך DestroySurSys 8 -הריסת ה SurSys

. על פונקציה זו1 ל- 0 בין threshold( ומספר – Image מקבלת כפרמטר תמונה )7פונקציה מס' ( לכל תמונות העובדים שנשמרוimagesSimilarityלהשוות את התמונה )ע"י שימוש בפונקציה

הפונקציה תחזיר ערךthresholdבמערכת. במידה ונמצאה תמונה שמידת הדמיון שלה גבוהה מה- המשקף זיהוי מוצלח. אחרת, הפונקציה תחזיר ערך המשקף חוסר זיהוי. בנוסף, תחזיר הפונקציה

בכל מקרה את ת"ז ושמו של העובד עבורו נמצא הדמיון הגדול ביותר.

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

פתרון סעיף א'#ifndef SURSYS_H#define SURSYS_H

#include "image.h"

typedef enum {FALSE, TRUE} Boolean;typedef enum {SUCCESS, FAIL, OUT_OF_MEMORY, BAD_PARAM, ….

} SurSysResult;

typedef struct SurSys_t *SurSys;

SurSys CreateSurSys)(; // or SurSysResult CreateSurSys)SurSys *system(; SurSysResult AddWorker)SurSys system,int id, const char * name(;SurSysResult AddWorkerImage)SurSys system,int id, Image image, int*imageId(;SurSysResult RemoveWorker)SurSys system, int id(;SurSysResult RemoveWorkerImage)SurSys system,int id,int imageId(;SurSysResult GetWorkerImages)SurSys system,int id,Image** images,

int * imagesSize(;SurSysResult CheckSimilarity)SurSys system, Image image, double threshold,

Boolean * match, int * bestID, char** bestName(;void DestroySurSys)SurSys system(;#endif

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

מבחן מועד ב' סמסטר אביב 2006

נקודות(20סעיף ב' ), עם כלSurSys.c כפי שיופיע בקובץ SurSys נקודות( הציגו את מבנה הנתונים של 8)1.

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

. על המימוש1 מסעיף א' על פי מבנה הנתונים שבחרתם בסעיף ב' 7 נקודות( ממשו את פונקציה 9.)2 להיות נכון ויעיל. המימוש צריך לתאר את האלגוריתם העיקרי במלואו )בפונקציה אחת או יותר(, אי

.SurSys בסיסיים וגם לא פונקציות מנשק אחרות של ADTs צורך לממש פונקציות מנשק של

( המוחזרים ע"י פונקציותSurSys קודי שגיאה אפשריים שונים )ספציפיים ל- 3 נקודות( ציינו 3.)3 בסיסיים(.)s(ADT המנשק )אין לציין "בעיה בהקצאת זיכרון", וגם לא קודי שגיאה של

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

”1#include “SurSys.hפתרון סעיף ב' #include "set.h"

/* the struct of the ADT */struct SurSys_t{

Set workSet;};

/* internal struct )not ADT( */typedef struct Worker_t {

int id;char* name;

Set workerImagesSet; } Worker;

/* internal struct )not ADT( */typedef struct WorkerImage_t {

int id;Image image;

} WorkerImage;

SurSys

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

מבחן מועד ב' סמסטר אביב 2006

נקודות(20סעיף ב' ), עם כלSurSys.c כפי שיופיע בקובץ SurSys נקודות( הציגו את מבנה הנתונים של 8)1.

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

. 1 מסעיף א' על פי מבנה הנתונים שבחרתם בסעיף ב' 7 נקודות( ממשו את פונקציה 9.)2להיות נכון ויעיל. המימוש צריך לתאר את האלגוריתם העיקרי במלואו )בפונקציה על המימוש

בסיסיים וגם לא פונקציות מנשקADTs אחת או יותר(, אין צורך לממש פונקציות מנשק של .SurSys אחרות של

( המוחזרים ע"י פונקציותSurSys קודי שגיאה אפשריים שונים )ספציפיים ל- 3 נקודות( ציינו 3.)3 בסיסיים(.)s(ADT המנשק )אין לציין "בעיה בהקצאת זיכרון", וגם לא קודי שגיאה של

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

2פתרון סעיף ב' SurSysResult CheckSimilarity)SurSys system, Image image, double threshold,

Boolean * match, int * id, char** name({double similarity, maxSimilarity = 0.0;Worker *currentWorker;WorkerImage *currrentImage;char* tmpName= NULL;if )system==NULL || match==NULL || id == NULL || name ==NULL( return BAD_PARAM;if )threshold < 0 || threshold >1( return INVALID_THRESHOLD;SET_FOREACH)currentWorker,system->workerSet({

SET_FOREACH)currentImage, currentWorker->workerImagesSet({ similarity = imagesSimilarity)currentImage->image,image(;

if )similarity > maxSimilarity({ maxSimilarity = similarity; *id =currentWorker->id; tmp_name = currentWorker->name; }}

} if )tmpName!=NULL({ *name = )char*(malloc)strlen)tmpName(+1(; if )*name == NULL( return OUT_OF_MEMORY;

strcpy)*name, tmpName(; } if )maxSimilarity > threshold( *match = TRUE; else *match = FALSE; return SUCCESS;

}#define SET_FOREACH)e,s( \ for )e=setFirst)s(; e!=NULL; e=setNext)s((

!!

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

מבחן מועד ב' סמסטר אביב 2006

נקודות(20סעיף ב' ), עם כלSurSys.c כפי שיופיע בקובץ SurSys נקודות( הציגו את מבנה הנתונים של 8)1.

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

. על המימוש1 מסעיף א' על פי מבנה הנתונים שבחרתם בסעיף ב' 7 נקודות( ממשו את פונקציה 9.)2 להיות נכון ויעיל. המימוש צריך לתאר את האלגוריתם העיקרי במלואו )בפונקציה אחת או יותר(, אי

.SurSys בסיסיים וגם לא פונקציות מנשק אחרות של ADTs צורך לממש פונקציות מנשק של

( המוחזרים ע"י פונקציותSurSys קודי שגיאה אפשריים שונים )ספציפיים ל- 3 נקודות( ציינו 3.)3 בסיסיים(.)s(ADT המנשק )אין לציין "בעיה בהקצאת זיכרון", וגם לא קודי שגיאה של

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

3פתרון סעיף ב'

INVALID_THRESHOLD

IMAGE_DOENT_EXIST

WORKER_ALREADY_EXIST

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

מבחן מועד ג' סמסטר אביב -2006

( הוא קבוצה של מחשבים המחוברים ביניהם ופועלים יחד בצורהClusterאשכול מחשבים )כך שבמובנים רבים הם יכולים להיחשב כמחשב אחד. עיקרון הפעולה הוא חלוקת מתואמת,( המחוברות לאשכול. Nodes( למספר רב של נקודות קצה )Jobsהחישוביות ) המשימות

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

)מספר שלם(.

משימה חישובית מתוארת באמצעות שורת הפעלה )מחרוזת(, מספר המחשבים שהמשימהעליהם )לא יותר ולא פחות, מס' מדוייק( ודרישות מדוייקות לגבי מאפייני המחשבים תרוץ

גודל זיכרון וגודל דיסק(. האלו )מהירות,

אותו מחשב. משימות על2לצורך פתרון השאלה יש להניח כי לא ניתן להריץ בו-זמנית

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

מבחן מועד ג' סמסטר אביב -2006 נקודות(20סעיף א' )

-ים וכד',type. בנוסף ל-Clusterממש/י את קובץ המנשק של המודול :בלבדעל המנשק לתמוך בפונקציות הבאות

CreateCluster יצירת אשכול מחשבים –DestroyCluster הריסת אשכול מחשבים –

AddNode הוספת מחשב מסוים לאשכול מחשבים –RemoveNode הורדת מחשב מסוים מאשכול מחשבים –

MergeClusters אשכולות יצירת אשכול חדש – איחוד של השניים2- בהינתן RemoveSubcluster אשכולות יצירת אשכול חדש – הפרש בין הראשון והשני2– בהינתן

IsNodeInCluster בהינתן אשכול ומחשב מסוים, בדיקה האם המחשב שייך לאשכול –IsJobRunnable בהינתן אשכול ומשימה מסוימים, הפונקציה מחזירה אינדיקציה האם ניתן –

להריץ את המשימה על האשכול ואם כן אז גם מחזירה תת-אשכול )מתוך האשכול שניתן כפרמטר( שניתן להריץ עליו משימה זו.

CreateMatchings בהינתן אשכול ורשימת משימות חישוביות הפונקציה תחזיר את אוסף – "ההתאמות" של משימות אל תתי אשכולות מתוך האשכול שניתן כפרמטר. הסברים נוספים בהמשך...

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

פתרון סעיף א'#ifndef CLUSTER_H#define CLUSTER_H

typedef enum {FALSE, TRUE} Boolean;

typedef enum {SUCCESS, FAIL, OUT_OF_MEMORY, BAD_PARAM, …. } ClusterResult;

typedef struct Cluster_t *Cluster;

/* this struct is not ADT. It is used only for passing parameters to the functions of Cluster ADT */struct Job_t {

char* command;int nodes_num;double cpu_size;int mem_size;int diskspace_size;

} ;typedef struct Job_t * Job;

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

המשך פתרון סעיף א'Cluster CreateCluster)(; // or ClusterResult CreateCluster)Cluster *(;

void DestroyCluster)Cluster c(;

ClusterResult AddNode)Cluster c,char* name,double cpu, int memsize, int disksize(;

ClusterResult RemoveNode)Cluster c,char* name(;

ClusterResult MergeCluster)Cluster c1, Cluster c2, Cluster * c3(;

ClusterResult RemoveSubCluster)Cluster c1, Cluster c2, Cluster * c3(;

ClusterResult IsNodeInCluster)Cluster c, char* name, Boolean * res(;

ClusterResult IsJobRunnable)Cluster c, Job job, Cluster * res(; // res will be null incase the job is not runnable

ClusterResult CreateMatching)Cluster c, Job* jobs, int num_jobs , Cluster** matches;)

#endif

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

מבחן מועד ג' סמסטר אביב -2006

נקודות(20סעיף ב' ) נקודות(8. )1

)ADT)s. תאר/י איזה Cluster.c כפי שיופיע ב- Clusterהציגו את מבנה הנתונים של שנלמד בכיתה עם שינויים סבירים. ADTתבחרו לביסוס המימוש. ניתן להיעזר בכל

תאר/י את השינויים. אם השתמשתם במבנים נוספים לצורך פתרון סעיף א', יש לתאר גם אותם.

נקודות(12. )2 מתוך הממשק מסעיף א'. לצורך הפתרון יש להניח את ההנחות הבאות:9יש לממש את פונקציה

של משימות ויותר חשוב להתאים מחשביםסדוררשימת משימות הניתנת כפרמטר נתונה בתור אוסף 2 ו-1למשימות "ראשונות" מאשר למשימות "אחרונות", כלומר אם ניתן להתאים את משימות

אז האפשרות הראשונה היא עדיפה.3 ו-1או משימות ,5, ו-2, 1אוסף ההתאמות צריך להיות מקסימלי, כלומר אם הצלחתם "להתאים" משימות

מקסימלי.אינו, אז אוסף ההתאמות שלכם הוא 6אבל ניתן בנוסף "להתאים" את משימה ניתן להשתמש בפונקציות אחרות מסעיף א'

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

1 פתרון סעיף ב'

#include “Set.h”#include “Cluster.h”

/* the struct of the ADT */struct Cluster_t {

Set nodes;} ;

/* internal struct )not ADT( */typedef struct Node_t {

char* name;double cpu;int mem_size;int disk_size;

} Node;

:Cluster.cקובץ

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

מבחן מועד ג' סמסטר אביב -2006

נקודות(20סעיף ב' ) נקודות(8. )1

)ADT)s. תאר/י איזה Cluster.c כפי שיופיע ב- Clusterהציגו את מבנה הנתונים של שנלמד בכיתה עם שינויים סבירים. ADTתבחרו לביסוס המימוש. ניתן להיעזר בכל

תאר/י את השינויים. אם השתמשתם במבנים נוספים לצורך פתרון סעיף א', יש לתאר גם אותם.

נקודות(12. )2 מתוך הממשק מסעיף א'. לצורך הפתרון יש להניח את ההנחות הבאות:9יש לממש את פונקציה

של משימות ויותר חשוב להתאים מחשביםסדוררשימת משימות הניתנת כפרמטר נתונה בתור אוסף 2 ו-1למשימות "ראשונות" מאשר למשימות "אחרונות", כלומר אם ניתן להתאים את משימות

אז האפשרות הראשונה היא עדיפה.3 ו-1או משימות ,5, ו-2, 1אוסף ההתאמות צריך להיות מקסימלי, כלומר אם הצלחתם "להתאים" משימות

מקסימלי.אינו, אז אוסף ההתאמות שלכם הוא 6אבל ניתן בנוסף "להתאים" את משימה ניתן להשתמש בפונקציות אחרות מסעיף א'.

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

2 פתרון סעיף ב'ClusterResult CreateMatching)Cluster c, Job* jobs, int num_jobs, Cluster** matches({

Boolean free_flag = FALSE;Cluster sub_cluster = NULL, match = NULL;ClusterResult result;if)c == NULL || jobs == NULL || num_jobs < 0 || matches == NULL(

return BAD_PARAM;*matches = )Cluster*( malloc)sizeof)Cluster(*num_jobs(;if )*matches == NULL( return OUT_OF_MEMORY;for )int i=0; i<num_jobs; i++({

result = IsJobRunnable)c, jobs[i], &match(;assert)result == SUCCESS(;)*matches([i] = match;if )match !=NULL({

result = RemoveSubCluster)c, match, &sub_cluster(; assert)result == SUCCESS(;if )free_flag(

DestroyCluster)c(;c = sub_cluster;free_flag = TRUE;

}}return SUCCESS;

{

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

SmartFile 12.3.99 - מבחן

נקודותADT( 35). מבני נתונים מופשטים - 1 המשמש לכתיבה וקריאה מקבצים. ה SmartFile בשם ADTהשאלה עוסקת ב SmartFile

אין קשר כותב וקורא מהקובץ בעזרת "ראש" המהווה מעין מצביע לתו מסוים בקובץ )למצביע

(. ניתן להעביר את ה"ראש" כך שיצביע על כל אחד מתווי הקובץ ,וכל פעולות Cשל הקריאה,

כתיבה ומחיקה מתבצעות ע"י ה"ראש" הנ"ל. לתמוך בפעולות הבאות:ADTעל ה

יאותחל לעבוד עם קובץ ששמו ינתן SmartFile ה חדש:SmartFileיצירת •כפרמטר.

)כולל SmartFile שחרור המשאבים שהוקצו עבור ה :SmartFileהריסת ה • סגירת הקובץ(.

הראש "יקפוץ" לתו הנמצא במרחק נתון מראש הקובץ או מסופו.:העברת הראש• התו שיקרא יהיה התו עליו מצביע הראש. הראש יעבור לתו קריאת תו מהקובץ:•

הבא. התו שימחק יהיה התו שנמצא לפני )מכיוון תחילת הקובץ( מחיקת תו מהקובץ:•

התו עליו מצביע הראש. )התו הנכתב יכתב במקום התו עליו מצביע OVERRIDE קביעת סוג כתיבה:•

)התו הנכתב יכתב לפני התו עליו מצביע הראש(.INSERTהראש( או כתיבת תו בהתאם לסוג הכתיבה.כתיבת תו בודד לקובץ:•

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

SmartFile

הערות:

שימו לב כי הראש אינו נע בכתיבה או מחיקה )מרחקו מסוף הקובץ אינו •משתנה(.

מסוף הקובץ וכתיבה במצב 0הוספת תווים לקובץ מבוצעת ע"י קפיצה למרחק •INSERT במיקום זה נמצא "אחרי התו האחרון", ומשמש רק לצורך הוספת .

תווים לסוף הקובץ.

אם הקובץ ששמו ניתן קיים, אזי הקובץ יפתח וה"ראש" יצביע SmartFileביצירת• 0לתו הראשון בקובץ. אחרת, יווצר קובץ ריק בשם זה, והראש יעבור למרחק

.INSERTמסוף הקובץ )מוכן להוספת תווים.( מצב הכתיבה בשני המקרים יהיה

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

אזי בסיומה יהיה קובץ בשם זה המכיל את " hello"דוגמא: בהנחה כי לפני ריצת התוכנית לא קיים קובץ בשם !"Hey\nyou"הטקסט

#include "SmartFile.h“

int main)( {SF myfile; SFResult status; char c;

status = SFCreate)&myfile, “hello”(; if )status != SUCCESS( error )“can't create SmartFile\n”(;

status = SFPut )myfile, ‘H’(; SFPut )myfile, ‘e’(; SFPut)myfile, ‘k’(; SFPut )myfile, ‘\n’(;

SFDestroy )myfile(; SFCreate )&myfile, "hello"(;

status = SFJump )myfile, END, 0(;SFPut )myfile, ‘y’(; SFPut )myfile, ‘o’(;

SFPut )myfile, ‘u’(; SFPut )myfile, ‘?’(; SFDelete )myfile(;

SFPut )myfile, ‘!’(; status = SFJump )myfile, START, 3(; status = SFGet )myfile, &c(; /* c is set to 'k' */ status = SFSetMode )myfile, OVERRIDE(; SFPut )myfile, 'y'(;

SFDestroy )myfile(; return 0; }

Hek\n

Hek\nyou?

Hek\nyou!

Hey\nyou!

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

SmartFile

נקודות(.12סעיף א )

המכיל SmartFile.hבהסתמך על ההסבר וקטע הקוד הנתון, כתבו את הקובץ

.ADT SmartFile( של ה (interfaceאת המנשק

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

סעיף א.

# ifndef SMART_H#define SMART_H

typedef struct SmartFile_t* SF ;typedef enum {INSERT, OVERRIDE} Mode;typedef enum {START, END} Base;typedef enum { SUCCESS, FAILURE, BAD_PARAM, …

} SFResult ;

SFResult SFCreate )SF* file, const char* filename(;SFResult SFPut )SF file, char c(;void SFDestroy )SF file(;SFResult SFJump )SF file, Base base, int pos(;SFResult SFDelete )SF file(;SFResult SFGet )SF file, char* c(;SFResult SFSetMode )SF file, Mode mode(;

#endif

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

נקודות(20סעיף ב' )

קריאה לפונקציה זו מבטלת את השנוי האחרון שבוצע SFUndo פונקציה בשם ADTהוחלט להוסיף ל ( מרגע ביצוע Undoאין צורך לזכור את השינויים עקב פעולות בקובץ )כתיבת תווים לקובץ או מחיקתם ממנו,

הקפיצה האחרונה או מפתיחת הקובץ אם לא בוצעה עדיין קפיצה. לדוגמא:#include "SmartFile.h"int main)( {

SFResult status ;SFCreate )&myfile, “hello"(;SFJump )myfile, END,0(;SFPut )myfile, ‘\n’(; // Hey\nYou!\nSFPut )myfile, ‘W’(; // Hey\nYou!\nWSFPut )myfile, ‘o’(; // Hey\nYou!\nWoSFPut )myfile, ‘h’(; // Hey\nYou!\nWohstatus = SFUndo )myfile(; // Hey\nYou!\nWo SFUndo )myfile(; // Hey\nYou!\nW SFPut )myfile,'h'(; // Hey\nYou!\nWh SFPut )myfile, ‘y’(; // Hey\nYou!\nWhySFPut )myfile, ‘$’(; // Hey\nYou!\nWhy$SFJump)myfile,END,1(; SFSetMode)myfile,OVERRIDE(;SFPut)myfile,'p'(; // Hey\nYou!\nWhypSFUndo)myfile(; // Hey\nYou!\nWhy$SFUndo)myfile(; // nothing is done, only one change since jumpSFPut)myfile,'?'(; // Hey\nYou!\nWhy? SFDestroy )myfile(;return 0;

}

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

נקודות(2 )1חלק . )אין צורך SFUndoהוסיפו למנשק שכתבתם בסעיף א' את חתימת הפונקציה

לכתוב את כל המנשק מחדש, אלא רק את חתימת הפונקציה(.

נקודות( 10 )2חלק . )ניתן להיעזר בכל מבנה Undoתארו באיזה מבנה נתונים תשתמשו בכדי לאפשר את פעולת ה

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

, SFPut, SFJumpהקפידו לתאר אילו שינויים ידרשו להתבצע בפונקציות SFSetMode ו SFDelete ובהגדרת המבנה SFבכדי לאפשר את

.Undo. זכרו כי אין צורך לשמור את השינויים הקורים עקב פעולת SFUndoפעולת ה

נקודות(8 )3חלק בעזרת מבנה הנתונים שבחרתם בחלק הקודם. הנכם רשאים SFUndoממשו את הפונקציה:

אשר כתבתם בסעיף א'. זכרו כי אין צורך לשמור SFלהיעזר בכל פונקציות הנמצאות במנשק של .Undoאת השינויים הקורים עקב פעולת

נקודות( .3סעיף ג ) עלולות להחזיר )ערכים SF ( קודי שגיאה אשר הפונקציות של המנשק 3תנו דוגמא לשלושה )

( , והסבירו את משמעותם. SFResultאפשריים של

SmartFile

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

סעיף ב.

1חלק SFResult SFUndo )SF file(;

2חלק .SFנעזר במבנה הנתונים מחסנית אשר הוצג בכיתה ואשר יתווסף ל

שיוגדר כ:Operבמחסנית ישמר מבנה מטיפוס typedef enum {R,P,D} op;/* internal struct )not ADT( */typedef struct Oper_t {

op code; char old_char ;} Oper;

•op:הנו קוד הפעולה שבוצעה •D תו נמחק. ואזי - old_char.מכיל את התו שנמחק • P .תו נכתב - old_char.אינו מוגדר • R תו הוחלף, ואזי - old_char.מכיל את התו שהוחלף לא תשתנה.SetModeפעולת ה • ואת התו הנמחק.D את op נכניס למחסנית מבנה חדש שיכיל כ Deleteבפעולת ה • op כ R , או את insert אם אנו במצב op כ P נכניס למחסנית מבנה שיכיל רק Putבפעולת ה •

.old_char . במצב זה גם נקבע את התו שעליו הצביע הראש כ overrideאם אנו במצב ( נרוקן את jump כ read )במהלך המבחן נאמר שיש להתייחס ל read, ו Jumpבפעולת •

המחסנית. )ואז כל הפעולות מתנהגות כמו Undoכמו כן, נשמור דגל אשר יאמר אם אנו מבצעים פעולת •

בסעיף א' ואין צורך לשמור את השינויים במחסנית( או שאנו בפעולה רגילה.

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

נקודות(2 )1חלק . )אין צורך SFUndoהוסיפו למנשק שכתבתם בסעיף א' את חתימת הפונקציה

לכתוב את כל המנשק מחדש, אלא רק את חתימת הפונקציה(.

נקודות( 10 )2חלק . )ניתן להיעזר בכל מבנה Undoתארו באיזה מבנה נתונים תשתמשו בכדי לאפשר את פעולת ה

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

, SFPut, SFJumpהקפידו לתאר אילו שינויים ידרשו להתבצע בפונקציות SFSetMode ו SFDelete ובהגדרת המבנה SFבכדי לאפשר את

.Undo. זכרו כי אין צורך לשמור את השינויים הקורים עקב פעולת SFUndoפעולת ה

נקודות(8 )3חלק בעזרת מבנה הנתונים שבחרתם בחלק הקודם. הנכם רשאים SFUndoממשו את הפונקציה:

אשר כתבתם בסעיף א'. זכרו כי אין צורך לשמור SFלהיעזר בכל פונקציות הנמצאות במנשק של .Undoאת השינויים הקורים עקב פעולת

נקודות( .3סעיף ג ) עלולות להחזיר )ערכים SF ( קודי שגיאה אשר הפונקציות של המנשק 3תנו דוגמא לשלושה )

( , והסבירו את משמעותם. SFResultאפשריים של

SmartFile

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

3חלק SFResult SFUndo )SF file( {

SFResult result; Oper rec;assert)file != NULL(;Mode_t mode = file->mode ;result = pop )file->s,&rec(;if )result == FAIL( return NoMoreOperation;file->flag = UNDO ;switch )rec.oper( {case P: // Put

result = SFDelete)file(;assert)result == SUCCESS(;break;

case R: // Replaceresult = SFSetMode)file, OVERRIDE(;assert)result == SUCCESS(;result = SFPut)file,rec.old_char(;assert)result == SUCCESS(;result = SFSetMode)file, mode(;assert)result == SUCCESS(;break;

סעיף ב.

ניתן לבצע הנחה סבירה כי ניתן לגשת לשדה זה והוא קיים, או שנדרוש כי

במסגרת השינויים יתווספו פונקציות גישה לשדה זה.

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

case D: // Deleteresult = SFSetMode)file, INSERT(;assert)result == SUCCESS(;result = SFPut)file,rec.old_char(;assert)result == SUCCESS(;result = SFSetMode)file, mode(;assert)result == SUCCESS(;break;

}file->flag=NOT_UNDO;return SUCCESS;

}

סעיף ב.

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

נקודות(2 )1חלק . )אין צורך SFUndoהוסיפו למנשק שכתבתם בסעיף א' את חתימת הפונקציה

לכתוב את כל המנשק מחדש, אלא רק את חתימת הפונקציה(.

נקודות( 10 )2חלק . )ניתן להיעזר בכל מבנה Undoתארו באיזה מבנה נתונים תשתמשו בכדי לאפשר את פעולת ה

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

, SFPut, SFJumpהקפידו לתאר אילו שינויים ידרשו להתבצע בפונקציות SFSetMode ו SFDelete ובהגדרת המבנה SFבכדי לאפשר את

.Undo. זכרו כי אין צורך לשמור את השינויים הקורים עקב פעולת SFUndoפעולת ה

נקודות(8 )3חלק בעזרת מבנה הנתונים שבחרתם בחלק הקודם. הנכם רשאים SFUndoממשו את הפונקציה:

אשר כתבתם בסעיף א'. זכרו כי אין צורך לשמור SFלהיעזר בכל פונקציות הנמצאות במנשק של .Undoאת השינויים הקורים עקב פעולת

נקודות( .3סעיף ג ) עלולות להחזיר )ערכים SF ( קודי שגיאה אשר הפונקציות של המנשק 3תנו דוגמא לשלושה )

( , והסבירו את משמעותם. SFResultאפשריים של

SmartFile

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

סעיף ג.

BadJump –.קפיצה מעבר לתחילת / סוף הקובץ

NoMoreOperation .אין יותר פעולות לבטל -

CannotOpenFile – אין אפשרות לפתוח את הקובץ

שניתן כפרמטר.