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

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

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

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

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

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

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

PowerPoint Presentation

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

Microsoft Word B

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

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

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

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

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

תרגול 1

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

Microsoft Word - c_SimA_MoedB2005.doc

תרגול 1

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

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

Slide 1

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

פייתון

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

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

תרגול 1

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

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

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

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

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

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

Microsoft Word - Ass1Bgu2019b_java docx

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

Slide 1

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

PowerPoint Presentation

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

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

שאלה 2. תכנות ב - CShell

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

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

PowerPoint Presentation

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

ex1-bash

PowerPoint Presentation

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

Microsoft Word - c_SimA_MoedA2006.doc

מדריך למרצים ומתרגלים 1

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

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

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

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

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

Algorithms Tirgul 1

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

Tutorial 11

Microsoft PowerPoint - rec3.ppt

PowerPoint Presentation

תרגול 1

PowerPoint Presentation

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

Slide 1

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

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

ייבוא וייצוא של קבצי אקסל וטקסט

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

Slide 1

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

234114

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

2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ

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

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

PowerPoint Presentation

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

יצוא לחשבשבת תוכן עיניינים הגדרות - חשבונות בנק...2 הגדרות - הגדרות חשבשבת... 3 הגדרות - כרטיסי אשראי... 4 הגדרות - סוגי הכנסה... 5 יצוא לחשבשבת...6 י

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

Slide 1

Slide 1

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

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

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

Microsoft PowerPoint - lec10.ppt

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

מצגת של PowerPoint

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

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

Slide 1

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

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

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

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

WinZIP תוכנה לדחיסת קבצים ספטמבר 2007

PowerPoint Presentation

מכללת הדסה, הפקולטה למדעי המחשב מבוא לתכנות מונחה עצמים והנדסת תוכנה סמסטר א', תשע"ו תרגיל 2 תאריך אחרון להגשה: קמפוס הנביאים יום א', 29/11/2015 בשעה

תמליל:

