מה"ט אלגוריתמיקה ותכנות — אביב 2024 מועד א'
תאריך הבחינה: לא ידוע
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
טופס מקורי (מה"ט) ↗יש מחוון רשמי ✓
למגמת הנדסת תוכנה — מי שלומד ב-Java או ב-C#. הלומדים בפייתון ניגשים לשאלון נפרד.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 42 שאלות המבחן — את כולן תוכלו לפתור אונליין.
מערכת מחשוב של בנק "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)
שימו לב: לקוח העובר מסניף לסניף הוא לא לקוח חדש ולא מגיעה לו מתנה (גם לא מתנה רגילה).
נתונה המחלקה Calendar2024 המתארת לוח שנה 2024. למחלקה תכונה אחת days שהיא מערך מספרים שלמים בגודל 12 אשר בכל אחד מתאיו, החל מהתא הראשון, רשום מספר הימים בחודש המתאים למיקומו של התא.
- בתא 0 (הראשון במערך) יהיה רשום 31 כי בחודש ינואר (החודש הראשון בשנה) יש 31 ימים.
- בתא 1 (השני במערך) יהיה רשום 29 כי בחודש פברואר (החודש השני בשנה) יש 29 ימים.
- בתא 2 (השלישי במערך) יהיה רשום 31 כי בחודש מארס יש 31 ימים וכו'.
| מספר התא | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| מספר הימים בחודש | 31 | 29 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
הערה: בסעיפים הבאים אפשר להניח שפרמטרים של הפעולות תקינים ואין צורך לבדוק זאת.
כתבו במחלקה 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()
הערה: אפשר להשתמש בפעולות של סעיפים א' ו-ב' גם אם לא כתבתם אותן.
המחלקה 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
לפי תוכנית הלימודים הרשמית של מה"ט (אלגוריתמיקה ותכנות) — אלו הנושאים שהבחינה נשענת עליהם:
- אלגוריתם – אלגוריתמים מילוליים, שימוש באלגוריתם לפתרון בעיות במחשב · 11 ש'
- מבוא לתכנות ב-Java – מבנה תכנית, משתנים, טיפוסי נתונים בסיסיים, הוראות השמה ופלט · 11 ש'
- מתחילים לתכנת – אופרטורים, ממשק מחלקה, זימון פעולות, המחלקה Math · 16 ש'
- משפטי תנאי (if, switch) ופעולות (methods) – כתיבה וזימון, יבוא מודולים · 23 ש'
- לולאות (for, while, do-while) – יעילות אלגוריתם, תבניות אלגוריתמיות בסיסיות, המחלקה String · 28 ש'
- מבנה נתונים סדרתיים – מערכים חד-ממדיים ודו-ממדיים, תבניות סריקה, חיפוש ומיון (insertion sort, מיזוג) · 36 ש'
- מבוא לתכנות מונחה עצמים – מחלקות ועצמים, הכמסה (Encapsulation), בנאים, העמסה ודריסה (overloading/overriding) · 22 ש'
- רקורסיה · 7 ש'
- טיפול בחריגים (Exceptions) – היכרות עם מחלקת Exception ופרדיגמת exceptions · 7 ש'
- ערוצי קלט/פלט (System.in/out/err), קריאה וכתיבה לקובצי טקסט ובינארי · 7 ש'
- יסודות Threads ו-MultiThreads · 6 ש'
- כתיבה תקנית (coding conventions) בסביבת Java · 8 ש'
- ניהול זיכרון והמכונה הוירטואלית (JVM) בג'אווה · 5 ש'
- תרגיל סיכום מסכם · 2 ש'
המקור: תוכנית הלימודים הרשמית של מה"ט (משרד העבודה).
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←