תרגילים

אין לזה צורה

בתרגיל זה נממש טיפוס חדש מסוג Rectangle, הבנוי משתי נקודות:

  • נקודה הממוקמת בחלק השמאלי עליון של המלבן (נקודת ההתחלה start_point).
  • נקודה הממוקמת בחלק הימני תחתון של המלבן (נקודת הסיום end_point).

פעולות המלבן הן:

  • get_surface – מחזירה את שטח המלבן.
  • get_perimeter – מחזירה את היקף המלבן.
  • randomize_start_point – מגרילה שני מספרים בין 1 ל־100 וקובעת אותם כ־x וכ־y של הנקודה השמאלית העליונה.
  • randomize_end_point – מגרילה שני מספרים בין 1 ל־100 וקובעת אותם כ־x וכ־y של הנקודה הימנית התחתונה.
  • filter_by_size – מקבלת רשימת מלבנים ושטח מינימלי של מלבן (threshold). מחזירה את רשימת כל המלבנים ששטחם הוא לפחות threshold.
  • filter_by_perimeter – מקבלת רשימת מלבנים והיקף מינימלי של מלבן (threshold). מחזירה את רשימת כל המלבנים שהיקפם הוא לפחות threshold.

הדפסת מופע של המלבן צריכה להיראות כך:

### Rectangle ### My Width: 10 My Height: 10 My Surface: 100 My Perimeter: 40

נוסף על הפעולות שהוזכרו מעלה, כתבו פעולה של המחלקה בשם rand_rects המגרילה מספר בין 1 ל־50.
צרו רשימה המכילה מספר מלבנים בהתאם למספר שהוגרל, ועבור כל מלבן הגרילו נקודות על ידי שימוש בפעולות המתאימות.
את כל הצורות הנ"ל הכניסו לרשימה, והדפיסו את כל הצורות ששטחן גדול מ־900 והיקפן גדול מ־30.

חנות הקומדי

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

  • checkout – מקבלת רשימת פריטים לרכישה המיוצגים על ידי מחרוזות, ומחזירה את הסכום לתשלום.
    החנות לא מאפשרת מכירה של פריטים שלא נמצאים ברשימת הפריטים בחנות.
  • purchase - מקבלת רשימת פריטים לרכישה וסכום כסף מהלקוח. מבצעת את הקנייה (מעדכנת מלאים ויתרה).
    שימו לב שאפשר לרכוש רק אם הפריטים נמצאים במלאי על המדפים. הפעולה תחזיר עודף ללקוח במידת הצורך, ולא תבצע את הקנייה אם התשלום לא מספיק.
  • refill – מעדכנת את המלאי במדפים מתוך המלאי במחסן. החנות יכולה להחזיק על המדף לכל היותר 10 פריטים מכל סוג.
  • restock – מבצעת קנייה של סחורה מהספק. מחיר הרכישה של כל פריט מהספק הוא חצי מהמחיר ללקוח.
    הפעולה תעדכן את המלאי במחסן ותחסיר את סכום הכסף המתאים מיתרת המזומנים של החנות.
  • end_of_day – מבצעת סגירת קופה.
    מוודאת שהחשבון הנוכחי תואם לכל ההכנסות וההוצאות שהיו ב־12 השעות האחרונות ותואם את שווי המלאים, כדי לוודא שלא נגנבו פריטים.
    הפעולה תדפיס דוח של כל התנועות שבוצעו לאורך התקופה – הוצאות והכנסות, הן של מלאי והן של כסף.

מגדל קוביות

בתרגיל זה נממש שלוש מחלקות: מחלקה של ריבוע, מחלקה של קוביות ומחלקה של מגדל קוביות.

ריבוע

ממשו את מחלקת ריבוע, Square.
פעולת האתחול של המחלקה תקבל פרמטר של אורך, שהוא אורך הצלע של הריבוע.
כפי שוודאי ידוע לכם, בריבוע כל הצלעות זהות באורכן.
ממשו גם את הפעולות get_surface ו־get_perimeter של שטח והיקף כפי שעשיתם בתרגיל הקודם.

קובייה

לקובייה יש בסיס (base) שהוא ריבוע, וצבע (color) שהוא צבע הקובייה. הצבע יכול להיות שחור או לבן.
ממשו את מחלקת הקובייה, ודאגו להוסיף לה פעולות לחישוב הנפח (get_volume) ושטח המעטפת (get_surface).

הדפסת הקובייה צריכה להיראות כך:

Cube: base-10x10 color:black

מגדל הקוביות

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

הדפסה של מגדל הקוביות תיראה כך:

2-Cube: base-10x10 color:black
1-Cube: base-15x15 color:white

ממשו מחלקה בשם CubeTower המייצגת את מגדל הקוביות.

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

הוסיפו פעולה נוספת בשם randomize_tower שבוחרת מספר שלם בין 1 ל־100, נקרא לו $N$.
הפעולה תיצור $N$ קוביות שלהן צלע באורך אקראי (עליכם להגריל אורך בין 1 ל־100), שצבען הוא שחור או לבן (בחרו באקראיות).

צרו בלולאה 1,000 מגדלים ומלאו אותם בקוביות באמצעות המתודה המגרילה.
מהו המגדל הגבוה ביותר שקיבלתם?

נקמת הסט

חלק 1

ממשו משחק סט סטנדרטי.
המשחק יציג למשתמש 12 קלפי סט מתוך חפיסה מעורבבת של 81 קלפים, ויאפשר למשתמש לבחור אילו 3 קלפים מייצגים סט.

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

השתמשו במחלקות.

חלק 2

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