אתם מתרגלים שאלה מתוך מה"ט אלגוריתמיקה ותכנות — הנדסאי תוכנהמבחן 2022 · אביב מועד א · שאלה 12כל שאלות המבחן ←
תכנות מונחה עצמיםמחלקות ואובייקטים

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

המחלקה מכילה בנאי המקבל כפרמטרים שני מספרים המייצגים את השעה (בתחום 0-23) ואת הדקה (בתחום 0-59), ופעולה בוליאנית before(Time other) המקבלת הפניה לאובייקט אחר (other) מסוג Time ומחזירה true אם הזמן המיוצג על-ידי האובייקט שמפעיל את הפעולה (this) קודם לזמן המיוצג באמצעות other, ולא הפעולה מחזירה false. במחלקה Time הוגדרו פעולות get ו-set ופעולה toString. המחלקה Time כבר נתונה ואפשר להשתמש בפעולות שבה — אין צורך לממש אותן! המחלקה Flight מייצגת טיסה. תכונות המחלקה הן: code – קוד בין-לאומי של הטיסה, מטיפוס String; destination – שם העיר שבה נוחתת הטיסה, מטיפוס String; departureTime – זמן ההמראה של הטיסה, מטיפוס Time; duration – משך זמן הטיסה בדקות, מטיפוס int; numOfPassengers – מספר הנוסעים בטיסה, מטיפוס int; isFull – האם הטיסה מלאה, מטיפוס boolean. כמו כן קיים במחלקה קבוע שלם MAX_CAPACITY המציין את המספר המקסימלי של נוסעים על טיסה. במחלקה Flight הוגדרו פעולות get ו-set ופעולה toString — אין צורך לממש אותן!

סעיף א-1

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

סעיף א-2

כתבו פעולה בוליאנית המקבלת מספר של נוסעים num, ומוסיפה אותם לטיסה אם יש בה מקום, ומחזירה true. אם אין מקום לכולם — הפעולה לא מוסיפה אף אחד, ומחזירה false. שימו לב שצריך לעדכן גם את isFull במקרה שנדרש לשנותה: public boolean addPassengers(int num).

סעיף א-3

כתבו פעולה המחשבת ומחזירה את זמן הנחיתה של הטיסה: public Time getArrivalTime().

סעיף ב-1

כתבו במחלקה Airport את הפעולה public Time firstFlightToPlace(String place). הפעולה מקבלת עיר כלשהי place, מחזירה את הזמן בו ממריאה הטיסה הראשונה למקום place. אם אין אף טיסה למקום place יוחזר null.

סעיף ב-2

כתבו במחלקה Airport את הפעולה public boolean movePassengers(String codeF, int num). הפעולה מקבלת קוד טיסה codeF ומספר שלם num המייצג מספר נוסעים שרוצים להקדים את הטיסה שלהם. הקדמת הטיסה אפשרית אם מתקיימים התנאים הבאים: קיימת טיסה אחרת לאותה עיר הנחיתה וטיסה זו נוחתת לפני הטיסה codeF; יש מקום פנוי לכל num הנוסעים הרוצים להקדים את הטיסה — אי אפשר להעביר רק חלק מהנוסעים. אם אפשר להעביר את כל num הנוסעים לטיסה אחרת, הפעולה תדפיס קוד של הטיסה החדשה שלהם ותחזיר true, ואם לא, הפעולה תדפיס הודעה מתאימה ותחזיר false. שימו לב, הפעולה צריכה לבצע את כל עדכוני הנתונים הנדרשים.

שאלות ותגובות על השאלה

🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות

שאלו כאן — ותקבלו מענה מוסמך.

🎓 מרצה לתכנות עונה כאן — תקבלו מענה מקצועי