מבוא למדעי המחשב סמסטר א' תשע"ט צוות העבודה: מרצה אחראי: יוחאי טוויטו מתרגלים אחראים: אופיר גגולשוילי, ירין קופר תאריך פרסום: 20.12.18 תאריך הגשה: 12:00 3.1.18, בצהריים. הוראות מקדימות הגשת עבודות בית קראו את העבודה מתחילתה ועד סופה לפני שאתם מתחילים לפתור אותה. ודאו שאתם מבינים את כל השאלות. רמת הקושי של המשימות אינה אחידה. יש להגיש את העבודה לבד. אין לשנות את שמות הקבצים או את חתימות הפונקציות כפי שהן מופיעות בקובצי העבודה. אין להגיש קבצים נוספים. שם קובץ ה- ZIP יכול להיות כרצונכם, אך באנגלית בלבד. בנוסף, הקבצים שתגישו יכולים להכיל טקסט המורכב מאותיות באנגלית, מספרים וסימני פיסוק בלבד. טקסט אשר יכיל תווים אחרים )אותיות בעברית, יוונית וכד'..( לא יתקבל. קבצים שיוגשו שלא על פי הנחיות אלו לא ייבדקו. את קובץ ה- ZIP יש להגיש ב- System.Submission אין להשתמש ב-.packages אם תעשו בהן שימוש עבודתכם לא תתקבל על ידי מערכת ההגשות. בידקו כי המילה package אינה מופיעה בקובצי ההגשה שלכם..1.2.3.4.5.6.7.8 בדיקת עבודות הבית עבודות הבית נבדקות באופן ידני וכן באופן אוטומטי. הבדיקה האוטומטית מתייחסת לערכי ההחזרה של הפונקציות או לפעולות אשר הן מבצעות וכן לפלט התכנית המודפס למסך )אם קיים(. לכן, יש להקפיד על ההוראות ולבצע אותן במדוייק. כל הדפסה אשר אינה עונה בדיוק על הדרישות המופיעות בעבודה )כולל שורות, רווחים, סימני פיסוק או כל תו אחר - מיותרים, חסרים או מופיעים בסדר שונה מהנדרש(, לא תעבור את הבדיקה האוטומטית ולכן תגרור פגיעה בציון. סגנון כתיבת הקוד ייבדק באופן ידני. יש להקפיד על כתיבת קוד ברור, על מתן שמות משמעותיים למשתנים, על הזחות )אינדנטציה(, ועל הוספת הערות בקוד המסבירות את תפקידם של מקטעי הקוד השונים. אין צורך למלא את הקוד בהערות סתמיות, אך חשוב לכתוב הערות בנקודות קריטיות, המסבירות קטעים חשובים בקוד. הערות יש לרשום אך ורק באנגלית. כתיבת קוד אשר אינה עומדת בדרישות אלו תגרור הפחתה בציון העבודה..9.10 Page 1 of 12

עזרה והנחיה לכל עבודת בית בקורס יש צוות שאחראי לה )מרצה/ים ומתרגלים(. ניתן לפנות לצוות בשעות הקבלה. פירוט שמות האחראים לעבודה מופיע באתר הקורס, כמו גם פירוט שעות הקבלה. בשאלות טכניות אפשר גם לגשת לשעות "עזרה במעבדה". כמו כן, אתם יכולים להיעזר בפורום ולפנות בשאלות לחבריכם לכיתה. צוות הקורס עובר על השאלות ונותן מענה במקרה הצורך. שימו לב, כי פורום העבודה נועד בעיקר לתקשורת ביניכם. בכל בעיה אישית הקשורה בעבודה )מילואים, אשפוז וכו'(, אנא צרו את הפנייה המתאימה במערכת הגשת העבודות, כפי שמוסבר באתר הקורס..11.12 הערות ספציפיות לעבודת בית זו לעבודה זו מצורפים קבצי java עם השמות הנדרשים כמפורט בכל משימה. צרו תיקייה חדשה והעתיקו את קובצי ה- java לתוכה. עליכם לערוך את הקבצים האלו בהתאם למפורט בתרגיל ולהגישם כפתרון, מכווצים כקובץ ZIP יחיד. שימו לב: עליכם להגיש רק את קובצי ה- java הנדרשים. בעבודה זו ניתן להגדיר פונקציות )עזר( נוספות, לפי שיקולכם. פונקציות אלו ייכתבו בתוך קובצי המשימה הרלוונטיים. בחלק מהמחלקות המצורפות מופיעה השיטה,remove() התעלמו ממנה. אין למחוק או לשנות אותה. היא נחוצה לשם הגשה במערכת ההגשה. הגדרה: עץ בינארי מאוזן הינו עץ בינארי שבו ההפרש בין הגובה של שני תתי-עצים של אותו הצומת לעולם אינו גדול מאחד..13.14.15.16 דוגמה: יושר אקדמי בראש כל קובץ אותו אתם מגישים )כולל קבצים שאתם לא משלימים וניתנו לכם לצורך העבודה( יש למלא את הפרטים שלכם כפי שמופיעים בהערה. בנוסף לקבצי הJava יהיה עליכם להגיש את הקובץ.readme.txt בקובץ זה ישנה הצהרה על כך שהעבודה שהגשתם הינה מקורית ונכתבה על ידיכם. עליכם למלא את שמכם ותעודת הזהות שלכם במקום הנדרש לכך בקובץ..17.18 הימנעו מהעתקות! ההגשה היא ביחידים. אם תוגשנה שתי עבודות עם קוד זהה או אפילו דומה - זוהי העתקה, אשר תדווח לאלתר לוועדת משמעת. אם טרם עיינתם בסילבוס הקורס אנא עשו זאת כעת. Page 2 of 12

