מדינת ישרא ל א .בגרות לבתי ספר על־יסודיים סוג הבחינה: ב .בגרות לנבחנים חיצוניים מועד הבחינה :קיץ תשע"א2011 , מספר השאלון603 ,899205 : משרד החינוך מ ד ע י ה מ ח ש ב ב' 2יחידות לימוד (השלמה ל– 5יח"ל) הוראות לנבחן א. משך הבחינה :שלוש שעות. ב .מבנה השאלון ומפתח ההערכה :בשאלון זה שני פרקים. — ( 5 0 — )25x2נקודות פרק ראשון — בפרק זה ארבע שאלות, ומהן יש לענות על שתיים. — בפרק זה שאלות בארבעה מסלולים שונים — ( 50 — )25x2נקודות פרק שני ענה על שאלות רק במסלול שלמדת, לפי ההוראות בקבוצת השאלות במסלול זה. סה"כ — 100נקודות ג. חומר עזר מותר בשימוש :כל חומר עזר ,חוץ ממחשב הניתן לתכנות. ד .הוראות מיוחדות: ( )1את כל התכניות שאתה נדרש לכתוב בשפת מחשב בפרק הראשון כתוב בשפה אחת בלבד — C#או . Java ( )2רשֹום על הכריכה החיצונית של המחברת באיזו שפה אתה כותב — C#או . Java ( )3רשֹום על הכריכה החיצונית של המחברת את שם המסלול שלמדת, אחד מארבעת המסלולים :מערכות מחשב ואסמבלר ,מבוא לחקר ביצועים, מודלים חישוביים ,תכנות מונחה עצמים. הערה :בתכניות שאתה כותב לא יּורדּו לך נקודות ,אם תכתוב אות גדולה במקום אות קטנה או להפך. כתוב במחברת הבחינה בלבד ,בעמודים נפרדים ,כל מה שברצונך לכתוב כטיוטה (ראשי פרקים ,חישובים וכדומה). רשֹום "טיוטה" בראש כל עמוד טיוטה .רישום טיוטות כלשהן על דפים שמחוץ למחברת הבחינה עלול לגרום לפסילת הבחינה! ההנחיות בשאלון זה מנוסחות בלשון זכר ומכוונות לנבחנות ולנבחנים כאחד. בהצלחה! /המשך מעבר לדף/ -- מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 השאלות בשאלון זה שני פרקים :פרק ראשון ופרק שני. עליך לענות על שאלות משני הפרקים ,לפי ההוראות בכל פרק. פרק ראשון ( 50נקודות) שים לב :בכל שאלה שנדרש בה מימוש אתה יכול להשתמש בפעולות של המחלקות >, BinTreeNode<T> ,Stack<T> , Queue<T> , Node<T בלי לממש אותן .אם אתה משתמש בפעולות נוספות עליך לממש אותן. ענה על שתיים מהשאלות ( 4-1לכל שאלה — 25נקודות). שים לב :לשאלה זו שני נוסחים :אחד ב– ( Javaעמודים ,)3-2ואחד ב– C# .1 (עמודים .)5-4עבוד על פי השפה שלמדת. לפותרים ב– Java א. } לפניך כמה מחלקות .עקוב אחר הפעולה mainשבמחלקה Programורשום את הפלט. במעקב יש לכלול את ערכי המשתנים ,ובעבור כל עצם — את ערכי התכונות שלו. } ;this.n = n };return this.n } ;)" System.out.println("f of one ;))(System.out.println("g of one " + this.getN public class One { ;private double n { )public One(double n { )(public double getN )(public void f { )(public void g { } public class Two { ;private Queue<One> q )public Two(int n , int m { ;)(>this.q = new Queue<One )for (int i = n; i < m; i++ ;)))this.q.insert(new One(Math.pow(2 , i } )(public void f { ;)" System.out.print("f of two ))(if (!this.q.isEmpty ;))(System.out.println(this.q.remove().getN } } /המשך בעמוד /3 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב -- public class Together { private double x; private int from , to; private One first; private Two second; public Together(double x , int from , int to) { this.x = x; this.from = from; this.to = to; this.first = new One(x); this.second = new Two(from , to); } public void methodA() { System.out.println("-- MethodA() -- "); this.first.f(); } public void methodB() { System.out.println("-- MethodB() -- "); this.first.g(); this.second.f(); } } public class Program { public static void main(String[] args) { Together tg = new Together(5.0 , 2 , 6); tg.methodA() ; tg.methodB() ; } } — בלבד0 – מקבלת מספרים גדולים מTogether בהנחה כי הפעולה הבונה במחלקה ? Two במחלקהf() מה מבצעת הפעולה /4 המשך בעמוד/ .ב 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב -- C# –לפותרים ב . ורשום את הפלטProgram שבמחלקהMain עקוב אחר הפעולה.לפניך כמה מחלקות . ובעבור כל עצם — את ערכי התכונות שלו,במעקב יש לכלול את ערכי המשתנים public class One { private double n; public One(double n) { public double GetN() { public void F() { public void G() { } this.n = n; } return this.n;} Console.WriteLine("F of one "); } Console.WriteLine("G of one " + this.GetN()); } public class Two { private Queue<One> q; public Two(int n , int m) { this.q = new Queue<One>(); for (int i = n; i < m; i++) this.q.Insert(new One(Math.Pow(2 , i))); } public void F() { Console.Write("F of two "); if (!this.q.IsEmpty()) Console.WriteLine(this.q.Remove().GetN()); } } /5 המשך בעמוד/ .א 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב public class Together { private double x; private int from , to; private One first; private Two second; -- public Together(double x , int from , int to) { this.x = x; this.from = from; this.to = to; this.first = new One(x); this.second = new Two(from , to); } public void MethodA() { Console.WriteLine("-- MethodA() -- "); this.first.F(); } public void MethodB() { Console.WriteLine("-- MethodB() -- "); this.first.G(); this.second.F(); } } public class Program { public static void Main(string[] args) { Together tg = new Together(5.0 , 2 , 6); tg.MethodA(); tg.MethodB(); } } — בלבד0 – מקבלת מספרים גדולים מTogether בהנחה כי הפעולה הבונה במחלקה .ב ? Two במחלקהF() מה מבצעת הפעולה /6 המשך בעמוד/ 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב -- C# – ואחד ב,)7-6 (עמודיםJava – אחד ב: לשאלה זו שני נוסחים:שים לב .2 , ממוין בסדר עולה, שאיבריו מטיפוס שלםa המקבלות מערךwhat – וsod לפניך הפעולות . k ומספר שלם .לשתי הפעולות אותה טענת יציאה . עבוד על פי השפה שלמדת.)9-8 (עמודים Java –לפותרים ב public static boolean sod(int[] a , int k) { for (int i = 0; i < a.length-1; i++) { int j = i+1; while (j < a.length) { if (a[i] + a[j] == k) return true; j++; } } return false; } public static boolean what(int[] a , int k) { int left = 0 , right = a.length-1; while (left < right) { if (a[left] + a[right] == k) return true; if (a[left] + a[right] < k) left++; else right--; } return false; } /7 המשך בעמוד/ -נתון מערך : a א. 12 18 7 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 4 2 a עקוב בעזרת טבלת מעקב אחר ביצוע הפעולה sodבעבור המערך הנתון a והמספר . k = 11רשום את הערך המוחזר. בטבלת המעקב יש לכלול עמודות בעבור , i , j , a[i] , a[j] :ועמודה נוספת שבה יצוין אם התנאי שבפקודת ifמתקיים או אינו מתקיים. ב. עקוב בעזרת טבלת מעקב אחר ביצוע הפעולה sodבעבור המערך הנתון a והמספר . k = 10רשום את הערך המוחזר. בטבלת המעקב יש לכלול את העמודות שפורטו בסעיף א. ג. מהי טענת היציאה של הפעולה ? sod ד. מהי סיבוכיות זמן הריצה של הפעולה ? sodנמק את תשובתך. ה. עקוב בעזרת טבלת מעקב אחר ביצוע הפעולה whatבעבור המערך הנתון a והמספר . k = 11רשום את הערך המוחזר. בטבלת המעקב יש לכלול עמודות בעבור, left, right, a[left], a[right] : ושתי עמודות נוספות לכל אחת מפקודות . ifבכל עמודה יצוין אם התנאי בפקודת ifמתקיים או אינו מתקיים. ו. מהי סיבוכיות זמן הריצה של הפעולה ? whatנמק את תשובתך. ז. מי מבין שתי הפעולות — sodאו — whatיעילה יותר? נמק את תשובתך. ח. טענת הכניסה של הפעולות sodו– whatשונתה כך שאפשר להעביר אליהן מערך aלא ממוין. ( )1האם טענת היציאה של הפעולה sodתשתנה? נמק את תשובתך. ( )2האם טענת היציאה של הפעולה whatתשתנה? נמק את תשובתך. /המשך בעמוד /8 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב -C# –לפותרים ב ממוין בסדר, שאיבריו מטיפוס שלםa המקבלות מערךWhat – וSod לפניך הפעולות . k ומספר שלם,עולה .לשתי הפעולות אותה טענת יציאה public static bool Sod(int[] a , int k) { for (int i = 0; i < a.Length-1; i++) { int j = i+1; while (j < a.Length) { if (a[i] + a[j] == k) return true; j++; } } return false; } public static bool What(int[] a , int k) { int left = 0 , right = a.Length-1; while (left < right) { if (a[left] + a[right] == k) return true; if (a[left] + a[right] < k) left++; else right--; } return false; } /9 המשך בעמוד/ -נתון מערך : a א. 12 18 7 4 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 2 a עקוב בעזרת טבלת מעקב אחר ביצוע הפעולה Sodבעבור המערך הנתון a והמספר . k = 11רשום את הערך המוחזר. בטבלת המעקב יש לכלול עמודות בעבור , i , j , a[i] , a[j] :ועמודה נוספת שבה יצוין אם התנאי שבפקודת ifמתקיים או אינו מתקיים. ב. עקוב בעזרת טבלת מעקב אחר ביצוע הפעולה Sodבעבור המערך הנתון a והמספר . k = 10רשום את הערך המוחזר. בטבלת המעקב יש לכלול את העמודות שפורטו בסעיף א. ג. מהי טענת היציאה של הפעולה ? Sod ד. מהי סיבוכיות זמן הריצה של הפעולה ? Sodנמק את תשובתך. ה. עקוב בעזרת טבלת מעקב אחר ביצוע הפעולה Whatבעבור המערך הנתון a והמספר . k = 11רשום את הערך המוחזר. בטבלת המעקב יש לכלול עמודות בעבור, left, right, a[left], a[right] : ושתי עמודות נוספות לכל אחת מפקודות . ifבכל עמודה יצוין אם התנאי בפקודת ifמתקיים או אינו מתקיים. ו. מהי סיבוכיות זמן הריצה של הפעולה ? Whatנמק את תשובתך. ז. מי מבין שתי הפעולות — Sodאו — Whatיעילה יותר? נמק את תשובתך. ח. טענת הכניסה של הפעולות Sodו– Whatשונתה כך שאפשר להעביר אליהן מערך aלא ממוין. ( )1האם טענת היציאה של הפעולה Sodתשתנה? נמק את תשובתך. ( )2האם טענת היציאה של הפעולה Whatתשתנה? נמק את תשובתך. /המשך בעמוד /10 - 10.3 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 שים לב :לשאלה זו שני נוסחים :אחד ב– ( Javaעמודים , )11-10ואחד ב– C# (עמודים .)13-12עבוד על פי השפה שלמדת. לפותרים ב– Java לפניך ממשק של המחלקה "תור–ביטול" ): (UndoQueue המחלקה מגדירה טיפוס אוסף עם פרוטוקול FIFOלהכנסה והוצאה של ערכים שלמים וגדולים מ– .0 תיאור הפעולה בונה תור–ביטול ריק. הפעולה מחזירה trueאם התור–ביטול הנוכחי ריק ,אחרת — הפעולה מחזירה .false הפעולה מכניסה את הערך xלסוף התור–ביטול הנוכחי. הפעולה מוציאה את הערך שבראש התור–ביטול הנוכחי ,ומחזירה אותו. הנחה :התור–ביטול הנוכחי אינו ריק. הפעולה מחזירה את הערך של האיבר שבראש התור–ביטול בלי להוציאו. הנחה :התור–ביטול הנוכחי אינו ריק. הפעולה מבטלת את פעולת ה– removeאו את פעולת ה– insertהאחרונה שבוצעה ,ומשחזרת את התור–ביטול כפי שהיה לפני ביצוע הפעולה. אם אין פעולות removeאו insertשבוצעו, הפעולה אינה עושה דבר. שים–לב :הפעלה nפעמים של הפעולה ,undo תחזיר את התור–ביטול למצב שבו הוא היה לפני ביצוע nפעולות removeאו insert האחרונות שטרם בוטלו. שם הפעולה )(UndoQueue )(boolean isEmpty )void insert(int x )(int remove )(int head )(void undo /המשך בעמוד /11 - 11דוגמה: מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 מצב התור–ביטול הפעולה לאחר ביצוע הפעולה ;)( UndoQueue uq = new UndoQueueהתור–ביטול ריק ;)uq.insert(2 ;)uq.insert(3 ;)(uq.remove ;)uq.insert(4 ;)(uq.remove ;)( uq.removeהתור–ביטול ריק ;)("4" uq.undo ;)("4 , 3" uq.undo ;)"1 , 4 , 3" uq.insert(1 ;)("4 , 3" uq.undo ;)("3" uq.undo ;)("3 , 2" uq.undo ;)("2" uq.undo ;)( uq.undoהתור–ביטול ריק ""2 ""3 , 2 ""3 ""4 , 3 ""4 ;)( uq.undoהתור–ביטול ריק א. ב. ג. לפניך קטע קוד. ;)(UndoQueue q = new UndoQueue ;)q.insert(1 ;)q.insert(2 ;)q.insert(3 ;)(q.remove ;)q.insert(4 ;)(q.undo ;)(q.undo הראה את מצב התור–ביטול לאחר הביצוע של כל הוראה בקטע הקוד. כתוב ב– Javaאת כותרת המחלקה , UndoQueueואת התכונות שלה .רשום תיעוד לכל תכונה. ממש ב– Javaאת הפעולות remove , insertו– undoהמוצגות בממשק המחלקה .UndoQueue אתה יכול להשתמש בפעולות הממשק האחרות של UndoQueueבלי לממש אותן. אם אתה משתמש בפעולות נוספות ,עליך לממש אותן. /המשך בעמוד /12 - 12 - מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 לפותרים ב– C# לפניך ממשק של המחלקה "תור–ביטול" ): (UndoQueue המחלקה מגדירה טיפוס אוסף עם פרוטוקול FIFOלהכנסה והוצאה של ערכים שלמים וגדולים מ– .0 תיאור הפעולה בונה תור–ביטול ריק. הפעולה מחזירה trueאם התור–ביטול הנוכחי ריק ,אחרת — הפעולה מחזירה .false הפעולה מכניסה את הערך xלסוף התור–ביטול הנוכחי. הפעולה מוציאה את הערך שבראש התור–ביטול הנוכחי ,ומחזירה אותו. הנחה :התור–ביטול הנוכחי אינו ריק. הפעולה מחזירה את הערך של האיבר שבראש התור–ביטול בלי להוציאו. הנחה :התור–ביטול הנוכחי אינו ריק. הפעולה מבטלת את פעולת ה– Removeאו את פעולת ה– Insertהאחרונה שבוצעה ,ומשחזרת את התור–ביטול כפי שהיה לפני ביצוע הפעולה. אם אין פעולות Removeאו Insertשבוצעו, הפעולה אינה עושה דבר. שים–לב :הפעלה nפעמים של הפעולה ,Undo תחזיר את התור–ביטול למצב שבו הוא היה לפני ביצוע nפעולות Removeאו Insert האחרונות שטרם בוטלו. שם הפעולה )(UndoQueue )(bool IsEmpty )void Insert(int x )(int Remove )(int Head )(void Undo /המשך בעמוד /13 - 13דוגמה: מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 מצב התור–ביטול הפעולה לאחר ביצוע הפעולה ;)( UndoQueue uq = new UndoQueueהתור–ביטול ריק ;)uq.Insert(2 ;)uq.Insert(3 ;)(uq.Remove ;)uq.Insert(4 ;)(uq.Remove ;)( uq.Removeהתור–ביטול ריק ;)("4" uq.Undo ;)("4 , 3" uq.Undo ;)"1 , 4 , 3" uq.Insert(1 ;)("4 , 3" uq.Undo ;)("3" uq.Undo ;)("3 , 2" uq.Undo ;)("2" uq.Undo ;)( uq.Undoהתור–ביטול ריק ""2 ""3 , 2 ""3 ""4 , 3 ""4 ;)( uq.Undoהתור–ביטול ריק א. ב. ג. לפניך קטע קוד. ;)(UndoQueue q = new UndoQueue ;)q.Insert(1 ;)q.Insert(2 ;)q.Insert(3 ;)(q.Remove ;)q.Insert(4 ;)(q.Undo ;)(q.Undo הראה את מצב התור–ביטול לאחר הביצוע של כל הוראה בקטע הקוד. כתוב ב– C#את כותרת המחלקה , UndoQueueואת התכונות שלה .רשום תיעוד לכל תכונה. ממש ב– C#את הפעולות Remove , Insertו– Undoהמוצגות בממשק המחלקה .UndoQueue אתה יכול להשתמש בפעולות הממשק האחרות של UndoQueueבלי לממש אותן. אם אתה משתמש בפעולות נוספות ,עליך לממש אותן. /המשך בעמוד /14 - 14א. .4 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 לפניך כותרת של פעולה: ב– : Java ב– : C# הפעולה מקבלת עץ בינרי לא ריק tשל מספרים שלמים ,ומחסנית ריקה s )public static void leaves(BinTreeNode<Integer> t , Stack<Integer> s )public static void Leaves(BinTreeNode<int> t , Stack<int> s של מספריםשלמים. הפעולה מכניסה למחסנית את ערכי כל העלים של העץ , tעל פי סדר סריקה מימין לשמאל. ממש ב– Javaאו ב– C#את הפעולה. ב. כתוב ב– Javaאו ב– C#פעולה בוליאנית שתקבל 2עצים בינריים לא ריקים של מספרים שלמים ,ותחזיר trueאם מתקיימים שני התנאים האלה: — יש להם אותו מספר עלים — על פי סדר הסריקה מימין לשמאל ,ערכי העלים שווים אחרת — הפעולה תחזיר . false עליך להשתמש בפעולה שמִמשת בסעיף א. /המשך בעמוד /15 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 15 - פרק שני ( 50נקודות) בפרק זה שאלות בארבעה מסלולים: מערכות מחשב ואסמבלר ,עמ' 20-15 מבוא לחקר ביצועים ,עמ' 31-21 מודלים חישוביים ,עמ' 34-32 תכנות מונחה עצמים ב– , Javaעמ' ; 45-36תכנות מונחה עצמים ב– , C#עמ' 55-46 ענה רק על שאלות במסלול שלמדת. מערכות מחשב ואסמבלר אם למדת מסלול זה ,ענה על שתיים מהשאלות ( 8-5לכל שאלה — 25נקודות). .5 במחסנית מאוחסנים 10מספרים שלמים עם סימן ,בגודל מילה. בנוסף ,במקטע הנתונים מוגדרים משתנה Kושני מערכים ARR1 ,ו– . ARR2 כל תאי המערך ARR1מאותחלים ל– , 0והמשתנה Kמאותחל ל– . 0 )DUP (0 )?( DUP 10 10 0 DW DW DW ARR1 ARR2 K יש להעתיק למערך ARR1את כל המספרים שמאוחסנים במחסנית באופן הזה: כל המספרים השליליים יאוחסנו בתחילת המערך לפי סדר הוצאתם מהמחסנית .אחרי המספרים השליליים יאוחסנו כל האפסים ,ולאחר מכן יאוחסנו כל המספרים החיוביים לפי סדר הוצאתם מהמחסנית. לדוגמה ,בעבור המחסנית שלפניך המכילה 6איברים: -5 0 10 -2 0 8 ייראה המערך ARR1כך: 5 8 4 10 3 0 2 0 1 -2 0 -5 /המשך בעמוד /16 - 16 - מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 לפניך קטע תכנית באסמבלר ,המבצע את הנדרש. מקטע התכנית הושמטו שורות במקומות המסומנים במספרים . iv-i רשום במחברתך את מספרי השורות המסומנות ,וכתוב ליד כל אחד מהמספרים את שורת הפקודה החסרה ,כדי שקטע התכנית יבצע את הנדרש. SI , 0 DI , 0 CX , 10 AX A2 DI , 2 A4 AX , 0 A3 K A4 SI , 2 A1 SI , K SI , K CX , DI CX , 1 BX , BX ]DX , ARR2[BX ARR1[SI] , DX BX , 2 A5 MOV MOV MOV POP JLE ADD JMP CMP JNE INC JMP ADD LOOP ADD ADD MOV SHR XOR MOV MOV ADD LOOP A1: i ii A2: iii A3: A4: A5: iv /המשך בעמוד /17 - 17.6 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 מערך Aנקרא מוכל במערך , Bאם האורך של מערך Aאינו עולה על האורך של מערך ,B וכל הערכים של איברי מערך Aנמצאים במערך Bברצף ובאותו סדר כמו במערך . A בכל מערך מאוחסנים מספרים שלמים עם סימן ,השונים זה מזה. לדוגמה: בעבור המערכים Aו– Bשלפניך ,המערך Aמוכל במערך . B מערך :A מערך :B איברי המערך Bהמסומנים באפור הם הערכים של איברי המערך . A א. 5 11 9 2 8 11 7 5 6 8 5 0 3 8 4 5 4 -5 3 3 2 0 1 -5 2 4 1 -7 0 15 במקטע הנתונים הוגדרו הנתונים כך: )?( DUP ARR_B DB 100 )?( DUP ARR_A DB 10 ? DB V ? DB P כתוב באסמבלר שגרה (פרוצדורה) בשם , TESTשתקבל ערך שמאוחסן במשתנה . V השגרה תבדוק אם הערך שמאוחסן במשתנה Vנמצא במערך . ARR_B אם כן — השגרה תאחסן במשתנה Pאת האינדקס של האיבר המתאים, 0 3 אחרת — השגרה תאחסן במשתנה Pאת הערך . -1 ב. כתוב באסמבלר קטע תכנית שיבדוק אם המערך ARR_Aמוכל במערך . ARR_B אם כן — קטע התכנית יאחסן 1באוגר , BLאחרת — הוא יאחסן 0באוגר . BL עליך להשתמש בשגרה TESTשכתבת בסעיף א. הנח שהאורך של המערך ARR_Aאינו עולה על האורך של מערך . ARR_B /המשך בעמוד/18 - 18.7 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 בשאלה זו שני סעיפים א-ב ,שאין קשר ביניהם .ענה על שניהם. א .במקטע הנתונים הוגדר מערך : ARR )?( DUP DB 6 ARR יש להפוך את סדר האיברים במערך. לדוגמה ,נתון המערך: לאחר הפיכת סדר האיברים ,ייראה המערך כך: לפניך 2קטעים באסמבלר , ii-i ,שמטרתם להפוך את סדר האיברים במערך . ARR עקוב בעזרת טבלת מעקב אחר הביצוע של כל אחד מהקטעים ii-iשלפניך ,וקבע אם הוא מבצע את הנדרש או אינו מבצע את הנדרש. 5 7 5 3 4 6 4 2 3 0 3 10 2 10 2 0 1 2 1 6 0 3 0 7 MOV SI , 3 MOV DI , 2 ]MOV AL , ARR[DI ]MOV AH , ARR[SI ADD ARR[DI] , AH SUB ARR[DI] , AL MOV ARR[SI] , AL INC SI DEC DI JNZ A1 i A1: MOV CX , 3 MOV SI , 3 MOV DI , 2 ]MOV AL , ARR[DI ]MOV AH , ARR[SI MOV ARR[DI] , AH MOV ARR[SI] , AL INC SI DEC DI LOOPA1 ii A1: /המשך בעמוד /19 - 19ב. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 (אין קשר לסעיף א). במקטע הנתונים הוגדרו הנתונים כך: שים לב :המספרים הם עשרוניים. לפניך קטע תכנית באסמבלר ,שמטרתו לחשב את סכום האיברים במערך . T 55 , 90 , 110 , 1 CX , 4 AX , AX BX , T ]AL , [BX BX AGAIN MOV XOR LEA ADD INC LOOP DB T AGAIN: קטע התכנית אינו מבצע את הנדרש. ( )1עקוב בעזרת טבלת מעקב אחר ביצוע קטע התכנית ,וכתוב מה יהיה התוכן של ,ALומה יהיה התוכן של דגל הנשא ושל דגל הגלישה בסיום הביצוע של קטע התכנית. ( )2שנה את קטע התכנית כך שיחשב את סכום האיברים במערך הנתון .T העתק למחברתך את קטע התכנית לאחר השינוי. /המשך בעמוד /20 - 20.8 לפניך קטע תכנית באסמבלר: נתון שלפני ביצוע קטע התכנית: מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 BP BP , SP ]AX , [BP+4 ]BP , [BP SP , 4 PUSHF PUSH MOV MOV MOV ADD POPF i ii iii iv v vi vii — התוכן של אוגר הדגלים הוא 3202H — התוכן של האוגר SPהוא 96H — התוכן של האוגר BPהוא 5678H לפניך חלק ממחסנית המכילה מספרים הקסדצימליים. לפני ביצוע קטע התכנית ,האוגר SPמצביע על התא המסומן בחץ ,שכתובתו היחסית . 96H ...... * * * * * * * 02H 32H * סטֵי התאים ֶ 90H 91H 92H 93H 94H 95H 96H 97H 98H 99Hה ֵ תא המסומן ב– * הוא תא שאין משמעות לתוכנו. א. עקוב בעזרת טבלת מעקב אחר ביצוע קטע התכנית. בטבלת המעקב יש לכלול עמודות בעבור האוגרים. AX , BP , SP : ב. על פי טבלת המעקב ,ענה על התת–סעיפים (.)4(-)1 ( )1איזה מספר יירשם במחסנית הנתונה לאחר ביצוע הוראה ? i כתוב את הכתובת היחסית של התאים שבהם יירשם המספר. ( )2מה יהיה התוכן של האוגר BPלאחר ביצוע הוראה ? iii ( )3מה יהיה התוכן של האוגר AXלאחר ביצוע הוראה ? iv ( )4מה יהיה התוכן של האוגר BPלאחר ביצוע הוראה ? v /המשך בעמוד /21 - 21 - מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 מבוא לחקר ביצועים אם למדת מסלול זה ,ענה על שתיים מהשאלות ( 12-9לכל שאלה — 25נקודות). .9 בשאלה זו שלושה סעיפים א-ג ,שאינם תלויים זה בזה .ענה על כל הסעיפים. יהי ) G = (V , Eגרף מכוון V ,היא קבוצת הקדקודים ו– Eהיא קבוצת הקשתות . א. Gמיוצג על ידי מטריצת הסמיכויות שלפניך: t u u u u u u u v 0 0 0 1 0 d 1 1 0 0 1 0 0 1 0 0 1 0 1 0 0 ( )1סרטט את הגרף Gהמיוצג על ידי המטריצה. a b c d e ( )2מצא את רכיב /רכיבי הקשירות החזקה (רק"ח /רק"חים) שבגרף . G בעבור כל רק"ח שמצאת ,רשום את קבוצת הקדקודים שלו. ( )3הסר קשת אחת מהגרף Gשסרטטת ,כך שמספר הרק"חים יגדל ב– .1 ב. e c b a p q0 q0 q q0 q q0 q1 r ציין את הקשת שהסרת ,ולכל רק"ח רשום את קבוצת הקדקודים שלו. יהי ) G = (V , Eגרף מכוון V ,היא קבוצת הקדקודים ו– Eהיא קבוצת הקשתות . Gמיוצג על ידי רשימת הסמיכויות הזו: g c b a c e d b f c f d d c a e a c f f b g ( )1הפעל אלגוריתם סריקה לעומק ) (DFSעל הגרף הנתון החל מקדקוד . a סרטט במחברתך את העץ הפורש DFSשמתקבל. ( )2הפעל אלגוריתם סריקה לרוחב ) (BFSעל הגרף הנתון החל מקדקוד . d סרטט במחברתך את העץ הפורש BFSשמתקבל. /המשך בעמוד /22 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 22 - ג .יהי Gגרף מכוון. נפעיל את האלגוריתם סריקה לעומק ) (DFSעל הגרף המכוון . G נגדיר את הקשתות של הגרף Gבעזרת העץ הפורש /היער הפורש שנוצר. קשת עץ היא קשת של הגרף , Gהנמצאת גם בעץ הפורש /היער הפורש של . G קשת אחורית היא קשת ) (u , vבגרף , Gשאינה נמצאת בעץ הפורש /ביער הפורש . זו קשת מקדקוד uלקדקוד vבגרף , Gכאשר vהוא אב קדמון של u בעץ הפורש /ביער הפורש. קשת קדמית היא קשת ) (u , vבגרף , Gשאינה נמצאת בעץ הפורש /ביער הפורש . זו קשת מקדקוד uלקדקוד vבגרף , Gכאשר vהוא צאצא של u בעץ הפורש /ביער הפורש. קשת חוצה היא קשת ) (u , vבגרף , Gשאינה נמצאת בעץ הפורש /ביער הפורש, ואינה קשת אחורית או קשת קדמית .זו קשת מקודקוד uלקדקוד vבגרף , G בתנאי שאף אחד משני קדקודים אלה אינו צאצא של הקדקוד האחר בעץ הפורש /ביער הפורש. ( )1לפניך גרף מכוון , Gהמכיל יותר מרק"ח (רכיב קשירות חזקה) אחד. a b e f לאחר הפעלת אלגוריתם הסריקה לעומק ) (DFSעל הגרף המכוון Gהנתון, התקבל היער הפורש שלפניך: f g d c e b a g d c העתק למחברתך את הגרף .Gהסתמך על היער הפורש הנתון וכתוב ליד כל אחת מהקשתות של הגרף Gאם היא: — קשת עץ — קשת אחורית — קשת קדמית — קשת חוצה /המשך בעמוד /23 - 23 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 ( )2לפניך טענה שחסר בה ביטוי במקום המסומן בקו. אם לאחר הפעלת האלגוריתם סריקה לעומק ( )DFSעל גרף מכוון G ,אזי יש ב– Gמעגל /מעגלים. נמצאת ב– G לפניך ארבעה ביטויים אפשריים להשלמת הטענה: — קשת עץ — קשת אחורית — קשת קדמית — קשת חוצה העתק למחברתך את האפשרות המתאימה להשלמת הטענה ,ונמק את קביעתך. /המשך בעמוד /24 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 24 - .10בשאלה זו שני סעיפים א-ב שאינם תלויים זה בזה .ענה על שני הסעיפים. א. לפניך רשת ) V , G = (V , Eהיא קבוצת הקדקודים ו– Eהיא קבוצת הקשתות: 6 4 F H E 4 4 G 20 B 8 C 16 D 4 2 3 A 2 השתמש באלגוריתם של Primלמציאת עץ פורש מינימלי וסרטט את העץ הפורש המינימלי המתקבל עבור הרשת הנתונה ,החל מקדקוד .C ב. (אין קשר לסעיף א). נתונה הרשת: D 6 E 3 15 16 B 9 4 C A 2 ( )1השתמש באלגוריתם של Kruskalלמציאת עץ פורש מינימלי וסרטט את העץ הפורש המינימלי של הרשת הנתונה. ( )2תלמיד הציע למורה אלגוריתם למציאת עץ פורש מינימלי לרשת ), G = (V , E כאשר Vהיא קבוצת הקדקודים ו– Eהיא קבוצת הקשתות של הרשת. לפניך האלגוריתם של התלמיד. צעד :1 צעד :2 צור גרף , G1שקבוצת הקדקודים שלו היא קבוצת הקדקודים של הרשת Gוקבוצת הקשתות שלו , E T ,היא קבוצה ריקה. מיין את קשתות הרשת Gבסדר עולה ,על פי המשקלות המיוחסים להן .תתקבל קבוצת קשתות ממוינות שנסמנה *. E /המשך בעמוד /25 - 25צעד :3 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 לכל קשת ) (u , vב– * , Eהחל מהקשת בעלת המשקל הקטן ביותר ,בצע: אם הוספת הקשת ) (u , vאינה יוצרת מעגל ב– — G1הוסף צעד :4 את הקשת ) (u , vל– . E T אחרת — החזר את הגרף G1שהינו עץ פורש מינימלי. החזר את G1שהינו עץ פורש מינימלי. הפעל את האלגוריתם של התלמיד על הרשת הנתונה. ענה על הסעיפים (. )iv(-)i ( )iסרטט במחברתך את G1שנוצר אחרי ביצוע צעד . 1 ( )iiרשום במחברתך את כל הקשתות ב– * Eאחרי ביצוע צעד . 2 ( )iiiסרטט במחברתך כל אחד מהגרפים G1שהתקבלו במהלך צעד . 3 ( )ivסרטט במחברתך את העץ הפורש שהאלגוריתם החזיר . ( )3המורה השיבה לתלמיד שהאלגוריתם שהוא הציע שגוי ,כי הפלט שלו אינו בהכרח עץ פורש מינימלי .למשל ,בעבור הרשת הזו: B A C D אפשר לייחס משקלות לקשתות הרשת כך שאם נשתמש באלגוריתם של התלמיד לא יוחזר העץ הפורש המינימלי. העתק למחברתך את הרשת ורשום משקלות לצִדן של הקשתות ,כך שהעץ שיוחזר על ידי האלגוריתם של התלמיד לא יהיה עץ פורש מינימלי. /המשך בעמוד /26 - 26 - מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 .11בשאלה זו שני סעיפים א-ב שאינם תלויים זה בזה .ענה על שני הסעיפים. א .נתונה בעיית תכנון לינארי: }max {z = kx1 + 20x2 בכפוף לאילוצים האלה: - 3x1 + 4x2 # 24 x1 + 2x2 $ 0 x2 # 5 x2 $ 0 x1אינו מוגבל בסימן. kהוא פרמטר. לפניך סרטוט של תחום הפתרונות האפשריים של הבעיה הנתונה. x2 6 )(- 34 , 5 )(-4.8 , 2.4 x1 0 -4 -8 לפניך ארבעה תת–סעיפים ( ,)4(-)1שבכל אחד מהם נתון ערך מסוים של הפרמטר .k (. k = 20 )1 (. k =-20 )2 (. k =-15 )3 ( , k =-15 )4ומוסיפים את האילוץ. x1#-5 : התת–סעיפים אינם תלויים זה בזה. בעבור כל אחד מהתת–סעיפים (:)4(-)1 — אם הפתרון האופטימלי הוא יחיד ,עליך למצוא את הפתרון האופטימלי היחיד ,ואת הערך של פונקציית המטרה בפתרון זה. — אם יש אין–סוף פתרונות אופטימליים ,עליך לרשום את הפתרון האופטימלי הכללי לבעיה ,ואת הערך של פונקציית המטרה בפתרון זה. — אם הפתרון האופטימלי לא חסום ,נמק את קביעתך. — אם אין פתרון אפשרי ,נמק את קביעתך. /המשך בעמוד /27 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 27ב( .אין קשר לסעיף א). נתונה בעיית תכנון לינארי: }max {z = ax1 + 3x2 בכפוף לאילוצים האלה: x1 + 83 x2 # 3 x1 + x2 # 5 x1$ 0 x2 $ 0 x2 a 2 0הוא פרמטר של הבעיה. לפניך סרטוט של תחום הפתרונות האפשריים של הבעיה הנתונה. 8 5 )(1.8 , 3.2 x1 5 3 לפניך ארבעה תחומים , iv-i ,בעבור הפרמטר : a a 13 i a 28 ii 3 1 a 1 8 iii 3 1 a 1 24 iv קבע בעבור איזה מבין התחומים , iv-iהפתרון ) (1.8 , 3.2יהיה פתרון אופטימלי יחיד .העתק את התחום למחברתך ,ונמק את קביעתך. 0 /המשך בעמוד /28 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 28 - .12בשאלה זו חמישה סעיפים ,א-ה ,שאינם תלויים זה בזה .ענה על כל הסעיפים. א .בטבלה שלפניך נתון חלק מפתרון בסיסי אפשרי לבעיית התובלה: . x21 = 20 , x11 = 80 יעדים מקורות היצע 3 80 1 2 17 15 14 18 18 20 10 1 80 120 10 2 20 50 50 15 100 3 100 ביקוש העתק את הטבלה למחברתך ,והשלם אותה לפי שיטת הפינה הצפונית מערבית. ב. בטבלה שלפניך נתון חלק מפתרון בסיסי אפשרי לבעיית תובלה ,ונתונים ערכים של . u3 , u2 , u1 , v3 , v2 , v1 ui היצע 0 80 3 100 -5 50 יעדים 3 12 2 15 1 מקורות 10 80 10 14 18 100 10 20 10 50 50 100 80 19 15 10 1 2 3 ביקוש vj העתק את הטבלה למחברתך ,והשלם אותה לפי שיטת הפינה הצפונית מערבית מתוך התחשבות בערכים של – u iים ו– – v jים ,כך שיתקבל פתרון בסיסי אפשרי. /המשך בעמוד /29 - 29ג. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 בטבלה שלפניך נתון פתרון בסיסי אפשרי לבעיית תובלה ,ונתונים ערכים של . u3 , u2 , u1 , v3 , v2 , v1 יעדים ui היצע 0 130 -4 100 1 150 2 3 13 מקורות 1 18 30 10 100 12 6 21 100 14 100 11 16 50 1 2 3 130 50 200 ביקוש 13 15 10 vj האם הפתרון הוא אופטימלי? נמק את תשובתך. /המשך בעמוד /30 - 30ד. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 בטבלה שלפניך נתון פתרון אופטימלי לבעיית תובלה ,ונתונים ערכים של , u3 , u2 , u1 , v3 , v2 , v1שמתאימים לפתרון זה. יעדים ui היצע 10 20 10 50 16 60 2 3 מקורות 1 16 25 14 22 10 20 30 20 20 20 10 18 20 40 1 2 3 40 40 50 ביקוש 4 4 0 vj ( )1האם הפתרון הנתון הוא אופטימלי יחיד? נמק את תשובתך. ( )2בטבלה הנתונה בראש הסעיף ַה ְחסֵר 4מהעלות ליחידה מכל מקור לכל יעד. סרטט את הטבלה שתתקבל. קבע איזה מארבעת ההיגדים iv-iשלפניך הוא הנכון. העתק אותו למחברתך ,ונמק את בחירתך. i הפתרון הנתון אינו פתרון אפשרי בעבור הבעיה שהתקבלה. ii הפתרון הנתון הוא פתרון בסיסי אפשרי אך אינו אופטימלי בעבור הבעיה שהתקבלה. iii הפתרון הנתון הוא פתרון אופטימלי יחיד בעבור הבעיה שהתקבלה. ivהפתרון הנתון הוא פתרון אופטימלי אך אינו פתרון אופטימלי יחיד בעבור הבעיה שהתקבלה. /המשך בעמוד /31 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 31ה. בטבלה שלפניך נתון פתרון לא אופטימלי שהתקבל לאחר kאיטרציות בעבור בעיית תובלה מסוימת ,ונתונים ערכים של . u3 , u2 , u1 , v 4 , v3 , v2 , v1 יעדים ui היצע 0 230 -3 150 -5 540 Z = 3070 4 3 2 2 4 -6 3 2 5 3 340 200 2 70 3 3 5 150 4 80 -2 1 80 -4 מקורות 4 7 7 7 340 280 80 220 8 8 2 5 1 2 3 ביקוש vj הפתרון המתואר בטבלה זו אינו אופטימלי כיוון שיש משתנים מחוץ לבסיס שערך ה– ) (c ij - u i - v jשלהם שלילי. עליך לבצע איטרציה נוספת ,כלומר איטרציה . k + 1 ( )1מהו המשתנה שיוצא מהבסיס באיטרציה זו? ( )2סרטט במחברתך טבלה חדשה ,ורשום בה את הפתרון שיתקבל לאחר איטרציה זו. /המשך בעמוד /32 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 32מודלים חישוביים אם למדת מסלול זה ,ענה על שתיים מהשאלות ( 16-13לכל שאלה — 25נקודות). .13לפניך השפה Lמעל הא"ב : " a , b , c , L = {a n b3k+1 c k }n 2 0 , k 2 0 א. כתוב את המילה הקצרה ביותר בשפה . L ב. בנה אוטומט מחסנית שיקבל את השפה . L .14בשאלה זו שני סעיפים א-ב ,שאין קשר ביניהם .ענה על שניהם. לפניך השפה Lמעל הא"ב }: {a , b א. } התו האחרון ב– wמופיע בכל המילה מספר זוגי של פעמיםw 2 0 , L = {w לדוגמא: המילה abaabbabשייכת לשפה. המילה abbabaaשייכת לשפה. המילה babbabaלא שייכת לשפה. לפניך סרטוט חלקי של אוטומט סופי דטרמיניסטי המקבל את השפה . L בסרטוט חסרים מעברים וסימני קלט. b q6 b a q4 q5 a q1 q3 b a q0 q2 ‰ÏÁ˙‰ b הסרטוט מכיל את כל המצבים של האוטומט ,ואת כל המצבים המקבלים. העתק למחברתך את הסרטוט ,והשלם אותו כך שהאוטומט יקבל את השפה . L עליך להשלים את המעברים החסרים ואת סימני הקלט החסרים. שים לב :אין להוסיף מצבים לאוטומט או להוריד ממנו מצבים. /המשך בעמוד /33 - 33ב. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 (אין קשר לסעיף א). לפניך אוטומט סופי דטרמיניסטי המקבל את שפה Lמעל הא"ב }. {a , b a a q2 a b b q4 q1 b a b q3 a q0 ‰ÏÁ˙‰ b ( )1קבע לכל אחת מארבע המילים ( )iv(-)iשלפניך אם היא מתקבלת על ידי האוטומט .אם המילה מתקבלת על ידי האוטומט ,רשום את המסלול המקבל בעבור מילה זו. ()i aaba ()ii bbaabb ()iii abaa ()iv bb ( )2מהי השפה Lהמוגדרת על ידי האוטומט? .15לפניך השפה Lמעל הא"ב }: {0 , 1 , 2 }n 2 k $ 0 א. הוכח כי השפה Lאינה רגולרית. ב. נתונה השפה L1מעל הא"ב }: {1 , 2 מהי השפה ? L1+ Lנמק. L = {0 n 1 k 2 }L1 = {1 n 2 n $ 0 /המשך בעמוד /34 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 34 - .16לפניך מכונת טיורינג המחשבת פונקציה ). f(x המכונה מקבלת כקלט מספר xשלם וגדול מ– , 0הרשום על הסרט כמספר אונרי על ידי xתווים של ,1ואחריהם הסימן . T המכונה רושמת את תוצאת החישוב של ) f(xעל הסרט כמספר אונרי אחרי הסימן = , ולאחר המספר מופיע הסימן . T 1/1,ÔÈÓÈ q2 D/D,Ï‡Ó˘ q3 ˘1/D,Ï‡Ó ˘D/D,Ï‡Ó 1/a,ÔÈÓÈ a/1,ÔÈÓÈ q 6 ˘1/1,Ï‡Ó q1 1/1,ÔÈÓÈ q0 1/a,ÔÈÓÈ q5 ‰ÏÁ˙‰ q4 ˘a/D,Ï‡Ó ˘D/D,Ï‡Ó q7 א. מה יכיל הסרט לאחר חישוב ) ?f(3הראה את מסלול החישוב של המכונה. בכל שלב רשום את מצב הסרט ,סמן היכן נמצא ראש המכונה ,ורשום באיזה מהמצבים q7 - q0המכונה נמצאת. ב. מה יכיל הסרט לאחר חישוב )? f (5 ג. מה יכיל הסרט לאחר חישוב )? f (6 ד. מהי הפונקציה ) f(xשהמכונה מחשבת? ה. הוסף למכונה מעבר/מעברים כדי שתחשב גם את ). f (0 כתוב במחברתך את המעבר/מעברים שהוספת. לכל מעבר רשום :מאיזה מצב הוא יוצא ,לאיזה מצב הוא מגיע ומה רשום עליו. /המשך בעמוד /35 - 35 - מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 שים לב :תכנות מונחה עצמים מתחיל בעמוד .36 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב - 36 - תכנות מונחה עצמים .20-17 ענה על שתיים מהשאלות,Java –אם למדת מסלול זה ואתה כותב ב ) נקודות25 — (לכל שאלה : BB – וAA לפניך המחלקות.17 public class AA { private String st; public AA() { this.st = "excellent"; } public AA(String st) { this.st = st; } public String getSt() { return this.st; } public void setSt(String st) { this.st = st; } } public String toString() { return "st = " + this.st; } public class BB extends AA { private int num; public BB() { super(); this.num = 1; } public BB(int num , String st) { super(st); this.num = math.abs(num); public int getNum() { return this.num; } public void setNum(int num) { this.num = num; } } public String toString() { return super.toString() + " num = " + this.num;} obj המקבלת עצםisLike(Object obj) פעולה בוליאנית בשםAA הגדר במחלקה } .א obj שלst וגם תוכן המחרוזתAA הינו מטיפוסobj אם העצם. Object מטיפוס . false אחרת — תחזיר,true של העצם הנוכחי — הפעולה תחזירst זהה לתוכן המחרוזת . פעולה הדורסת את הפעולה שהגדרת בסעיף אBB הגדר במחלקה .ב num שלו זהה לערך התכונהnum וגם ערך התכונהBB הינו מטיפוסobj אם העצם .false אחרת — תחזיר, true של העצם הנוכחי — הפעולה תחזיר /37 המשך בעמוד/ - 37ג. לפניך קטע מפעולה ראשית: האם קטע התכנית תקין? מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 ;)"AA a = new AA("excellent ;)(BB b = new BB ;a = b ;)if (a.isLike(b)) System.out.println(a אם כן — מה יהיה פלט הקטע? רשום איזו גרסה של הפעולה isLikeתופעל — זו של AAאו זו של . BB אם לא — הסבר מהי השגיאה ומתי היא תתגלה :בזמן קומפילציה או בזמן ריצה. ד. לפניך קטע מפעולה ראשית: ;)(AA aa = new AA ;)"BB bb = new BB(2 , "excellent ;bb = aa ;)if (bb.isLike(aa)) System.out.println(bb האם קטע התכנית תקין? אם כן — מה יהיה פלט הקטע? רשום איזו גרסה של הפעולה isLikeתופעל — זו של AAאו זו של . BB אם לא — הסבר מהי השגיאה ומתי היא תתגלה :בזמן קומפילציה או בזמן ריצה. ה. כתוב פעולה חיצונית בשם longStringהמקבלת מערך של עצמים מטיפוס . object הפעולה מחזירה מחרוזת המורכבת משרשור התכונה stשל עצמים מטיפוס AA במערך ,באופן הזה: — אם לעצם יש רק התכונה ,stתשורשר המחרוזת שבתכונה stפעם אחת. — אם לעצם יש גם התכונה ,numהמחרוזת שבתכונה stתשורשר numפעמים. — אם אין במערך אף עצם מטיפוס ,AAתוחזר מחרוזת ריקה. /המשך בעמוד /38 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב public class B { private static int numB = 0; private int m1; private int m2; public B(int m1, int m2) { } } - 38 - :OopTest – וA , D , B : לפניך פרויקט ובו המחלקות.18 this.m1 = m1; this.m2 = m2; numB++; System.out.println("B(" + m1 + ", " + m2 + ") , #" + numB); public class D extends B { private static int numD = 0; private double d; public D(double d, int x) { } public D(double d, int x, int y) { } } super(x, x); this.d = d; numD++; System.out.println("D(" + d + ", " + x + ") , #" + numD); super(x , y); this.d = d; numD++; System.out.println("D(" + d +", "+ x + " , " + y + ") , #" + numD); /39 המשך בעמוד/ 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב - 39 - public class A { private static int numA = 0; private A a; private B b; public A(A a , B b) { this.a = a; this.b = b; numA++; System.out.println("A Constructor , #" + numA); } } public class OopTest { public static void main(String [] args) { B w1 = new B(2, 3); B w2 = new D(1.5 , 6); B w3 = new D(2.3 , 8 , 9); A w4 = new A(null , w1); A w5 = new A(w4 , w3); } } . וכתוב את הפלט, OopTest במחלקהmain כתוב מעקב אחר הפעולה . ובעבור כל עצם — את ערכי התכונות שלו,במעקב יש לכתוב את ערכי המשתנים /40 המשך בעמוד/ מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 40 - .19חברה המפיצה לומדות פיתחה לומדה העוסקת בסדרות של מספרים שלמים. המערכת פותחה בשלבים. בכל סדרה של מספרים מתייחסים אל: ( )1האיבר הראשון בסדרה שמספרו הסידורי הוא .1 ( )2האיבר שמספרו הסידורי בסדרה הוא . n ( )3הדפסת nהאיברים הראשונים בסדרה. בשלב הראשון פותחו שתי מחלקות: סדרה חשבונית ) — (ASeqסדרה שבה ההפרש בין כל איבר לקודמו הוא ערך קבוע. סדרה הנדסית ) — (GSeqסדרה שבה המנה בין כל איבר לקודמו היא ערך קבוע. להלן קוד המחלקות שפותחו בשלב הראשון: public class ASeq { ;private int first ;private int difference )public ASeq(int first, int difference { ;this.first = first ;this.difference = difference } )public int theNElement(int n { ;return this.first + (n-1) * this.difference } /המשך בעמוד /41 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב - 41 - public void displayNElements(int n) { System.out.print("The sequence elements: "); for (int i = 0; i < n-1; i++) System.out.print(this.theNElement(i+1) + " , "); System.out.println(this.theNElement(n)); } } public class GSeq { private int first; private int product; public GSeq(int first , int product) { this.first = first; this.product = product; } public int theNElement(int n) { return this.first * (int)Math.pow(this.product , n-1); } public void displayNElements(int n) { System.out.print("The sequence elements: "); for (int i = 0 ; i < n-1; i++) System.out.print(this.theNElement(i+1) + " , "); System.out.println(this.theNElement(n)); } } /42 המשך בעמוד/ ). המשך השאלה בעמוד הבא:(שים לב - 42א. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 עקוב אחר קטע התכנית שלפניך .במעקב הצג את העצם שנבנה ,את התכונות שלו ואת הפלט. ;)ASeq aSeq = new ASeq(2 , 3 ;))System.out.println(aSeq.theNElement(4 ;)aSeq.displayNElements(5 בשלב השני של הפיתוח הוחלט שמתאים לפתח מחלקה חדשה המתארת סדרה קבועה ) ,(Sequenceכך שהמחלקות ASeqו– GSeqיירשו מן המחלקה החדשה .בסדרה קבועה מוגדר ערך האיבר הראשון ,וכל יתר האיברים זהים לאיבר הראשון. ב. השלם את הפיתוח של השלב השני באופן המתאים ביותר לעקרונות של תכנות מונחה עצמים ,ובהתאם להנחיות ):(ii)-(i )( i ממש באופן מלא את מחלקת העל .Sequenceהמחלקה צריכה להתייחס אל: ()1 האיבר הראשון בסדרה שמספרו הסידורי .1 ()2 האיבר שמספרו הסידורי בסדרה הוא . n ()3 הדפסת nהאיברים הראשונים של הסדרה. ) (iiממש מחדש את המחלקה ASeqכך שתירש מן המחלקה . Sequence בשלב השלישי של הפיתוח הוחלט להרחיב את הפרויקט שכולל את שלוש המחלקות שפותחו בשלב השני ) ,(Sequence , ASeq , GSeqכך שבעבור כל סדרה יהיה אפשר להפעיל פעולה המחשבת ומחזירה את סכום nהאיברים הראשונים של הסדרה. הנח כי המחלקה GSeqמומשה מחדש ,כך שהיא יורשת מן המחלקה . Sequence ג. בעבור כל אחת מן המחלקות , Sequence, ASeq , GSeqכתוב אם יש לעשות בה שינוים כך שהפרויקט יענה על דרישות הפיתוח של השלב השלישי באופן המתאים ביותר לעקרונות של תכנות מונחה עצמים. אם יש לעשות שינויים — פרט וממש אותם. /המשך בעמוד /43 - 43 - מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 בשלב הרביעי של הפיתוח הוחלט לפתח פעולה סטטית checkהמקבלת ערך שלם , n ושני עצמים של סדרות :האחד מטיפוס ASeqוהאחר מטיפוס . GSeq הפעולה מחשבת את סכום nהאיברים הראשונים בכל אחת משתי הסדרות ומחזירה: — את התו ' — 'Aאם סכום nהאיברים הראשונים של הסדרה מטיפוס ASeq הוא הגדול מבין שני הסכומים. — את התו ' — 'Gאם סכום nהאיברים הראשונים של הסדרה מטיפוס GSeq הוא הגדול מבין שני הסכומים. — את התו ' — 'Eאם סכום nהאיברים הראשונים של שתי הסדרות שווה. ד. ממש את הפעולה הסטטית checkעל פי הדרישות שהוגדרו בשלב הרביעי של הפיתוח. /המשך בעמוד /44 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 44 - .20מרפאה וטרינרית של חיות מחמד מרכזת מידע על הווטרינרים העובדים במרפאה ועל חיות המחמד המטופלות בה .מספר הווטרינרים העובדים במרפאה הוא לכל היותר , 10 ומספר חיות המחמד המטופלות במרפאה הוא לכל היותר . 500 הקווים המנחים לניהול המידע הם: • • • לכל וטרינר נשמר :מספר תעודת הזהות ,שם ,ותק בעבודה בשנים. לכל חיית מחמד נשמר :מספר הרישוי ,שם ,סוג (למשל :כלב ,חתול או ארנב), גיל ,פירוט של עד 50הביקורים האחרונים במרפאה ,מספר הביקורים השמורים. לכל ביקור במרפאה נשמר :מספר תעודת הזהות של הווטרינר שטיפל בחיית המחמד בביקור זה ,ומחרוזת של תווים המכילה קודים של טיפולים שחיית המחמד קיבלה באותו ביקור .קוד של טיפול הוא אות גדולה מתוך כל אותיות ה– . ABC חלק מהפעולות שהמערכת יכולה לבצע הן: • הדוח יכלול את מספר הרישוי שלה ,את שמה ואת גילה. • הפקת דוח של כל חיות המחמד מסוג מסוים (למשל כל הארנבים) .לכל חיה בתחילת כל שנה :עדכון הגיל של כל חיית מחמד ,כלומר הגדלת הגיל ב–, 1 ועדכון הוותק של כל וטרינר ,כלומר הגדלת הוותק ב–. 1 • לפניך תרשים של היררכיית המחלקות הנדרשות בעבור ניהול המידע של המרפאה: החזרת שם של וטרינר על פי מספר תעודת הזהות שלו. Clinic ˙‡ ˙‚ˆÈÈÓ ‰‡Ù¯Ó‰ Vet ¯È¯Ë ˙‚ˆÈÈÓ ÔÓÈÒ‰ Animal ˙‚ˆÈÈÓ „ÓÁÓ ˙ÈÈÁ Appointment ¯Â˜È· ˙‚ˆÈÈÓ ‡ˆ¯È¯ËÂ Ï ·˙¯˘Æ‰ÏΉ ‚ˆÈÈÓ ÌÈ /המשך בעמוד /45 - 45א. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 בעבור כל מחלקה בתרשים ,הגדר את התכונות ואת הפעולות שלה. עליך להגדיר רק את הפעולות הנחוצות כדי לענות על הדרישות שתוארו בפתיח לשאלה (שבעמוד )44ובתרשים. הנח שנתונות פעולות בונות ,המקבלות פרמטר לכל תכונה ,ופעולות מאחזרות (פעולות ,)getואין צורך לכתוב אותן .לא נתונות פעולות קובעות (פעולות . )set בעבור כל תכונה — רשום את ההגדרה שלה ב– , Javaורשום את התיעוד שלה. בעבור כל פעולה — רשום את הכותרת שלה ב– , Javaורשום תיעוד הכולל מה היא מקבלת ומה היא מחזירה .אין צורך לממש את הפעולה. ב. הנח כי המערכת פותחה בהתאם לתכנון שהצגת בסעיף א ,וכל הפעולות הנתונות ואלו שהגדרת ממומשות. במחלקה Clinicמוסיפים את הפעולה: )public void addAppointment (Animal p , String t , Vet v המקבלת חיית מחמד , pמחרוזת tשל קודים של טיפולים שקיבלה החיה בביקור הנוכחי ,ואת הווטרינר vשטיפל בה .הפעולה מוסיפה את הביקור לחיית המחמד. ממש באופן מלא את הפעולה. הנח שמספר הביקורים הקודמים של החיה במרפאה קטן מ–. 50 אם נוסף על הפעולות הנתונות ועל הפעולות שהגדרת בסעיף א אתה משתמש בפעולות אחרות ,עליך לממש אותן באופן מלא ולציין בעבור כל פעולה באיזו מחלקה יש לממש אותה. /המשך בעמוד /46 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב - 46 - תכנות מונחה עצמים .24-21 ענה על שתיים מהשאלות,C# –אם למדת מסלול זה ואתה כותב ב ) נקודות25 — (לכל שאלה :BB– וAA לפניך המחלקות.21 public class AA { private string st; public AA() { this.st = "excellent"; } public AA(string st) { this.st = st; } public string GetSt() public void SetSt (string st) { return this.st; { this.st = st; } } } public override string ToString() { return "st = " + this.st; } public class BB : AA { private int num; public BB() : base() public BB(int num, string st) : base(st) {this.num = Math.abs(num); {this.num = 1; } } public int GetNum() {return this.num;} public override string ToString() { return base.toString() + " num = " public void SetNum(int num) } {this.num = num;} + this.num;} , isLike (Object obj) בשם, פעולה בוליאנית הניתנת לדריסהAA הגדר במחלקה וגם תוכןAA הינו מטיפוסobj אם העצם. Object מטיפוסobj המקבלת עצם ,true של העצם הנוכחי — הפעולה תחזירst זהה לתוכן המחרוזתobj שלst המחרוזת .false אחרת — תחזיר .א . פעולה הדורסת את הפעולה שהגדרת בסעיף אBB הגדר במחלקה num שלו זהה לערך התכונהnum וגם ערך התכונהBB הינו מטיפוסobj אם העצם .false אחרת — תחזיר,true של העצם הנוכחי — הפעולה תחזיר .ב /47 המשך בעמוד/ - 47ג. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 לפניך קטע מפעולה ראשית: ;)"AA a = new AA("excellent ;)(BB b = new BB ;a = b ;)if (a.IsLike(b)) Console.WriteLine(a האם קטע התכנית תקין? אם כן — מה יהיה פלט הקטע? רשום איזו גרסה של הפעולה IsLikeתופעל — זו של AAאו זו של .BB אם לא — הסבר מהי השגיאה ומתי היא תתגלה :בזמן קומפילציה או בזמן ריצה. ד. לפניך קטע מפעולה ראשית: ;)(AA aa = new AA ;)"BB bb = new BB(2 , "excellent ;bb = aa ;)if (bb.IsLike(aa)) Console.WriteLine(bb האם קטע התכנית תקין? אם כן — מה יהיה פלט הקטע? רשום איזו גרסה של הפעולה IsLikeתופעל — זו של AAאו זו של . BB אם לא — הסבר מהי השגיאה ומתי היא תתגלה :בזמן קומפילציה או בזמן ריצה. ה. כתוב פעולה חיצונית בשם LongStringהמקבלת מערך של עצמים מטיפוס . Object הפעולה מחזירה מחרוזת המורכבת משרשור התכונה stשל עצמים מטיפוס AA במערך ,באופן הזה: — אם לעצם יש רק התכונה , stתשורשר המחרוזת שבתכונה stפעם אחת. — אם לעצם יש גם התכונה , numהמחרוזת שבתכונה stתשורשר numפעמים. — אם אין במערך אף עצם מטיפוס , AAתוחזר מחרוזת ריקה. /המשך בעמוד /48 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב - 48 :OopTest – וA , D , B לפניך פרויקט ובו המחלקות.22 public class B { private static int numB = 0; private int m1; private int m2; public B(int m1, int m2) { } } this.m1 = m1; this.m2 = m2; numB++; Console.WriteLine("B(" + m1 + ", " + m2 + ") , #" + numB); public class D : B { private static int numD = 0; private double d; public D(double d, int x) : base (x , x) { } this.d = d; numD++; Console.WriteLine("D(" + d + ", " + x + ") , #" + numD); public D(double d, int x, int y) : base(x , y) { } this.d = d; numD++; Console.WriteLine("D(" + d +", "+ x + " , " + y + ") , #" + numD); } /49 המשך בעמוד/ 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב - 49 - public class A { private static int numA = 0; private B b; private A a; public A(A a , B b) { this.a = a; numA++; } } this.b = b; Console.WriteLine("A Constructor , #" + numA); public class OopTest { public static void Main(string[ ] args) { B w1 = new B(2 , 3); B w3 = new D(2.3 , 8 , 9); } } B w2 = new D(1.5 , 6); A w4 = new A(null , w1); A w5 = new A(w4 , w3); . וכתוב את הפלט, OopTest במחלקהMain כתוב מעקב אחר הפעולה . ובעבור כל עצם — את ערכי התכונות שלו,במעקב יש לכתוב את ערכי המשתנים /50 המשך בעמוד/ מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 50 - .23חברה המפיצה לומדות פיתחה לומדה העוסקת בסדרות של מספרים שלמים. המערכת פותחה בשלבים. עבור כל סדרה של מספרים מתייחסים אל: ( )1האיבר הראשון בסדרה שמספרו הסידורי הוא .1 ( )2האיבר שמספרו הסידורי בסדרה הוא . n ( )3הדפסת nהאיברים הראשונים בסדרה. בשלב הראשון פותחו שתי המחלקות: סדרה חשבונית ) — (ASeqסדרה שבה ההפרש בין כל איבר לקודמו הוא ערך קבוע. סדרה הנדסית ) — (GSeqסדרה שבה המנה בין כל איבר לקודמו היא ערך קבוע. להלן קוד המחלקות שפותחו בשלב הראשון: public class ASeq { ;private int first ;private int difference )public ASeq(int first, int difference { ;this.first = first ;this.difference = difference } )public int TheNElement(int n { ;return this.first + (n-1) * this.difference } /המשך בעמוד /51 603 ,899205 ' מס, קיץ תשע"א,'מדעי המחשב ב - 51 - public void DisplayNElements(int n) { Console.Write("The sequence elements: "); for (int i = 0; i < n-1; i++) } } Console.Write(this.TheNElement(i+1) + " , "); Console.WriteLine(this.TheNElement(n)); public class Gseq { private int first; public Gseq(int first, int product) private int product; { } this.first = first; this.product = product; public int TheNElement(int n) { } { return this.first * (int)Math.Pow(this.product , n-1); public void DisplayNElements(int n) Console.Write("The sequence elements: "); } } for (int i = 0; i < n-1; i++) Console.Write(this.TheNElement(i+1) + " , "); Console.WriteLine (this.TheNElement(n)); /52 המשך בעמוד/ ). המשך השאלה בעמוד בא:(שים לב - 52א. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 עקוב אחר קטע התכנית שלפניך .במעקב הצג את העצם שנבנה ,את התכונות שלו ואת הפלט. ;)ASeq aSeq = new ASeq(2 , 3 ;))Console.WriteLine(aSeq.TheNElement(4 ;)aSeq.DisplayNElements(5 בשלב השני של הפיתוח הוחלט שמתאים לפתח מחלקה חדשה המתארת סדרה קבועה ) ,(Sequenceכך שהמחלקות ASeqו– GSeqיירשו מן המחלקה החדשה .בסדרה קבועה מוגדר ערך האיבר הראשון ,וכל יתר האיברים זהים לאיבר הראשון. ב. השלם את הפיתוח של השלב השני באופן המתאים ביותר לעקרונות של תכנות מונחה עצמים ובהתאם להנחיות ):(ii)-(i )( i ממש באופן מלא את מחלקת העל .Sequenceהמחלקה צריכה להתייחס אל : ()1 האיבר הראשון בסדרה שמספרו הסידורי .1 ()2 האיבר שמספרו הסידורי בסדרה הוא . n ()3 הדפסת nהאיברים הראשונים של הסדרה. ) (iiממש מחדש את המחלקה ASeqכך שתירש מן המחלקה . Sequence בשלב השלישי של הפיתוח הוחלט להרחיב את הפרויקט שכולל את שלוש המחלקות שפותחו בשלב השני ) ,(Sequence , ASeq , GSeqכך שבעבור כל סדרה יהיה אפשר להפעיל פעולה המחשבת ומחזירה את סכום nהאיברים הראשונים של הסדרה. הנח כי המחלקה GSeqמומשה מחדש כך שהיא יורשת מן המחלקה . Sequence ג. בעבור כל אחת מן המחלקות , Sequence , ASeq , GSeqכתוב אם יש לעשות בה שינויים כך שהפרויקט יענה על דרישות הפיתוח של השלב השלישי באופן המתאים ביותר לעקרונות של תכנות מונחה עצמים. אם יש לעשות שינויים — פרט וממש אותם. /המשך בעמוד /53 - 53 - מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 בשלב הרביעי של הפיתוח הוחלט לפתח פעולה סטטית Checkהמקבלת ערך שלם , n ושני עצמים של סדרות :האחד מטיפוס ASeqוהאחר מטיפוס . GSeq הפעולה מחשבת את סכום nהאיברים הראשונים בכל אחת משתי הסדרות ומחזירה: — את התו ' — 'Aאם סכום nהאיברים הראשונים של הסדרה מטיפוס ASeqהוא הגדול מבין שני הסכומים. — את התו ' — 'Gאם סכום nהאיברים הראשונים של הסדרה מטיפוס GSeqהוא הגדול מבין שני הסכומים. — את התו ' — 'Eאם סכום nהאיברים הראשונים של שתי הסדרות שווה. ד. ממש את הפעולה הסטטית Checkעל פי הדרישות שהוגדרו בשלב הרביעי של הפיתוח. /המשך בעמוד /54 מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 - 54 - .24מרפאה וטרינרית של חיות מחמד מרכזת מידע על הווטרינרים העובדים במרפאה ועל חיות המחמד המטופלות בה .מספר הווטרינרים העובדים במרפאה הוא לכל היותר , 10 ומספר חיות המחמד המטופלות במרפאה הוא לכל היותר . 500 הקווים המנחים לניהול המידע הם: • לכל וטרינר נשמר :מספר תעודת הזהות ,שם ,ותק בעבודה בשנים. לכל חיית מחמד נשמר :מספר הרישוי ,שם ,סוג (למשל :כלב ,חתול או ארנב), • גיל ,פירוט של עד 50הביקורים האחרונים במרפאה ,מספר הביקורים השמורים. לכל ביקור במרפאה נשמר :מספר תעודת הזהות של הווטרינר שטיפל בחיית המחמד • בביקור זה ,ומחרוזת של תווים המכילה קודים של טיפולים שחיית המחמד קיבלה באותו ביקור .קוד של טיפול הוא אות גדולה מתוך כל אותיות ה– . ABC חלק מהפעולות שהמערכת יכולה לבצע הן: הפקת דוח של כל חיות המחמד מסוג מסוים (למשל כל הארנבים) .לכל חיה • הדוח יכלול את מספר הרישוי שלה ,את שמה ואת גילה. בתחילת כל שנה :עדכון הגיל של כל חיית מחמד ,כלומר הגדלת הגיל ב–,1 • ועדכון הוותק של כל וטרינר ,כלומר הגדלת הוותק ב–. 1 החזרת שם של וטרינר על פי מספר תעודת הזהות שלו. • לפניך תרשים של היררכיית המחלקות הנדרשות בעבור ניהול המידע של המרפאה: Clinic ˙‡ ˙‚ˆÈÈÓ ‰‡Ù¯Ó‰ Vet ¯È¯Ë ˙‚ˆÈÈÓ ÔÓÈÒ‰ Animal ˙‚ˆÈÈÓ „ÓÁÓ ˙ÈÈÁ Appointment ¯Â˜È· ˙‚ˆÈÈÓ ‡ˆ¯È¯ËÂ Ï ·˙¯˘Æ‰ÏΉ ‚ˆÈÈÓ ÌÈ /המשך בעמוד /55 - 55א. מדעי המחשב ב' ,קיץ תשע"א ,מס' 603 ,899205 בעבור כל מחלקה בתרשים ,הגדר את התכונות ואת הפעולות שלה. עליך להגדיר רק את הפעולות הנחוצות כדי לענות על הדרישות שתוארו בפתיח לשאלה (שבעמוד )54ובתרשים. הנח שנתונות פעולות בונות ,המקבלות פרמטר לכל תכונה ,ופעולות מאחזרות (פעולות ,)getואין צורך לכתוב אותן .לא נתונות פעולות קובעות (פעולות . )set בעבור כל תכונה — רשום את ההגדרה שלה ב– , C#ורשום את התיעוד שלה. בעבור כל פעולה — רשום את הכותרת שלה ב– , C#ורשום תיעוד הכולל מה היא מקבלת ומה היא מחזירה .אין צורך לממש את הפעולה. ב. הנח כי המערכת פותחה בהתאם לתכנון שהצגת בסעיף א ,וכל הפעולות הנתונות ואלו שהגדרת ממומשות. במחלקה Clinicמוסיפים את הפעולה: המקבלת חיית מחמד , pמחרוזת tשל קודים של טיפולים שקיבלה החיה בביקור הנוכחי ואת הווטרינר vשטיפל בה. הפעולה מוסיפה את הביקור לחיית המחמד. ממש באופן מלא את הפעולה. הנח שמספר הביקורים הקודמים של החיה במרפאה קטן מ–. 50 )public void AddAppointment (Animal p , string t , Vet v אם נוסף על הפעולות הנתונות ועל הפעולות שהגדרת בסעיף א אתה משתמש בפעולות אחרות ,עליך לממש אותן באופן מלא ולציין בעבור כל פעולה באיזו מחלקה יש לממש אותה. בהצלחה! זכות היוצרים שמורה למדינת ישראל אין להעתיק או לפרסם אלא ברשות משרד החינוך
© Copyright 2024