םימצע החנומ תונכת -ב ןחבמ - ariel.ac.il...1 _ "םימצע החנומ...

6
_ 1 מבחן ב- "תכנות מונחה עצמים" סמסטר א'2018 מועד א' 4.2.2018 אראל סגל- הלוי, אודי לביא, בעז בן משה תשעח_א_7027910 משך הבחינה שעתיים וחצי חומר עזר: איןאסור( ספרים אסור דפים, אסור) מחשבים במבחן זה4 שאלות, יש לענות על כולן. אנא רשמו את תשובותיכם ב מחברת התשובות בלבד. הקפידו לרשום בדף התשובות גם את מספר הנבחן ותעודת הזהות שלכם. תשובות מסורבלות או ארוכות מדי לא יזכו בניקוד מלא. הקפידו על כתב יד ברור והסבריםניתן( בהחלט לתעד.) בעברית מותר לפתור סעיף מסוים ע"י שימוש בסעיפים אחרים מבנה הבחינה: עמוד1 : דף הנחיות כללי. עמוד2-3 שאלות הבחינה הקפידו על טוהר הבחינה!! בהצלחה!

Upload: others

Post on 06-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: םימצע החנומ תונכת -ב ןחבמ - ariel.ac.il...1 _ "םימצע החנומ תונכת" -ב ןחבמ 'א דעומ – 2018 'א רטסמס השמ ןב זעב איבל ידוא

_ 1

"תכנות מונחה עצמים" -מבחן ב

4.2.2018 'מועד א – 2018א' סמסטר

משה בן לביא, בעז הלוי, אודי-סגל אראל 7027910תשעח_א_

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

כולן. על לענות שאלות, יש 4 זה במבחן

בלבד. התשובות מחברת ב תשובותיכם את רשמו אנא

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

והסברים ברור יד כתב על מלא. הקפידו בניקוד יזכו לא מדי ארוכות או מסורבלות תשובות

בעברית(. לתעד בהחלט )ניתן

אחרים בסעיפים שימוש ע"י מסוים סעיף לפתור מותר

הבחינה: מבנה כללי. הנחיות : דף1 עמוד

הבחינה שאלות 2-3 עמוד

הבחינה!! טוהר על הקפידו

בהצלחה!

Page 2: םימצע החנומ תונכת -ב ןחבמ - ariel.ac.il...1 _ "םימצע החנומ תונכת" -ב ןחבמ 'א דעומ – 2018 'א רטסמס השמ ןב זעב איבל ידוא

_ 2

נקודות( 25) 1שאלה

נתונות המחלקות והממשקים הבאים:

שמייצג פונקציה רציפה מהממשיים לממשיים –( function). ממשק פונקציה 1

הוא bשי ו הוא ממ aכאשר f(x) = a*x^b. המחלקה מונום שמייצגת פונקציה מהצורה 2 אי שלילי. שלם מספר

על קווי אשר מגדירה יחס סדר <Comparator<Monom. מחלקה שמממשת את ממשק ה 3 מונומים לפי החזקה שלהם.

/**This interface represents a function y=f(x), where f(x) and x are reals. **/ public interface Function }