חלק 1: איטרטור של מספרים ראשוניים משימה מספר )30 0 נקודות( בחלק זה של העבודה נממש איטרטור של מספרים ראשוניים. נתונה לכם המחלקה PrimeIterator המממשת את הממשק Iterator של :java public class PrimeIterator implements Iterator<Integer> { } שימו לב כי בקובץ המחלקה מופיעה השורה java.util.iterator;.import איטרטור זה מחזיר בכל קריאה למתודה next() את המספר הראשוני הבא, החל מהמספר 2 )כולל(. במחלקה שדה יחיד )אין להוסיף שדות נוספים( private List<Integer> primes; הדרכה: בכל קריאה לשיטה next() האיטראטור ימצא מספר ראשוני יחיד. אין לבצע עיבוד ראשוני של המספרים הראשוניים כשלב מקדים באתחול האיטראטור. חישבו כיצד להשתמש בשדה זה על מנת לממש את האיטראטור באופן יעיל. עליכם להשלים את השיטות הבאות במחלקה: public PrimeIterator() בנאי המחלקה מאתחל את שדה המחלקה. public boolean hasnext() public Integer next() השיטות hasnext, next הן השיטות המפורטות בממשק Iterator המובנה ב- java. במידה ותשלימו נכונה את שיטות המחלקה PrimeIterator הקוד בקובץ TestPrimeIterator.java ידפיס למסך את הפלט הבא )20 המספרים הראשוניים הראשונים(: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, Page 3 of 12

בנק ניהול חלק 2: בחלק זה של העבודה נממש מערכת לניהול בנק. במערכת אוסף של חשבונות כך שכל חשבון מאופיין על ידי שם, מספר חשבון ויתרה. המערכת תומכת בפעולות הבאות: יצירת מערכת חדשה )ריקה( לניהול בנק, הוספת חשבון, מחיקת חשבון, חיפוש חשבון לפי שם, חיפוש חשבון לפי מספר חשבון והפקדה/משיכה של כסף מחשבון מסוים. כדי לתמוך בחיפוש יעיל לפי שם ולפי מספר חשבון במערכת יתוחזקו שני עצי חיפוש בינאריים. בעץ אחד החשבונות יהיו ממוינים לפי שם ובעץ השני החשבונות יהיו ממוינים לפי מספר החשבון. מכיוון שפעולות ההוספה והמחיקה עלולות להוציא את העצים מאיזון המערכת תומכת גם בפעולה המאזנת את העצים. במערכת ניהול הבנק שנממש שמות ומספרי חשבונות צריכים להיות ייחודיים. לא ייתכנו שני חשבונות עם אותו השם וגם לא ייתכנו שני חשבונות עם אותו מספר חשבון, כמו כן לא ייתכנו ערכי.null משימה 1: מבנה החשבון )5 נקודות( החשבונות במערכת ניהול הבנק מתוארים על ידי הקובץ.BankAccount.java במשימה זו תבצעו הכרות עם המחלקה הנתונה לכם בקובץ זה ושבה תשתמשו בהמשך העבודה. במחלקה BankAccount בנאי יחיד public BankAccount(String name, int accountnumber, int balance) השיטות הציבוריות במחלקה הן: public String getname() public int getaccountnumber() public int getbalance() public String tostring() קראו היטב את הקוד שבקובץ.BankAccount.java עליכם להכיר את כל פרטי המחלקה, את השדות, הבנאים והשיטות שלה. כפי שתראו בקוד, שמות מיוצגים על ידי מחרוזות לא ריקות ומספרי חשבונות על ידי מספרים חיוביים. עליכם להשלים את השיטה הבאה במחלקה: public boolean withrowmoney(int amount) שיטה זו מקבלת פרמטר אחד amount אם הוא שלילי המתודה מחזירה false ללא לשנות את היתרה. אם כתוצאה מהמשיכה היתרה )המיוצגת ע"י השדה )balance מקבלת ערך שלילי, אין לאשר את המשיכה, כלומר אין לשנות את היתרה ויש להחזיר.false בכל מקרה אחר יש לעדכן את היתרה ולהחזיר.true public boolean depositmoney(int amount) שיטה זו מקבלת פרמטר אחד amount אם הוא שלילי המתודה מחזירה false ללא לשנות את היתרה. אחרת יש לעדכן את היתרה ולהחזיר.true Page 4 of 12

