הוראות לנבחן

‫סוג בחינה‪ :‬בחינת מתכונת‬
‫מועד הבחינה‪ :‬קיץ תשע"א ‪2011‬‬
‫מספר שאלון‪899205 :‬‬
‫ביה"ס נזירות המושיע‬
‫נצרת‬
‫מדעי המחשב‬
‫‪ 2‬יחידות לימוד (השלמה ל‪ 5 -‬יח"ל)‬
‫הוראות לנבחן‬
‫א‪.‬‬
‫משך הבחינה‪ :‬שלוש שעות‬
‫ב‪.‬‬
‫מבנה השאלון ומפתח הערכה‪ :‬בשאלון זה שני פרקים‪.‬‬
‫בפרק זה יש ארבע שאלות ‪,‬‬
‫פרק ראשון –‬
‫(‪)25 X 2‬‬
‫מהן יש לענות על שתיים‪- .‬‬
‫פרק שני‬
‫ג‪.‬‬
‫–‬
‫בפרק זה יש ארבע שאלות‪,‬‬
‫מהן יש לענות על שתיים‪- .‬‬
‫(‪)25 X 2‬‬
‫‬‫‪-‬‬
‫‪ 50‬נקודות‪.‬‬
‫‪ 50‬נקודות‪.‬‬
‫חומר עזר מותר בשימוש‪ :‬כל חומר עזר‪ ,‬חוץ ממחשב הניתן לתכנות‪.‬‬
‫כתוב במחברת הבחינה בלבד‪ ,‬בעמודים נפרדים‪ ,‬כל מה שברצונך לכתוב כטיוטה (ראשי‬
‫פרקים‪ ,‬חישובים וכדומה)‪ .‬רשום טיוטה בראש כל עמוד טיוטה‪ .‬רישום טיוטות‬
‫כלשהן על דפים שמחוץ למחברת הבחינה עלול לגרום לפסילת הבחינה!‬
‫ההנחיות בשאלון זה מנוסחות בלשון זכר ומכוונות לנבחנים ולנבחנות כאחד‪.‬‬
‫בהצלחה!‬
‫בחינת מתכונת‬
‫מדעי המחשב‪ ,‬קיץ תשע"א‪ ,‬מספר ‪899205‬‬
‫פרק ראשון (‪ 50‬נקודות)‬
‫ענה על שתיים מהשאלות ‪( 4 - 1‬לכל שאלה – ‪ 55‬נקודות)‬
‫שאלה ‪1‬‬
‫תור "סדרתי" הוא תור שאורכו זוגי שמורכב ממספרים שלמים – כאשר בחצי הראשון האיברים‬
‫מסודרים בסדר עולה ובחצי השני האיברים מסודרים בסדר יורד‪.‬‬
‫כתוב שיטה שמקבלת תור ומחזירה 'אמת ‪ 'true‬אם התור הוא "סדרתי"‪ ,‬אחרת‬
‫א‪.‬‬
‫השיטה מחזירה 'שקר ‪ 12( .'false‬נקודות)‬
‫בסעיף זה יש לשמור על התור המקורי!!‬
‫כתוב שיטה שמקבלת כפרמטר תור "סדרתי" ומחזירה תור חדש שאיבריו מסודרים‬
‫באופן הבא‪ :‬האיבר הראשון מהתור הסדרתי ואז האיבר האחרון‪ ,‬האיבר השני‬
‫מהתור הסדרתי ואז האיבר לפני האחרון וכן הלאה עד שהתור ה"סדרתי" מתרוקן‪.‬‬
‫(‪ 13‬נקודות)‬
‫בסעיף זה לא צריך לשמור על התור המקורי!!‬
‫ב‪.‬‬
‫לדוגמא‪:‬‬
‫אם התור הסדרתי מורכב מהאיברים הבאים‪:‬‬
‫‪-12‬‬
‫‪-1‬‬
‫‪7‬‬
‫‪10‬‬
‫‪17 40‬‬
‫‪5‬‬
‫‪3‬‬
‫‪Q‬‬
‫יוחזר התור הבא‪:‬‬
‫‪-12‬‬
‫‪3‬‬
‫‪-1‬‬
‫‪5‬‬
‫‪40 10 17 7‬‬
‫הערה‪:‬‬
‫‪-1-‬‬
‫‪‬‬
‫ניתן להשתמש במבני עזר נוספים‪.‬‬
‫‪‬‬
‫בסעיף א' יש לשמור על התור המקורי‪.‬‬
‫‪/‬המשך מעבר לדף‪/‬‬
‫‪Q1‬‬
‫מדעי המחשב‪ ,‬קיץ תשע"א‪ ,‬מספר ‪899205‬‬
‫‪‬‬
‫בחינת מתכונת‬
‫בסעיף ב' לא צריך לשמור על התור המקורי‪.‬‬
‫שאלה ‪5‬‬
‫כתוב שיטה שמקבלת כפרמטר עץ בינארי של שלמים ‪ ,bt‬על השיטה להחזיר את הערך 'אמת‬
‫‪ 'true‬אם בכל רמה "הזוגיות القيمة الزوجية" משתנה‪ .‬כלומר‪ ,‬אם ערך צומת כלשהי היה זוגי‪ ,‬על‬
‫הבנים להיות אי‪-‬זוגיים ואם ערך הצומת היה אי‪-‬זוגי על הבנים להיות זוגיים‪ .‬אחרת תחזיר‬
‫השיטה הערך 'שקר ‪'false‬‬
‫דוגמא לעץ בינרי לפי הגדרת השאלה‪:‬‬
‫‪10‬‬
‫‪-5‬‬
‫‪-3‬‬
‫‪18‬‬
‫‪10‬‬
‫‪0‬‬
‫‪-7‬‬
‫‪13‬‬
‫כותרת השיטה‪public static bool Check(BinTreeNode<int> bt) :‬‬
‫‪-2-‬‬
‫‪/‬המשך מעבר לדף‪/‬‬
‫מדעי המחשב‪ ,‬קיץ תשע"א‪ ,‬מספר ‪899205‬‬
‫בחינת מתכונת‬
‫שאלה ‪3‬‬
‫חברת כוח‪-‬אדם בשם "מצא עבודה" רוצה לפתח מערכת לניהול שיבוץ מועמדים למשרות עבודה‬
‫(إيجاد فرص عمل وتوظيف)‪ .‬לשם כך היא פיתחה את המחלקות הבאות‪:‬‬
‫מחלקה בשם מועמד ‪ Candidate‬שהוגדרו בה התכונות הבאות‪:‬‬
‫‪-‬‬
‫מספר מועמד ‪ :cNum‬מספר שלם ‪int‬‬
‫‪-‬‬
‫שם מועמד ‪ :cName‬מחרוזת ‪string‬‬
‫‪-‬‬
‫רשימת (מערך) משרות לחיפוש ‪( jobs‬מערך של מחרוזות ‪)string‬‬
‫לכל מועמד יכולים להיות לכל היותר ‪ 10‬משרות לחיפוש‪.‬‬
‫מחלקה בשם משאבי אנוש ‪( HumanResources‬القوى العاملة) שהוגדרו בה התכונות הבאות‪:‬‬
‫‪-‬‬
‫שם המחלקה ‪ :HRName‬מחרוזת ‪string‬‬
‫‪-‬‬
‫רשימת (מערך) מועמדים ‪.arr‬‬
‫מחלקת משאבי אנוש יכולה להכיל ‪ 500‬מועמדים לכל היותר‪.‬‬
‫א‪ .‬שרטט תרשים ‪ UML‬שמתאר את המחלקות הנתונות‪ 2( .‬נק')‬
‫ב‪ .‬כתוב את המחלקה מועמד ‪ .Candidate‬יש לכתוב את כותרת המחלקה‪ ,‬התכונות שלה‬
‫ואת השיטה הבונה‪ 4( .‬נק')‬
‫ג‪ .‬כתוב את המחלקה משאבי אנוש ‪ .HumanResources‬יש לכתוב את כותרת המחלקה‪,‬‬
‫התכונות שלה ואת השיטה הבונה‪ 4( .‬נק')‬
‫ד‪ .‬כתוב שיטה בשם ‪ toString‬שמחזירה מחרוזת המתארת את המועמד‪ .‬יש להחזיר את‬
‫פרטי המועמד‪ ,‬כמו גם את רשימת המשרות הפנויות שלו‪ 4( .‬נק')‬
‫ה‪ .‬כתוב שיטה בשם ‪ Check‬שמקבלת כפרמטר משרה פנויה (כמחרוזת ‪ .)string‬על השיטה‬
‫להחזיר את הערך ‪( 1‬אחד) אם המועמד יכול להתקבל למשרה זו (אם היא קיימת‬
‫ברשימת המשרות לחיפוש שלו)‪ .‬ואת הערך ‪( 0‬אפס) אחרת‪ 5( .‬נק')‬
‫ו‪ .‬כתוב שיטה בשם ‪ CheckAll‬שמקבלת כפרמטר משרה פנויה (כמחרוזת ‪ .)string‬על‬
‫השיטה להחזיר את כמות המועמדים שהמשרה מתאימה להם‪ 6( .‬נק')‬
‫הנחות‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪-3-‬‬
‫ניתן להניח קיום שיטות מעדכנות ושיטות מאחזרות )‪ )Set/Get‬לכל התכונות‪.‬‬
‫עבור כל שיטה יש לרשום באופן ברור איפה היא נמצאת (באיזה מחלקה)‪.‬‬
‫עבור כל שיטה יש לרשום באופן ברור את טענת הכניסה וטענת היציאה‪.‬‬
‫ניתן להשתמש בשיטות נוספות‪ .‬במקרה זה יש לרשום את הקוד שלה ולכתוב באיזה מחלקה‬
‫היא נמצאת‪.‬‬
‫‪/‬המשך מעבר לדף‪/‬‬
‫בחינת מתכונת‬
899205 ‫ מספר‬,‫ קיץ תשע"א‬,‫מדעי המחשב‬
4 ‫שאלה‬
:‫נתונות השיטות הבאות‬
public static bool Func3(int[] arr, int p)
{
if (p == 0) return true;
if (arr[p] < arr[p - 1]) return false;
return Func3(arr, p - 1);
}
public static bool Func2(int[]arr1, int p1, int[]arr2)
{
if (p1 == arr1.Length)
return true;
if (arr1[p1] != arr2[arr2.Length-1-p1])
return false;
return Func2(arr1, p1 + 1, arr2);
}
public static bool Func1(int[]arr1, int[]arr2)
{
if (arr1.Length == arr2.Length)
return Func2(arr1, 0, arr2) && Func3(arr1,arr1.Length-1);
return false;
}
‫ ודוגמא אחרת‬true ‫? תן דוגמא למערך עבורו יוחזר הערך‬func3 ‫ מה מבצעת השיטה‬.‫א‬
)‫ נקודות‬8( .false ‫למערך עבורו יוחזר הערך‬
‫ ודוגמא‬true ‫? תן דוגמא לשני מערכים עבורם יוחזר הערך‬func2 ‫ מה מבצעת השיטה‬.‫ב‬
)‫ נקודות‬10( .false ‫אחרת לשני מערכים עבורם יוחזר הערך‬
)‫ נקודות‬7( ?func1 ‫ מה מבצעת השיטה‬.‫ג‬
/‫המשך מעבר לדף‬/
-4-
‫בחינת מתכונת‬
‫מדעי המחשב‪ ,‬קיץ תשע"א‪ ,‬מספר ‪899205‬‬
‫פרק בחירה‬
‫תכנות מונחה עצמים ‪Object Oriented Programming‬‬
‫ענה על שתיים מהשאלות ‪( 8 - 5‬לכל שאלה – ‪ 55‬נקודות)‬
‫שאלה ‪5‬‬
‫לפניך ‪ UML‬חלקי‪:‬‬
‫‪Class A‬‬
‫;‪private int x‬‬
‫;‪protected int y‬‬
‫)‪A(int x‬‬
‫)(‪void f1‬‬
‫)(‪virtual void f2‬‬
‫‪Class B‬‬
‫‪Class C‬‬
‫;‪private int w‬‬
‫;‪protected int z‬‬
‫)‪C(int x, int y, int w‬‬
‫)(‪override void f2‬‬
‫)(‪virtual void f3‬‬
‫‪Class B2‬‬
‫‪Class B1‬‬
‫;‪private int z1‬‬
‫;‪private int z1‬‬
‫)(‪override void f2‬‬
‫)(‪override int f3‬‬
‫)(‪override void f2‬‬
‫א‪ .‬איזה עיקרון‪ ,‬של תכנות מונחה עצמים‪ ,‬השתמשו בו כאשר במחלקה ‪ A‬כתבו שתי שיטות‬
‫בונות? הסבר‪ 2( ...‬נק')‬
‫ב‪ .‬איך זה יכול להיות שמחלקה ‪ B‬יורשת ממחלקה ‪ A‬ולא מופיעה בה השיטה ‪ ?f2‬הסבר‪3( ...‬‬
‫נק')‬
‫ג‪ .‬האם ניתן להשתמש בשיטה הבונה ברירת המחדל (‪ )default c'tor‬במחלקה ‪ ?B‬הסבר‪...‬‬
‫(‪ 3‬נק')‬
‫‪-5-‬‬
‫‪/‬המשך מעבר לדף‪/‬‬
‫בחינת מתכונת‬
‫מדעי המחשב‪ ,‬קיץ תשע"א‪ ,‬מספר ‪899205‬‬
‫)‪public C(int x, int y, int w‬‬
‫{‬
‫;‪this.x=x‬‬
‫;‪this.y=y‬‬
‫;‪this.w=w‬‬
‫}‬
‫ד‪ .‬מימוש הפעולה הבונה במחלקה ‪ C‬הוא כזה‪:‬‬
‫האם הפעולה תקינה? הסבר‪ 3( ...‬נק')‬
‫ה‪ .‬מימוש הפעולה ‪ f3‬במחלקה ‪ B‬הוא כזה‪:‬‬
‫)(‪public void f3‬‬
‫{‬
‫)‪console.Write(this.x + this.y + this.z‬‬
‫}‬
‫האם הפעולה תקינה? הסבר‪ 3( ...‬נק')‬
‫ו‪ .‬כתוב תוכנית ראשית (‪ )MAIN‬ובצע את ההוראות הבאות‪:‬‬
‫‪ .1‬יצירת מערך בגודל ‪ 5‬ובו יוכנסו חמשת האובייקטים ‪ -‬מכל הסוגים‪ 2( .‬נק')‬
‫‪ .2‬הפעלת השיטה ‪ 2( .f1‬נק')‬
‫‪ .3‬הפעלת השיטה ‪ 2( .f2‬נק')‬
‫‪ .4‬הפעלת השיטה ‪ 2( .f3‬נק')‬
‫‪ .5‬הפעלת השיטה ‪ f3‬לאובייקטים מסוג ‪ B‬בלבד! (ללא ‪ B1‬וללא ‪ 3( .)B2‬נק')‬
‫עבור כל אחת מההוראות בסעיף זה (ו') יש לרשום איזה שיטה תופעל בכל מחלקה‪.‬‬
‫‪-6-‬‬
‫‪/‬המשך מעבר לדף‪/‬‬
‫בחינת מתכונת‬
‫מדעי המחשב‪ ,‬קיץ תשע"א‪ ,‬מספר ‪899205‬‬
‫שאלה ‪6‬‬
‫המכללה האקדמית "נצרת" מעוניינת למחשב את מערכת ניהול מערכת הנהלת החשבונות שלה‪.‬‬
‫נתון תרשים ‪ UML‬חלקי עבור מחלקות הפרוייקט‪:‬‬
‫עובד ‪Worker‬‬
‫עובד קבוע‬
‫‪Pwoker‬‬
‫מכללה‬
‫‪College‬‬
‫עובד זמני‬
‫‪TWorker‬‬
‫במכללה קיימים ‪ 500‬עובדים מכל הסוגים‪.‬‬
‫לעובד יש שם פרטי ושיטה שמחשבת ומחזירה את המשכורת שלו (ניתן להניח שכל העובדים‬
‫מקבלים ‪ .)₪ 5000‬עובד קבוע מקבל משכורת כמו עובד רגיל בתוספת של ‪ .10%‬לעובד זמני קיימת‬
‫שתי תכונות נוספות‪ :‬מספר שעות עובדה חודשי ותעריף שעה – המשכורת שלו מחושבת על‪-‬ידי‬
‫הכפלת מספר השעות בתעריף‪.‬‬
‫א‪ .‬הגדר עבור כל אחת מהמחלקות המתוארות בתרשים‪ :‬כותרת‪ ,‬תכונות‪ ,‬חתימות של‬
‫הפעולה הבונה‪ .‬יש לתעד את התכונות ואת הפעולה הבונה‪ 5( .‬נק')‬
‫ב‪ .‬הוסף למחלקות פעולות שיאפשרו לקבל משכורת של עובד באופן המתאים ביותר‬
‫לעקרונות של תכנות מונחה עצמים (הכמסה ‪ ,Encapsulation‬הורשה ‪,Inheritance‬‬
‫פולימורפיזם ‪ 4( )Polymorphism‬נק')‬
‫ג‪ .‬כתוב פעולה שמוסיפה עובד למכללה‪ 4( .‬נק')‬
‫ד‪ .‬ממש פעולה המחזירה את סה"כ משכורות ששולמו לכל העובדים‪ .‬רשום באיזה מחלקה‬
‫יש לממש את הפעולה‪ 4( .‬נק')‬
‫ה‪ .‬כתוב פעולה ראשית (‪ )MAIN‬שתיצור מכללה‪ 1( .‬נק')‬
‫ו‪ .‬הוסף למכללה ‪ 3‬עובדים (מכל הסוגים)‪ 2( .‬נק')‬
‫ז‪ .‬כתוב פעולה סטטית חיצונית במחלקה הראשית אשר תדפיס את המידע הבא‪ :‬סכום‬
‫המשכורות ששולמו לעובדים קבועים בלבד! (‪ 5‬נק')‬
‫‪-7-‬‬
‫‪/‬המשך מעבר לדף‪/‬‬
‫בחינת מתכונת‬
‫מדעי המחשב‪ ,‬קיץ תשע"א‪ ,‬מספר ‪899205‬‬
‫שאלה ‪7‬‬
‫נתונות המחלקות הבאות עבור התקנים אלקטרוניים (قطع الكترونية)‪:‬‬
‫מחשב רגיל ‪ :PC‬סוג‪ ,‬מהירות מעבד (מספר שלם)‪ ,‬כמות זיכרון‪ ,‬מחיר‪.‬‬
‫מחשב נייד ‪ : Laptop‬סוג‪ ,‬מהירות מעבד (מספר שלם)‪ ,‬כמות זיכרון‪ ,‬מחיר‪ ,‬משקל‪.‬‬
‫מחשב ‪ :IPHONE‬מהירות מעבד (מספר שלם)‪ ,‬כמות זיכרון‪ , ,‬מחיר‪ ,‬מספר צבעים‪.‬‬
‫חנות ‪:Store‬קיימים ‪ 50‬התקנים אלקטרוניים מכל הסוגים‪.‬‬
‫א‪ .‬הצג תרשים ‪ UML‬עבור המחלקות הנתונות בשאלה – יש להשתמש במנגנון תכנות מונחה‬
‫עצמים‪ 4( .‬נק')‬
‫ב‪ .‬הגדר עבור כל אחת מהמחלקות המתוארות בתרשים‪ :‬כותרת‪ ,‬תכונות‪ ,‬חתימות של‬
‫הפעולה הבונה‪ .‬יש לתעד את התכונות ואת הפעולה הבונה‪ 5( .‬נק')‬
‫ג‪ .‬הוסף שיטה שמחזירה כמות הזיכרון של כל התקן אלקטרוני‪ ,‬באופן המתאים ביותר‬
‫לעקרונות של תכנות מונחה עצמים (הכמסה ‪ ,Encapsulation‬הורשה ‪,Inheritance‬‬
‫פולימורפיזם ‪ 3( )Polymorphism‬נק')‬
‫ד‪ .‬כתוב שיטה במחלקה הראשית ‪ MAIN‬שמחזירה עבור ה‪ IPHONE-‬את מספר הצבעים‬
‫שלו‪ .‬ניתן להניח קיומו של מערך בשם ‪ arr‬שמכיל בתוכו את התקנים מכל הסוגים (‪ 4‬נק')‬
‫ה‪ .‬כתוב שיטה בשם ‪ Add‬שמוסיפה לחנות התקן חדש‪ 3( .‬נק')‬
‫ו‪ .‬כתוב שיטה בשם ‪ Check1‬שמקבלת כפרמטרים מהירות מינימאלית ‪ min‬ומהירות‬
‫מקסימאלית ‪ .max‬על השיטה להחזיר את כמות המחשבים ‪( PC‬ללא מחשבים ניידים)‬
‫שהמהירות שלהם נעה בין שתי המהירויות‪ 6( .‬נק')‬
‫‪-8-‬‬
‫‪/‬המשך מעבר לדף‪/‬‬
‫בחינת מתכונת‬
899205 ‫ מספר‬,‫ קיץ תשע"א‬,‫מדעי המחשב‬
8 ‫שאלה‬
:‫נתונות המחלקות הבאות‬
public class A
{
protected int x;
protected int y;
public A obj;
public A()
{
this.x = 1;
this.y = 2;
this.obj = null;
}
public A(int
{
this.x =
this.y =
this.obj
}
x, int y)
x;
y;
= null;
public void SetObj(A obj)
{
this.obj = obj;
}
public void F()
{
Console.WriteLine("i am in F method!");
}
public virtual int F1()
{
return this.x * this.y;
}
public int F3()
{
int sum = 0;
sum = this.x + this.y;
if (this.obj != null) sum += this.obj.f3();
return sum;
}
}
public class B : A
{
protected int z;
public B()
: base()
{
this.z = 3;
}
/‫המשך מעבר לדף‬/
-9-
‫בחינת מתכונת‬
899205 ‫ מספר‬,‫ קיץ תשע"א‬,‫מדעי המחשב‬
public B(int x, int y, int z)
: base(x, y)
{
this.z = z;
this.obj = null;
}
public int f2()
{
return this.z * 4;
}
}
public class C : B
{
protected int w;
public C()
: base()
{
this.w = 4;
}
public C(int x, int y, int z, int w)
: base(x, y, z)
{
this.w = w;
}
public override int F1()
{
return base.F1() * this.z * this.w;
}
}
/‫המשך מעבר לדף‬/
-10-
‫בחינת מתכונת‬
899205 ‫ מספר‬,‫ קיץ תשע"א‬,‫מדעי המחשב‬
public class Program
{
public static void Main(String[] args)
{
A[] arr1 = new A[3];
arr1[0] = new A(1, 2);
arr1[1] = new B(1, 2, 3);
arr1[2] = new C();
A[] arr2 = new A[2];
arr2[0] = new C(1, 2, 3, 4);
arr2[1] = new B();
for (int i = 0; i < arr1.Length; i++)
arr1[i].f();
Console.WriteLine("******************");
for (int i = 0; i < arr1.Length; i++)
Console.WriteLine(arr1[i].f1());
Console.WriteLine("******************");
for (int i = 0; i < arr1.Length; i++)
if (arr1[i] is B)
Console.WriteLine(((B)arr1[i]).f2());
}
}
!!'‫ בשאלה הזו אין קשר בין סעיף א' לסעיף ב‬:‫שים לב‬
,Program ‫ במחלקה‬Main ‫) אחרי הפעולה‬UML ‫ עקוב בעזרת טבלת מעקב (תרשים‬.‫א‬
)'‫ נק‬20( .‫ורשום את הפלט‬
,Program ‫ במחלקה‬Main ‫) אחרי הפעולה‬UML ‫ עקוב בעזרת טבלת מעקב (תרשים‬.‫ב‬
‫ את ההוראות הבאות (שים לב שאין קשר בין‬MAIN -‫ורשום את הפלט אם כתבנו ב‬
)'‫ נק‬5( :)'‫סעיף זה לסעיף א‬
A ob1 = new A();
A ob2 = new B();
A ob3 = new C();
ob1.SetObj(ob2);
ob2.SetObj(ob3);
ob3.SetObj(ob1);
Console.WriteLine(ob1.f3());
!!‫ה‬
‫בהצלח‬
/‫המשך מעבר לדף‬/
-11-