ב' פתרון בחינת הבגרות פרק א - : Ï פתרון בשפת :Java ---// אחרת ו- "שקר" "רשימה משולשת" אם הרשימה היא "אמת" --- פעולה המחזירה ---// 3 רשימה משולשת היא רשימה לא ריקה שמספר איבריה מתחלק ב- --- ---// והאיברים בכל שליש ברשימה זהים ומופיעים באותו סדר --- public static boolean istriple (List <Integer> list) int listsize = size(list); int n = listsize / 3; --- אם הרשימה אינה עומדת בקריטריונים ---// if (listsize == 0 listsize % 3!= 0) return false; הפנייה לתחילת השליש הראשון// list.getfirst(); Node <Integer> pos = הפנייה לתחילת השליש השני // n); Node <Integer> pos2 = place (list, הפנייה לתחילת השליש השלישי // 2*n); Node <Integer> pos3 = place (list, while (pos3!= null) if(pos.getinfo()!= pos2.getinfo() pos.getinfo()!= pos3.getinfo()) return false; pos = pos.getnext(); pos2 = pos2.getnext(); pos3 = pos3.getnext(); return true; --- פעולה המחזירה את מספר האיברים ברשימה ---// public static int size (List <Integer> list) int count = 0; Node <Integer> pos = list.getfirst(); while (pos!= null) count ++; pos = pos.getnext(); return count; --- פעולה המקבלת רשימה ומספר ---// n --- ומחזירה הפנייה לאיבר שנמצא במקום n ברשימה ---// --- אם לא קיים איבר במקום זה יוחזר ---// null public static Node <Integer> place (List<Integer> list, int n) Node<Integer> pos = list.getfirst(); while (pos!= null && n > 0) n -- ; pos = pos.getnext(); return pos;
2 פעולה מקבלת רשימה ומחזירה את מספר האיברים ברשימה// public static int Count(List<int> list) Node<int> p = list.getfirst(); int c = 0; while (p!= null) c++; p = p.getnext(); return c; פעולה מקבלת רשימה ומחזירה אמת אם הרשימה היא משולש // ת public static bool IsThree(List<int> list) int n=count(list); if (!list.isempty() && n % 3 == 0) Node<int> p = list.getfirst(); Node<int> q = p; for (int i = ; i <= n / 3; i++) q = q.getnext(); while (q!= null) if (p.getinfo()!= q.getinfo()) return false; p = p.getnext(); q = q.getnext(); return true; else return false; - פתרון בשפת #C נכתב ע"י ראמי גבאלי:
3 - פתרון בשפת #C נכתב ע"י דיתה אוהב ציון: : : טענת קלט טענת פלט // פעולה המקבלת רשימה // מחזירה את אורך הרשימה public static int GetLength(List<int> l) Node<int> pos = l.getfirst(); int counter = 0; while (pos!= null) counter++; pos = pos.getnext(); return counter; הפעולה הנדרשת: ענת קלט : פעולה המקבלת רשימה ומספר המיצג מיקום ברשימה // טענת פלט : הפניה לחוליה שהמספר הוא מיקומה הסידרתי ברשימה // public static Node<int> GetPos(List<int> l, int place) Node<int> pos = l.getfirst(); for (int i = 0; i < place; i++) pos = pos.getnext(); return pos; public static bool ThreeList(List<int> l) int listsize = GetLength(l); if (listsize == 0 listsize % 3!= 0) return false; int part = listsize / 3; גודל כל חלק // bool status = true; הפניה לשליש הראשון // l.getfirst(); Node<int> pos = הפניה לשליש השני // part); Node<int> pos2 = GetPos(l, הפניה לשליש השלישי // 2); * part Node<int> pos3 = GetPos(l, הסריקה // null) while (status && pos3!= if(pos.getinfo()!= pos2.getinfo() pos2.getinfo()!= pos3.getinfo()) status = false; pos = pos.getnext(); pos2 = pos2.getnext(); pos3 = pos3.getnext(); return status;
4 :2 Ï א. עץ-ימין-שמאל (t) אם t == null או עלה?( t ) החזר אמת אם ל- t יש בן ימני ואין לו בן שמאלי החזק שקר החזר עץ-ימין-שמאל (בן שמאלי של t) וגם עץ-ימין-שמאל (בן שמאלי של t) פתרון בשפת :Java --- פעולה המחזירה "אמת" אם העץ הוא עץ ימין-שמאל ו- "שקר" אחרת ---// --- עץ ימין-שמאלי הוא עץ בינארי שבו לכל צומת, אם קיים בן ימני אז קיים גם בן שמאלי ---// public static boolean leftrighttree (BinTreeNode <Integer> t) if (t = = null isleaf(t)) return true; if (t.getright()!= null && t.getleft() = = null) return false; return leftrighttree (t.getleft()) && leftrighttree (t.getright()); --- פעולה המחזירה "אמת" אם העץ הוא עלה, ו- "שקר" אחרת ---// public static boolean isleaf (BinTreeNode <Integer> t) return t.getleft() = = null && t.getright() = = null;
5 פתרון בשפת #C - נכתב ע"י ראמי גבאלי: פעולה מחזירה אמת אם הצומת היא עלה ושקר אחרת// public static bool IsLeaf(BinTreeNode<int> bt) return (bt.getleft() == null) && (bt.getright() == null); פעולה מחזירה אמת אם העץ הוא ימין-שמאל // public static bool IsRightLeft(BinTreeNode<int> t) if ( t == null IsLeaf(t)) return true if (t.getright()!= null) if (t.getleft() == null) return false; return IsRightLeft(t.GetLeft()) && srightleft(t.getright()); - פתרון בשפת #C נכתב ע"י דיתה אוהב ציון: פעולת עזר : האם עלה? מחזירה אמת אם ההפניה היא עלה. public static bool isleaf(bintreenode<int> t) if (t.getright() == null && t.getleft() == null) return true; else return false; public static bool LeftRightTree(BinTreeNode<int> t) if (isleaf(t)) return true; else אם לבן ימני אין אח// null) if (t.getright()!= null && t.getleft() == return false; else שני בנים // null) if (t.getright()!= null && t.getleft()!= return LeftRightTree(t.GetRight()) && LeftRightTree(t.GetLeft()); else if (t.getright()!= null) return LeftRightTree(t.GetRight()); else return LeftRightTree(t.GetLeft());
6 ב. PreOrder: X A I O N Y T D S X InOrder: I N O A X D T S Y A Y I T O D S N PostOrder: N O I A D S T Y X
7 :3 Ï א. (myqueue) sod א. מעקב Sod myqueue 5 7 4 3 2 2 3 4 7 5 טבלת מעקב, לפי מודל "האנשים הקטנים " נוצרת מחסנית של זימונים רקורסיביים. כל "איש קטן" שסיים עבודתו, מחזיר ערך לאיש שמתחתיו ויוצא מהמחסנית. E i = 2 result = 2! q.isempty F ערך מוחזר _2 2 2 זימון אחרון D i = 3 result = 3 2 j =? = 2 result > j T ערך מוחזר _2 3 2 2 3 C i = 4 result = 4 2 j =? = 2 result > j T ערך מוחזר _2 4 3 2 2 3 4 B i = 7 result = 7 2 j =? = 2 result > j T ערך מוחזר 2 7 4 3 2 2 3 4 7 A i = 5 result = 5 2 j =? = 2 result > j T ערך מוחזר _2 5 7 4 3 2 5 3 4 7 5 זימון ראשון ב. הפעולה sod מחזירה את המספר 2 (תוך כדי כך היא הופכת את סדר האיברים בתור). הפעולה מחזירה את המספר (האיבר) הקטן ביותר בתור.
8 ג. (7852) sod2 i i == 0 a ערך מוחזר b a > b משפט זימון 7852 F 2 8 F sod2(785) 785 F 5 8 F sod2(78) 78 F 8 7 T sod2(7) 7 F 7 T sod2() F 0 T sod2(0) 0 T ד. ה. הפעולה sod מחזירה את המספר 8. הפעולה מחזירה את הספרה הגדולה ביותר במספר. הפעולה מחזירה את הספרה הגדולה ביותר במספר הקטן ביותר בתור.
9 פתרון נוסף - נכתב ע"י דיתה אוהב ציון:
0 המחלקה //--- DayInSchedule public class DayInSchedule private int day; private int month; private List <Meeting> mlist; :4 Ï פתרון בשפת :Java א. כותרת המחלקה : DayInSchedule ב. מימוש הפעולה :canstart --- פעולה המחזירה "אמת" אם ניתן לקבוע פגישה המתחילה בשעה ---// starthour --- ומסתיימת אחרי minutes דקות ---// public boolean canstart (int starthour, int minutes) List <Integer> freehour = getfreehours(); Node<Integer> pos = freehour.getfirst(); --- בדיקה - האם פנוי בשעת תחילת הפגישה ---// while (pos!= null && pos.getinfo() < starthour) pos = pos.getnext(); if (pos == null pos!= null && pos.getinfo() > starthour) return false; --- קביעת שעת סיום הפגישה ---// int finishhour = starthour + minutes/60; if (minutes % 60 > 0) finishhour ++; --- בדיקה - האם פנוי למשך כל זמן הפגישה ---// int nexthour = starthour + ; pos = pos.getnext(); while (pos!= null && nexthour < finishhour) if (pos.getinfo()!= nexthour) return false; nexthour ++; pos = pos.getnext(); return true; //--- end of class DayInSchedule הפעולה :printavailable --- פעולה המקבלת את יומן הפגישות ופגישה ---// --- ומציגה כפלט את כל הימים בהם ניתן לשלב הפגישה ---// public static void printavailableday (List <DayInSchedule> lst, Meeting m) Node<DayInSchedule> pos = lst.getfirst(); while (pos!= null) if (pos.getinfo().canstart(m.getstarthour(), m.getminutes())) System.out.println(pos.getInfo().getDay() + "/" + pos.getinfo().getmonth()); pos = pos.getnext(); ג.
פתרון בשפת - נכתב ע"י ראמי גבאלי: C# public class DayInSchedule private int day; private int month; private List<Meeting> listmetting; מחלקה DayInSchedule פעולה מחזרה אמת אפשר להתחיל פגישה בשעה המבוקשת// public bool CanStart(int starthour, int minutes) List <int> freehours = GetFreeHours(); Node <int> pos = freehours.getfirst(); int time = minutes; if (time % 60!= 0) time = (time / 60) + ; else time = time / 60; time = time + starthour; while (pos!= null && pos.getinfo() < starthour) pos = pos.getnext(); if (pos == null pos.getinfo() > starthour) return false; int nexthour = starthour + ; pos = pos.getnext(); while (pos!= null && nexthour < time) if (pos.getinfo()!= nexthour) return false; nexthour ++; pos = pos.getnext(); return true; פעולה מדפיסה את החודש והיום בחודש שבהם אפשר לשבץ פגישות// public static void PrintAvailbleDay (List<DayInSchedule> lst, Meeting m) Node<DayInSchedule> p = lst.getfirst(); while (p!= null) if(p.getinfo().canstart(m.getstarthour(),m.getminutes())) Console.WriteLine(p.GetInfo().GetDay()); Console.WriteLine(p.GetInfo().GetMoth()); p = p.getnext();
2 - פתרון בשפת #C נכתב ע"י דיתה אוהב ציון: Class DayInSchedule א. int day; int month; רשימת פגישות מתוכננות// meet; List<Meeting> public bool CanStart(int starthour, int minutes) רשימת שעות פנויות // GetFreeHours(); List<int> freeh = bool found = false; Node<int> pos = freeh.getfirst(); int hourlength; סריקת הרשימה //!found) while (pos!= null && CanStart if (pos.getinfo() == starthour) if (minutes < 60) found = true; else חישוב משך הפגישה בשעות// 0) == 60 if (minutes % hourlength = minutes / 60; else hourlength = minutes / 60 + ; הפעולה ב. pos = pos.getnext(); for (int i = 0; i < hourlength && pos!= null; i++) starthour++; if (pos.getinfo() == starthour) found = true; else found = false; pos = pos.getnext(); //end else // end if //end while return found; ג. פעולה חיצונית public static void PrintAvailableDay(List<DayInSchedule> lst, Meeting m) Node<DayInSchedule> pos = lst.getfirst(); while (pos!= null) if(pos.getinfo().canstart(m.getstarthour(),m.getminuites())) Console.WriteLine("In month 0 day ", pos.getinfo().getmonth(), pos.getinfo().getday()); pos=pos.getnext();
3 SI 0000 000 0003 0004 NUM DL 02 NUM2 פרק ב' מערכות מחשב ואסמבלר הפתרון לפרק זה נכתב ע"י מיקדאד עלי-סאלח AH 00 00 00 00 00 00 ARR AX AL 05 03 02 03 04 05 CX 0003 0002 000 0000 :5 ÏÈ א. i מצב האוגרים DX 0002 000 0000 0003 0002 000 0000 0004 0003 0002 000 0000 BX 0002 0004 0003 0006 0009 0004 0008 002 006 מצב מקטע הזיכרון: שם משתנה כתובת תוכן 0000 02 000 05 0002 04 0003 09 0004 6 0005 00 0006?...? התוכנית מציבה במערך ARR (משמאל לימין):.ii (NUM) 2 (NUM+) 2 (NUM+2) 2 (NUM+3) 2... NUM) (NUM2 - איברים.i.ii.iii.iv ב. אינו מבצע את הנדרש אינו מבצע את הנדרש מבצע את הנדרש אינו מבצע את הנדרש
4 :6 ÏÈ.i.ii.iii.iv.i.ii.iii.iv א. ב. MOV AH, 0 JZ A2 ADD DX, 2 MOV AX, BX מבצע את הנדרש מבצע את הנדרש אינו מבצע את הנדרש אינו מבצע את הנדרש :7 ÏÈ LEA SI, ARR LEA DI, ARR2 MOV CX, 36 AGAIN: PUSH CX MOV BX, SI MOV AH, [BX] AGAIN2: CMP BYTE PTR [BX], 0 JE NEXT CMP [BX], AH JNE NEXT MOV BYTE PTR [BX], 0 NEXT: INC BX LOOP AGAIN2 CMP AH,0 JE NEXT2 MOV [DI], AH INC DI NEXT2: POP CX INC SI LOOP AGAIN
5 :8 Ï MOV ANS, MOV AH, AGAIN: MOV AL, 0 LEA SI, ARR MOV CX, 58 AGAIN2: CMP [SI], AH JNE NEXT INC AL NEXT: INC SI LOOP AGAIN2 CMP AH, AL JNE SOF INC AH CMP AH, K JBE AGAIN JMP FINISH SOF: MOV ANS, 0 FINISH: NOP
6 פרק ב' מבוא לחקר ביצועים :9 Ï :0 Ï : Ï :2 Ï
7 פרק ב' מודלים חישוביים הפתרון לפרק זה נכתב ע"י רחל לודמר. :3 ÏÈ () א. (i) המילה babbaaa מתקבלת. b a b b a a a q0 q9 q q9 q8 q7 q6 q5 q המילה aababaaa לא מתקבלת. a a b a b a a a 0 q q q9 q q9 q q2 q3 (2) q המילה aaaabbba מתקבלת. a a a a b b b a 0 q q q2 q3 q4 q5 q5 q5 (3). aaabb, bbaaa המילים הקצרות ביותר המתקבלות ע"י האוטומט: (ii) - b בא לפני ה-. a לכן בחיתוכם מספר ה - b חייב להיות 0. 2 ה L b ה- L ב. בשפה בא אחרי ה- a, ובשפה n k i j L L2 = a b n k, n 0, k 0 b a i 0, j n k i j = a b n > 0, k = 0 b a i = 0, j n = a j n > 0 a n j = a n החיתוך הוא שפה רגולרית. נבנה אס"ד מתאים. :4 Ï q0 b q b a,b q2 a a,b א. a q5 a a,b q4 b q3 n j L ( aab) n 0 = w j 0, w = ε, aba, bab, bbb, aaa ( aab) n 0 = ε n ב. החיתוך הוא השפה המכילה את המילה הריקה.
8 :5 Ï L L 2 = 0 = 0 = 0 n n n n n n 0 k k n 0 n n, k 0 0 n k n k n 0, k 0 n 0, k 0 א. ב. L. היא קבוצת כל ההתחלות של המילים בשפה Init(L) כל מילה ב- L ניתן לפרק אותה לשרשור של 2 מילים. הרישא של כל מילה תהיה ב-.Init(L) * Init ( L3 ) = u uv L3, u, v i i k i i k k = 0 0 L3 i i k k, i 0, 0 k i u = 0 0 k i, v = ג. L. היא קבוצת כל הסייפות של המילים בשפה Fin(L) באופן דומה לסעיף הקודם, כל מילה ב- L ניתן לפרק אותה לשרשור של 2 מילים. הסייפא של כל מילה תהיה ב-.Fin(L) * Fin( L3 ) = v uv L3, u, v k i i k k i i k k = 0 L3, i 0, 0 k i u = 0 0 k i, v = * Fin( L3 ) = v uv L3, u, v i k i k i k i = 0 0 0 L3, i 0, 0 k i פתרון נוסף לסעיף זה: נכתב ע"י יבגני קנל i k i k v = 0 0 k i, u = 0? 00 Min( L4 ) האם ד. ) 4 Min(L מכילה את אוסף המילים ב- L 4 המקיימות את התנאי הבא: עבור כל פירוק של מילה ב- w = w w 2, L 4 שהסייפא שלה ) 2 (w לא ריקה, הרישא שלה ) (w לא שייכת לשפה. L 4 נסתכל על השרשורים שיוצרים את 00, ללא סייפא ריקה. 00 = ε 00, 0 0, 00, 00, ( ε L4 ).. השרשור 00 ε לא מקיים את התנאי שהרישא שלו,לא שייכת ל- L 4 00 L 4 i = 2, k = 0, i > k, 0 L 4 i =, k = 0, i > k. 00 Min( L4 לכן ) (שאר השרשורים כן מקיימים: ( 00 L 4 i = 2, k =, i > k
9 ה. Min( 00? ההסבר זהה לסעיף קודם. L5 האם ) ) 5 Min(L מכילה את אוסף המילים ב- L 5 המקיימות את התנאי הבא: עבור כל פירוק של מילה ב- w = w w 2, L 5 שהסייפא שלה ) 2 (w לא ריקה, הרישא שלה ) (w לא שייכת לשפה. L 5 נסתכל על השרשורים שיוצרים את 00, ללא סייפא ריקה. 00 = ε 00, 0 0, 00, 00 : אף לא אחד מהפירוקים של 00,לא מקיים את התנאי שהרישא שלו, לא שייכת ל- L 5 ε L 5 L i =, k = 0, k < i 0 5 00 L 5 i = 2, k = 0, k < i 00 L 5 i = 2, k =, k < i L) 5 -. (מספיק להראות שהרישא של אחד מהשרשורים שייכת ל 00 Min( L5 לכן ) i k i k L4 L5 = 0 0 i k 0 i i = 0 i 0 0 k i L4 L 5 ו. האם השפה היא רגולרית? שפת החיתוך אינה רגולרית. בשפה זו יש תלות של מניה בין רצף ה- 0 לבין רצף ה-. :6 Ï $ Δ א. לאחר חישוב (5)f הסרט יכיל: $ Δ ב. לאחר חישוב (6)f הסרט יכיל:. f(x)=x+x%2 ג. מטרת הפונקציה :
20 Java פרק ב' תכנות מונחה עצמים - static משתנה של המחלקה. קיים פעם אחת והוא משותף לכל האובייקטים של המחלקה. אם הוא מוגדר כ- public ניתן לשנותו מכל מקום: ; ערך חדש = Polygon.maxSides :7 ÏÈ א. ב. ג. maxsides הינו קבוע של המחלקה. לא ניתן לשנותו לאחר האתחול. פעולה פנימית במחלקה :Polygon public void expand (Polygon poly) (*) if (this.numsides + poly.numsides < maxsides) for (int i = 0 ; i < poly.numsides ; i++) addside (poly.values[i]); ללא ההנחה שיש מספיק מקום, יש להוסיף בדיקה שיש מספיק מקום. public static void expand (Polygon poly, Polygon poly2) int num = poly2.getnumsides(); if (poly.getnumsides() + num < Polygon.maxSides) for (int i = 0 ; i < num ; i++) poly.addside (poly2.getvalues()[i]); (i) (ii) (iii) p.expand (p2); expand (p, p2); PolygonOperations.expand (p, p2); פעולה חיצונית: (i) (*) (ii) ג.
2 class Buy private int price; מחיר הקניה // private Date date; תאריך הקניה // payments; private Payment [ ] מערך התשלומים // numofpayments; private int מס ' תשלומים // פעולה המחזירה "אמת" אם סה"כ התשלומים שווה לסכום הקניה, ו- "שקר" אחרת // public boolean checkpayment ( ) הדפסת קבלה בעבור הקניה // () printreceipt public void :8 ÏÈ public class Store private Buy [] purchase; private int count; כלל הרכישות בחנות // מספר הרכישות שהתבצעו // פעולה המקבלת תאריך, סכום רכישה ואמצעי התשלום ומוסיפה רכישה למערך הרכישות // public void addpurchase (Date date, int price, Payment [] payments); חישוב סכום הקניות של יום מסוים // date) public int daytotalsum (Date public class Payment protected int sumtopay; הסכום לתשלום // public class Cash extends Payment class Cheque extends Payment מס ' ההמחאה // chequenum; private int שם הבנק // bankname; private String תאריך ההמחאה // chequedate; private Date class Credit extends Payment מס ' כרטיס האשראי // creditcardnum; private int תאריך התפוגה של כרטיס האשראי // expirydate; private Date תאריך החיוב // debitdate; private Date
22 Page IPrintBinary :9 ÏÈ IPrintHtml Page Page2 CreateReport א. (i) פעולה לא חוקית..IPrintBinary שמממש את Page שיורש מ- הוא אובייקט מסוג Page doc אין קשר בין page ו- IPrintHtml ולכן לא ניתן להעביר את doc לפעולה CreateHtmlDoc שבמחלקה.CreateReport פעולה לא חוקית. ההפניה היא מסוג המחלקה Page שאינה מממשת את IPrintHtml ולכן תהיה שגיאת קומפילציה. פעולה חוקית. ההפניה היא מסוג IPrintBinary והיא מפנה לאובייקט מסוג Page היורש מ- Page המממש את.IPrintBinary פעולה מצפה לקבל אובייקט מסוג.IPrintBinary (ii) (iii) ב. גם אם doc2 הוא מופע של,Page2 ההפנייה אליו היא מסוג Page שאינה מממשת את הפעולה.createHtml כדי שהפעולה תהיה חוקית, יש לבצע המרה כלפי מטה: ) ((Page2)doc).createHtml( *** Html Doc *** Html Data : num =, num = 22 22 *** Binary Doc *** Binary Data : num = 33, num = 44 33 44 *** Binary Doc *** 55 66 ג.
23 public class Park private String parkname; שם גן השעשועים // מערך האטרקציות // ; attractions private Attraction [] מס ' האטרקציות ברגע הנוכחי // numofattractions; private int public Park (String name, int maxattractions) this.parkname = name; this.attractions = new Attraction [maxattractions]; this.numofattractions = 0; public void printshowswithtranslation( ) for (int i = 0 ; i < numofattractions ; i ++) if (attractions[i] is instanceof Show) if ((Show)attractions[i]).getTranslation()) Sysytem.out.println (attractions[i].getname()); :20 Ï public static void main (String [] args) Park lunafun = new Park ("lunafun", 30); Attraction a = new Ride ("MountainTrain", 25,2, 3, ); lunafun. addattraction (a); a = new Show ("Bambi", 50, 3, "Children", true); lunafun. addattraction (a); נ.
24 פרק ב' תכנות מונחה עצמים #C הפתרון לפרק זה נכתב ע"י טובי סטפ :2 ÏÈ א. ב. ג. המשמעות הוא שהנתון maxsides מוגדר ברמת המחלקה והיא משותפת לכל ה- Polygons (כל Polygon יכול להיות לו עד 00 צלעות ואינו תלוי באובייקט) זימון ניתן לעשות ברמת המחלקה. המשמעות שהוא מוגדר כ- const משמעותו שלא ניתן לשנות את הערך לאחר האתחול. Polygon public void Expand (Polygon p) if (p.numsides + this.numsides < = Polygon.maxSides) for (int i= 0; i < p.numsides; i++) addsides( p.values[i]); פעולה פנימית במחלקה פעולה סטטית חיצונית: public static void Expand (Polygon p, Polygon p2) if (p.getnumsides() + p2.getnumsides() < = Polygon.maxSides) for (int i = 0; i < p2.getnumsides( ); i++) p.addside (p2.getvalues( )[i]); i ii iii p.expand (p2); Expand (p,p2); PolygonOperations.Expand (p, p2); (i) (ii) ד.
25 class Cash : Payment מחלקת כרטיס אשראי // Credit:Payment class מס ' כרטיס אשראי // creditcardnumber; private int תאריך תפוגה של כרטיס אשראי // expirydate; private Date private Date debitdate; תאריך חיוב // class Cheque:Payment מס ' הצ 'ק // chequenumber; private int שם הבנק // bankname; private string תאריך הצ 'ק // chequedate; private Date class Payment private int sum; סכום לתשלום // class Buy total; private int סה " כ רכישה // purchasedate; private Date תאריך רכישה // payments; private Payment[ ] תשלומים שונים // count; private int מס ' תשלומים // ) ( Check public bool פעולה הבודקת האם סה "כ התשלומים שווה לסה "כ // public void PrintReceipt () class Store private Buy[] purchases; private int count; אוסף של קניות החנות // מספר הקניות // שיטה המקבלת תאריך הרכישה, סכום לתשלום ואמצעי התשלום // public void AddPurchase (Date day, int total, Payment[] payments); חישוב סכום הקניות של יום מסוים // date) public int DaySum (Date :22 ÏÈ
26 לא חוקי. doc הוא אובייקט מסוג Page.Page יורש מ- Page שיורש מ-.IPrintBinary אין הורשה מ- IPrintHtml ולכן לא ניתן להעביר אותו כפרמטר לפעולה CreateReport.createHtmlDoc לא חוקי. מחלקת Page אינו יורש מ- IPrintHtml ולכן זה לא יעבור קומפילציה. נכון. הוא שומר אובייקט מסוג Page שיורש מ- Page המממש.IPrintBinary זימון הפעולה IPrintBinary מקבל פרמטר מסוג CreateReport.createBinaryDoc :23 ÏÈ א..i.ii.iii ב. השגיאה תהיה ב- ) doc.createhtml( כי לאובייקט Page אין פעולה createhtml ולכן יש לבצע המרה כלפי מטה ) ((Page2)doc).createHtml( *** Html Doc *** Html Data : num =, num = 22 22 *** Binary Doc *** Binary Data : num = 33, num = 44 33 44 *** Binary Doc *** 55 66 ג.
27 class Park private string parkname; שם גן השעשועים // currentnumberofattractions; private int מס ' האטרקציות כרגע // ; attractions private Attraction [] האטרקציות הקיימות // public Park (string name, int maxattractions) this.parkname = name; attractions = new Attraction [maxattractions]; currentnumberofattractions = 0; public void PrintShowsWithTranslation( ) for (int i=0; i < currentnumberofattractions; i++) if (attractions[i] is Show) if ((Show)attractions[i]).GetTranslation()) Console.WriteLine (attractions[i].getname()); :24 Ï public static void Main (string[] args) Park lunafun = new Park ("lunafun", 30); Attraction a = new Ride ("DareDevil", 0,4,5, ); lunafun.addattraction (a); a = new Show ("Snow White", 00, 0, "Childen", true); lunafun. AddAttraction (a); ג.