משימה 2: השוואת חשבונות )10 נקודות( במשימה זו תשלימו את הגדרת שתי המחלקות הבאות בקבצים שקיבלתם. public class AccountComparatorByName implements Comparator public class AccountComparatorByNumber implements Comparator מחלקות אלו מממשות את השיטה המוגדרת בממשק :Comparator<BankAccount>. public int compare(bankaccount account1, BankAccount account2) במחלקה AccountComparatorByName שיטה זו משווה בין חשבונות )מסוג )BankAccount לפי שם )לפי הסדר הלקסיקוגרפי על מחרוזות( ובמחלקה AccountComparatorByNumber לפי מספר חשבון )לפי יחס הסדר הטבעי על מספרים(. עליכם לממש את השיטה בשתי המחלקות. שימו לב שבקבצים AccountComparatorByName.java ו- AccountComparatorByNumber.java מופיעה השורה.import java.util.comparator זהו הממשק Comparator כפי שמוגדר ב-.java מומלץ להיזכר בפירטי הממשק Comparator כפי שמתואר ב API של.java משימה 3: ממשקים נתונים / מחלקות נתונות )0 נקודות( במשימה זו תבצעו הכרות עם הממשקים והמחלקות הבאים הנתונים לכם ושבהם תשתמשו בהמשך העבודה. אין לשנות את הקבצים הנתונים. שימו לב שהממשק List הנתון הוא חלקי ותואם את מטרות העבודה. public interface Stack<T> public interface List<T> public class StackAsDynamicArray<T> implements Stack<T> public class DynamicArray<T> implements List<T> public class DynamicArrayIterator<T> implements Iterator<T> public class LinkedList<T> implements List<T> public class LinkedListIterator<T> implements Iterator<T> public class Link<E> קראו היטב את הקוד בקבצים המתאימים. עליכם להכיר את כל פרטי המחלקות, את השדות, הבנאים והשיטות שלהן. Page 5 of 12

משימה 4: עצים בינאריים )10 נקודות( במשימה זו נתונות לכם המחלקות.BinaryNode, BinaryTree מחלקות אלו זהות למחלקות שנלמדו בהרצאה. במשימה זו תשלימו במחלקה BinaryNode את הגדרת השיטה: public String tostring() tostring() נתונה לכם. אם העץ אינו ריק היא קוראת לשיטה BinaryTree במחלקה tostring() השיטה שבמחלקה.BinaryNode במחלקה BinaryNode השיטה פועלת כך שאם נדפיס את המחרוזת שהיא מחזירה נקבל שורת הדפסה אחת לכל קודקוד בעץ. בשורה זו יופיעו d*2 רווחים, כאשר d עומק הקודקוד בעץ ואח"כ יודפס )באותה השורה( המידע שבקודקוד. הקודקודים יודפסו בסדר.inorder במשימה זו מומלץ להשתמש בשיטות עזר פרטיות. נוח יותר לחשוב על פתרון רקורסיבי לבעיה הזו. במידה ותשלימו נכונה את הגדרת השיטה tostring במחלקה BinaryNode הקוד בקובץ TestToString.java ידפיס למסך את הפלטים הבאים )הציורים מיועדים להמחשת מבנה העץ(: Page 6 of 12

משימה 5: עצי חיפוש בינאריים, איטראטור משימה 5 א: הכרת המחלקות )0 נקודות( המחלקה BinarySearchTree נתונה לכם המחלקה BinarySearchTree בשלמותה. אין לשנות בה דבר. קראו היטב את הקוד שבקובץ.BinarySearchTree.java עליכם להכיר את כל פרטי המחלקה, את השדות, הבנאים, והשיטות שלה. המחלקה Iterable<T>{ } public class BinarySearchTree<T> extends BinaryTree<T> implements יורשת את המחלקה BinaryTree<T> ומממשת את הממשק.Iterable<T> במחלקה שדה יחיד Comparator<T> comparator בעזרתו המידע בעץ נשמר ממוין ומסודר על פי ה- Comparator המתקבל בעת יצירת העץ. למחלקה בנאי יחיד: public BinarySearchTree(Comparator comparator) בנאי זה מקבל כפרמטר Comparator ובונה עץ חיפוש ריק. נתונות השיטות הבאות: public T finddata(t element) כאשר נחפש איבר בעץ חיפוש בינארי, נעשה זאת בעזרת ה- Comparator. יתכן שהאיבר שנחפש לא יהיה זהה לזה שנמצא בעץ )שדה ה- data שבאחד הקודקודים של העץ( אך יהיה שווה לו לפי ה- Comparator. שיטה זו מקבלת אובייקט.element השיטה מחפשת ומחזירה את ה- data של הקודקוד השווה ל- element )על פי ה- )Comparator הנמצא בעץ המפעיל את השיטה, במידה וקיים. במידה ולא קיים בעץ קודקוד עם שדה data השווה ל-.null השיטה מחזירה ערך,)Comparator פי ה- )על element דוגמאות: 1. בקריאה לשיטה זו כאשר ה- Comparator של העץ הוא מטיפוס,AccountComparatorByName,< Dan, 86471234, 130> והעץ מכיל את החשבון, < Dan, 1, 0> מפנה אל החשבון element תוחזר הפניה לאותו החשבון <130 < Dan,,86471234. 2. בקריאה לשיטה זו כאשר ה- Comparator של העץ הוא מטיפוס,AccountComparatorByNumber element מפנה אל החשבון <0 < dummy,,86471234, והעץ מכיל את החשבון. < Dan, 86471234, 4000> תוחזר הפניה לאותו החשבון,< Dan, 86471234, 4000> public Comparator getcomparator() שיטה זו מחזירה את ה- Comparator של העץ. public void insert(t toinsert) שיטה זו מקבלת אובייקט מטיפוס T בשם toinsert ומכניסה אותו לעץ. זיכרו כי במערכת ניהול הבנק שנממש שמות ומספרי חשבונות צריכים להיות ייחודיים. לא ייתכנו שני חשבונות עם אותו השם וגם לא ייתכנו שני חשבונות עם אותו מספר החשבון. במידה ו- toinsert מתנגש עם דרישה זו השיטה לא תשנה את העץ. Page 7 of 12

