מס' סידורי: ת.ז.: עמוד 1 מתוך 15 פתרון בחינה בתוכנה 1 סמסטר ב', מועד ב',תשע"א 140/900/11 ליאור וולף, מתי שמרת, הדס צור, אסף זריצקי הוראות (נא לקרוא!)

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

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

PowerPoint Presentation

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

תרגול 1

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

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

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

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

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

PowerPoint Presentation

PowerPoint Presentation

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

תרגול 1

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

Slide 1

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

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

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

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

PowerPoint Presentation

Slide 1

PowerPoint Presentation

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

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

PowerPoint Presentation

PowerPoint Presentation

HTML - Hipper Text Makeup Language

Microsoft Word - c_SimA_MoedB2005.doc

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

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

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

מס' סידורי: ת.ז.: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך ה

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

PowerPoint Presentation

11_2009_gui

PowerPoint Presentation

Slide 1

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

Slide 1

PowerPoint Presentation

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

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

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

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

Microsoft PowerPoint - rec3.ppt

Tutorial 11

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

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

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

Microsoft Word B

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

PRESENTATION NAME

מקביליות

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

תרגיל בית מספר 1#

Microsoft PowerPoint - 10_threads.ppt

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

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

פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד

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

תרגול 1

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

Slide 1

PowerPoint Presentation

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

מבוא לאסמבלי

Microsoft Word - pitaron222Java_2007.doc

מקביליות

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

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

Slide 1

Slide 1

Slide 1

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

Slide 1

Microsoft Word - c_SimA_MoedA2006.doc

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

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

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

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

פייתון

תרגול 1

1 תוכנה 1 תרגיל מספר 7 מנשקים Interfaces הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה- moodle ב

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

שקופית 1

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

Microsoft PowerPoint - lec2.ppt

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

234114

מערכות הפעלה

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

Data Structure Assignment no.3 תאריך הגשה: p.m. 11/09/16, 23:59 את העבודה יש להגיש בזוגות במערכת ההגשות.submission system על העבודה להיות מוגשות כקובץ

Microsoft PowerPoint - lec10.ppt

שעור 6

תמליל:

עמוד 1 מתוך 15 פתרון בחינה בתוכנה 1 סמסטר ב', מועד ב',תשע"א 140/900/11 ליאור וולף, מתי שמרת, הדס צור, אסף זריצקי הוראות (נא לקרוא!) משך הבחינה שלוש שעות, חלקו את זמנכם ביעילות. אסור השימוש בחומר עזר כלשהו, כולל מחשבונים או כל מכשיר אחר פרט לעט. בסוף הבחינה צורף לנוחותכם נספח ובו תיעוד מחלקות שימושיות. יש לענות על כל השאלות בגוף הבחינה במקום המיועד לכך. המקום המיועד מספיק לתשובות מלאות. יש לצרף את טופס המבחן למחברת הבחינה. מחברת ללא טופס עזר תיפסל. תשובות במחברת הבחינה לא תיבדקנה. במידת הצורך ניתן לכתוב בגב טופס הבחינה. יש למלא מספר סידורי (מס' מחברת) ומספר ת.ז על כל דף של טופס הבחינה. ניתן להניח לאורך השאלה שכל החבילות הדרושות יובאו, ואין צורך לכתוב שורות.import במקומות בהם תתבקשו לכתוב מתודה (שירות), ניתן לכתוב גם מתודות עזר. ניתן להוסיף הנחות לגבי אופן השימוש בשירותים המופיעים בבחינה, ובלבד שאין הן סותרות את תנאי השאלה. יש לתעד הנחות אלו כחוזה (תנאי קדם, תנאי בתר) בתחביר המקובל, שייכתב בתחילת השרות. לשימוש הבודקים בלבד : שאלה א ב ג סה"כ 1 2 3 4 בחינה בהצלחה! כל הזכויות שמורות מבלי לפגוע באמור לעיל, אין להעתיק, לצלם, להקליט, לשדר, לאחסן במאגר מידע, בכל דרך שהיא, בין מכנית ובין אלקטרונית או בכל דרך אחרת כל חלק שהוא מטופס הבחינה.

