divicidivici·איזיפס·פשוט להצליח

מה"ט אלגוריתמיקה ותכנות — אביב 2024 מועד א'

תאריך הבחינה: לא ידוע

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

פתרו את המבחן אונליין — בשפה שלכם:JavaC#

טופס מקורי (מה"ט) ↗יש מחוון רשמי ✓

למגמת הנדסת תוכנה — מי שלומד ב-Java או ב-C#. הלומדים בפייתון ניגשים לשאלון נפרד.

✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם

פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.

שאלות לדוגמה מהמבחן — פתרו עכשיו

בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 42 שאלות המבחן — את כולן תוכלו לפתור אונליין.

שאלה 1

מערכת מחשוב של בנק "SimpleBank" כוללת שתי מחלקות הבאות: Account ו-Branch. למחלקה Account (חשבון) ארבע תכונות:

  • מספר חשבון – num, מטיפוס מספר שלם – int
  • תעודת הזהות של הלקוח – id, מטיפוס מחרוזת – String
  • יתרה בחשבון – balance, מטיפוס מספר ממשי – double
  • מצב חשבון – isActive, מטיפוס boolean (true – חשבון פעיל, ו-false – חשבון לא פעיל) בעת פתיחת חשבון לקוח מקבל מתנה ₪100 ליתרת חשבון.

למחלקה Branch (סניף) תכונות הבאות:

  • מספר סניף – branchNum, מטיפוס שלם – int
  • מערך חשבונות – accounts – מערך הפניות לעצמים מסוג Account
  • מספר חשבונות בפועל – current, מטיפוס מספר שלם – int

בעת פתיחת סניף חדש יש ליצור מערך בגודל maxAccount (מספר החשבונות המקסימלי בסניף המתקבל כפרמטר) ללא חשבונות בפועל.

סעיף א

כתבו במחלקות Account ו-Branch פעולות בונות (constructors):

public Account(int num, String id)
public Branch(int branchNum, int maxAccount)

בסעיפים הבאים אפשר להניח שקיימות פעולות get/set לכל התכונות בשתי המחלקות. במחלקה Branch קיימת פעולה פנימית ליצירת מספר חשבון, המבטיחה שמספר חשבון יהיה ייחודי בסניף. אפשר להשתמש בפעולה זו ולא צריך לממש אותה. כותרת הפעולה:

public int generateNum()
סעיף ב

כדי למשוך לקוחות חדשים החליטה הנהלת הבנק על מבצע הבא: כל לקוח חדש (זה שאין לו חשבון בסניף) מקבל מתנה של ₪500 בעת פתיחת חשבון (אם ללקוח יש כבר חשבון הוא מקבל מתנה "רגילה" של ₪100). כתבו במחלקה Branch פעולה להוספת חשבון חדש:

public void addAccount(String id)

אפשר להניח שבמערך יש מקום לחשבון חדש.

סעיף ג

כאשר לקוח רוצה לעבור מסניף br1 לסניף br2 כל החשבונות שלו בסניף br1 נסגרים (הופכים להיות "לא פעילים") ובסניף br2 נפתח חשבון חדש עם יתרה השווה לסכום היתרות שהיו לו בסניף הקודם. אין צורך במחיקה חשבונות שנסגרו. כתבו פעולה חיצונית המבצעת מעבר לקוח מסניף לסניף. כותרת הפעולה:

public static void moveClient(String id, Branch br1, Branch br2)

שימו לב: לקוח העובר מסניף לסניף הוא לא לקוח חדש ולא מגיעה לו מתנה (גם לא מתנה רגילה).

שאלה 2

נתונה המחלקה Calendar2024 המתארת לוח שנה 2024. למחלקה תכונה אחת days שהיא מערך מספרים שלמים בגודל 12 אשר בכל אחד מתאיו, החל מהתא הראשון, רשום מספר הימים בחודש המתאים למיקומו של התא.

  • בתא 0 (הראשון במערך) יהיה רשום 31 כי בחודש ינואר (החודש הראשון בשנה) יש 31 ימים.
  • בתא 1 (השני במערך) יהיה רשום 29 כי בחודש פברואר (החודש השני בשנה) יש 29 ימים.
  • בתא 2 (השלישי במערך) יהיה רשום 31 כי בחודש מארס יש 31 ימים וכו'.
מספר התא01234567891011
מספר הימים בחודש312931303130313130313031

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

סעיף א

כתבו במחלקה Calendar2024 פעולה המקבלת כפרמטרים שני מספרים שלמים. הראשון מציין יום בחודש, השני מציין את מספר החודש (ביחד מציינים מספרים אלו תאריך). הפעולה תחשב ותחזיר את מספר הימים שעברו מתחילת השנה (1 בינואר) ועד התאריך שהתקבל. לדוגמה: עבור התאריך: 22,1 (22/1) יוחזר המספר: 21 עבור התאריך: 22,3 (22/3) יוחזר המספר: 81 (31+29+21) עבור התאריך: 1,5 (1/5) יוחזר המספר: 121 (31+29+31+30) כותרת הפעולה:

public int NumOfDays(int day, int month)
סעיף ב

יום 1.1 (היום הראשון של השנה) חל בשנה 2024 על יום ב' (יום שני, יום מספר 2 בשבוע). כתבו פעולה המקבלת כפרמטרים שני מספרים שלמים. הראשון מציין יום בחודש, השני מציין את מספר החודש (ביחד מציינים מספרים אלו תאריך). הפעולה תחשב ותחזיר את מספר היום בשבוע שבו הוא חל. לדוגמה: עבור היום 1.1 יש להחזיר 2 עבור היום 8.1 יש להחזיר 2 עבור היום 1.2 יש להחזיר 5 עבור היום 22.3 יש להחזיר 6 כותרת הפעולה:

public int Weekday(int day, int month)

הערה: אפשר להשתמש בפעולה של סעיף א' גם אם לא כתבתם אותה.

סעיף ג

כתבו במחלקה Calendar2024 פעולה המדפיסה יום בשבוע עבור כל יום ראשון וכל יום אחרון של 12 חודשי השנה 2024. כותרת הפעולה:

public void PrintFirstLast()

הערה: אפשר להשתמש בפעולות של סעיפים א' ו-ב' גם אם לא כתבתם אותן.

שאלה 3

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

  • שם התינוק – name, מטיפוס מחרוזת, str
  • רשימת מדידות גובה – height – רשימה באורך 12 של מספרים ממשיים, float
  • רשימת מדידות משקל – weight – רשימה באורך 12 של מספרים ממשיים, float

הערה: אורך הרשימות height ו-weight הוא 12. ערך במקום אפס שומר מדידות שנעשו בחודש הראשון אחרי לידה, במקום מספר אחד – מדידות שנעשו בחודש השני אחרי לידה וכך הלאה.

⚠️ בגוף השאלה מופיעה טבלת דוגמה (משקל וגובה ב-12 החודשים הראשונים, עם 0 בחודשים שלא הייתה בהם ביקורת: 2, 6, 8, 9, 11) המוצגת ב-PDF כטבלה גרפית שאינה ניתנת לשחזור מהימן וחד-משמעי מסדר העמודות בשכבת הטקסט (הערכים הבודדים חולצו אך לא סדר העמודות המדויק). אינה נחוצה לפתרון השאלה, רק להמחשה.

סעיף א

כתבו פעולה המקבלת מספר חודש month, גובה h ומשקל w ומעדכנת את רשימות המדידות בהתאם. כותרת הפעולה: set_data(int month, double h, double w)

סעיף ב

כתבו פעולה המחזירה את ממוצע המשקל על פי כל המדידות שהתקיימו. כותרת הפעולה: avg_weight()

סעיף ג

המדד מסת גוף (BMI - BodyMassIndex) משקלל את המשקל עם הגובה. המדד הזה חשוב להערכה אם התפתחות הילד תקינה. חישוב ה-BMI מתבצע לפי הנוסחה הבאה: משקל חלקי גובה בריבוע:

BMI = w / h²

כתבו פעולה המחזירה מדד ה-BMI של התינוק על פי המדידה האחרונה שלו. כותרת הפעולה: get_last_Bmi()

הנושאים הרשמיים בבחינה 97104

לפי תוכנית הלימודים הרשמית של מה"ט (אלגוריתמיקה ותכנות) — אלו הנושאים שהבחינה נשענת עליהם:

המקור: תוכנית הלימודים הרשמית של מה"ט (משרד העבודה).

פתרו את המבחן המלא — עם משוב על כל תשובה

כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.

התחילו לתרגל — חינם ←