public void remove(t toremove) שיטה זו מקבלת אובייקט toremove ומסירה אותו מהעץ, במידה והוא קיים בו. public Iterator iterator() שיטה זו מחזירה Iterator של העץ מטיפוס.BinaryTreeInOrderIterator המחלקה BinarySearchNode נתונה לכם המחלקה BinarySearchNode בשלמותה. אין לשנות בה דבר. קראו היטב את הקוד שבקובץ.BinarySearchNode.java עליכם להכיר את כל פרטי המחלקה, את השדות, הבנאים, והשיטות שלה. המחלקה { } BinaryNode public class BinarySearchNode extends יורשת את המחלקה.BinaryNode במחלקה שדה יחיד Comparator<T> comparator בעזרתו המידע בעץ נשמר ממוין ומסודר על פי טיפוס ה- Comparator המתקבל בעת יצירת קודקוד. למחלקה בנאי יחיד: public BinarySearchNode(T data, Comparator<T> comparator) בנאי זה מקבל אוביקט מטיפוס T בשם data ו- Comparator ובונה קודקוד חיפוש. נתונות השיטות הבאות: public T finddata(t element) שיטה זו מקבלת אובייקט מטיפוס T בשם element מחפשת ומחזירה את ה- data של הקודקוד השווה ל- element )על פי ה- )Comparator הנמצא בתת העץ המושרש בקודקוד המפעיל את השיטה, במידה וקיים. במידה ו- element לא קיים בתת עץ זה על השיטה להחזיר את הערך.null ראו דוגמאות לשיטה finddata במחלקה.BinarySearchTree public T findmin() השיטה מחזירה את שדה ה- data של הקודקוד המכיל את ה- data ה"קטן ביותר" על פי ה- Comparator בתת העץ המושרש בקודקוד המפעיל את השיטה. public Comparator<T> getcomparator() שיטה זו מחזירה את ה- Comparator של העץ. public void insert(t toinsert) שיטה זו מקבלת אובייקט מטיפוס T בשם toinsert ומכניסה אותו לקודקוד חדש במקום המתאים לו בתת העץ המושרש בקודקוד המפעיל את השיטה. אם תת העץ המושרש בקודקוד מכיל את toinsert אז אובייקט זה לא ייכנס לעץ. public boolean contains(t element) שיטה זו מקבלת אובייקט מטיפוס T בשם element ומחזירה true אם תת העץ המושרש בקודקוד המפעיל את השיטה מכיל את.element Page 8 of 12