עמוד 0 מתוך 15 02( שאלה 1 נקודות( )51 נקודות( ממשו את השרות maxpalindrome אשר בהינתן מחרוזת (string) מחזיר את אורך הפלינדרום הארוך ביותר במחרוזת. תזכורת: פלינדרום הוא רצף שניתן לקרוא משני הכיוונים ללא שינוי בתוצאה. (לדוגמה:,aba,radar "ילד כותב בתוך דלי") א. maxpalindrome("aba") 3 maxpalindrome("k") 1 maxpalindrome("") 0 maxpalindrome("myradarisjamed") 5 maxpalindrome("nopalindrome") 1 להלן כמה דוגמאות: בסעיף זה אין התייחסות לסיבוכיות זמן הריצה של האלגוריתם. אם יש לכם הנחות לגבי הקלט לפונקציה ציינו אותן במפורש בתחביר פורמלי שימוש בטענות עיצוב בעזרת חוזה: ככל האפשר ע"י /** * @pre text!= null * */ public static int maxpalindrome(string text) { int maxlength = 0; for (int i = 0; i < text.length(); i++) { for (int j = text.length(); j - i > maxlength; j--) { if (ispalindrome(text.substring(i, j))) { maxlength = j - i; return maxlength; private static boolean ispalindrome(string text) { StringBuilder reversed = new StringBuilder(text); reversed.reverse(); return reversed.tostring().equals(text);

עמוד 3 מתוך 15 )1 נקודות( נסחו במדויק את תנאי האחר של הפונקציה שמימשתם תוך שימוש בכמתי לכל וקיים ) :( ב. נגדיר את הפרדיקט len) palindrome(text, שמשוערך ל- true אם קיים פלינדרום באורך len ב- text. palindrome(text, len) i. (0 i text.length() len) & ( k. 0 k < len text.charat(i+k) = text.chartat(i+len-1-k))) Boundaries: 0 $ret text.length() Palindrome: palindrome(text, $ret) Max: m. m > $ret!palindrome(text, m) נגדיר את תנאי האחר בעזרת הפרדיקט:

עמוד 4 מתוך 15 שאלה 02( 0 נקודות( נתונים שני המנשקים Stack ו- :Maxable public interface Stack<T> { /** @pre:!isempty() */ T top(); /** @pre: element!= null */ void push(t element); /** @pre:!isempty() */ void pop(); boolean isempty(); public interface Maxable<T extends Comparable<T> > { /** returns the maximal element */ T max(); אומה מעוניינת לפתח את,MaxStack מחסנית מקסימלית, אשר מממשת את שני המנשקים: public class MaxStack<T extends Comparable<T>> implements Stack<T>, Maxable<T> ביל מציע לאומה מימוש יעיל במיוחד למחסנית המקסימלית אשר מממש את כל פעולות המנשקים בזמן (1)O, כלומר אין צורך לעבור על כל אברי המחסנית לצורך שום פעולה. ההצעה של ביל היא כזו: בכל פעם שמתבצעת פעולת,push נדחוף לא רק את האיבר החדש, אלא גם את המקסימום החדש של המחסנית (אולי זהה למקסימום הישן). כך שבעצם האיבר העליון במחסנית יהיה ה- max שלה בכל רגע נתון, ואיבר ה- top האמיתי יהיה האיבר שאחריו במחסנית. כלומר, במחסנית עם n אברים, ישמרו למעשה 2n אברים לסרוגין: ה- max העדכני ו'איבר אמיתי'. אומה כל כך מתרגשת מהצעתו של ביל, שהיא כבר רוצה לממש את המחסנית, אבל לא יודעת איך לממש את מבנה הנתונים שיחזיק את המחסנית (מערך / רשימה /.(Collection ביל מציע לה לדחות את ההחלטה על המימוש תוך שימוש בתבנית עיצוב ה Bridge שנלמדה בהרצאה. ביל עוזר לאומה, ומממש בנאי אשר מקבל מימוש של מחסנית ושומר אותו בשדה פנימי. א. )51 נקודות( עיזרו לאומה להשלים את מימוש המחסנית לפי הצעת ביל (בעמוד הבא): public class MaxStack<T extends Comparable<T>> implements Stack<T>, Maxable<T> { private Stack<T> stackimpl; /** * @pre: stackimpl!= null && stackimpl.isempty() */ public MaxStack(Stack<T> stackimpl) { this.stackimpl = stackimpl;

עמוד 5 מתוך 15 // @pre!isempty() public T max() { return stackimpl.top(); // @pre element!= null public void push(t element) { T max = isempty()? element : stackimpl.top(); stackimpl.push(element); stackimpl.push(element.compareto(currentmax) > 0? element : max); // @pre!isempty() public void pop() { stackimpl.pop(); stackimpl.pop(); // @pre!isempty(); public T top() { T currentmax = stackimpl.top(); stackimpl.pop(); T top = stackimpl.top(); stackimpl.push(currentmax); return top; public boolean isempty() { return stackimpl.isempty();

עמוד 6 מתוך 15 )51 נקודות( אומה מגלה בעיה עם המימוש מסעיף א', אברי המחסנית עשויים להשתנות לאחר הכנסתם למחסנית (אם הם,(mutable ואולם מכיוון שהאיבר המקסימלי חושב לפי ערכו של כל איבר בעת ההכנסה הערך max() עשוי להיות לא מעודכן (למשל: ערכו של האיבר המקסימלי יכול לרדת מתחת לערכו של איבר אחר בין הזמן שבו הוכנס למחסנית והזמן שבו בוצע ה-.(max() ב. אומה מבינה שקיימות מספר דרכים לטפל בבעיה ומחליטה להוסיף למחלקה MaxStack שירות שיעזור במימוש הפתרונות האפשריים. אומה מחליטה להוסיף למחסנית את השרות elementchanged שתפקידו להחזיר את המחסנית למצב תקין. פתרונות אפשריים לבעיה יוכלו לרשת מהמחלקה MaxStack ולעשות שימוש בשירות זה (ראו סעיף הבא). השלימו את מימוש השרות elementchanged של המחלקה.MaxStack בסעיף זה אין מגבלה על סיבוכיות זמן הריצה (או הזיכרון) של המימוש. public class MaxStack<T extends Comparable<T>> implements Stack<T>, Maxable<T> { // same as in previous section protected void elementchanged() { Deque<T> elements = new ArrayDeque<T>(); while (!isempty()) { elements.addfirst(top()); pop(); for (T element : elements) { push(element);

עמוד 7 מתוך 15 )51 נקודות( ביל מציע לאומה להוסיף למחסנית מנגנון שיאפשר קריאה אוטומטית לשרות :Observer בכל פעם שאיבר משתנה. ביל מציע להשתמש בתבנית העיצוב elementchanged המחסנית תממש את המנשק Observer ואילו אברי המחסנית יממשו את המנשק.Observable ג. public interface Observable { void addobserver(observer observer); void removeobserver(observer observer); public interface Observer { void update(observable observable); המחסנית תרשם לקבלת עדכונים על שינויים בערכי אבריה, בכך שתפעיל את השרות addobserver על כל אחד מהאברים ותעביר את עצמה כארגומנט לשרות. רישום זה יתבצע בעת הוספת האיבר למחסנית. בכל פעם שאיבר במחסנית יתעדכן הוא יודיע זאת לכל הצופים שלו ע"י הפעלת השרות update על כל אחד מהם. כאשר איבר מוצא מהמחסנית (ע"י (pop() על המחסנית להסיר את עצמה מרשימת ה observers שלו. היורשת מהמחלקה MaxStack כדי לתמוך ממשו את המחלקה AutoUpdatedMaxStack מממשים כהלכה את המנשק כבר ניתן להניח כי כל אברי המחסנית במנגנון החדש..Observable שימו לב, השימוש באופרטור '&' בחתימת המחלקה.Observable וגם את Comparable מציין כי הטיפוס הגנרי T מממש גם את

עמוד 8 מתוך 15 public class AutoUpdatedMaxStack<T extends Comparable<T> & Observable> extends MaxStack <T> implements Observer { public AutoUpdatedMaxStack(Stack<T> stackimpl) { super(stackimpl); public void push(t element) { element.addobserver(this); super.push(element); public void pop() { T top = top(); top.removeobserver(this); super.pop(); public void update(myobservable observable) { elementchanged();

עמוד 9 מתוך 15 32( שאלה 3 נקודות( במהלך הסמסטר הצגנו (בשיעור (GUI דפדפן אשר גולש לתוצאת החיפוש הראשונה בגוגל (לפי הערך שהוזן בתיבת הטקסט). ברצוננו להוסיף לדפדפן זה מנגנון אשר יזכור את היסטוריית החיפושים. )51 נקודות( בשלב ראשון נגדיר את הפעולות אשר מנגנון ההיסטוריה אמור לתמוך בהן. להלן המנשק History המתאר את הפעולות: א. /** * Maintains a history of strings. The elements in the history are * kept in the order they were added, thus newer element will appear * before older ones. There are no duplicates in the history. If the * same query is added twice only one copy is kept (the newer one). */ public interface History { /** * Add text to the history. */ void add(string text); /** * Retrieve the entire history. */ List<String> gethistory(); /** * Retrieve only elements in the history which starts with the * given prefix. The empty string is a prefix of all strings. */ List<String> gethistory(string prefix); /** * Check whether the history contains elements */ boolean isempty(); בהיסטורית תופיע מחרוזת החיפושים. להיסטוריית text המחרוזת את מוסיף add המופע את לשמור יש בעבר, הופיעה כבר מחרוזת אם אחת. פעם בדיוק החיפושים האחרון. gethistory מחזיר את רשימת כל המחרוזות שבהיסטוריה. מחרוזות יסודרו מהחדשה ביותר (אינדקס 0) ועד לישנה ביותר. מחזיר את רשימת כל המחרוזות שבהיסטוריה prefix) gethistory(string ועד לישנה 0) (אינדקס מחרוזות יסודרו מהחדשה ביותר.prefix המתחילות במחרוזת ביותר. המחרוזת הריקה מהווה תחילית של כל מחרוזת. isempty בודק האם ההיסטוריה ריקה.

עמוד /1 מתוך 15 ממשו את המחלקה SimpleHistory המממשת את המנשק.History ניתן להגדיר מבני עזר או שירותים חדשים לצורך המימוש: public class SimpleHistory implements History { private final List<String> history; public SimpleHistory() { history = new ArrayList<String>(); public void add(string text) { if (history.contains(text)) { history.remove(text); history.add(0, text); public List<String> gethistory() { return gethistory(""); public List<String> gethistory(string prefix) { String lowercase = prefix.tolowercase(); List<String> result = new ArrayList<String>(); for (String str : history) { if (str.tolowercase().startswith(lowercase)) { result.add(str); return result; public boolean isempty() { return history.isempty();

עמוד 11 מתוך 15 )51 נקודות( ברצוננו לשלב את רכיב ההיסטוריה שממשנו בסעיף א' בדפדפן שהוצג בכיתה. כאשר המשתמש יקליד את השאילתה תפתח חלונית ובה יוצגו כל השאילתות הקודמות המתחילות בטקסט שכבר הוקלד. לדוגמא: אם חיפשנו את barzilay","ohad את "java" ולבסוף "opera" וכעת אנחנו מקלידים שאילתת חיפוש חדשה המתחילה ב- o תוצג חלונית ובה שתי השאילתות המתאימות לתחילית זו (איור 1). ב. איור 1: חלונית היסטוריה לפניכם קוד המחלקה GoogleBrowserWithHistory המממש את התכונות נדרשות. ביישום זה חלונית ההצעות ממומשת בעזרת Shell נוסף, אשר מכיל טבלה,(Table) ובה ההצעות הרלוונטיות, שמהן יכול המשתמש יכול לבחור בעזרת העכבר. בכל פעם שהמשתמש לוחץ על הכפתור lucky" "I'm feeling מתבצע חיפוש, והשאילתה הנוכחית מתווספת להיסטורית החיפושים. לצערנו, בעת הבאת המבחן לדפוס נשפכה כוס קפה על הבחינה וחלק מהקוד נמחק. עליכם להשלים את הקוד החסר במלבנים המיועדים לכך והמסומנים בכתמי קפה. מקום זה אמור להספיק לכל הקוד הדרוש, אולם אם ברצונכם להוסיף קוד במקומות אחרים פרט למלבנים המיועדים לכך, הוסיפו אותו בעמוד האחרון וציינו במדויק היכן קוד זה אמור להשתלב. שימו לב: כמעט כל הקוד הנדרש לשילוב ההיסטוריה בדפדפן כבר ממומש. הקוד החסר עוסק רובו ככולו בשילוב בין הפונקציונליות שמימשתם בסעיף א' וקוד הדפדפן שראיתם בהרצאה. קראו בעיון את הקוד שלפניכם והשלימו את הנדרש בהתאם לקוד הקיים.

עמוד 10 מתוך 15 public class GoogleBrowserWithHistory { private Shell shell = null; private Shell popupshell; private Text text = null; private Browser browser = null; private Table table; private static Display display = Display.getDefault();; private History history = new SimpleHistory(); public static void main(string[] args) { final GoogleBrowserWithHistory app = new GoogleBrowserWithHistory(); app.createshell(display); while (!app.shell.isdisposed()) { if (!display.readanddispatch()) display.sleep(); display.dispose(); // create the GUI private void createshell(display display) { shell = new Shell(); shell.settext("browser Example"); shell.setlayout(new GridLayout(2, false)); text = new Text(shell, SWT.BORDER); text.setlayoutdata(new GridData(SWT.FILL, SWT.CENTER, true, false)); Button button = new Button(shell, SWT.NONE); button.settext("i'm feeling lucky"); button.setlayoutdata(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); button.addselectionlistener(new SelectionAdapter() { public void widgetselected(selectionevent e) { try { String query = text.gettext(); history.add(query); ); String url = null; url = search(query); if (url!= null) { shell.settext(url); browser.seturl(url); catch (Exception e1) { e1.printstacktrace(); המשך בעמוד הבא

עמוד 13 מתוך 15 browser = new Browser(shell, SWT.NONE); browser.setlayoutdata(new GridData(SWT.FILL, SWT.FILL, false, true, 2, 1)); popupshell = createpopupshell(display); table = new Table(popupShell, SWT.SINGLE); table.addselectionlistener(new SelectionAdapter() { public void widgetdefaultselected(selectionevent e) { handletableselection(); ); // listen to keyboard events text.addkeylistener(new KeyAdapter() { public void keyreleased(keyevent e) { handlekeyreleased(); ); shell.pack(); shell.open(); // Handles key strokes in the text widget. private void handlekeyreleased() { String prefix = text.gettext(); if (prefix.isempty()) { popupshell.setvisible(false); return; List<String> matching = null; matching = history.gethistory(prefix); if (matching.isempty()) { popupshell.setvisible(false); return; table.setitemcount(matching.size()); TableItem[] tableitems = table.getitems(); for (int i = 0; i < tableitems.length; i++) { tableitems[i].settext(matching.get(i)); setpopupbounds(); popupshell.setvisible(true); המשך בעמוד הבא

עמוד 14 מתוך 15 private void setpopupbounds() { TableItem item0 = table.getitem(0); Rectangle textbounds = display.map(shell, null, text.getbounds()); Point tablesize = table.computesize(swt.default, SWT.DEFAULT, true); popupshell.setbounds(textbounds.x, textbounds.y + textbounds.height, textbounds.width, tablesize.y - item0.getbounds().height); // create the history popup shell private static Shell createpopupshell(display display) { final Shell popupshell = new Shell(display, SWT.ON_TOP); popupshell.setlayout(new FillLayout()); return popupshell; // Handle double-click on a table item private void handletableselection() { String str = table.getselection()[0].gettext(); text.settext(str); text.setselection(str.length()); popupshell.setvisible(false); // Perform the actual search using Google s JSON API private String search(string query) // same as in class...

ה, עמוד 15 מתוך 15 12( שאלה 0 נקודות( ענו בקצרה על שתי השאלות הבאות (תשובה מילולית בלבד. אין צורך לכתוב קוד): )1 נקודות( כאשר מגדירים מחלקה אנונימית A בתוך פונקציה f, מדוע לא ניתן להשתמש במשתנים המקומיים של f במחלקה האנונימית? א. משתנה מקומי מוקצה על המחסנית ו"מת" בסוף פעולת השירות f, בעוד אובייקטים מוקצים על ה- Heap וחיים מעבר לקריאה לשירות. לפיכך האובייקט של המחלקה A יכול להתקיים מעבר לזמן של המשתנים המקומיים ב- f. ()T new אינו חוקי? ב. )1 נקודות( עבור פרמטר גנרי T סבירו מדוע התחביר כל יצירה של אובייקט מלווה בקריאה לבנאי. כאשר אנו מנסים ליצור אובייקט מטיפוס פרמטרי אין לקומפיילר יכולת לוודא שאכן קיים בנאי מתאים בטיפוס האקטואלי.