גיליון תשובות מספר נבחן: (30 נקודות) שאלה 1 APP **apps_repo_arr_; סעיף א : מי שהבין שצריך מערך אך לא הבין מערך פוינטרים -3 סעיף ב : MY_APPS_REPO(int n

מסמכים קשורים
מבוא לתכנות ב- JAVA תרגול 11

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

מבוא למדעי המחשב

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

Microsoft Word - c_SimA_MoedB2005.doc

מבוא למדעי המחשב

Microsoft PowerPoint - 10_threads.ppt

PowerPoint Presentation

שאלהIgal : מערכים דו מימדיים רקורסיה:

תרגול 1

מבוא למדעי המחשב - חובלים

מבוא למדעי המחשב - חובלים

שאלהIgal : מערכים דו מימדיים רקורסיה:

מבוא למדעי המחשב

מבוא למדעי המחשב

PowerPoint Presentation

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

PowerPoint Presentation

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

מבוא למדעי המחשב

Slide 1

PowerPoint Presentation

מבוא למדעי המחשב

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

תכנות מונחה עצמים א' – תש"ע

מבוא לתכנות ב- JAVA תרגול 7

PowerPoint Presentation

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

תרגול 1

Microsoft Word B

Slide 1

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

Slide 1

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - rec3.ppt

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ

PowerPoint Presentation

HTML - Hipper Text Makeup Language

Slide 1

מבוא למדעי המחשב

מקביליות

מהוא לתכנות ב- JAVA מעבדה 3

PowerPoint Presentation

הטכניון - מכון טכנולוגי לישראל הפקולטה להנדסת חשמל המעבדה למערכות תכנה מרושתות ניסוי בתכנות מקבילי ב- Java המאחר ביותר מ 51 דקות לא יורשה לבצע את הניס

תורת הקומפילציה

PowerPoint Presentation

Slide 1

PowerPoint Presentation

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

תרגול 1

מקביליות

תוכן העניינים

Microsoft Word - sync_LG.doc

Microsoft Word - Ass1Bgu2019b_java docx

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

יום שלישי, 14 ליולי 2015 מבחן סוף סמסטר - תכנות מונחה עצמים )236703( סמסטר אביב 2015, מועד א' מרצה: ערן גלעד מתרגלים: נורית מושקוביץ', הלאל עאסי, אליר

מבוא למדעי המחשב

פייתון

מבוא למדעי המחשב

שעור 6

PowerPoint Presentation

מקביליות

תוכן העניינים

תרגול 1

הגשה תוך שבוע בשעת התרגול

תרגול מס' 1

Slide 1

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

תכנון אלגוריתמים עבודת בית 4: תכנון אלגוריתמים תאריך הגשה: 02: , בצהריים,תא מספר 66 בקומת כניסה של בניין 003 מתרגל אחראי: אורי 0

Microsoft PowerPoint - lec2.ppt

Slide 1

הטכניון מכון טכנולוגי לישראל הפקולטה למדעי המחשב הוראות הגשה: ההגשה בזוגות. הוסיפו שמות, ת.ז., אי-מייל, תא אליו יש להחזיר את התרגיל ואת תשובותיכם לתרג

סדנת תכנות ב C/C++

Homework Dry 3

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

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

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

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

בחן במערכות הפעלה

PowerPoint Presentation

הוספת קישור לאתר אינטרנט תוכן ממשק בדיקת מטלות...3 איחוד אתרי קורסים...5 סל מחזור... 7 חידושים בפעילויות...8 תצורת קורס: כפתורים... 9 פורומים...10 שיפ

מדריך להתקנת Code Blocks מדריך זה נועד לתאר את תהליך התקנת התוכנה של הקורס "מבוא למחשב שפת C". בקורס נשתמש בתוכנת Code::Blocks עם תוספת )אשף( המתאימה

תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

תוכנה 1 אביב תשע"ח תרגיל מספר 8 אוספים גנריים ו- framework collection הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת ה

פרויקט "רמזור" של קרן אביטל בס "ד מערך שיעור בנושא: "פונקציה" טליה קיפניס והדסה ערמי, מאולפנת צביה פרטים מקדימים על מערך השיעור: השיעור מהווה מבוא לנו

תרגיל 3 בקורס תוכנה 1

Microsoft PowerPoint - lec 04 Gui Form_Item.pptx

שאלהIgal : מערכים דו מימדיים רקורסיה:

Slide 1

תמליל:

גיליון תשובות מספר נבחן: (30 נקודות) שאלה 1 APP **apps_repo_arr_; סעיף א : מי שהבין שצריך מערך אך לא הבין מערך פוינטרים -3 סעיף ב : MY_APPS_REPO(int n) { apps_repo_arr_ = new APP*[n]; for (int i = 0; i < n; i++) apps_repo_arr_[i] = new PLAY_APP();... מי שלא הקצה מערך של פוינטרים -2 מי שלא הקצה את האובייקטים על המערך -3 סעיף ג : class MY_APPS_REPO{... static MY_APPS_REPO* Create(int n); private: MY_APPS_REPO(); MY_APPS_REPO(int n); 1

; מי שלא זכר static הורד -3 מי שלא זכר בנאי private הורד -3 מי שהשתמש בסינגלטון ונתן תשובה שלמה - מלוא הנקודות סעיף ד : MY_APPS_REPO(MY_APPS_REPO&& rhs) { steal(rhs); void MY_APPS_REPO::steal(MY_APPS_REPO& rhs){ apps_repo_arr_ = rhs.apps_repo_arr_; rhs.apps_repo_arr_ = nullptr; מי שבsteal הקצה זכרון -4 מי שמימש דברים לא קשורים -2 2

(30 נקודות) שאלה 2 מומלץ לעיין בהערות לפני שמגישים ערעור - לא ירדו סתם נקודות. סעיף א : התכונה הנשמרת (האינווריאנטה) צריכה לכסות את ההיבטים הבאים של עץ בינארי ממויין: - ערכי העץ ברי השוואה, כלומר אינם.null - לקודקוד יכולים להיות שני בנים, בן אחד, או אף בן (עלה). - ערכו של הבן השמאלי קטן מערך הקודקוד, וערכו של הבן הימני גדול מערך הקודקוד. יש לתאר היבטים אלו בעזרת שאילתות בסיסיות, מבלי להסתמך על מימוש כלשהוא (בלי this ושמות שדות). ההגדרה הבאה עושה זאת: //@INV: getdata()!= null && ( getleft() == null getdata().compareto(getleft().getdata()) > 0) && (getright() == null getdata().compareto(getright().getdata()) < 0) סעיף ב : בטיחות מוגדרת כשמירה על האינווריאנטה. מימוש הממשק שומר על האינווריאנטה לאור שתי התובנות הבאות: - לא ניתן למחוק קודקודים או לשנות את ערכם. - ההוספה של קודקוד חדש היא פעולה אטומית: השמת כתובת למשתנה, כלומר ביצוע פעולת כתיבה של 64 ביט (long) לזיכרון [גם אם המעבד עובד ב 32 ביט זה מובטח, כי left ו right מוגדרים כ.[volatile 3

לאור זאת, כאשר מעודכן הערך של left או right הערך שלו תואם את האינווריאנטה, הכתובת מעודכנת בפעולה אחת (אחרת היינו עשויים לקבל כתובת שחלקה הראשון מגיע מת'רד אחד וחלקה השני מת'רד אחר, וכתובת זו מצביעה על קודקוד אחר שערכו אינו תואם את האינווריאנטה), ולא ניתן למוחקו או לשנותו במקביל. בתשובה נדרש לציין את הגדרת הבטיחות ואת שתי הנקודות שצוינו. אי הזכרה של האטומיות גררה הורדה של נקודה. סעיף ג : הגדרת נכונות דורשת התאמה של כל תוצאה מקבילית להרצה סדרתית של הפעולות בסדר כלשהו. במימוש הקיים, הוספה של שני קודקודים ע"י שני ת'רדים עשויה להסתיים בהוספה של קודקוד אחד בלבד. לדוגמא: נתון עץ עם קודקוד אחד בעל הערך 5. ת'רד אחד מבצע insert 3 ות'רד שני מבצע.insert 2 בהרצה סדרתית בסדר 3,2 נקבל עץ בו 3 הוא הבן השמאלי של 5, ו 2 הוא הבן השמאלי של 2. בהרצה סדרתית בסדר 2,3 נקבל עץ בו 2 הוא הבן השמאלי של 5, ו 3 הוא הבן הימני של.2 בהרצה מקבילית, לעומת זאת, ניתן לקבל עץ בו 2 הוא הבן שמאלי של 5 בלבד (כאשר הת'רד המוסיף אותו דורס את הקודקוד 3 עקב context switch לאחר בדיקת התנאי,(left==null וכן מקרה הפוך בו 3 הוא הבן השמאלי של 2 בלבד. ירדה נקודה למי שלא ציין את קריטריון הנכונות (השאלה היתה על נכונות ולא על הצבעה על 'משהו לא בסדר'). למי שציין קריטריון נכונות בו להרצה מקבילית חייבת להיות תוצאה אחת - כמו הרצה סדרתית בסדר ספציפי - ירדו 4 נקודות. 4

סעיף ד : נסנכרן את המתודות של המחלקה, 'סנכרון מלא' ופשוט. [למותר לציין, כי סנכרון מתודה אינו משנה את הממשק: הסנכרון הוא חלק מהקוד המממש, 'סינטקטיק שוגר' ל [synchronized this class SortedBinaryTreeImpl<T extends Comparable<T>> implements SortedBinaryTree<T> { private T data; private SortedBinaryTree<T> left; private SortedBinaryTree<T> right; SortedBinaryTreeImpl(T data) throws Exception { if (data == null ) throw new Exception("Null value!"); this.data = data; this.left = null ; this.right = null ; public synchronized T getdata() { return data; public synchronized SortedBinaryTree<T> getleft() { return left; public synchronized SortedBinaryTree<T> getright() { return right; public synchronized void insert(t data) throws Exception { if (data == null) throw new Exception("Null value!"); if (this.data.compareto(data) > 0) { if (left == null) left = new SortedBinaryTreeImpl<T>(data); else left.insert(data); else { if (right == null) 5

else right = new SortedBinaryTreeImpl<T>(data); right.insert(data); סעיף ה : נשתמש במנגנון,CompareAndSet כך שהת'רד הממתין יבצע busy wait במקום לעבור למצב,blocked כפי שנלמד בכיתה: public void insert(t data) throws Exception { if (data == null) throw new Exception("Null value!"); if (this.data.compareto(data) > 0) { if (!left.compareandset(null,new SortedBinaryTreeImpl<T>(data))) left.get().insert(data); else { if (!right.compareandset(null,new SortedBinaryTreeImpl<T>(data))) right.get().insert(data); 6

(25 נקודות) שאלה 3 סעיף א : כל תשובה שהכילה הסבר של חלקים בצורה נכונה, קיבלה ציון חלקי. כל תשובה שהכילה הסבר נכון של כל החלקים, אבל גם הסבר שגוי, קיבלה ציון חלקי. כל תשובה שהכילה הסבר שטחי, קיבלה ציון חלקי. ההסבר היה צריך להכיל הסבר מלא של החלקים הבאים: - מבנה הנתונים של playingnow המוודא ש- Request אחד יטופל עבור לקוח אחד בזמן נתון. אם הוא לא קיים בו, אז מכניסים אליו את ה- ConnectionHandler שלו ומטפלים ב- Request, ואם בא Request שני בזמן הטיפול ב- Request הראשון, אז ייכנס לטור המתנה עבורו. [3 נקודות] - המימוש של execute מוודא שאם Request-1 התקבל לפני Request-2 אז יטופל Request-1 לפני Request-2 בגלל ששולחים את הראשון לפי ההסבר לעיל, והרצה הסדרתית של run (של- Request-1 ), ואז complete ש- [3 נקודות] בודקת אם אין עוד בתור על ידי הפעלת,pendingRunnablesOf אז מוציאה אותו מ- playingnow, אחרת מפעילים את הבא על ידי שליחת Runnable חדש עבור Request-2 להרצה. [2 נקודות] סעיף ב : הטור writequeue מכיל בכל תא.ByteBuffer כל הוא ByteBuffer Response אחד. השאלה ביקשה לשלוח אחד Response ו- במלואו. כלומר, הפונקציה לא אמורה לצאת לפני שנשלח מלוא ה- Response. (1) כל פתרון ששלח אחד Response - אבל לא במלואו, קיבל חצי ניקוד. כל פתרון ששלח את כולם, ובמלואם, קיבל חצי ניקוד. טעות קריטית בקוד ללא קשר ללוגיקה איבד 2 נקודות. אין איבוד נקודות בגלל סוגריים חסרים, או שימוש לא נכון ב- API. 7

public void continuewrite () { if_ (!writequeue.isempty()) { try { ByteBuffer top = writequeue.top(); while top.hasremaining()) chan.write(top); writequeue.remove(); catch (IOException ex) { ex.printstacktrace(); close(); if (writequeue.isempty()) { if (protocol.shouldterminate()) close(); else reactor. updateinterestedops (chan, SelectionKey.OP_READ); (2) כל הסבר שהכיל מידע שגוי מעורבב עם מידע נכון, איבד 1-2 נקודות לפי חומרת הטעות. כל הסבר שהכיל את המילים "הת'רד נתקע", "נכנס למצב "block או "busy-wait" (שימוש ב- blocked מעיד על שימוש לא נכון במושג אם היה שימוש בלולאה) וכדומה, קיבל 2 נקודות. מי שהסביר את הסיבה הנכונה שבגינה התר'ד לא מסיים מהר מספיק וגורם להאטה משמעותית של ה- Reactor קיבל עוד נקודה. הסיבה הינה בגלל שה- outbuffer של ה- chan מלא לכן, אי אפשר לסיים לפני שה- chan ירוקן מספיק בייטים להכיל את ה- Response שלנו במלואו. 8

סעיף ג : הפתרון הכיל 4 חלקים שונים, וזה כדי לשמור על חלוקת משימות בשרת כמו שרשום בשאלה עצמה. יש פתרונות שעובדים אבל לא עומדים בכללים של חלוקת המשימות של ה- Reactor קיבלו 2 נקודות. כל חלק שמומש בצורה נכונה קיבל 2 נקודות. כל פתרון שפגם בגנריות של השרת, איבד 2 נקודות. מי שלא השתמש ב- Encoder איבד 2 נקודות. מי שלא עשה שימוש ב- Protocol איבד 2 נקודות. הפתרון המלא והנכון צריך לממש את הסעיפים הבאים: 1. מימוש של פונקציה ב- EchoProtocol שמחזירה Response המכיל את הודעת."Welcome!" 2. מימוש של פונקציה ב- ConnectionHandler שמחזירת Runnable שמשתמש ב- Protocol כדי לייצר את ה- Response, להפעיל עליו את ה- Encoder, ולהוסיף אותו ל- writedata, ואז לשנות את ה- Events שהשרת מעוניין בהם ל-.OP_WRITE (נא לעיין בסעיף 4) 3. עדכון פונקצית handleaccept כדי להפעיל את הפונקציה של-( 2 ) ולשלוח את ה- Runnable שנוצר ל- ThreadPool. 4. יש להפעיל את updateinterestedops עם,OP_WRITE מי שלא עשה את זה איבד 2 נקודות, מי שעשה את זה במקום לא נכון, כלומר לפני הוספת ה- Response ל- writedata, איבד נקודה. בדף הבא, יש מימוש מלא של ההסבר לעיל. 9

In MessagingProtocol : (interface) public String createwelcomeresponse (); In EchoProtocol: public String createwelcomeresponse () { return "Welcome!"; In NonBlockingConnectionHandler: public Runnable createwelcometask () { return () -> { T response = protocol.createwelcomeresponse(); writequeue. add (ByteBuffer.wrap( encdec.encode(response))); reactor.updateinterestedops(chan, SelectionKey.OP_READ SelectionKey.OP_WRITE); In handleaccept: (append) pool.submit( handler, handler.createwelcometask()) 10

(15 נקודות) שאלה 4 CREATE TABLE Users ( id INT PRIMARY KEY, name TEXT NOT NULL ); סעיף א : CREATE TABLE Properties ( property_id INT PRIMARY KEY, host_id INT NOT NULL, description TEXT NOT NULL, price_per_night INT NOT NULL, ); FOREIGN KEY(host_id) REFERENCES Users(id) CREATE TABLE Rentals ( user_id INT NOT NULL, property_id INT NOT NULL, check_in DATE NOT NULL, check_out DATE NOT NULL, rec_on_host TEXT, rec_on_guest TEXT, FOREIGN KEY(user_id) REFERENCES Users(id) FOREIGN KEY(property_id) REFERENCES Properties(property_id) PRIMARY KEY(property_id,check_in) ); כ- Key Primary של המחלקה Rentals התקבלו גם האופציות הבאות: 1. :Property_id,check_out המפתח הזה שקול לזה שלמעלה. אילו שבחרו שני תאריכים בעצם בחרו מפתח לא מינימלי ולכן הורדה נקודה. property התשובה תחת ההנחה שאורח יכול להשכיר :User_id, check_out או,User_id, check_in 2. אחת בלבד לכל לילה נתון. ההנחה אינה מתקיימת במציאות, אבל התקבלה. 3. check_in :User_id, property_id, תשובה זו נכונה תחת ההנחה שמספר משתמשים יכולים לחלוק דירה או חדר.(property) אופציה זו לא קיימת במציאות במעמד המערכת (תמיד יש נציג אחד מול המערכת), ולא הייתה הכוונה. כמו כן, אפשר כמובן להשתמש בתאריך check_out במקום.check_in בשאלה זו הגדרת הטבלאות אינה מונעת מידע לא תקין בתוך הDB, ובדיקת המידע המוכנס (נניח שאין חפיפת תאריכים בין הזמנות) צריכה להיעשות ברמת האפליקציה. לא למדנו בקורס להכניס תנאים לDB. 11

class User (object): def init (self, id, name ): Self.id = id Self.name = name סעיף ב : class _Users: def init (self, conn): self._conn = conn def insert(self, user_id, name): self._conn.cursor().execute(""" INSERT INTO Users (id,name) VALUES (?,?) """, [ user_id,name ]) SELECT name, check_out,rec_on_host FROM Rentals INNER JOIN Users ON user_id = Users.id WHERE rec_on_host NOT NULL AND Rentals.property_id=$property_id סעיף ג : התקבלו גם גרסאות טיפה שונות. טעות נפוצה שלא הורדו עליה נקודות: צירוף הטבלה Properties בJoin נוסף. זה כמובן העמסה מיותרת על ה.DB כמו כן, טעות משמעותית במקרה זה היא תנאי.Properties.host_id=Users.id תנאי זה יוציא החוצה את כל האורחים שאינם מארחים. על תנאי כזה הורדו נקודות. יש לשים לב שJoin מתבצע על טבלאות,ו- Select מתבצע על עמודות. יש הבדל בין תנאים שמתאימים לJoin לתנאים המתאימים לSelect. 12