You are on page 1of 28

‫מועד הבחינה‪:‬‬

‫אביב תשפ"א – ‪ – 2021‬מועד א'‬


‫מספר השאלון‪97104 :‬‬

‫אלגוריתמיקה ותכנות‬
‫הנדסאים וטכנאים – הנדסת תוכנה‬
‫הנחיות לנבחן‬
‫ארבע שעות וחצי‪.‬‬ ‫א‪ .‬משך הבחינה‪:‬‬
‫בשאלון זה שני מבחנים‪ .‬עליך לענות על מבחן אחד בלבד בהתאם למוסד הלימודים‪:‬‬ ‫ב‪ .‬מבנה השאלון‬
‫מבחן ב‪( Java -‬עמוד ‪)2‬‬ ‫ומפתח ההערכה‪:‬‬
‫מבחן ב‪( C# -‬עמוד ‪)15‬‬
‫בכל מבחן ‪ 13‬שאלות‪.‬‬
‫חלק א' ‪ 40 -‬נקודות‬
‫שאלות ‪ :6-1‬יש לענות על ארבע שאלות בלבד‪ .‬ערך כל שאלה ‪ 10 -‬נקודות‪.‬‬
‫חלק ב' ‪ 24 -‬נקודות‬
‫שאלות ‪ :9-7‬יש לענות על שתיים שאלות בלבד‪ .‬ערך כל שאלה ‪ 12 -‬נקודות‪.‬‬
‫חלק ג' ‪ 36 -‬נקודות‬
‫שאלות ‪ :13-10‬יש לענות על שתיים שאלות בלבד‪ .‬ערך כל שאלה ‪ 18 -‬נקודות‪.‬‬
‫בסך הכול‪ 100 :‬נקודות‪.‬‬
‫‪ .1‬מחשבון (אין להשתמש במחשב כף יד או במחשבון עם תקשורת חיצונית)‪.‬‬ ‫ג‪ .‬חומר עזר‬
‫מותר לשימוש‪ .2 :‬קלסר אחד בלבד עם חומר ההרצאות‪ .‬אין להוציא דפים מהקלסר‪.‬‬
‫אין לצרף ספרים או חוברות עם פתרונות‪.‬‬
‫ד‪ .‬הוראות כלליות‪ .1 :‬יש לקרוא בעיון את ההנחיות בדף השער ואת כל שאלות הבחינה‪ ,‬ולוודא שהן מובנות‪.‬‬
‫‪ .2‬את התשובות יש לכתוב בצורה מסודרת‪ ,‬בכתב יד ברור ונקי (גם בכך תלויה הערכת הבחינה)‪.‬‬
‫‪ .3‬יש להשאיר את העמוד הראשון במחברת הבחינה ריק‪ .‬בסיום המבחן יש לרשום בעמוד זה‬
‫את מספרי התשובות לבדיקה‪ .‬התשובות ייבדקו לפי סדר כתיבתן בעמוד זה‪ .‬לא ייבדקו‬
‫תשובות עודפות‪.‬‬
‫‪ .4‬יש לכתוב את התשובות במחברת הבחינה בעט בלבד‪ ,‬בכתב יד ברור‪.‬‬
‫‪ .5‬יש להתחיל כל תשובה בעמוד חדש ולציין את מספר השאלה ואת הסעיף‪ .‬אין צורך להעתיק‬
‫את השאלה עצמה‪.‬‬
‫‪ .6‬טיוטה יש לכתוב במחברת הבחינה בלבד‪ .‬יש לרשום את המילה "טיוטה" בראש העמוד‬
‫ולהעביר עליו קו כדי שלא ייבדק‪.‬‬
‫‪ .7‬יש להציג פתרון מלא ומנומק‪ ,‬כולל חישובים לפי הצורך‪ .‬הצגת תשובה סופית ללא שלבי‬
‫הפתרון לא תזכה בניקוד‪.‬‬
‫‪ .8‬יש להסביר בפירוט כל תוכנית שנכתבה‪ ,‬תוכנית ללא הסבר מפורט לא תזכה בניקוד‪.‬‬
‫‪ .9‬אם לדעתך חסר בשאלה נתון‪ ,‬יש לציין זאת ולהוסיף נתון מתאים שיאפשר לך להמשיך‬
‫בפתרון השאלה‪ .‬נמק את בחירתך‪.‬‬

‫חל איסור מוחלט להוציא שאלון או מחברת בחינה מחדר הבחינה!‬


‫ההנחיות בשאלון זה מנוסחות בלשון זכר‪ ,‬אך מכוונות לנבחנות ולנבחנים כאחד‪.‬‬
‫בהצלחה!‬
‫בשאלון זה ‪ 25‬עמודים‪.‬‬
‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫מבחן ב‪JAVA -‬‬


‫הנחיות כלליות לנבחנים‪:‬‬

‫‪ .1‬בכל שאלה שנדרשת בה קליטה‪ ,‬אין צורך בבדיקת תקינות הקלט‪.‬‬

‫‪ .2‬בכל שאלה שנדרשת בה קליטה‪ ,‬הנח שבתוכנית כתובה ההוראה‪:‬‬


‫;)‪Scanner in=new Scanner(System.in‬‬
‫‪ .3‬דוגמה להוראה לקליטת מספר שלם‪:‬‬
‫;)(‪int x = in.nextInt‬‬
‫‪ .4‬דוגמה להוראה לקליטת מספר עשרוני‪:‬‬
‫;)(‪double y = in.nextDouble‬‬
‫‪ .5‬דוגמה להוראה לקליטת מחרוזת‪:‬‬
‫;)(‪String str = in.next‬‬
‫‪ .6‬הוראות לפלט על המסך‪:‬‬
‫;)(‪System.out.println‬‬
‫;)(‪System.out.print‬‬

‫עמוד ‪ 2‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫חלק א'‬
‫ענה על ארבע מבין השאלות ‪( 6-1‬ערך כל שאלה – ‪ 10‬נקודות)‪.‬‬

‫שאלה ‪1‬‬
‫כתוב קטע תוכנית שיקלוט ‪ 40‬מספרים חיוביים ושלמים‪:‬‬
‫(‪ 5‬נק') א‪ .‬עבור כל מספר תלת ספרתי שנקלט‪ ,‬יש להדפיס את סכום ספרותיו‪.‬‬
‫(‪ 5‬נק') ב‪ .‬על הקוד לחשב ולהדפיס את כמות המספרים הזוגיים שנקלטו ואת סכום המספרים האי זוגיים שנקלטו‪.‬‬

‫שאלה ‪2‬‬
‫למחלקה קופסה (תיבה) – ‪ Box‬יש ארבע תכונות‪:‬‬
‫צבע – ‪ ,color‬מטיפוס מחרוזת ‪String -‬‬ ‫‪‬‬
‫אורך – ‪ ,length‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫רוחב – ‪ ,width‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫גובה ‪ height -‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫במחלקה ‪ Box‬הוגדרה פעולה בונה (בנאי‪ )constructor ,‬המקבלת פרמטר של כל תכונה וקובעת את הערכים של‬
‫תכונות העצם‪ .‬המחלקה כוללת פעולות ‪ get/set‬לכל אחת מהתכונות‪.‬‬
‫(‪ 5‬נק') א‪ .‬כתוב פעולה בונה המייצרת קופסה בצבע ‪ ,color‬שכל הממדים שלה (אורך‪ ,‬רוחב וגובה) שווים ל‪.10 -‬‬
‫כותרת הפעולה‪.public Box(String color) :‬‬
‫(‪ 5‬נק') ב‪ .‬כתוב פעולה חיצונית המקבלת מערך הפניות לעצמים מסוג ‪ Box‬בשם ‪ arr‬ומחזירה את הצבע של‬
‫קופסה במערך עם ערך הנפח הקטן ביותר‪ .‬כותרת הפעולה )‪.public static String smallBox(Box[] arr‬‬
‫הנחה‪ :‬כל תא במערך מכיל הפניה לעצם מסוג ‪ Box‬ואין תאים במערך שערכם שווה ל‪null -‬‬

‫עמוד ‪ 3‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪3‬‬
‫במחלקה מיכל דלק ‪ Tank -‬קיימות התכונות‪:‬‬
‫קיבולת מיכל הדלק ‪ ,capacity -‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫כמות דלק ‪ amount -‬מטיפוס שלם ‪int -‬‬ ‫‪‬‬
‫במחלקה ‪ Tank‬הוגדרה פעולה בונה (בנאי‪ )constructor ,‬המקבלת פרמטר של כל תכונה וקובעת את הערכים של‬
‫תכונות העצם‪ .‬המחלקה כוללת פעולות ‪ get/set‬לכל אחת מהתכונות‪.‬‬
‫(‪ 2‬נק') א‪ .‬כתוב פעולה בונה המקבלת את קיבולת מיכל הדלק ומייצרת מיכל ריק‪.‬‬
‫(‪ 2‬נק') ב‪ .‬כתוב במחלקה ‪ Tank‬פעולה פנימית המחזירה ‪ true‬אם במיכל יש דלק‪ ,‬אחרת הפעולה מחזירה ‪.false‬‬
‫(‪ 3‬נק') ג‪ .‬כתוב במחלקה ‪ Tank‬פעולה פנימית )‪.boolean is Possible (int num, char op‬‬
‫הפעולה תקבל את סוג המשימה ‪ op‬ואת כמות הדלק ‪.num‬‬
‫סוג המשימה יכול להיות אחד מהתווים '‪ '+‬או '‪.'-‬‬
‫אם ‪ op‬שווה ל‪ '+' -‬יש להוסיף כמות הדלק ‪ num‬למיכל‪,‬‬
‫אם ‪ op‬שווה ל‪ '-' -‬יש להוריד את כמות הדלק ‪ num‬מהמיכל‪.‬‬
‫אם אפשר לבצע את המשימה‪ ,‬הפעולה תחזיר ‪ ,true‬אחרת הפעולה תחזיר ‪.false‬‬
‫(‪ 3‬נק') ד‪ .‬כתוב פעולה חיצונית )‪.static int fill (Tank t1, Tank t2‬‬
‫הפעולה מחזירה את כמות הדלק המקסימלית שאפשר להעביר ממיכל ‪ t1‬למיכל ‪.t2‬‬

‫שאלה ‪4‬‬
‫מערך של מספרים שלמים נקרא "מושלם" אם הוא מקיים את התנאים הבאים‪:‬‬
‫‪ -‬גודל המערך הוא מספר אי‪-‬זוגי‪.‬‬
‫‪ -‬בחצי הראשון של המערך יש רק מספרים חיובים חד ספרתיים‪.‬‬
‫‪ -‬האיבר המרכזי (אמצעי) הוא ‪.0‬‬
‫‪ -‬בחצי השני של המערך אין אף מספר חיובי חד‪-‬ספרתי‪.‬‬

‫המערך }‪ arr={1, 7,3, 0, 13, 131, 44‬הוא "מערך מושלם" מאחר שהוא עונה על כל ארבע הדרישות‪.‬‬
‫‪ -‬אורך המערך ‪ 7‬אי‪-‬זוגי‪.‬‬
‫‪ -‬החצי הראשון {‪ }1,7,3‬מכיל רק מספרים חד‪-‬ספרתיים‪.‬‬
‫‪ -‬חצי השני {‪ }13,131,44‬אינו מכיל מספרים חד‪-‬ספרתיים‪.‬‬
‫‪ -‬האיבר המרכזי הוא ‪.0‬‬

‫(‪ 8‬נק') א‪ .‬כתוב פעולה המקבלת מערך של מספרים שלמים ומחזירה ערך ‪ true‬אם הוא "מערך מושלם"‪ ,‬אם לא‪,‬‬
‫הפעולה תחזיר ערך ‪.false‬‬
‫(‪ 2‬נק') ב‪ .‬מהי סיבוכיות הפעולה שבסעיף א'? הסבר את תשובתך‪.‬‬

‫עמוד ‪ 4‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪5‬‬
‫הגדרה‪ :‬מערך נקרא "מערך ממוין בסדר עולה" אם כל איבר (פרט לאיבר הראשון) גדול מהאיבר הקודם לו או‬
‫שווה לו‪ .‬נתונה פעולה ‪ what‬המקבלת מערך מספרים שלמים ממוין בסדר עולה ומספר שלם נוסף‪.‬‬
‫)‪public static boolean what(int[] arr, int num‬‬
‫{‬
‫;‪int k = 0‬‬
‫;‪int p = arr.length-1‬‬
‫;‪int s‬‬
‫)‪while(k < p‬‬
‫{‬
‫;]‪s = arr[k] + arr[p‬‬
‫)‪if(s < num‬‬
‫{‬
‫;‪k++‬‬
‫}‬
‫‪else‬‬
‫{‬
‫)‪if(s > num‬‬
‫{‬
‫;‪p--‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;‪return true‬‬
‫}‬
‫}‬
‫}‬
‫;‪return false‬‬
‫}‬
‫(‪ 5‬נק') א‪ .‬נתון מערך }‪int[] arr={2, 4, 7, 12, 18‬‬
‫‪ .1‬עקוב בעזרת טבלת מעקב אחר הזימון )‪ what(arr, 10‬ורשום מה תחזיר הפעולה‪.‬‬
‫‪ .2‬תן דוגמה לפרמטר ‪ num‬כך שזימון )‪ what(arr, num‬יחזיר תוצאה שונה מתוצאה שהתקבלה‬
‫בסעיף א‪.1‬‬
‫שים לב‪ :‬אין לשנות את המערך ‪!arr‬‬
‫(‪ 3‬נק') ב‪ .‬מה מבצעת הפעולה באופן כללי?‬
‫(‪ 2‬נק') ג‪ .‬מהי סיבוכיות זמן הריצה של הפעולה ‪ ?what‬הסבר את תשובתך‪.‬‬

‫עמוד ‪ 5‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪6‬‬
‫מחרוזת תהא תקינה אם מופיע בה התו '‪( '.‬נקודה) לפחות פעם אחת‪ ,‬אך לא ברציפות‪ ,‬ולא בתחילת המחרוזת או‬
‫בסופה‪ ,‬לדוגמה‪:‬‬
‫‪www.sport5.il Lionel.Messi‬‬ ‫מחרוזות תקינות‪:‬‬
‫‪ABC efG. .ab.Cd‬‬ ‫מחרוזות שאינן תקינות‪abc..def :‬‬
‫כתוב פעולה המקבלת מחרוזת ומחזירה ‪ true‬אם מחרוזת תקינה‪ ,‬אם לא הפעולה תחזיר ‪.false‬‬

‫עמוד ‪ 6‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫חלק ב'‬
‫ענה על שתיים מבין השאלות ‪( 9-7‬ערך כל שאלה – ‪ 12‬נקודות)‪.‬‬

‫שאלה ‪7‬‬
‫הערה‪ :‬אפשר להניח שבשתי המחלקות קיימות פעולות ‪ .get/set‬אם השתמשת בפעולות נוספות‪ ,‬עליך לכתוב את‬
‫הפעולות!‬

‫(‪ 5‬נק') א‪ .‬נתונה המחלקה סוללה (‪ ,)Battery‬אשר לה ארבע תכונות‪:‬‬


‫יצרן – ‪ ,manufacturer‬מטיפוס מחרוזת ‪String -‬‬ ‫‪‬‬
‫גודל – ‪ ,size‬מטיפוס תו ‪char -‬‬ ‫‪‬‬
‫‪'A' ,‬‬ ‫לדוגמה‪'B' , 'C' , 'D' :‬‬
‫מתח חשמלי – ‪ ,volt‬מטיפוס ממשי ‪double -‬‬ ‫‪‬‬
‫האם תקינה? – ‪ ,isNormal‬מטיפוס בוליאני ‪boolean -‬‬ ‫‪‬‬

‫כתוב בנאי (‪ )constructor‬למחלקה ‪ Battery‬המקבל פרמטר של כל תכונה ומייצר עצם מסוג‬ ‫‪.1‬‬
‫‪ Battery‬בהתאם לערכי הפרמטרים‪.‬‬
‫כתוב בנאי למחלקה ‪ Battery‬אשר מייצר עצם מסוג ‪ Battery‬תקין של היצרן "‪."Duracell‬‬ ‫‪.2‬‬
‫הבנאי מקבל מתח וגודל כפרמטרים‪.‬‬

‫(‪ 7‬נק') ב‪ .‬נתונה המחלקה חבילת‪-‬סוללות (‪ ,)BatteryPack‬אשר לה שתי תכונות‪:‬‬


‫מחיר – ‪ , price‬מטיפוס ממשי‪.double ,‬‬ ‫‪‬‬
‫סוללות – ‪ ,batteries‬מערך מטיפוס ‪ Battery‬באורך ‪.12‬‬ ‫‪‬‬

‫כתוב פעולה חיצונית ‪ ,checkPrice‬אשר מקבלת כפרמטר עצם מטיפוס ‪ ,BatteryPack‬ומספר‬ ‫‪.1‬‬
‫ממשי ‪ sum‬שהוא הסכום שהלקוח מוכן לשלם‪.‬‬
‫‪ -‬אם הסכום שהלקוח מוכן לשלם גבוה ממחיר חבילת הסוללות‪ ,‬אזי אפשר לקנות את החבילה‬
‫ולכן הפעולה תדפיס הודעה "אפשר לרכוש" ואת העודף שנשאר אחרי הקנייה‪.‬‬
‫‪ -‬אם הסכום שהלקוח מוכן לשלם נמוך ממחיר חבילת הסוללות‪ ,‬אזי אי אפשר לקנות את‬
‫החבילה ולכן הפעולה תדפיס הודעה "אי אפשר לרכוש" ואת הסכום שחסר‪.‬‬
‫‪ -‬אם סכום שלקוח מוכן לשלם שווה למחיר חבילת הסוללות‪ ,‬אפשר לקנות את החבילה ולכן‬
‫הפעולה תדפיס הודעה "‪."O.K.‬‬

‫כתוב את הפעולה )‪ ,isEnough(double v‬אשר מקבלת כפרמטר מספר ממשי ‪ v‬המציין מתח‬ ‫‪.2‬‬
‫חשמלי הנדרש ומחזירה ערך בוליאני‪.‬‬
‫אם סכום המתחים החשמליים של כל הסוללות התקינות בחבילה קטן מ‪ ,v -‬הפעולה תחזיר‬
‫שקר‪ ,‬אחרת תחזיר אמת‪.‬‬

‫עמוד ‪ 7‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪8‬‬
‫נתונה המחלקה ‪ ,Driver‬המייצגת נהג שקבל רישיון נהיגה‪ .‬תכונות המחלקה הן‪:‬‬
‫שם ‪, name -‬מטיפוס מחרוזת ‪String -‬‬ ‫‪‬‬
‫תעודת זהות – ‪ , id‬מטיפוס מחרוזת ‪String -‬‬ ‫‪‬‬
‫שנת לידה – ‪ ,year‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫מספר מבחני נהיגה כולל – ‪ ,tests‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬

‫במחלקה הוגדרה פעולה בונה (‪ )constructor‬המקבלת פרמטר לכל תכונה ויוצרת עצם מסוג ‪ ,Driver‬המכיל את‬
‫הערכים האלו בתכונות‪.‬‬
‫כמו כן יש פעולות ‪ get/set‬לכל אחת מהתכונות‪.‬‬

‫(‪ 5‬נק') א‪ .‬עקוב אחרי קטע התוכנית‪ ,‬לכל עצם רשום את השמות של כל התכונות שלו‪ ,‬את הערכים של כל‬
‫התכונות ואת השינויים שהיו בהם‪ ,‬ורשום את הפלט‪.‬‬
‫;]‪Driver [] d=new Driver[5‬‬
‫‪d[0] = new‬‬ ‫;)‪Driver("Yossi", "1234", 2000, 3‬‬
‫‪d[1] = new‬‬ ‫;)‪Driver("Avi", "7596", 1980, 7‬‬
‫‪d[2] = new‬‬ ‫;)‪Driver("Sara", "6051", 1995, 1‬‬
‫‪d[3] = new‬‬ ‫;)‪Driver("Dani", "4472", 1998, 2‬‬
‫;]‪d[4] = d[3‬‬

‫;‪int m = 0, s = 0‬‬
‫;)(‪int x = d[1].getTests‬‬
‫;)‪d[1].setTests(d[3].getTests()+2‬‬
‫;)‪d[3].setTests(x‬‬

‫)‪for (int i = 0; i < d.length; i++‬‬


‫{‬
‫;))(‪System.out.println (d[i].getTests‬‬
‫;)(‪s=s + d[i].getTests‬‬
‫)‪if (d[i].getYear() > 1995‬‬
‫;‪m++‬‬
‫}‬
‫;)‪System.out.println ((double)s/d.length‬‬
‫;)‪System.out.println (m‬‬

‫(‪ 7‬נק') ב‪ .‬כתוב פעולה המקבלת מערך של עצמים מסוג ‪ ,Driver‬ומספר שלם‪ ,num‬ומחזירה מערך הכולל את‬
‫השמות של הנהגים שעברו את הטסט בפחות מ‪ num -‬מבחנים‪.‬‬

‫עמוד ‪ 8‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪9‬‬
‫נתונות ההגדרות הבאות‪:‬‬
‫"פָּ לִ ינְ ְדרוֹם" הוא כל רצף תווים שקריאתו מימין לשמאל ומשמאל לימין היא זהה‪.‬‬
‫דוגמאות לפלינדרום‪:‬‬
‫‪ABCCBA, 12A21, a0X$11$X0a‬‬
‫"פלינדרום גדולים"‪ ,‬הוא פלינדרום המורכב רק מאותיות ‪( A..Z‬שאר התווים לא משנה)‬
‫לדוגמה‪:‬‬
‫‪fA%B##rkC1^BAdd‬‬
‫הוא פלינדרום גדולים‪.‬‬

‫(‪ 6‬נק') א‪ .‬כתוב פעולה המקבלת מחרוזת ומחזירה ‪ true‬אם המחרוזת היא פלינדרום גדולים‪ ,‬אחרת הפעולה‬
‫תחזיר ‪.false‬‬
‫(‪ 6‬נק') ב‪ .‬כתוב פעולה המקבלת מערך מחרוזות ומחזירה מחרוזת הארוכה ביותר שהיא "פלינדרום גדולים"‪.‬‬
‫אפשר להניח שיש לפחות מחרוזת אחת שהיא פלינדרום גדולים‪.‬‬

‫עמוד ‪ 9‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫חלק ג'‬
‫ענה על שתיים מבין השאלות ‪( 13-10‬ערך כל שאלה – ‪ 18‬נקודות)‪.‬‬

‫שאלה ‪10‬‬
‫נתונות ההגדרות הבאות‪:‬‬
‫‪" ‬דרגת הזוגיות" של מספר שלם היא כמות הספרות הזוגיות במספר‪.‬‬
‫לדוגמה‪:‬‬
‫"דרגת הזוגיות" של מספר ‪ 12347‬היא ‪.2‬‬
‫"דרגת הזוגיות" של מספר ‪ 1860‬היא ‪.3‬‬
‫"דרגת הזוגיות" של מספר ‪ 0‬היא ‪.1‬‬
‫‪" ‬דרגת העל" של מערך חד‪-‬ממדי של מספרים שלמים היא "דרגת הזוגיות" הגבוהה ביותר שיש בו‪.‬‬
‫‪ ‬מערך חד‪-‬ממדי של מספרים שלמים נקרא "מערך מסודר לפי דרגות הזוגיות" אם הוא כולל את כל דרגות‬
‫הזוגיות מ‪ 0 -‬עד "דרגת על" וכל דרגה מופיעה בו בדיוק פעם אחת‪.‬‬

‫א‪ .‬כתוב פעולה אשר מקבלת מספר שלם ומחזירה את "דרגת הזוגיות" שלו‪.‬‬ ‫(‪ 5‬נק')‬
‫ב‪ .‬כתוב פעולה אשר מקבלת מערך חד‪-‬ממדי ומחזירה את "דרגת העל" שלו‪.‬‬ ‫(‪ 5‬נק')‬
‫ג‪ .‬כתוב פעולה אשר מקבלת מערך חד‪-‬ממדי‪ .‬הפעולה מחזירה ‪ true‬אם המערך מסודר לפי דרגות‬ ‫(‪ 5‬נק')‬
‫הזוגיות‪ ,‬אחרת הפעולה מחזירה ‪.false‬‬
‫ד‪ .‬מהן סיבוכיות זמן הריצה של כל הפעולות שכתבת? הסבר את תשובתך‪.‬‬ ‫(‪ 3‬נק')‬

‫עמוד ‪ 10‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪11‬‬
‫(‪ 9‬נק') א‪ .‬לפניך הפעולה ‪ one‬המקבלת מערך של מספרים שלמים‪ ,‬ושני מספרים נוספים‪:‬‬

‫)‪public static void one (int[] a, int start, int stop‬‬


‫{‬
‫)‪if(start < stop‬‬
‫{‬
‫;)‪one(a, start+1, stop‬‬
‫;]‪a[start]=a[start]+a[start+1‬‬
‫}‬
‫}‬
‫‪ .1‬עקוב אחר זימון (‪ one (b, 0, b.length-1‬עבור המערך‪:‬‬

‫‪b:‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪16‬‬ ‫‪20‬‬ ‫‪30‬‬

‫וציין מה יהיה תוכן איברי המערך בסיום ביצוע פעולה‪.‬‬


‫‪ .2‬מהי מטרת הפעולה ‪ ?one‬בתשובה יש להתייחס למערך שפעולה מקבלת כפרמטר‪.‬‬

‫(‪ 9‬נק') ב‪ .‬לפניך פעולה אחרת‪ ,two ,‬המקבלת מערך של מספרים שלמים‪ ,‬ושני מספרים נוספים‪.‬‬
‫)‪public static void two (int[] a, int start, int stop‬‬
‫{‬
‫)‪if(start < stop‬‬
‫{‬
‫;]‪a[start]=a[start]+a[start+1‬‬
‫;)‪two (a, start+1, stop‬‬
‫}‬
‫}‬
‫‪ .1‬אחרי זימון )‪ two(c, 0, c.length-1‬תוכן של מערך ‪ c‬הוא‪:‬‬

‫‪c:‬‬ ‫‪10‬‬ ‫‪8‬‬ ‫‪12‬‬ ‫‪20‬‬ ‫‪15‬‬ ‫‪10‬‬

‫מה היה התוכן של ‪ c‬לפני ביצוע הזימון?‬

‫‪ .2‬מהי מטרת הפעולה ‪ ?two‬בתשובה יש להתייחס למערך שהפעולה מקבלת כפרמטר‪.‬‬

‫עמוד ‪ 11‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪12‬‬
‫כדי לממש מערכת לניהול משימות הגדירו את המחלקה ‪( Task‬משימה) שיש לה ארבע תכונות‪:‬‬
‫כותרת המשימה ‪ title -‬מטיפוס מחרוזת – ‪.String‬‬ ‫‪‬‬
‫מספר הדקות הנדרש לסיום ביצוע המשימה ‪ minutes -‬מטיפוס מספר שלם – ‪.int‬‬ ‫‪‬‬
‫דרגת העדיפות של המשימה ‪ – priority -‬שהיא מספר שלם חיובי ‪( .int -‬מספר גבוה יותר מייצג דרגת‬ ‫‪‬‬
‫עדיפות גבוהה יותר)‪.‬‬
‫האם המשימה בוצעה? ‪ isComplete -‬מטיפוס בוליאני‪( boolean -‬הערך ‪ false‬משמעותו שהמשימה לא‬ ‫‪‬‬
‫הסתיימה)‪.‬‬

‫ניתן להניח כי פעולות ‪ set ,get‬הוגדרו לכל התכונות‪.‬‬


‫כדי לנהל את המשימות הוגדרה המחלקה ‪ TaskManager‬המכילה ‪ 2‬תכונות‪:‬‬
‫מערך של משימות – ‪ - tasks‬בגודל ‪ 100‬של ‪.Task‬‬ ‫‪‬‬
‫מספר שלם ‪ numOfTasks‬המציין את מספר המשימות שיש כרגע‪.‬‬ ‫‪‬‬
‫בכל הפעולות במחלקה זו עליכם לוודא שהערך ‪ numOfTasks‬מעודכן‪.‬‬
‫(‪ 3‬נק') א‪ .‬כתוב במחלקה ‪ Task‬את הפעולה )‪.int doIt(int num‬‬
‫הפעולה מקבלת מספר דקות ‪ num‬לביצוע המשימה‪ .‬אם הפרמטר ‪ num‬גדול ממספר הדקות הנדרש‬
‫לביצוע המשימה‪ ,‬הפעולה מחזירה את מספר הדקות ה"עודפות" (כלומר הדקות שיותר ממה שנדרש)‪,‬‬
‫אחרת היא מחזירה ‪.0‬‬
‫הפעולה גם מעדכנת תכונות ‪ minutes‬ו‪ isComplete -‬בהתאם‪.‬‬
‫(‪ 5‬נק') ב‪ .‬כתוב במחלקה ‪ TaskManager‬את הפעולה )‪.boolean addTask(Task t‬‬
‫הפעולה מקבלת משימה חדשה ‪ t‬ומכניסה אותה למקום הראשון הפנוי במערך המשימות‪ ,‬אם אין‬
‫מקום‪ ,‬הפעולה תחפש משימה שהסתיימה כבר‪ ,‬ותכניס במקומה את המשימה החדשה‪.‬‬
‫הפעולה תחזיר ‪ true‬אם המשימה הוכנסה‪ ,‬אחרת הפעולה תחזיר ‪.false‬‬
‫הפעולה גם תעדכן את התכונה ‪ numOfTasks‬בהתאם‪.‬‬
‫(‪ 5‬נק') ג‪ .‬כתוב במחלקה ‪ TaskManager‬את הפעולה ) (‪.int importantTask‬‬
‫הפעולה מחזירה את המיקום במערך ‪ tasks‬של המשימה בעדיפות הגבוהה ביותר שהביצוע שלה עוד‬
‫לא הסתיים‪ .‬אם יש כמה פעולות בעדיפות הגבוהה ביותר שלא הושלמו‪ ,‬הפעולה תחזיר מיקום‬
‫(אינדקס) של אחת מהן‪ .‬אם אין אף משימה שביצועה עדיין לא הסתיים‪ ,‬הפעולה תחזיר את הערך ‪.-1‬‬
‫(‪ 5‬נק') ד‪ .‬כתוב במחלקה ‪ TaskManager‬את הפעולה )‪.void work(int num‬‬
‫הפעולה מקבלת מספר שלם המייצג את הזמן בדקות שהוקצה לעבודה‪ .‬הפעולה תשקיע את הזמן‬
‫בביצוע משימה כלשהי שעדיין לא הסתיימה ובעדיפות הגבוהה ביותר שיש במערך ‪.tasks‬‬
‫הפעולה תעדכן את תכונות המשימה בהתאם‪ .‬אם אחרי ביצוע המשימה יישאר זמן‪ ,‬הפעולה תמצא‬
‫משימה נוספת בעדיפות הגבוהה ביותר שעוד לא הסתיימה ותטפל בה‪.‬‬
‫הפעולה תסיים את העבודה כאשר יסתיים ביציע של כל המשימות או יגמר זמן שהוקצה לעבודה‪.‬‬

‫עמוד ‪ 12‬מתוך ‪25‬‬


'‫ – מועד א‬2021 – ‫ אביב תשפ"א‬,97104 ‫שאלון‬
13 ‫שאלה‬
:‫נתונה פעולה רקורסיבית‬
public static boolean what (String s1, String s2)
{
if(s1.length() != s2.length())
return false;
if(s1.length() == 0)
return true;
int place = s2.indexOf(s1.charAt(0));
if(place < 0)
return false;
else
{
String a = s2.substring(0, place);
String b = s2.substring(place+1);
String c = a.concat(b);
return what(s1.substring(1),c);
}
}
‫ ורשום מה תהיה תוצאת‬s2= "oeloh" ,s1="hello" ‫ עבור‬what(s1, s2) ‫ עקוב אחרי זימון הפעולה‬.‫ נק') א‬6(
.‫הזימון‬
.'‫ תהיה שונה מהתוצאה של סעיף א‬what("hello", s3) ‫ כך שתוצאת הזימון‬s3 ‫ תן דוגמה למחרוזת‬.‫ נק') ב‬3(
?‫ באופן כללי‬what ‫ מה מבצעת הפעולה‬.‫ נק') ג‬3(
.‫ המבצעת אותה משימה בצורה לא רקורסיבית‬what ‫ כתוב את הפעולה‬.‫ נק') ד‬6(

25 ‫ מתוך‬13 ‫עמוד‬
‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫מבחן ב‪C# -‬‬


‫הנחיות כלליות לנבחנים‪:‬‬

‫‪ .1‬בכל שאלה שנדרשת בה קליטה‪ ,‬אין צורך בבדיקת תקינות הקלט‪.‬‬

‫‪ .2‬דוגמה להוראה לקליטת מספר שלם‪:‬‬


‫;))(‪int x = int.Parse(Console.ReadLine‬‬
‫‪ .3‬דוגמה להוראה לקליטת מספר עשרוני‪:‬‬
‫;))(‪double y = double.Parse(Console.ReadLine‬‬
‫‪ .4‬דוגמה להוראה לקליטת מחרוזת‪:‬‬
‫;)(‪String str = Console.ReadLine‬‬
‫‪ .5‬הוראות לפלט על המסך‪:‬‬
‫;)(‪Console.WriteLine‬‬
‫;)(‪Console.Write‬‬

‫עמוד ‪ 14‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫חלק א'‬
‫ענה על ארבע מבין השאלות ‪( 6-1‬ערך כל שאלה – ‪ 10‬נקודות)‪.‬‬
‫שאלה ‪1‬‬
‫כתוב קטע תוכנית שיקלוט ‪ 40‬מספרים חיוביים ושלמים‪:‬‬
‫(‪ 5‬נק') א‪ .‬עבור כל מספר תלת ספרתי שנקלט‪ ,‬יש להדפיס את סכום ספרותיו‪.‬‬
‫(‪ 5‬נק') ב‪ .‬על הקוד לחשב ולהדפיס את כמות המספרים הזוגיים שנקלטו ואת סכום המספרים האי זוגיים שנקלטו‪.‬‬

‫שאלה ‪2‬‬
‫למחלקה קופסה (תיבה) – ‪ Box‬יש ארבע תכונות‪:‬‬
‫צבע – ‪ ,color‬מטיפוס מחרוזת ‪String -‬‬ ‫‪‬‬
‫אורך – ‪ ,length‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫רוחב – ‪ ,width‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫גובה ‪ ,height -‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫במחלקה ‪ Box‬הוגדרה פעולה בונה (בנאי‪ )constructor ,‬המקבלת פרמטר של כל תכונה וקובעת את הערכים של‬
‫תכונות העצם‪ .‬המחלקה כוללת פעולות ‪ Get/Set‬לכל אחת מהתכונות‪.‬‬
‫(‪ 5‬נק') א‪ .‬כתוב פעולה בונה המייצרת קופסה בצבע ‪ ,color‬שכל הממדים שלה (אורך‪ ,‬רוחב וגובה) שווים ל‪.10 -‬‬
‫כותרת הפעולה‪:‬‬
‫)‪public Box(string color‬‬
‫(‪ 5‬נק') ב‪ .‬כתוב פעולה חיצונית המקבלת מערך הפניות לעצמים מסוג ‪ Box‬בשם ‪ arr‬ומחזירה את הצבע של‬
‫הקופסה במערך עם ערך הנפח הקטן ביותר‪ .‬כותרת הפעולה‪:‬‬
‫)‪public static string SmallBox(Box[] arr‬‬
‫הנחה‪ :‬כל תא במערך מכיל הפניה לעצם מסוג ‪ Box‬ואין תאים במערך שערכם שווה ל‪.null -‬‬

‫עמוד ‪ 15‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪3‬‬
‫במחלקה מיכל דלק ‪ Tank -‬קיימות התכונות הבאות‪:‬‬
‫קיבולת מיכל הדלק – ‪ ,capacity‬מטיפוס מספר שלם ‪int -‬‬ ‫‪‬‬
‫כמות דלק – ‪ ,amount‬מטיפוס שלם ‪int -‬‬ ‫‪‬‬
‫במחלקה ‪ Tank‬הוגדרה פעולה בונה (בנאי‪ )constructor ,‬המקבלת פרמטר של כל תכונה וקובעת את הערכים של‬
‫תכונות העצם‪ .‬המחלקה כוללת פעולות ‪ Get/Set‬לכל אחת מהתכונות‪:‬‬
‫(‪ 2‬נק') א‪ .‬כתוב פעולה בונה המקבלת את קיבולת מיכל הדלק ומייצרת מיכל ריק‪.‬‬
‫(‪ 2‬נק') ב‪ .‬כתוב במחלקה ‪ Tank‬פעולה פנימית המחזירה ‪ true‬אם במיכל יש דלק‪ ,‬אחרת הפעולה מחזירה ‪.false‬‬
‫(‪ 3‬נק') ג‪ .‬כתוב במחלקה ‪ Tank‬פעולה פנימית )‪.bool IsPossible (int num, char op‬‬
‫הפעולה תקבל את סוג המשימה ‪ op‬ואת כמות הדלק ‪.num‬‬
‫סוג המשימה יכול להיות אחד מהתווים '‪ '+‬או '‪.'-‬‬
‫אם ‪ op‬שווה ל‪ '+'-‬יש להוסיף כמות הדלק ‪ num‬למיכל‪.‬‬
‫אם ‪ op‬שווה ל‪ '-'-‬יש להוריד את כמות הדלק ‪ num‬מהמיכל‪.‬‬
‫אם אפשר לבצע את המשימה‪ ,‬הפעולה תחזיר ‪ ,true‬אחרת הפעולה תחזיר ‪.false‬‬

‫(‪ 3‬נק') ד‪ .‬כתוב פעולה חיצונית‬


‫)‪static int fill (Tank t1, Tank t2‬‬
‫הפעולה מחזירה את כמות הדלק המקסימלית שאפשר להעביר ממיכל ‪ t1‬למיכל ‪.t2‬‬

‫שאלה ‪4‬‬
‫מערך של מספרים שלמים נקרא "מושלם" אם הוא מקיים את התנאים הבאים‪:‬‬
‫גודל המערך הוא מספר אי‪-‬זוגי‬ ‫‪‬‬
‫בחצי הראשון של המערך יש רק מספרים חיובים חד ספרתיים‪.‬‬ ‫‪‬‬
‫האיבר המרכזי (אמצעי) הוא ‪.0‬‬ ‫‪‬‬
‫בחצי השני של המערך אין אף מספר חיובי חד‪-‬ספרתי‪.‬‬ ‫‪‬‬

‫המערך }‪ arr={1, 7,3, 0, 13, 131, 44‬הוא "מערך מושלם" מאחר שהוא עונה על כל ארבע הדרישות‪.‬‬
‫אורך המערך ‪ 7‬אי‪-‬זוגי‪.‬‬ ‫‪‬‬
‫החצי הראשון {‪ }1,7,3‬מכיל רק מספרים חד‪-‬ספרתיים‪.‬‬ ‫‪‬‬
‫החצי השני {‪ }13,131,44‬אינו מכיל מספרים חד‪-‬ספרתיים‪.‬‬ ‫‪‬‬
‫האיבר המרכזי הוא ‪.0‬‬ ‫‪‬‬

‫(‪ 8‬נק') א‪ .‬כתוב פעולה המקבלת מערך של מספרים שלמים ומחזירה ערך ‪ true‬אם הוא "מערך מושלם"‪ ,‬אם לא‬
‫הפעולה תחזיר ערך ‪.false‬‬
‫(‪ 2‬נק') ב‪ .‬מהי סיבוכיות הפעולה שבסעיף א'? הסבר את תשובתך‪.‬‬

‫עמוד ‪ 16‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪5‬‬
‫הגדרה‪ :‬מערך נקרא "מערך ממוין בסדר עולה" אם כל איבר (פרט לאיבר הראשון) גדול מהאיבר הקודם לו או‬
‫שווה לו‪ .‬נתונה פעולה ‪ What‬המקבלת מערך מספרים שלמים ממוין בסדר עולה‪:‬‬
‫)‪public static bool What(int[] arr, int num‬‬
‫{‬
‫;‪int k = 0‬‬
‫;‪int p = arr.Length-1‬‬
‫;‪int s‬‬
‫)‪while(k < p‬‬
‫{‬
‫;]‪s = arr[k] + arr[p‬‬
‫)‪if(s < num‬‬
‫{‬
‫;‪k++‬‬
‫}‬
‫‪else‬‬
‫{‬
‫)‪if(s > num‬‬
‫{‬
‫;‪p--‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;‪return true‬‬
‫}‬
‫}‬
‫}‬
‫;‪return false‬‬
‫}‬
‫(‪ 5‬נק') א‪ .‬נתון מערך }‪int[] arr={2, 4, 7, 12, 18‬‬
‫‪ .1‬עקוב בעזרת טבלת מעקב אחר הזימון )‪ What(arr, 10‬ורשום מה תחזיר הפעולה‪.‬‬
‫‪ .2‬תן דוגמה לפרמטר ‪ num‬כך שזימון )‪ What(arr, num‬יחזיר תוצאה שונה מהתוצאה שהתקבלה‬
‫בסעיף א‪.1‬‬
‫שים לב‪ :‬אין לשנות את המערך ‪!arr‬‬
‫(‪ 3‬נק') ב‪ .‬מה מבצעת הפעולה באופן כללי?‬
‫(‪ 2‬נק') ג‪ .‬מהי סיבוכיות זמן הריצה של הפעולה ‪ ?What‬הסבר את תשובתך‪.‬‬

‫עמוד ‪ 17‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪6‬‬
‫מחרוזת תהא תקינה אם מופיע בה התו '‪( '.‬נקודה) לפחות פעם אחת‪ ,‬אך לא ברציפות‪ ,‬ולא בתחילת המחרוזת או‬
‫בסופה‪ ,‬לדוגמה‪:‬‬
‫‪www.sport5.il LiOnel.Messi‬‬ ‫מחרוזות תקינות‪:‬‬
‫‪ABC efG. .ab.Cd‬‬ ‫מחרוזות שאינן תקינות‪abc..def :‬‬
‫כתוב פעולה המקבלת מחרוזת ומחזירה ‪ true‬אם מחרוזת תקינה‪ ,‬אם לא הפעולה תחזיר ‪.false‬‬

‫עמוד ‪ 18‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫חלק ב'‬
‫ענה על שתיים מבין השאלות ‪( 9-7‬ערך כל שאלה – ‪ 12‬נקודות)‪.‬‬

‫שאלה ‪7‬‬
‫הערה‪ :‬אפשר להניח שבשתי המחלקות קיימות פעולות ‪ .Get/Set‬אם השתמשת בפעולות נוספות‪ ,‬עליך לממש‬
‫את הפעולות!‬

‫(‪ 5‬נק') א‪ .‬נתונה המחלקה סוללה ( ‪ ,(Battery‬אשר לה ארבע תכונות‪:‬‬


‫יצרן – ‪ , manufacturer‬מטיפוס מחרוזת – ‪.string‬‬ ‫‪‬‬
‫גודל – ‪ , size‬מטיפוס תו ‪.char -‬‬ ‫‪‬‬
‫‪'A' ,‬‬ ‫'‪'B' , 'C' , 'D‬‬ ‫לדוגמה‪:‬‬
‫מתח חשמלי – ‪ ,volt‬מטיפוס ממשי – ‪.double‬‬ ‫‪‬‬
‫האם תקינה? – ‪ ,isNormal‬מטיפוס בוליאני – ‪.bool‬‬ ‫‪‬‬

‫‪ .1‬כתוב בנאי (‪ )constructor‬למחלקה ‪ Battery‬המקבל פרמטר של כל תכונה ומייצר עצם מסוג‬


‫‪ Battery‬בהתאם לערכי הפרמטרים‪.‬‬
‫‪ .2‬כתוב בנאי למחלקה ‪ Battery‬אשר מייצר עצם מסוג ‪ Battery‬תקין של היצרן "‪."Duracell‬‬
‫הבנאי מקבל מתח וגודל כפרמטרים‪.‬‬
‫(‪ 7‬נק') ב‪ .‬נתונה המחלקה חבילת‪-‬סוללות (‪ ,)BatteryPack‬אשר לה שתי תכונות‪:‬‬
‫מחיר – ‪ ,price‬מטיפוס ממשי‪.‬‬ ‫‪‬‬
‫סוללות – ‪ ,batteries‬מערך מטיפוס ‪ Battery‬באורך ‪.12‬‬ ‫‪‬‬

‫כתוב פעולה חיצונית ‪ ,CheckPrice‬אשר מקבלת כפרמטר עצם מטיפוס ‪ BatteryPack‬ומספר‬ ‫‪.1‬‬
‫ממשי ‪ sum‬שהוא הסכום שהלקוח מוכן לשלם‪.‬‬
‫אם הסכום שהלקוח מוכן לשלם גבוה ממחיר חבילת הסוללות‪ ,‬אזי אפשר לקנות את‬ ‫‪-‬‬
‫החבילה ולכן הפעולה תדפיס הודעה "אפשר לרכוש" ואת העודף שנשאר אחרי הקנייה‪.‬‬
‫אם הסכום שהלקוח מוכן לשלם נמוך ממחיר חבילת הסוללות‪ ,‬אזי אי אפשר לקנות את‬ ‫‪-‬‬
‫החבילה ולכן הפעולה תדפיס הודעה "אי אפשר לרכוש" ואת הסכום שחסר‪.‬‬
‫‪ -‬אם הסכום שהלקוח מוכן לשלם שווה למחיר חבילת הסוללות‪ ,‬אפשר לקנות את החבילה‬
‫ולכן הפעולה תדפיס הודעה "‪."O.K.‬‬
‫כתוב את הפעולה )‪ ,IsEnough(double v‬אשר מקבלת כפרמטר מספר ממשי ‪ v‬המציין מתח‬ ‫‪.2‬‬
‫חשמלי נדרש‪.‬‬
‫אם סכום המתחים החשמליים של כל הסוללות התקינות בחבילה קטן מ‪ ,v-‬הפעולה תחזיר‬
‫שקר‪ ,‬אחרת תחזיר אמת‪.‬‬

‫עמוד ‪ 19‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪8‬‬
‫נתונה המחלקה ‪ ,Driver‬המייצגת נהג שקבל רישיון נהיגה‪ .‬תכונות המחלקה הן‪:‬‬
‫שם ‪ ,name -‬מטיפוס מחרוזת –‪.string‬‬ ‫‪‬‬
‫תעודת זהות – ‪ ,id‬מטיפוס מחרוזת – ‪.string‬‬ ‫‪‬‬
‫שנת לידה – ‪ ,year‬מטיפוס מספר שלם – ‪.int‬‬ ‫‪‬‬
‫מספר מבחני נהיגה כולל – ‪ ,tests‬מטיפוס מספר שלם – ‪.int‬‬ ‫‪‬‬

‫במחלקה הוגדרה פעולה בונה (‪ )constructor‬המקבלת פרמטר לכל תכונה ויוצרת עצם מסוג ‪ ,Driver‬המכיל את‬
‫הערכים האלו בתכונות‪.‬‬
‫כמו כן יש פעולות ‪ Get/Set‬לכל אחת מהתכונות‪.‬‬

‫(‪ 5‬נק') א‪ .‬עקוב אחרי קטע התוכנית‪ ,‬לכל עצם רשום את השמות של כל התכונות שלו‪ ,‬את הערכים של כל‬
‫התכונות ואת השינויים שהיו בהם‪ ,‬ורשום את הפלט‪.‬‬
‫;]‪Driver [] d=new Driver[5‬‬
‫‪d[0] = new‬‬ ‫;)‪Driver("Yossi", "1234", 2000, 3‬‬
‫‪d[1] = new‬‬ ‫;)‪Driver("Avi", "7596", 1980, 7‬‬
‫‪d[2] = new‬‬ ‫;)‪Driver("Sara", "6051", 1995, 1‬‬
‫‪d[3] = new‬‬ ‫;)‪Driver("Dani", "4472", 1998, 2‬‬
‫;]‪d[4] = d[3‬‬

‫;‪int m = 0, s = 0‬‬
‫;)(‪int x = d[1].GetTests‬‬
‫;)‪d[1].SetTests(d[3].GetTests()+2‬‬
‫;)‪d[3].SetTests(x‬‬

‫)‪for (int i = 0; i < d.Length; i++‬‬


‫{‬
‫;))(‪Console.WriteLine (d[i].GetTests‬‬
‫;)(‪s=s + d[i].GetTests‬‬
‫)‪if (d[i].GetYear() > 1995‬‬
‫;‪m++‬‬
‫}‬
‫;)‪Console.WriteLine ((double)s/d.length‬‬
‫;)‪Console.WriteLine (m‬‬

‫(‪ 7‬נק') ב‪ .‬כתוב פעולה המקבלת מערך של עצמים מסוג ‪ ,Driver‬ומספר שלם ‪ num‬ומחזירה מערך הכולל את‬
‫השמות של הנהגים שעברו את הטסט בפחות מ‪ num -‬מבחנים‪.‬‬
‫עמוד ‪ 20‬מתוך ‪25‬‬
‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪9‬‬
‫נתונות ההגדרות הבאות‪:‬‬
‫"פָּ לִ ינְ ְדרוֹם" הוא כל רצף תווים שקריאתו מימין לשמאל ומשמאל לימין היא זהה‪.‬‬
‫דוגמאות לפלינדרום‪:‬‬
‫‪ABCCBA, 12A21, a0X$11$X0a‬‬
‫"פלינדרום גדולים"‪ ,‬הוא פלינדרום המורכב רק מאותיות ‪( A..Z‬שאר התווים לא משנה)‬
‫לדוגמה‪:‬‬
‫‪fA%B##rkC1^BAdd‬‬
‫הוא פלינדרום גדולים‪.‬‬

‫(‪ 6‬נק') א‪ .‬כתוב פעולה המקבלת מחרוזת ומחזירה ‪ true‬אם המחרוזת היא פלינדרום גדולים‪ ,‬אחרת הפעולה‬
‫תחזיר ‪.false‬‬
‫(‪ 6‬נק') ב‪ .‬כתוב פעולה המקבלת מערך מחרוזות ומחזירה את המחרוזת הארוכה ביותר שהיא "פלינדרום‬
‫גדולים"‪.‬‬
‫אפשר להניח שיש לפחות מחרוזת אחת שהיא פלינדרום גדולים‪.‬‬

‫עמוד ‪ 21‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬

‫חלק ג'‬
‫ענה על שתיים מבין השאלות ‪( 13-10‬ערך כל שאלה – ‪ 18‬נקודות)‪.‬‬

‫שאלה ‪10‬‬
‫נתונות ההגדרות הבאות‪:‬‬
‫"דרגת הזוגיות" של מספר שלם שהיא כמות הספרות הזוגיות במספר‪.‬‬ ‫‪‬‬
‫לדוגמה‪:‬‬
‫"דרגת הזוגיות" של מספר ‪ 12347‬היא ‪.2‬‬
‫"דרגת הזוגיות" של מספר ‪ 1860‬היא ‪.3‬‬
‫"דרגת הזוגיות" של מספר ‪ 0‬היא ‪.1‬‬
‫"דרגת העל" של מערך חד‪-‬ממדי של מספרים שלמים היא "דרגת הזוגיות" הגבוהה ביותר שיש בו‪.‬‬ ‫‪‬‬
‫מערך חד‪-‬ממדי של מספרים שלמים נקרא "מערך מסודר לפי דרגות הזוגיות" אם הוא כולל את כל דרגות‬ ‫‪‬‬
‫הזוגיות מ‪ 0 -‬עד "דרגת על" וכל דרגה מופיעה בו בדיוק פעם אחת‪.‬‬

‫(‪ 5‬נק') א‪ .‬כתוב פעולה אשר מקבלת מספר שלם ומחזירה את "דרגת הזוגיות" שלו‪.‬‬
‫(‪ 5‬נק') ב‪ .‬כתוב פעולה אשר מקבלת מערך חד‪-‬ממדי ומחזירה את "דרגת העל" שלו‪.‬‬
‫(‪ 5‬נק') ג‪ .‬כתוב פעולה אשר מקבלת מערך חד‪-‬ממדי‪ .‬הפעולה מחזירה ‪ true‬אם המערך מסודר לפי דרגות‬
‫הזוגיות‪ ,‬אחרת הפעולה מחזירה ‪.false‬‬
‫(‪ 3‬נק') ד‪ .‬מהן סיבוכיות זמן הריצה של כל הפעולות שכתבת? הסבר את תשובתך‪.‬‬

‫עמוד ‪ 22‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪11‬‬
‫(‪ 9‬נק') א‪ .‬לפניך הפעולה ‪ One‬המקבלת מערך של מספרים שלמים‪ ,‬ושני מספרים נוספים‪:‬‬

‫)‪public static void One (int[] a, int start, int stop‬‬


‫{‬
‫)‪if(start < stop‬‬
‫{‬
‫;)‪One(a, start+1, stop‬‬
‫;]‪a[start]=a[start]+a[start+1‬‬
‫}‬
‫}‬
‫‪ .1‬עקוב אחר זימון (‪ One (b, 0, b.Length-1‬עבור המערך‪:‬‬

‫‪b:‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪16‬‬ ‫‪20‬‬ ‫‪30‬‬

‫ציין מה יהיה תוכן איברי המערך בסיום ביצוע הפעולה‪.‬‬

‫‪ .2‬מהי מטרת הפעולה ‪ ?One‬בתשובה יש להתייחס למערך שפעולה מקבלת כפרמטר‪.‬‬

‫(‪ 9‬נק') ב‪ .‬לפניך פעולה אחרת‪ ,Two ,‬המקבלת מערך של מספרים שלמים‪ ,‬ושני מספרים נוספים‪.‬‬
‫)‪public static void Two (int[] a, int start, int stop‬‬
‫{‬
‫)‪if(start < stop‬‬
‫{‬
‫;]‪a[start]=a[start]+a[start+1‬‬
‫;)‪Two (a, start+1, stop‬‬
‫}‬
‫}‬
‫‪ .1‬אחרי זימון )‪ Two(c, 0, c.Length-1‬התוכן של מערך ‪ c‬הוא‪:‬‬

‫‪c:‬‬ ‫‪10‬‬ ‫‪8‬‬ ‫‪12‬‬ ‫‪20‬‬ ‫‪15‬‬ ‫‪10‬‬

‫מה היה התוכן של ‪ c‬לפני ביצוע הזימון?‬

‫‪ .2‬מהי מטרת הפעולה ‪ ?Two‬בתשובה יש להתייחס למערך שהפעולה מקבלת כפרמטר‪.‬‬

‫עמוד ‪ 23‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪12‬‬
‫כדי לממש מערכת לניהול משימות הגדירו את המחלקה ‪( Task‬משימה) שיש לה ארבע תכונות‪:‬‬
‫כותרת המשימה ‪ ,title -‬מטיפוס מחרוזת – ‪.string‬‬ ‫‪‬‬
‫מספר הדקות הנדרש לסיום ביצוע המשימה ‪ ,minutes -‬מטיפוס מספר שלם – ‪.int‬‬ ‫‪‬‬
‫דרגת העדיפות של המשימה ‪ – priority -‬שהיא מספר שלם חיובי‪( int -‬מספר גבוה יותר מייצג דרגת עדיפות‬ ‫‪‬‬
‫גבוהה יותר)‪.‬‬
‫האם המשימה בוצעה? ‪ IsComplete -‬מטיפוס בוליאני ‪( bool‬הערך ‪ false‬משמעותו שהמשימה לא‬ ‫‪‬‬
‫הסתיימה)‪.‬‬

‫ניתן להניח כי פעולות ‪ Set ,Get‬הוגדרו לכל התכונות‪.‬‬

‫כדי לנהל את המשימות הוגדרה המחלקה ‪ TaskManager‬המכילה שתי תכונות‪:‬‬


‫מערך של משימות – ‪ - tasks‬בגודל ‪ 100‬של ‪.Task‬‬ ‫‪‬‬
‫מספר ‪ numOfTasks‬המציין את מספר המשימות שיש כרגע‪.‬‬ ‫‪‬‬
‫בכל הפעולות במחלקה זו עליכם לוודא שהערך ‪ numOfTasks‬מעודכן‪.‬‬

‫(‪ 3‬נק') א‪ .‬כתוב במחלקה ‪ Task‬את הפעולה )‪:int DoIt(int num‬‬


‫הפעולה מקבלת מספר דקות ‪ num‬לביצוע המשימה‪ .‬אם הפרמטר ‪ num‬גדול ממספר הדקות הנדרש‬
‫לביצוע המשימה‪ ,‬הפעולה מחזירה את מספר הדקות ה"עודפות" (כלומר הדקות מעבר למה שנדרש)‪,‬‬
‫אחרת היא מחזירה ‪.0‬‬
‫הפעולה גם מעדכנת את התכונות ‪ minutes‬ו‪ isComplete -‬בהתאם‪.‬‬

‫(‪ 5‬נק') ב‪ .‬כתוב במחלקה ‪ TaskManager‬את הפעולה )‪:bool AddTask(Task t‬‬


‫הפעולה מקבלת משימה חדשה ‪ t‬ומכניסה אותה למקום הראשון הפנוי במערך המשימות‪ ,‬אם אין‬
‫מקום‪ ,‬הפעולה תחפש משימה שהסתיימה כבר ותכניס במקומה את המשימה החדשה‪.‬‬
‫הפעולה תחזיר ‪ true‬אם המשימה הוכנסה‪ ,‬אחרת הפעולה תחזיר ‪.false‬‬
‫הפעולה גם תעדכן את התכונה ‪ numOfTasks‬בהתאם‪.‬‬

‫(‪ 5‬נק') ג‪ .‬כתוב במחלקה ‪ TaskManager‬את הפעולה ) (‪.int ImportantTask‬‬


‫הפעולה מחזירה את המיקום במערך ‪ tasks‬של המשימה בעדיפות הגבוהה ביותר שהביצוע שלה עוד‬
‫לא הסתיים‪ .‬אם יש כמה פעולות בעדיפות הגבוהה ביותר שלא הושלמו‪ ,‬הפעולה תחזיר מיקום‬
‫(אינדקס) של אחת מהן‪ .‬אם אין אף משימה שביצועה עדיין לא הסתיים‪ ,‬הפעולה תחזיר את הערך ‪.-1‬‬

‫(‪ 5‬נק') ד‪ .‬כתוב במחלקה ‪ TaskManager‬את הפעולה )‪:void Work(int num‬‬


‫הפעולה מקבלת מספר שלם המייצג את הזמן בדקות שהוקצה לעבודה‪ .‬הפעולה תשקיע את הזמן‬
‫בביצוע משימה כלשהי שעדיין לא הסתיימה ובעדיפות הגבוהה ביותר שיש במערך ‪.tasks‬‬
‫הפעולה תעדכן את תכונות המשימה בהתאם‪ .‬אם אחרי ביצוע המשימה יישאר זמן‪ ,‬הפעולה תמצא‬
‫משימה נוספת בעדיפות הגבוהה ביותר שעוד לא הסתיימה ותטפל בה‪.‬‬

‫הפעולה תסיים את העבודה כאשר יסתיים ביצוע של כל המשימות או יגמר הזמן שהוקצה לעבודה‪.‬‬

‫עמוד ‪ 24‬מתוך ‪25‬‬


‫שאלון ‪ ,97104‬אביב תשפ"א – ‪ – 2021‬מועד א'‬
‫שאלה ‪13‬‬
‫נתונה הפעולה הרקורסיבית‪:‬‬
‫)‪public static bool What (string s1, string s2‬‬
‫{‬
‫)‪if(s1.Length != s2.Length‬‬
‫;‪return false‬‬
‫)‪if(s1.Length == 0‬‬
‫;‪return true‬‬
‫;)]‪int place = s2.IndexOf(s1[0‬‬
‫)‪if(place < 0‬‬
‫;‪return false‬‬
‫‪else‬‬
‫{‬
‫;)‪string a = s2.Substring(0, place‬‬
‫;)‪string b = s2.Substring(place+1‬‬
‫;)‪string c = String.Concat(a, b‬‬
‫;)‪return What(s1.Substring(1),c‬‬
‫}‬
‫}‬
‫(‪ 6‬נק') א‪ .‬עקוב אחרי זימון הפעולה )‪ What(s1, s2‬עבור "‪ s2= "oeloh" ,s1="hello‬ורשום מה תהיה תוצאת‬
‫הזימון‪.‬‬
‫(‪ 3‬נק') ב‪ .‬תן דוגמה למחרוזת ‪ s3‬כך שתוצאת הזימון )‪ What("hello", s3‬תהיה שונה מהתוצאה של סעיף א‪.‬‬
‫(‪ 3‬נק') ג‪ .‬מה מבצעת הפעולה ‪ What‬באופן כללי?‬
‫(‪ 6‬נק') ד‪ .‬כתוב את הפעולה ‪ What‬המבצעת אותה משימה בצורה לא רקורסיבית‪.‬‬

‫בהצלחה!‬
‫©כל הזכויות שמורות למה"ט‬

‫עמוד ‪ 25‬מתוך ‪25‬‬


‫מחוון לשאלון ‪ 97104‬אלגוריתמיקה ותכנות– מועד א' אביב ‪2021‬‬

‫הערות‬ ‫ניקוד‬ ‫תת‪-‬‬ ‫סעיף‬ ‫שאלה‬ ‫חלק‬


‫סעיף‬
‫לולאת ‪ 2-‬נקודה‬ ‫‪‬‬
‫פירוק ספרות והדפסה – ‪3‬‬ ‫‪‬‬ ‫‪5‬‬ ‫‪-‬‬ ‫א‬
‫נקודות‬
‫‪1‬‬
‫איפוס מונה‪/‬צובר – ‪1‬‬ ‫‪‬‬
‫נקודות‬ ‫‪5‬‬ ‫ב‬
‫כל חישוב – ‪ 2‬נקודות‬ ‫‪‬‬
‫כותרת פעולה – ‪ 1‬נקודה‬ ‫‪‬‬ ‫‪5‬‬ ‫‪-‬‬ ‫א‬
‫עדכון תכונות – ‪ 4‬נקודות‬ ‫‪‬‬
‫‪2‬‬
‫כותרת פעולה – ‪ 1‬נקודה‬ ‫‪‬‬ ‫‪5‬‬ ‫‪-‬‬ ‫ב‬
‫לולאה לבדיקה ‪ 4 -‬נקודות‬ ‫‪‬‬
‫‪2‬‬ ‫‪-‬‬ ‫א‬ ‫חלק א'‪ 40 :‬נקודות‪.‬‬
‫‪2‬‬ ‫‪-‬‬ ‫ב‬ ‫יש לענות על ‪ 4‬מתוך ‪6‬‬
‫‪3‬‬ ‫שאלות‪.‬‬
‫‪3‬‬ ‫‪-‬‬ ‫ג‬ ‫כל שאלה ‪ 10‬נקודות‪.‬‬
‫‪3‬‬ ‫‪-‬‬ ‫ד‬
‫‪ ‬בדיקה של כל תנאי – ‪2‬‬ ‫‪8‬‬ ‫‪-‬‬ ‫א‬
‫נקודות‬ ‫‪4‬‬
‫בלי הסבר – לא לתת נקוד‬ ‫‪2‬‬ ‫‪-‬‬ ‫ב‬
‫מעקב‬ ‫‪4‬‬ ‫‪1‬‬
‫אם אין טבלה – לא לתת נקודות‬ ‫א‬
‫‪1‬‬ ‫‪2‬‬ ‫‪5‬‬
‫‪3‬‬ ‫‪-‬‬ ‫ב‬
‫בלי הסבר – לא לתת נקוד‬ ‫‪2‬‬ ‫‪-‬‬ ‫ג‬
‫‪ ‬כותרת הפעולה – ‪ 1‬נקודה‬
‫‪10‬‬ ‫‪-‬‬ ‫‪6‬‬
‫‪ ‬כל בדיקה – ‪ 3‬נקודות‬
‫‪2‬‬ ‫‪1‬‬
‫א‬
‫‪3‬‬ ‫‪2‬‬ ‫‪7‬‬
‫‪3‬‬ ‫‪1‬‬
‫ב‬
‫‪4‬‬ ‫‪2‬‬
‫מעקב‬ ‫חלק ב'‪ 24 :‬נקודות‪.‬‬
‫אם אין ציון ערכים של תכונות –‬ ‫‪5‬‬ ‫‪-‬‬
‫לא לתת נקודות‬ ‫יש לענות על ‪ 2‬מתוך ‪3‬‬
‫‪8‬‬ ‫שאלות‪.‬‬
‫‪ ‬כותרת פעולה – ‪ 1‬נקודה‬ ‫‪7‬‬ ‫‪-‬‬ ‫כל שאלה ‪ 12‬נקודות‪.‬‬
‫‪ ‬לולאה לבדיקה ‪ 6 -‬נקודות‬
‫‪ ‬כותרת הפעולה – ‪ 1‬נקודה‬ ‫‪6‬‬ ‫‪-‬‬ ‫א‬
‫‪ ‬לולאת בדיקה – ‪ 5‬נקודות‬
‫‪9‬‬
‫‪ ‬כותרת הפעולה – ‪ 1‬נקודה‬
‫‪6‬‬ ‫‪-‬‬ ‫ב‬
‫‪ ‬לולאת בדיקה – ‪ 5‬נקודות‬
‫‪5‬‬ ‫‪-‬‬ ‫א‬
‫‪5‬‬ ‫‪-‬‬ ‫ב‬ ‫חלק ג'‪ 36 :‬נקודות‪.‬‬
‫‪10‬‬
‫‪5‬‬ ‫‪-‬‬ ‫ג‬
‫בלי הסבר – לא לתת נקודות‬ ‫‪3‬‬ ‫‪-‬‬ ‫ד‬ ‫יש לענות על ‪ 2‬מתוך ‪4‬‬
‫שאלות‪.‬‬
‫בלי מעקב – לא לתת נקודות‬ ‫‪6‬‬ ‫‪1‬‬
‫א‬ ‫כל שאלה ‪ 18‬נקודות‪.‬‬
‫‪3‬‬ ‫‪2‬‬
‫בלי מעקב – לא לתת נקודות‬ ‫‪6‬‬ ‫‪1‬‬ ‫‪11‬‬
‫ב‬
‫‪3‬‬ ‫‪2‬‬
‫עמוד ‪ 1‬מתוך ‪2‬‬
‫‪3‬‬ ‫‪-‬‬ ‫א‬
‫‪5‬‬ ‫‪-‬‬ ‫ב‬
‫‪12‬‬
‫‪5‬‬ ‫‪-‬‬ ‫ג‬
‫‪5‬‬ ‫‪-‬‬ ‫ד‬
‫בלי מעקב – לא לתת נקודות‬ ‫‪6‬‬ ‫‪-‬‬ ‫א‬
‫‪3‬‬ ‫‪-‬‬ ‫ב‬
‫‪13‬‬
‫‪3‬‬ ‫‪-‬‬ ‫ג‬
‫‪6‬‬ ‫ד‬

‫עמוד ‪ 2‬מתוך ‪2‬‬


‫המכון הממשלתי להכשרה בטכנולוגיה ובמדע‬
‫מחלקת הבחינות‬
‫__________________________________________________________‬

‫דחוף!‬
‫לכבוד‬
‫המכללות ובתי הספר‬
‫להכשרת הנדסאים וטכנאים‬

‫הנדון‪ :‬הבהרה לבחינת גמר ממלכתית‬


‫שעת העברה בדוא"ל‪10.26 :‬‬ ‫תאריך בחינה‪:‬‬
‫‪1.3.21‬‬
‫הנדסאים – הנדסת תוכנה‬ ‫מגמה‪:‬‬

‫‪ - # C‬ו ‪ java‬אלגוריתמיקה ותכנות (סביבת‬ ‫שם הבחינה‪:‬‬

‫‪97104‬‬ ‫סמל הבחינה‬

‫שאלה ‪: 2‬‬

‫הנוסחה לחישוב נפח תיבה ‪:‬‬


‫אורך ‪ x‬רוחב ‪ x‬גובה‬

‫בברכה‪,‬‬
‫מחלקת בחינות‬
‫גיבוי ישלח בשלב מאוחר יותר באמצעות פקס‪.‬‬
‫‪)01/07( 01-3-07‬‬
‫__________________________________________________________________________‬
‫בית ליאו גולדברג‪ ,‬דרך מנחם בגין ‪ ,86‬תל אביב‪ ,‬ת‪.‬ד‪ ,36049 .‬מיקוד ‪67138‬‬
‫מס' הטלפון של מח' הבחינות ‪ , 03-5634257/109/229/259‬מס' פקס ‪03-5613523‬‬

You might also like