public double f(double x) {; public class Monom implements Function{

public Monom(double a, int b){…} public Monom(Monom ot) {…} public int get_power)( {…} // מחזיר את החזקה של המונום

public double get_coefficient )( {…} // מחזיר את המקדם של המונום

public double f(double x) {…}

public void add(Monom m) הוספת מונום למונום זה // {…}

public void multiply(Monom m) {…} // כפל מונום במונום זה

public boolean equals(Monom m){…}

}

public class Monom_Comperator implements Comparator<Monom>{

public int compare(Monom m0, Monom m1) }

int t = m1.get_power() - m0.get_power();

return t; {

}

ומקבלת ערך <Comparator<Function הממשק נקודות( כתבו מחלקה שמממשת 6) 1.1

.x=x0( ומשווה בין שתי פונקציות לפי ערכן בנקודה x0ממשי בבנאי )נניח לפי ערכן בנקודה מסויימת הדרכה: בעזרת המחלקה הזאת נוכל למיין אוסף פונקציות

)מגדול לקטן(.

Monom derivative public(): מונום הנגזרתנקודות( ממשו את השיטה 6) 1.2 קיימות עבורכם(.שרשומות מעלה )ניתן להניח שכל שאר השיטות

: המחלקה תאפשר <(<Function) נקודות( כתבו מחלקה שמייצגת אוסף פונקציות 6) 1.3, ולקבל את הפונקציה במקום להחזיר את גודלו )כמות הפונקציות(סף, להוסיף פונקציה לאו

נדקס(ימסויים )לפי אpublic class ListOfFunctions…

יצגת את הממוצע של אוסף פונקציותינקודות( כתבו את מחלקה שמ 7) 1.4

public class AveOfFunctions implements Function {

ListOfFunctionsמסוג למחלקה יש בנאי שמקבל אובייקט

תשובה:1.1

Page 3: םימצע החנומ תונכת -ב ןחבמ - ariel.ac.il...1 _ "םימצע החנומ תונכת" -ב ןחבמ 'א דעומ – 2018 'א רטסמס השמ ןב זעב איבל ידוא

_ 3

public class Function_Comperator implements Comparator<Function>{

private double _x0; public Function_Comperator(double x0) {_x0=x0;}

public int compare(Function f0, Function f1) } int ans = 0; double df = f1.f(_x0) - f0.f(_x0);

if(df>0) {ans = 1;} if(df<0) {ans=-1;}

return ans;

{

}

1.2 public Monom derivative() { double p = this.get_power)(; double c = this.get_coefficient )(; return new Monom(p*c,p-1); }

1.3 public class ListOfFunctions{ private ArrayList<Function> _functions; public ListOfFunctions() {_faunctions = new ArrayList<Function>();} public int size(){return _functions.size();} public void add(Function f) {_functions.add(f);} public Function get(int i) {return _functions.get(i); }

1.4 public class AveOfFunctions implements Function{

private ListOfFunctions _fs;

public AveOfFunctions(ListOfFunctions fs) {_fs = fs;} public double f(double x) { double ans = 0, s = _fs.size(); if(s==0) {throw new RuntimeException("Error: empty list!!");} for(int i=0;i<s;i++) {ans+=_fs.get(i).f(x);} ans = ans / s; return ans; } }

Page 4: םימצע החנומ תונכת -ב ןחבמ - ariel.ac.il...1 _ "םימצע החנומ תונכת" -ב ןחבמ 'א דעומ – 2018 'א רטסמס השמ ןב זעב איבל ידוא

_ 4

נקודות( 25) 2 שאלה . String> ArrayList>אוסף מחרוזות שנמצאות בבשאלה זו נתייחס למיון

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

ואופן הפעולה שלה.המערכת

בלבד. UMLדיאגרמות בשאלה זאת אין צורך לכתוב קוד אלא הסברים + :הדרכה

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

4נחלק את מערך הקלט לחלקים בהתאם למספר הליבות במערכת. למשל אם יש •עד 250, 249עד 0, אז החלקים יהיו באינדקסים: 1000ליבות ואורך המערך הוא

.999עד 750, 749עד 500, 499

( אחד שאחראי למיין אותו. החוט ישתמש Threadעבור כל חלק, ניצור חוט ) • .Collections.sortאלגוריתם מיון כלשהו או במיון של ג'אבה: ב

(. לאחר מכן, נאחד את המערכים joinנחכה שכל החוטים יסיימו את עבודתם )ע"י • מיזוג(.-הממויינים לתוך מערך הפלט, תוך שימוש באלגוריתם "מיזוג" )כמו במיון

.)לא חובה( ץלמומ UMLתרשים

: הופכים את המערך Streams -פתרון נוסף שזכה במלוא הנקודות היה שימוש בזרמים

(. פתרון זה אף sort(, ומסדרים אותו )parallel(, הופכים אותו למקבילי )streamלזרם ) הוא יותר קצר, יותר יעיל וחוסך טעויות. -עדיף על הפתרון הראשון

Page 5: םימצע החנומ תונכת -ב ןחבמ - ariel.ac.il...1 _ "םימצע החנומ תונכת" -ב ןחבמ 'א דעומ – 2018 'א רטסמס השמ ןב זעב איבל ידוא

_ 5

:נקודות( 25) 3 שאלה וד:שימו לב בשאלה זאת אין צורך לכתוב ק –ענו בקצרה על השאלות הבאות

בו כדאי , ציינו מקרה שThreadpoolנקודות( הסבירו בקצרה מהו 6) 3.1 .ThreadPool להשתמש ב

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

Threadpool) תיליבקמ הרוצב תמאב םיצרש םיכילהתה תומכש תגאוד תוארל ןתינ ךכל הטושפ אמגוד ."תכרעמה יבאשמ" תורדגה תא תמאות תויהל םיכילהתה תומכ תא תינטשפ הרוצב רידגהל ןתינ רשאכ – 2 הלאשב .ןוימה עוציבל תונימזש תויסיפה תובילה תומככ

, הסבירו בקצרה מתי נכון Design Pattern – Singletonנקודות( מהו ה 6) 3.2

להשתמש בו וכיצד ניתן לממש אותו. ךא "רצייל" ןתינ הנממש הקלחמ לש הרדגהל הטיש איה Singleton :הבושת

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

נקודות( סטודנט מימש מחסנית ע"י כך שהוא ירש מהמחלקה של 6) 3.3ArrayListנות תכנות ו, הסבירו איזו בעיה יש בפתרון כזה מבחינת עקר

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

םירביא לש הפסוה\הקיחמ ,םייוסמ םוקמל השיג – ןוגכ תינסחמל תויטנוולר טושפ אלא ArrayList מ שרינ אלש ךכ י"ע תאז רותפל ןתינ .סקדניא לכב תויטנוולרש תוטישה תא קרו ךא שממנ זאו – data member כ וב שמתשנ .וילע תינסחמל

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

הרוצת תרקב תכרעמ לכ לש תולועפה ןה git ב תויזכרמה תולועפה :הבושת :תוברל

repository תריצי .1 (םיצבק לש הקיחמ ןכו) repository ל תויקית \ םיצבק לש הפסוה .2 commit – ןוכדע עוציב .3 merge תרזעב דוחיא ןכו branch "ףנע" תריצי .4 version / commit יפל (Head) הסרג לש הרדגה .5

:טקיורפ לוהינל םירושקש םיאשונ טרפב git ל רבעמ תופסונ תולוכי שי github ב

issues לוהינ ,תומישמ תקולח

Page 6: םימצע החנומ תונכת -ב ןחבמ - ariel.ac.il...1 _ "םימצע החנומ תונכת" -ב ןחבמ 'א דעומ – 2018 'א רטסמס השמ ןב זעב איבל ידוא

_ 6

:נקודות( 25) 4 שאלה

פונקציה מתמטית ובה יש MyMathמחלקה מתמטית בשם ח שקיימת בשאלה זו נניתמיד fהניחו שעבור קלט נתון הפונקציה – (longשמחשבת לכל מחרוזת מספר שלם )

.מחזירה אותו פלטpublic class MyMath() { public static long f(String s) {…} // פונקציה קיימת }

לא תרוץ כל פעם מחדש fכיצד ניתן לגרום לכך שהפונקציה הסבירו במילים נקודות( 10) 4.1 כאשר היא נקראת עם אותו קלט.

לא תרוץ כל fפונקציה כך שהבהתאם )הוסיפו למחלקה את הקוד הנדרש נקודות( 15) 4.2 פעם מחדש כאשר היא נקראת עם קלט עליו היא רצה כבר(.

תשובה:4.1

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

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

<HashMap<String,Longמבנה הנתונים שמתאים לכך הוא

4.2 public class MyMath {

private static long f1(String s) {…} // פונקציה קיימת

public static long f(String s) {

Long ans = _memory.get(s);

if(ans == null) {ans = f1(s); _memory.put(s, ans);}

return ans;

}

private static Map<String, Long> _memory =

new HashMap<String,Long>();

}

!!!בהצלחה