פרק ראשון - מדעי המחשב
Transcription
פרק ראשון - מדעי המחשב
סוג בחינה :בחינת מתכונת מועד הבחינה :קיץ תשע"ב 1021 מספר שאלון522108 : ביה"ס נזירות המושיע נצרת מדעי המחשב 1יחידות לימוד (השלמה ל 8 -יח"ל) הוראות לנבחן א. משך הבחינה :שלוש שעות ב. מבנה השאלון ומפתח הערכה :בשאלון זה שני פרקים. בפרק זה יש ארבע שאלות , פרק ראשון – ()18 X 1 מהן יש לענות על שתיים- . פרק שני ג. – בפרק זה יש ארבע שאלות, מהן יש לענות על שתיים- . ()18 X 1 - 80נקודות. 80נקודות. חומר עזר מותר בשימוש :כל חומר עזר ,חוץ ממחשב הניתן לתכנות. כתוב במחברת הבחינה בלבד ,בעמודים נפרדים ,כל מה שברצונך לכתוב כטיוטה (ראשי פרקים ,חישובים וכדומה) .רשום טיוטה בראש כל עמוד טיוטה .רישום טיוטות כלשהן על דפים שמחוץ למחברת הבחינה עלול לגרום לפסילת הבחינה! ההנחיות בשאלון זה מנוסחות בלשון זכר ומכוונות לנבחנים ולנבחנות כאחד. בהצלחה! בחינת מתכונת מדעי המחשב ,קיץ תשע"ב ,מספר 522108 פרק ראשון ( 80נקודות) ענה על שתיים מהשאלות ( 4 - 1לכל שאלה – 52נקודות) שאלה 1 נתון עץ בינארי שהצמתים שלו מורכבים ממחסניות של מספרים שלמים. כתבו פעולה רקורסיבית אשר מקבלת כפרמטר עץ בינרי של שלמים btומספר שלם .yהפעולה מחזירה אמת trueאם קיים מסלול בעץ שסכום האיברים של כל צומת (שהינו מחסנית) של מסלול זה הוא ;yאחרת הפעולה מחזירה שקר .false דוגמא :עבור y=15והעץ הבא ,המתודה תחזיר true 1,7,3,4 2,2,2,9 5,2,1 1,5,2 10,3,2 בשאלה זו אין צורך לשמור על ערכי המחסניות שבתוך החוליות! -2- /המשך מעבר לדף/ בחינת מתכונת מדעי המחשב ,קיץ תשע"ב ,מספר 522108 שאלה 5 נתונה מחסנית שמכילה מחסניות של מספרים שלמים .כתבו פעולה שמקבלת את המחסנית כפרמטר ומחזירה את מספר הפעמים בהם המחסניות הפנימיות מסודרות בסדר עולה (המספר הגדול ביותר נמצא בראש המחסנית) .אין צורך לשמור על ערכי המחסניות המקורית. דוגמא :בהינתן המחסנית הבאה: 1 8 7 2 6 20 4 21 2 7 80 200 20 10 60 20 הפעולה תחזיר את הערך .3 כותרת הפעולהpublic static int Count(Stack<Stack<int>> s) : -1- /המשך מעבר לדף/ בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב 3 שאלה :נתונות הפעולות הבאות public static bool Check1(int[] arr, int p) { if (p == 0) return true; if (arr[p] <= arr[p - 2]) return false; return Check1(arr, p - 2); } public static bool Check2(int[] arr, int p) { if (p == 1) return true; if (arr[p] >= arr[p - 2]) return false; return Check2(arr, p - 2); } public static bool Check3(int[] arr) { int last = arr.Length - 1; if (arr.Length % 2 != 0) return Check1(arr, last) && Check2(arr, last - 1); return Check1(arr, last - 1) && Check2(arr, last); } : הבאarr ונתון המערך 0 1 2 3 4 5 6 7 8 1 9 5 8 12 7 20 6 70 /המשך מעבר לדף/ -3- מדעי המחשב ,קיץ תשע"ב ,מספר 522108 בחינת מתכונת א .עקוב ,בעזרת טבלת מעקב ,אחרי ביצוע הפעולה Check1וכתוב את הפלט כאשר מבצעים את הזימון הבא 4( :נקודות) ;)Check1(arr, arr.length-1 ב .מה מבצעת הפעולה 4( ?Check1נקודות) ג .עקוב ,בעזרת טבלת מעקב ,אחרי ביצוע הפעולה Check2וכתוב את הפלט כאשר מבצעים את הזימון הבא 4( :נקודות) ;)Check2(arr, arr.length-2 ד .מה מבצעת הפעולה 4( ?Check2נקודות) ה .עקוב ,בעזרת טבלת מעקב ,אחרי ביצוע הפעולה Check3וכתוב את הפלט כאשר מבצעים את הזימון הבא 4( :נקודות) ;)Check3(arr הערה :בסעיף זה אין צורך להראות את המעקב אחרי הפעולות Check1ו)Check2 - ו .מה מבצעת הפעולה ?Check3בתשובתך התייחס לכל האפשרויות 8( .נקודות) -4- /המשך מעבר לדף/ בחינת מתכונת מדעי המחשב ,קיץ תשע"ב ,מספר 522108 שאלה 4 בתוכנית Arabs Got Talentהחליטו למחשב את מערכת שיבוץ המתמודדים והצבעת השופטים להם .לכן הוקמה מחלקה בשם מתמודד .Participantלכל מתמודד הנתונים הבאים: - שם (nameמחרוזת) - תחביב ( hobbyמחרוזת) - מערך בגודל 3שמכיל את הצבעות שלושת השופטים (כל שופט יכול לתת ציון מ 0 -עד .)20 בנוסף בתוכנית הגדירו מחלקה בשם מופע Showשתכונותיו הן: - מערך של מתמודדים ( 200לכל היותר) א .ייצג את המחלקה מתמודד .Participantבעת הייצוג יש לרשום את שם המחלקה, התכונות והשיטה הבונה (שים לב שכאשר מייצרים מתמודד אין להוסיף תוצאות לשופטים) 3( .נקודות) ב .ייצג את המחלקה מופע .Showבעת הייצוג יש לרשום את שם המחלקה ,התכונות והשיטה הבונה (שים לב שכאשר מייצרים מופע אין להוסיף מתמודדים בו) 3( .נקודות) ג .כתוב פעולה בשם AddParticipantשמקבלת כפרמטר מתמודד ומוסיפה אותו למופע4( . נקודות) ד .כתוב פעולה בשם Voteשמקבלת כפרמטר את הצבעות של שלושת שופטים (לפי הסדר) על הפעולה לעדכן את הצבעות השופטים במערך ההצבעות של המתמודד 8( .נקודות) ה .כתוב שיטה בשם FindHobbyשמקבלת כפרמטר תחביב ומחזירה את כמות המתמודדים שיש להם את התחביב הזה 8( .נקודות) ו .כתוב פעולה בשם GetAvgsשמחזירה מערך שמכיל עבור כל שופט את ממוצע הצבעותיו לכל המתמודדים 8( .נקודות) להזכירך ניתן להניח קיום שיטות מעדכנות ושיטות מאחזרות ) )Set/Getלכל התכונות. עבור כל פעולה יש לרשום באופן ברור איפה היא נמצאת (באיזה מחלקה). עבור כל פעולה יש לרשום באופן ברור את טענת הכניסה וטענת היציאה. ניתן להשתמש בשיטות נוספות .במקרה זה יש לרשום את הקוד שלה ולכתוב באיזה מחלקה היא נמצאת. -8- /המשך מעבר לדף/ בחינת מתכונת מדעי המחשב ,קיץ תשע"ב ,מספר 522108 פרק בחירה תכנות מונחה עצמים Object Oriented Programming ענה על שתיים מהשאלות ( 8 - 2לכל שאלה – 52נקודות) שאלה 2 "לוח-משדרים" הינו טבלה המכילה את התוכניות המשודרות במשך שבוע ימים החל מהשעה 6:00בבוקר ועד השעה 21:00בלילה .עבור כל תוכנית ב"לוח המשדרים" יש לשמור את שעת תחילתה ושעת סיומה .משך כל תוכנית המשובצת בלוח המשדרים הינו שעה שלמה (התוכנית מתחילה תמיד בשעה עגולה) – בכל יום קיימות ב"לוח-משדרים" 25תוכנית. לכל תוכנית נשמר המידע הבא :שם התוכנית ( nameמחרוזת) ,שם מפיק התוכנית producer (מחרוזת) ,קוד סוג התוכנית ( genreמספר שלם) ,שנת הפקה ( yearמספר שלם) א .ממש ב – C#את המחלקה תוכנית ( )Programמימוש המחלקה צריך לכלול את כותרת המחלקה ,התכונות שלה ואת השיטה הבונה 4( .נקודות) ב .ממש ב – C#את המחלקה לוח-משדרים ( )Tvמימוש המחלקה צריך לכלול את כותרת המחלקה ,התכונות שלה ואת השיטה הבונה 4( .נקודות) ג .חברות הכבלים יצאו במבצע של ממיר מהפכני ,בשלב הראשון הממיר יכיל רק חמישה ערוצי ם ,לכל ערוץ יהיה מספר משלו בממיר ,הערוץ הראשון מספרו יהיה ,0 והערוץ החמישי מספרו יהיה , 4לכל ערוץ "לוח משדרים" ייחודי לו .ממש ב – C#את המחלקה ממיר Converterמימוש המחלקה צריך לכלול את כותרת המחלקה, התכונות שלה ואת השיטה הבונה 6( .נקודות) ד .ממש ב – c#את הפעולה שלפניך : הפעולה מקבלת כפרמטר קוד סוג של תוכנית ומציגה כפלט את מספר הערוץ, שם התוכנית היום והשעה בו משודרת תוכנית מהזיאנר המתקבל כפרמטר )void printProgramByGenre(int genre אם הינך משתמש בפעולות עזר עליך לממשן ולציין באיזו מחלקה תמקם אותן7( . נקודות) ה .באיזו מחלקה תממש את השיטה מסעיף ד' 1( .נקודות) -6- /המשך מעבר לדף/ בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב 6 שאלה לצורך כך.בחנות הצעצועים "צעצוע לי" החליטו למחשב את מערכת ניהול המכירות של החנות .הוגדרו המחלקות הבאות Figure – דמות, Vehicle – כלי רכב, Dolls – בובות, Toys – צעצועים public class Toys { protected String ytsran ; protected int year ; protected int amount ; // יצרך // שנת ייצור // כמות protected double price ; // מחיר פריט public Toys() { //... } public Toys(String ytsran,int year, int amount, double price) { //... } } public class Dolls:Toys { private String kind ;// סוג private String []accessories ;// אביזרים } /המשך מעבר לדף/ -7- בחינת מתכונת מדעי המחשב ,קיץ תשע"ב ,מספר 522108 public class Vehicles:Toys { דגם private String model ;// סוללות private boolean battery ; // } public class Figure:Toys { טיפוס type ; // private String כישורים private String [] qualifications ; // } א .שרטט תרשים UMLשל המחלקות 1( .נקודות) ב .ממש פעולה בונה במחלקה ,Dollsשתשתמש בפעולה הבונה המקבלת פרמטרים במחלקה 3( .Toysנקודות) ג .ציין איזה מנגנון של תכנות מונחה עצמים בא לידי ביטוי בהגדרת שתי פעולות בונות במחלקה 1( .Toysנקודות) ד .הוחלט בחנות להוסיף תת מחלקה בשם TeddyBearתחת מחלקת העל , Dollsרשום את הכותרת והתכונות של המחלקה ,TeddyBearידוע כי למחלקה TeddyBearיש את התכונות הבאות :גודל ( , )sizeבעל פרווה כן/לא ( 3( .)furveנקודות) ה .המחלקה חנות ( ,)Storeמייצגת את חנות הצעצועים ,בחנות יש עד 1000צעצועים מכל הסוגים .ממש את המחלקה Storeמימוש המחלקה צריך לכלול את כותרת המחלקה, תכונות המחלקה והשיטה הבונה 4( .נקודות). ו .הגדר פעולה המקבלת כפרמטר את צעצוע ומוסיפה את הצעצוע לחנות .יש לרשום באיזה מחלקה קיימת פעולה זו 3( .נקודות) ז .הגדר פעולה המחזירה את מספר כלי הרכב בחנות .יש לרשום באיזה מחלקה פעולה זו קיימת 3( .נקודות) ח .המחלקה רשת חנויות ,ChainOfStores -מייצגת רשת של חנויות "צעצוע לי" ברחבי ארצות הברית ,הרשת מונה 10חנויות הממוספרות מ – 0עד 8( .22נקודות) ממש את המחלקה .ChainOfStoresמימוש המחלקה צריך לכלול את הסעיפים iii – i שלפניך : -5- .i כותרת המחלקה ,והגדרת התכונות שלה. .ii פעולה המקבלת מספר חנות ומחזירה את מספר כלי הרכב בחנות. /המשך מעבר לדף/ בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב 7 שאלה TestAbc , A , B , C : לפניך פרויקט המכיל ארבע מחלקות public class A { protected int x; public A(int x){this.x = x;} public virtual int change(){ return this.x * 2; } public override String ToString(){ return "X :" + this.x; } } public class B : A { protected int y; public B(int x, int y): base(x){ this.y = y; } public void print(){Console.WriteLine("B-B-B");} public override String ToString() { return base.ToString() + " Y :" + this.y; } } /המשך מעבר לדף/ -2- בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב public class C : B { private int z; public C(int x, int y, int z): base(x, y) { this.z = z; } public override int change(){ return this.x * 2 + this.y * 2 + this.z * 2; } public override String ToString(){ return base.ToString() + " Z :" + this.z; } } public class TestAbc { public static void main(String[] args) { A[] obj = new A[4]; obj[0] = new A(5); obj[1] = new B(5, 10); obj[2] = new C(5, 10, 15); obj[3] = new A(20); for (int i = 0; i < obj.Length; i++) { Console.WriteLine(obj[i].change()); }}} ) נקודות3( . של עץ הירושהUML שרטט תרשים /המשך מעבר לדף/ .א -20- מדעי המחשב ,קיץ תשע"ב ,מספר 522108 ב. בחינת מתכונת עקוב בעזרת טבלת מעקב אחר הפעולה הראשית mainבמחלקה , TestAbcורשום את הפלט 8( .נקודות) ג. לפניך ארבע הוראות iv – iלכל אחת מהן ,קבע אם אפשר להוסיף אותה בשיטה main נמק את קביעותייך בעזרת מאפיינים של תכנות מונחה עצמים 6( :נקודות) ד. ; )Object sod = new A(20 i. ; )B a = new A(5 ii. ; )B c = new C(2 , 4 , 6 iii. ; )A a = new C(1,2,3 iv. האם אפשר לכתוב את שורות הקוד הבאות בתוך בשיטה mainהמחלקה :TestAbc ; )Object a = new A(30 ; )(((A)a).change הסבר בעזרת מאפיינים של תכנות מונחה עצמים 4( .נקודות) ה. האם אפשר לכתוב את שורות הקוד הבאות בשיטה mainבתוך המחלקה 4( :TestAbc נקודות) ; )Object c = new C (11,22,33 ; )(((B)c).print הסבר בעזרת מאפיינים של תכנות מונחה עצמים. ו. האם אפשר לכתוב את שורות הקוד הבאות בשיטה mainבתוך המחלקה 3( :TestAbc נקודות) ; )Object b = new B(11,12 ; )(b.print הסבר בעזרת מאפיינים של תכנות מונחה עצמים. -22- /המשך מעבר לדף/ בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב 8 שאלה :נתונות חמש מחלקות וממשק ClassOne, ClassTwo, ClassThree, Class Four, Program, InterfaceOne ורשום את,Program במחלקהMain ) אחרי הפעולהUML עקוב בעזרת טבלת מעקב (תרשים . ובעבור כל עצם את ערכי התכונות שלו, על הטבלה לכלול את ערכי המשתנים.הפלט class ClassOne { protected int num1; public ClassOne(int num1) { this.num1 = num1; } public virtual void Print(){ Console.WriteLine("hello from class 1..."); } } class ClassThree : ClassOne { private int num3; public ClassThree(int num1, int num3): base(num1){ this.num3 = num3; } public override void Print(){ base.Print(); Console.WriteLine("hello from class 3..."); } } /המשך מעבר לדף/ -21- בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב class ClassFour : ClassThree { private ClassOne[] array; private int counter; public ClassFour(int num1, int num3, int size) : base(num1, num3) { this.array = new ClassOne[size]; this.counter = 0; } public void Add(ClassOne obj) { this.array[this.counter++] = obj; } public override void Print() { bool b; for (int i = 0; i < counter; i++) { this.array[i].Print(); if (this.array[i] is InterfaceOne) { b = ((InterfaceOne)this.array[i]).Check(5); Console.WriteLine("implementing: {0}", b); }}}} /המשך מעבר לדף/ -23- בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב interface InterfaceOne { bool Check(int num); } class ClassTwo : ClassOne,InterfaceOne { private int num2; public ClassTwo(int num1, int num2) : base(num1) { this.num2 = num2; } public override void Print() { base.Print(); Console.WriteLine("hello from class 2..."); } public bool Check(int num) { return (this.num2 > num); } } /המשך מעבר לדף/ -24- בחינת מתכונת 522108 מספר, קיץ תשע"ב,מדעי המחשב class Program { static void Main(string[] args) { ClassFour container = new ClassFour(6,3,5); ClassOne c1 = new ClassOne(10); container.Add(c1); ClassTwo c2 = new ClassTwo(2, 3); container.Add(c2); ClassThree c3 = new ClassThree(10, 20); container.Add(c3); ClassFour c4= new ClassFour(11,22,3); c4.Add(new ClassOne(10)); c4.Add(new ClassTwo(20,20)); c4.Add(new ClassThree(30,30)); container.Add(c4); container.Print(); } } !בהצלחה /המשך מעבר לדף/ -28-