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

מכרז "מחיר שני" (מכרז ויקרי, VickeryAuction) הוא סוג של מכירה פומבית במעטפות סגורות (כלומר, אף מתמודד לא רואה את ההצעות שהגישו מתמודדים אחרים). המנצח במכרז הוא מי שהגיש את ההצעה הגבוהה ביותר. לפי כללי ה"מכרז ויקרי" המנצח לא משלם את ההצעה שלו, אלא את ההצעה השנייה בגובהה. נגדיר טיפוס משתתף במכרז – Participant המאופיין כך: name – שם המשתתף, מטיפוס מחרוזת; id – תעודת זהות, מטיפוס מחרוזת; price – המחיר אותו המשתתף מציע, מטיפוס שלם. הטיפוס מכרז ויקרי VickeryAuction מאופיין על-ידי: product – תיאור המוצר הנמכר, מטיפוס מחרוזת; realPrice – ערך ריאלי של המוצר, מטיפוס שלם; arr – מערך בגודל 100 של משתתפים מטיפוס Participant; current – מספר המשתתפים שנרשמו בפועל, מטיפוס שלם. הטיפוס Winner מאופיין על-ידי שם המשתתף name, והסכום שעליו לשלם בהתאם לכללי מכרז ויקרי lastPrice; כותרת הפעולה הבונה במחלקה Winner: public Winner(String name, int lastPrice).

(הערת פרשנות: השאלון אינו מציין במפורש שקיימות פעולות get/set במחלקות Participant/VickeryAuction — בניגוד לשאלות 5, 7 ו-12 שכן מציינות זאת. הונחה כאן, לפי המוסכמה החוזרת ביתר שאלות המחלקות בשאלון זה, שגם כאן ניתן להניח קיומן; זוהי הנחת פרשנות מתועדת, לא נתון מפורש.)

סעיף א

כתבו את כותרות המחלקות Participant ו-VickeryAuction ואת התכונות שלהן.

סעיף ב

כתבו פעולה בוליאנית המקבלת משתתף מטיפוס Participant ומחזירה true, אם ההוספה הצליחה, או false אחרת. משתתף יכול להתווסף למערך המשתתפים רק אם יש מקום פנוי וכן המחיר שאותו הוא מציע גבוה מ-50% מהערך הריאלי של המוצר.

סעיף ג

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

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

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

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

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