public BinaryNode<T> remove(t toremove) שיטה זו מקבלת אובייקט מטיפוס T בשם toremove ומסירה אותו מהעץ המושרש בקודקוד המפעיל את השיטה במידה והוא שווה לאחד האיברים בעץ )על פי ה- Comparator של העץ(. השיטה מחזירה מצביע לשורש העץ המושרש בקודקוד המפעיל את השיטה לאחר ההסרה. המחלקה BinaryTreeInOrderIterator נתונה לכם המחלקה BinaryTreeInOrderIterator המממשת את הממשק Iterator של.java שימו לב כי בקובץ המחלקה מופיעה השורה java.util.iterator;.import איטרטור זה עובר על המידע השמור בעץ החיפוש לפי סדר.inorder משימה 5 ב: )15 נקודות( המחלקה BankAccountsBinarySearchTree יורשת את המחלקה.BinarySearchTree<BankAccount< למחלקה בנאי יחיד: public BankAccountsBinarySearchTree(Comparator<BankAccount> comparator) בנאי זה מקבל קומפרטור comparator וקורא לבנאי של המחלקה אותה הוא יורש. עליכם להשלים את שתי השיטות הבאות במחלקה: public void balance() שיטה זו מאזנת את העץ this כך שסדר ה- inorder שלו נשמר כפי שהיה. בקוד השיטה ישנה קריאה לשיטת העזר הפרטית הרקורסיבית.buildBalancedTree הדרכת חובה: את השיטה balance() יש להשלים בעזרת שיטת העזר הפרטית הבאה )אין להוסיף שיטות עזר נוספות(. private void buildbalancedtree(bankaccountsbinarysearchtree tree, List<BankAccount> list, int low, int high) שיטה רקורסיבית זו מקבלת עץ,tree רשימה list של חשבונות ומספרים שלמים low ו- high. מומלץ מאוד כי בקריאה הראשונית לשיטה זו מהשיטה balance() ישלחו המשתנים הבאים )לפי סדר הפרמטרים(: עץ ריק. רשימה המכילה את חשבונות הבנק שבעץ על פי סדר ה- inorder שלהם בעץ. האינדקס.0 האינדקס.list.size()-1 עליכם להשלים את השיטה באופן רקורסיבי, כך שכל החשבונות שברשימה יוכנסו לעץ. בסוף התהליך העץ tree יכיל את כל החשבונות שברשימה ויהיה מאוזן )ראו הגדרה בתחילת העבודה(. נחזור ונדגיש כי סדר ה- inorder של החשבונות חייב להישמר כפי שהיה ברשימה )זהו אותו הסדר שהיה בעץ לפני תהליך האיזון(. Page 9 of 12

במידה ותשלימו נכונה משימה זו הקוד בקובץ TestBalance.java ידפיס למסך)אחת האפשרויות, יתכנו מספר פתרונות לאיזון עץ( : משימה 5 ג) 10 נקודות( במשימה זו תשלימו את הגדרת המחלקה FilteredBankAccountsIterator<BankAccount> implements Iterator<BankAccount> בקובץ.FilteredBankAccountsIterator.java מחלקה זו מממשת את הממשק.Iterator למחלקה 2 שדות: עליכם לממש את שלושת המתודות הבאות: private BankAccountsBinarySearchTree bankaccountstree private BankAccount current; public FilteredBankAccountsIterator (BankAccountsBinarySearchTree bankaccountstree) עליכם לממש את בנאי המחלקה אשר מקבל עץ של חשבונות בנק ומאתחל את השדות. public boolean hasnext() בשיטה הזו עליכם להחזיר true אם קיימים איברים נוספים שלא עברנו עליהם, אחרת על הפונקציה להחזיר. false public BankAccount next() בשיטה זו עליכם להחזיר את חשבון הבנק הבא ברשימה) inorder (, החזירו חשבונות בנק עם יתרה) balance ( גדולה מ- 100 בלבד. במידה ואין איברים נוספים על הפונקציה לזרוק חריגה מסוג.NoSuchElementException Page 10 of 12

משימה 6: מערכת ניהול הבנק )20 נקודות( במשימה זו תשלימו את הגדרת המחלקה Bank בקובץ.Bank.java למחלקה שני שדות private BankAccountBinarySearchTree namestree; private BankAccountBinarySearchTree accountnumberstree; שהינם עצי חיפוש בינארי. עצים אלו מכילים את אוסף החשבונות )מסוג )BankAccount הקיים בבנק. בעץ הראשון החשבונות ממויינים לפי שמות ובעץ השני לפי מספרי חשבון. נדגיש כי כל חשבון קיים במערכת ניהול הבנק רק פעם אחת, ובכל עץ קיים לה קודקוד ובו שדה BankAccount data המפנה אליו. בנאי המחלקה Bank() public מגדיר מערכת לניהול בנק ריקה )עם שני עצי חיפוש ריקים(. נתונות השיטות הבאות )אין לשנות את הגדרתן(: public BankAccount lookup(string name) שיטה זו מקבלת שם name ומחזירה את החשבון במערכת ניהול הבנק עם השם name במידה וקיים כזה. אחרת השיטה תחזיר את הערך.null public BankAccount lookup(int accountnumber) שיטה זו מקבלת מספר number ומחזירה את החשבון במערכת ניהול הבנק עם מספר חשבון number במידה וקיים כזה. אחרת השיטה תחזיר את הערך.null public void balance() שיטה זו מיודעת לשמירה על יעילות השימוש במערכת ניהול הבנק. שיטה זו בונה מחדש את שני עצי החיפוש כך שתכולתם תישאר זהה אך מבנה העץ יהיה מבנה של עץ מאוזן )ראו הגדרה בתחילת העבודה(. פעולה זו מתבצעת על ידי שתי קריאות למתודה balance() של המחלקה BankAccountBinarySearchTree )קריאה אחת לכל אחד מהעצים(. עליכם להשלים את השיטות הבאות במחלקה: 5( נקודות( newaccount) public boolean add(bankaccount שיטה זו מקבלת חשבון חדש newaccount ומוסיפה אותו למערכת ניהול הבנק במידה והתנאים הבאים מתקיימים:. אין במערכת ניהול הבנק חשבון קיים עם אותו השם שב- newaccount. אין במערכת ניהול הבנק חשבון קיים עם אותו מספר חשבון שב- newaccount הפונקציה מחזירה true אם ההוספה התבצעה בהצלחה ומחזירה false אחרת. יש להוסיף את אותו החשבון לשני העצים המוגדרים בשדות המחלקה. 5( נקודות( name) public boolean delete(string שיטה זו מקבלת שם name ומוחקת את החשבון במערכת ניהול הבנק עם השם name במידה וקיים כזה. זיכרו כי במידה והחשבון קיים יש להסיר את ההפניה אליו משני העצים. השיטה מחזירה true אם התבצעה מחיקה ו- false אחרת. 5( נקודות( accountnumber) public boolean delete(int שיטה זו מקבלת מספר number ומוחקת את החשבון במערכת ניהול הבנק עם מספר חשבון accountnumber במידה וקיים כזה. זיכרו כי במידה והחשבון קיים יש להסיר את ההפניה אליו משני העצים. השיטה מחזירה true אם התבצעה מחיקה ו- false אחרת. 2.5( נקודות( ) accountnumber public boolean depositmoney(int amount, int שיטה זו מקבלת מספר amount ומספר חשבון,accountNumber מוצאת את החשבון המתאים, קוראת למתודה (amount) depositmoney עבור חשבון זה. השיטה מחזירה true אם הפעולה הצליחה ו- false אחרת. 2.5( נקודות( accountnumber) public boolean withrowmoney(int amount, int Page 11 of 12

שיטה זו מקבלת מספר amount ומספר חשבון,accountNumber מוצאת את החשבון המתאים, קוראת למתודה (amount) withrowmoney עבור חשבון זה. השיטה מחזירה true אם הפעולה הצליחה ו- false אחרת. בונוס )5 נקודות( : Javadoc הקדמה: שיטת התיעוד הפשוטה, המוכרת לנו זה מכבר, מוגבלת למדי: היא אמנם מקילה על הבנת הקוד, אך הדרך היחידה להיעזר בה היא לקרוא את ההערות בגוף הקוד עצמו. אם, לדוגמה, נכתוב מחלקה ונרצה להכין ללקוח דף הסבר על השיטות שבה - נצטרך לעמול זמן רב. סטנדרט התיעוד Javadoc מאפשר להתגבר על בעיה זו, כשהוא מאפשר ליצור תיעוד אחיד וברור, ממנו ניתן ליצור בקלות רבה דפי הסבר חיצוניים )לפרסום ללקוח או ברשת האינטרנט(. תיעוד של תכניות באמצעות Javadoc צריך להיעשות על פי העיקרון המוכר של הכימוס.)encapsulation( תפקיד התיעוד הוא לתאר מה עושה המחלקה והשיטות, לא איך הדבר נעשה. אין פירוש הדבר שצריך להזניח את הערות ההסבר בתוך הקוד ואת התיעוד של חלקים פרטיים במחלקה: התיעוד שנוצר באמצעות ה Javadoc -מטרתו ליצור מעין מדריך חיצוני למחלקה, המתאר כל פרט שראוי שמשתמשים חיצוניים במחלקה יכירו. עדיין,רצוי מאוד לבנות קוד ברור שיקל על מתכנתים להבין מה כתוב בו וכיצד הוא עושה מה שכתוב בו. Javadoc מאפשר שימוש בתגים. קיים מגוון של תגים שונים, כאשר המשותף לכולם הוא סימון של "@" בתחילתם. נפרט כאן חלק מהם. מתי נרצה להשתמש ב- :Javadoc בראש כל מחלקה יש לשים בלוק Javadoc הכולל תיאור של המחלקה. תיאור המחלקה חשוב מאוד; התגים המפורטים כאן למטה - פחות. תג ה @ author -מציין מיהו כותב הקוד. תג ה @ version -מציין מה גרסת התוכנית. כמובן שקיימים תגים רבים נוספים. בראש כל שיטה ציבורית, יש לשים בלוק Javadoc הכולל תיאור של השיטה. כאן תפקיד התגים חשוב מאוד. תג ה @ param -מתאר את הפרמטרים אותם מקבלת השיטה. יש לכתוב את שם המשתנה, ואז את תיאורו. על כל משתנה - יש לשים תג param. אין צורך לציין טיפוס - הכלי האוטומטי מסוגל לזהות זאת בעצמו. עם זאת, חשוב להקפיד על כתיבה נכונה של שמות המשתנים. תג ה @ return -מתאר מה השיטה מחזירה. כאן אין צורך לכתוב את שם המשתנה, מספיק לכתוב את תיאורו. תג ה @ throws -דרוש במקרה והשיטה זורקת חריגות זמן-ריצה כלשהן. גם התגים author@ ו @ version -ניתנים לשימוש כאן, אך הם בדרך כלל פחות רלוונטיים. מה עליכם לעשות במשימה? במחלקה BankAccount.java הוספנו תיעוד Javadoc לדוגמא, תוכלו לראות כיצד השתמשנו ב- javadoc על מנת לתעד את המחלקה ואת הפונקציות הציבוריות שקיימות בה, השתמשו בדוגמא זו ותעדו בעצמכם את במחלקה Bank.java עליכם לתעד בראש המחלקה את תפקידה והוסיפו גם את תג ה- author. בנוסף עליכם לתעד את כל הפונקציות הציבוריות במחלקה. מומלץ לקרוא עוד על Javadoc ברשת, בדגש על אופן תיעוד שיטות/מתודות ואופן תיעוד מחלקות. בהצלחה! Page 12 of 12