27
המחשב מדעי1 תכנה עיצוב שאלון: 899205 - תשס" ט- 2009 net . kadman . www קדמן הילה ב המחשב מדעי' הבגרות בחינת פתרון א פרק- תכנה עיצוב‰Ï‡˘ 1 : בשפת פתרון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; Node <Integer> pos1 = list.getFirst(); // הראשון השליש לתחילת הפנייהNode <Integer> pos2 = place (list, n); // השליש לתחילת הפנייה השניNode <Integer> pos3 = place (list, 2*n); // הפנייה השלישי השליש לתחילתwhile (pos3 != null) { if(pos1.getInfo()!= pos2.getInfo() || pos1.getInfo()!= pos3.getInfo()) return false; pos1 = pos1.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; }

ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 1 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

' מדעי המחשב ב פתרון בחינת הבגרות

עיצוב תכנה- פרק א

‰Ï‡˘1:

: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; Node <Integer> pos1 = list.getFirst(); //הפנייה לתחילת השליש הראשון Node <Integer> pos2 = place (list, n); // השניהפנייה לתחילת השליש Node <Integer> pos3 = place (list, 2*n); // לתחילת השליש השלישי הפנייה while (pos3 != null) { if(pos1.getInfo()!= pos2.getInfo() || pos1.getInfo()!= pos3.getInfo()) return false; pos1 = pos1.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; }

Page 2: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 2 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

:ליי ראמי גבא" נכתב ע- #Cפתרון בשפת

פעולה מקבלת רשימה ומחזירה את מספר האיברים ברשימה//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 = 1; 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; }

Page 3: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 3 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

:י דיתה אוהב ציון" נכתב ע- #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; Node<int> pos1 = l.GetFirst(); // הפניה לשליש הראשון Node<int> pos2 = GetPos(l, part); // ני הפניה לשליש הש Node<int> pos3 = GetPos(l, part * 2); // הפניה לשליש השלישי while (status && pos3 != null) // הסריקה { if(pos1.GetInfo()!= pos2.GetInfo()|| pos2.GetInfo()!= pos3.GetInfo()) status = false; pos1 = pos1.GetNext(); pos2 = pos2.GetNext(); pos3 = pos3.GetNext(); } return status; }

Page 4: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 4 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

‰Ï‡˘2:

(t) שמאל-ימין-עץ .א

(t)? או עלהt == nullאם

אמתהחזר

יש בן ימני ואין לו בן שמאלי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; }

Page 5: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 5 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

:י ראמי גבאלי" נכתב ע- #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 if (t.GetRight() != null && t.GetLeft() == null) //אם לבן ימני אין אח return false; else if (t.GetRight() != null && t.GetLeft() != null) // שני בנים return LeftRightTree(t.GetRight()) && LeftRightTree(t.GetLeft()); else if (t.GetRight() != null) return LeftRightTree(t.GetRight()); else return LeftRightTree(t.GetLeft()); }

Page 6: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 6 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

PreOrder: X A I O N Y T D S

InOrder: I N O A X D T S Y

PostOrder: N O I A D S T Y X

X

A

I

O

N

Y

S D

T

Page 7: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 7 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

‰Ï‡˘3:

sod1 (myQueue) .א

Sod1מעקב . א

"האנשים הקטנים"לפי מודל , טבלת מעקב

.נוצרת מחסנית של זימונים רקורסיבייםר ערך לאיש שמתחתיו ויוצא מחזי, שסיים עבודתו" איש קטן"כל

.מהמחסנית

E i = 2 result = 2 ! q.isEmpty → F ערך מוחזר _2________________

← 2 2 ←

D

i = 31 result = 31 2 j = ? = 2 result > j → T ערך מוחזר _2________________

← 31 2 2 31 ←

C

i = 4 result = 4 2 j = ? = 2 result > j → T ערך מוחזר _2________________

← 4 31 2 2 31 4 ←

B

i = 17 result = 17 2 j = ? = 2 result > j → T ערך מוחזר __2_______________

← 17 4 31 2 2 31 4 17 ←

A

i = 5 result = 5 2 j = ? = 2 result > j → T ערך מוחזר _2________________

← 5 17 4 31 5 2 31 4 17 5 ←

.)תוך כדי כך היא הופכת את סדר האיברים בתור (2 המספר מחזירה אתsod1הפעולה

. הקטן ביותר בתור)האיבר(מספר הפעולה מחזירה את ה .ב

← 5 17 4 31 2 2 31 4 17 5 ← myQueue

זימון ראשון

אחרוןזימון

Page 8: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 8 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

sod2 (17852) .ג

i i == 0 a b ← ערך מוחזר a > b משפט זימון

17852 F 2 8 F sod2(1785)

1785 F 5 8 F sod2(178)

178 F 8 7 T sod2(17)

17 F 7 1 T sod2(1)

1 F 1 0 T sod2(0)

0 T

.8 מחזירה את המספר sod1הפעולה

.הפעולה מחזירה את הספרה הגדולה ביותר במספר .ד

. ביותר בתורבמספר הקטן ביותר הספרה הגדולההפעולה מחזירה את .ה

Page 9: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 9 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

:דיתה אוהב ציוןי " נכתב ע- נוסףפתרון

Page 10: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 10 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

‰Ï‡˘4:

:Javaפתרון בשפת

:DayInScheduleכותרת המחלקה .א//--- DayInSchedule המחלקה public class DayInSchedule { private int day; private int month; private List <Meeting> mList;

: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 + 1; 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(); } }

Page 11: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 11 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

:י ראמי גבאלי" נכתב ע- #Cפתרון בשפת

DayInScheduleמחלקה public class DayInSchedule { private int day; private int month; private List<Meeting> listMetting; פעולה מחזרה אמת אפשר להתחיל פגישה בשעה המבוקשת// 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) + 1; 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 + 1; 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(); } }

Page 12: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 12 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

:דיתה אוהב ציוןי " נכתב ע- #Cפתרון בשפת

. א

CanStartהפעולה . בpublic bool CanStart(int startHour, int minutes) { List<int> freeH = GetFreeHours(); // רשימת שעות פנויות bool found = false; Node<int> pos = freeH.GetFirst(); int hourLength; while (pos != null && !found) // סריקת הרשימה { if (pos.GetInfo() == startHour) { if (minutes < 60) found = true; else { if (minutes % 60 == 0) //חישוב משך הפגישה בשעות hourLength = minutes / 60; else hourLength = minutes / 60 + 1;

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 {1} ", pos.GetInfo().GetMonth(), pos.GetInfo().GetDay()); } pos=pos.GetNext(); } }

int day; int month; List<Meeting> meet; //רשימת פגישות מתוכננות

Class DayInSchedule

פעולה חיצונית . ג

Page 13: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 13 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

'פרק ב

מערכות מחשב ואסמבלר סאלח- מיקדאד עליי "רק זה נכתב עהפתרון לפ

ÏÈ‚¯˙5 :

מצב האוגרים i .א

AX

BX DX CX AL AH DL SI

0002 0002 0003 05 00 02 0000

0004 0001 0002 03 00 0001

0003 0000 0001 02 00 0003

0006 0003 0000 03 00 0004

0009 0002 04 00

0004 0001 05 00

0008 0000

0012 0004

0016 0003

0002

0001

0000

:ןמצב מקטע הזיכרו

ARR NUM2 NUM1 שם

משתנה

כתובת 0000 0001 0002 0003 0004 0005 0006 ..........

תוכן 02 05 04 09 16 00 ? ?

ii . התוכנית מציבה במערךARR ) משמאל לימין:(

............ (NUM1+3)2 (NUM1+2)2 (NUM1+1)2 (NUM1)2

(NUM2 - NUM1)איברים

אינו מבצע את הנדרש .i .ב

ii. אינו מבצע את הנדרש

iii. מבצע את הנדרש

iv. אינו מבצע את הנדרש

Page 14: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 14 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

ÏÈ‚¯˙6:

i. MOV AH , 0 .א

ii. JZ A2

iii. ADD DX , 2 iv. MOV AX , BX

את הנדרשמבצע .i .ב

ii. מבצע את הנדרש

iii. אינו מבצע את הנדרש

iv. אינו מבצע את הנדרש

ÏÈ‚¯˙7: 

LEA SI , ARR1 LEA DI , ARR2 MOV CX , 36 AGAIN1: PUSH CX MOV BX , SI MOV AH , [BX] AGAIN2: CMP BYTE PTR [BX] , 0 JE NEXT1 CMP [BX] , AH JNE NEXT1 MOV BYTE PTR [BX] , 0 NEXT1: INC BX LOOP AGAIN2 CMP AH ,0 JE NEXT2 MOV [DI] , AH INC DI NEXT2: POP CX INC SI LOOP AGAIN1

Page 15: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 15 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

‰Ï‡˘8:

MOV ANS , 1 MOV AH , 1 AGAIN1: 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 AGAIN1 JMP FINISH SOF: MOV ANS , 0 FINISH: NOP

Page 16: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 16 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

פרק ב'

מבוא לחקר ביצועים

‰Ï‡˘9:

‰Ï‡˘10:

‰Ï‡˘11:

‰Ï‡˘12:

Page 17: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 17 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

'פרק ב

מודלים חישוביים .רחל לודמרי "פתרון לפרק זה נכתב עה

ÏÈ‚¯˙13:

.מתקבלת babbaaa המילה(1) (i) . א

.לא מתקבלת aababaaa המילה (2)

.מתקבלת aaaabbbaהמילה )3(

(ii) י האוטומט"המילים הקצרות ביותר המתקבלות ע: aaabb , bbaaa .

.0חייב להיות b - לכן בחיתוכם מספר ה .a - בא לפני הb - ה2Lובשפה , a -בא אחרי ה b -ה 1L בשפה .ב

}1|{}1|{}0|{

}1,0|{}0,0|{

}1,0|{}0,0,|{21

≥=≥∩>=

≥=∩=>=

≥≥∩≥≥≠=∩

najana

jiabknba

jiabknknbaLL

njn

jikn

jikn

. ד מתאים"נבנה אס . החיתוך הוא שפה רגולרית

‰Ï‡˘14:

. א

)}(|0{}|0,},,,,{)}(|0{}{ .ב εε =≥∩=≥=≥∩ naabaaabbbbababawjwnaabL njn

.החיתוך הוא השפה המכילה את המילה הריקה

56789190 qqqqqqqq aaabbab ⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯

321919110 qqqqqqqqq aaababaa ⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯

555432110 qqqqqqqqq abbbaaaa ⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯⎯→⎯

q0 b

a

a,b

a,b

a

b

a,b

a

b

q1 q2

q3 q4 5q

Page 18: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 18 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

‰Ï‡˘15:

. L היא קבוצת כל ההתחלות של המילים בשפה Init(L) .ב

.Init(L) -הרישא של כל מילה תהיה ב. מילים2לשרשור של ניתן לפרק אותהL - כל מילה ב

. L היא קבוצת כל הסייפות של המילים בשפה Fin(L) .ג

פא של כל מילה הסיי. מילים2 ניתן לפרק אותה לשרשור של L - כל מילה ב ,באופן דומה לסעיף הקודם

.Fin(L) -תהיה ב

יבגני קנלי "נכתב ע: פתרון נוסף לסעיף זה

0011)(האם .ד 4LMin∈ ?

Min(L4) ב מכילה את אוסף המילים - L4המקיימות את התנאי הבא :

L4 ,21 -עבור כל פירוק של מילה ב www , לא ריקה) w2( שהסייפא שלה =⋅

.L4לא שייכת לשפה ) 1w(הרישא שלה

.ללא סייפא ריקה, 0011נסתכל על השרשורים שיוצרים את

)(. L4 -לא שייכת ל, לא מקיים את התנאי שהרישא שלו ε⋅0011השרשור 4L∈ε.

0011)(לכן 4LMin∉ .

kikiL :ן מקיימיםשאר השרשורים כ( >==∉ ,0,10 4 ,kikiL >==∉ ,0,200 4 ,

kikiL >==∉ ,1,2001 4(

}1|10{

}0,0|10{}1|10{

}0,0|10{}0,1|1010{21

≥=

≥≥∩≥=

≥≥∩≥≥=∩

n

knn

knknLL

nn

knnn

knkknn

kkiikkiik vikuikiL

vuLuvvLFin

1,010}0,0,110|1{

},,|{)(

3

*33

=≤≤=≤≤≥∈⋅=

∑∈∈=−−

kkiikkiikii vikuikiL

vuLuvuLInit

1,010}0,0,110|10{

},,|{)(

3

*33

=≤≤=≤≤≥∈⋅=

∑∈∈=−−−

}1001,1100,0110,0011{0011 ⋅⋅⋅⋅= ε

kikiikikiki uikvikiL

vuLuvvLFin

0,010}0,0,100|10{

},,|{)(

3

*33

=≤≤=≤≤≥∈⋅=

∑∈∈=−−−

Page 19: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 19 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

0011)(האם .ה 5LMin∈ ?ההסבר זהה לסעיף קודם.

Min(L5)מכילה את אוסף המילים ב - L5המקיימות את התנאי הבא :

L5 ,21 -עבור כל פירוק של מילה ב www , לא ריקה) w2( שהסייפא שלה =⋅

.L5לא שייכת לשפה ) 1w(הרישא שלה

.ללא סייפא ריקה, 0011נסתכל על השרשורים שיוצרים את

:L5 -לא שייכת ל, לא מקיים את התנאי שהרישא שלו ,0011אף לא אחד מהפירוקים של

5L∈ε

ikkiL <==∈ ,0,10 5

ikkiL <==∈ ,0,200 5

ikkiL <==∈ ,1,2001 5

0011)(לכן 5LMin∉) . מספיק להראות שהרישא של אחד מהשרשורים שייכת ל - L5(

54האם השפה .ו LL ? היא רגולרית∩

.1 - לבין רצף ה0 - בשפה זו יש תלות של מניה בין רצף ה. וך אינה רגולריתשפת החית

‰Ï‡˘16: : הסרט יכילf(5)לאחר חישוב .א

: הסרט יכילf(6)לאחר חישוב .ב

. f(x)=x+x%2: מטרת הפונקציה .ג

}1001,1100,0110,0011{0011 ⋅⋅⋅⋅= ε

}0|10{

}0|10{}0|10{54

≥=

≤≤∩≤≤=∩

i

ikkiLLii

kiki

Δ $ 1 1 1 1 1 1 ├

Δ $ 1 1 1 1 1 1 ├

Page 20: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 20 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

'פרק ב

Javaתכנות מונחה עצמים

ÏÈ‚¯˙71:

.קיים פעם אחת והוא משותף לכל האובייקטים של המחלקה. חלקה משתנה של המ- static .א

Polygon.maxSides= ערך חדש ; : ניתן לשנותו מכל מקוםpublic - אם הוא מוגדר כ

.לא ניתן לשנותו לאחר האתחול. הינו קבוע של המחלקהmaxSides .ב

:Polygonפעולה פנימית במחלקה (i) .ג

public void expand (Polygon poly) { (*) if (this.numSides + poly.numSides < maxSides) { for (int i = 0 ; i < poly.numSides ; i++) addSide (poly.values[i]); } }

.יש להוסיף בדיקה שיש מספיק מקום, ללא ההנחה שיש מספיק מקום (*)

(ii) פעולה חיצונית:

public static void expand (Polygon poly1, Polygon poly2) { int num = poly2.getNumSides(); if (poly1.getNumSides() + num < Polygon.maxSides) { for (int i = 0 ; i < num ; i++) poly1.addSide (poly2.getValues()[i]); } }

(i) p1.expand (p2);

(ii) expand (p1, p2);

(iii) PolygonOperations.expand (p1, p2);

Page 21: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 21 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

ÏÈ‚¯˙81:

class Buy { private int price; // מחיר הקניה private Date date; // תאריך הקניה private Payment [ ] payments; // מערך התשלומים private int numOfPayments; // תשלומים' מס

אחרת" שקר "-ו, לומים שווה לסכום הקניהכ התש"אם סה" אמת"פעולה המחזירה // public boolean checkPayment ( )

public void printReceipt () // הדפסת קבלה בעבור הקניה }

public class Store { private Buy [] purchase; // כלל הרכישות בחנות private int count; // מספר הרכישות שהתבצעו

מוסיפה רכישה למערך הרכישותו סכום רכישה ואמצעי התשלום, המקבלת תאריךעולהפ // public void addPurchase (Date date, int price, Payment [] payments);

public int dayTotalSum (Date date) // חישוב סכום הקניות של יום מסוים

} public class Payment { protected int sumToPay; // הסכום לתשלום }

public class Cash extends Payment { … }

class Cheque extends Payment { private int chequeNum; // המחאהה' מס private String bankName; // שם הבנק private Date chequeDate; // המחאהתאריך ה }

class Credit extends Payment { private int creditCardNum; // אשראיהכרטיס ' מס private Date expiryDate; // אשראיהתפוגה של כרטיס התאריך private Date debitDate; // חיובהתאריך }

Page 22: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 22 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

ÏÈ‚¯˙91:

.פעולה לא חוקית (i) .א doc1 הוא אובייקט מסוג Page1שיורש מ - Page שמממש את IPrintBinary. CreateHtmlDoc לפעולה doc1 ולכן לא ניתן להעביר את IPrintHtml - וpage1 בין אין קשר .CreateReportשבמחלקה

(ii) תלא חוקיפעולה .

תהיה שגיאת ולכן IPrintHtml את מממשת האינש Page המחלקהההפניה היא מסוג

.קומפילציה

(iii) פעולה חוקית .

המממש Page - היורש מPage1 והיא מפנה לאובייקט מסוג IPrintBinary ההפניה היא מסוג

. IPrintBinaryפעולה מצפה לקבל אובייקט מסוג . IPrintBinaryאת

שאינה מממשת את הפעולה Pageההפנייה אליו היא מסוג , Page2 הוא מופע של doc2גם אם .ב

createHtml .

( )createHtml.(doc(Page2)) :צע המרה כלפי מטהיש לב, כדי שהפעולה תהיה חוקית

*** Html Doc *** Html Data : num = 11 , num1 = 22 11 22

*** Binary Doc *** Binary Data : num = 33 , num1 = 44 33 44

*** Binary Doc *** 55 66

Page

Page1 Page2

IPrintBinary

IPrintHtml

CreateReport

Page 23: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 23 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

‰Ï‡˘20:

public class Park { private String parkName; // שם גן השעשועים private Attraction [] attractions ; // מערך האטרקציות private int numOfAttractions; // ברגע הנוכחיהאטרקציות ' מס

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()); }

public static void main (String [] args) { Park lunafun = new Park ("lunafun", 30);

Attraction a = new Ride ("MountainTrain", 25,12, 3, 1); lunafun. addAttraction (a);

a = new Show ("Bambi", 150, 3, "Children", true); lunafun. addAttraction (a); }

Page 24: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 24 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

'פרק ב

C# תכנות מונחה עצמים טובי סטפי "הפתרון לפרק זה נכתב ע

ÏÈ‚¯˙21:

Polygonכל (Polygons- מוגדר ברמת המחלקה והיא משותפת לכל הmaxSidesהמשמעות הוא שהנתון .א

.קהזימון ניתן לעשות ברמת המחל) צלעות ואינו תלוי באובייקט100יכול להיות לו עד

. משמעותו שלא ניתן לשנות את הערך לאחר האתחול const-המשמעות שהוא מוגדר כ .ב

Polygonפעולה פנימית במחלקה (i) .ג

public void Expand (Polygon p) { if (p.numSides + this.numSides < = Polygon.maxSides) { for (int i= 0; i < p.numSides; i++) addSides( p.values[i]); } }

(ii) פעולה סטטית חיצונית:

public static void Expand (Polygon p1, Polygon p2) { if (p1.getNumSides() + p2.getNumSides() < = Polygon.maxSides) { for (int i = 0; i < p2.getNumSides( ); i++) p1.addSide (p2.getValues( )[i]); } }

. ד

i p1.Expand (p2);

ii Expand (p1,p2);

iii PolygonOperations.Expand (p1, p2);

Page 25: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 25 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

ÏÈ‚¯˙22:

class Cash : Payment{

}

class Credit:Payment { // מחלקת כרטיס אשראי private int creditCardNumber; // כרטיס אשראי' מס private Date expiryDate; // רטיס אשראיתאריך תפוגה של כ private Date debitDate; // תאריך חיוב }

class Cheque:Payment{ private int chequeNumber; // ק'הצ' מס private string bankName; // שם הבנק private Date chequeDate; // ק'תאריך הצ }

class Payment{ private int sum; // סכום לתשלום }

class Buy { private int total; // כ רכישה"סה private Date purchaseDate; // תאריך רכישה private Payment[ ] payments; // תשלומים שונים private int count; // תשלומים' מס

public bool Check ( ) // כ"כ התשלומים שווה לסה"פעולה הבודקת האם סה

public void PrintReceipt () }

class Store { private Buy[] purchases; // אוסף של קניות החנות private int count; // מספר הקניות

סכום לתשלום ואמצעי התשלום, שיטה המקבלת תאריך הרכישה // public void AddPurchase (Date day, int total, Payment[] payments);

public int DaySum (Date date) // מסויםחישוב סכום הקניות של יום

}

Page 26: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 26 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

ÏÈ‚¯˙23:

i. לא חוקי .doc1 הוא אובייקט מסוג Page1 .Page1יורש מ - Pageשיורש מ - IPrintBinary .

ולכן לא ניתן להעביר אותו כפרמטר לפעולה IPrintHtml - אין הורשה מ

CreateReport.createHtmlDoc

ii. לקת מח. לא חוקיPageאינו יורש מ - IPrintHtmlולכן זה לא יעבור קומפילציה .

iii. הוא שומר אובייקט מסוג . נכוןPage1 יורש מש- Page המממש IPrintBinary . זימון הפעולה

CreateReport.createBinaryDoc מקבל פרמטר מסוג IPrintBinary

המרה בצע ליש ולכן createHtml אין פעולה Pageכי לאובייקט ( )doc.createHtml - ב היה תהשגיאה .ב

( )createHtml.(doc(Page2))כלפי מטה

*** Html Doc *** Html Data : num = 11 , num1 = 22 11 22

*** Binary Doc *** Binary Data : num = 33 , num1 = 44 33 44

*** Binary Doc *** 55 66

Page 27: ב בשחמה יעדמblog.csit.org.il/UpLoad/FilesUpload/pitaron_205_2009.pdf · 2015. 2. 18. · הנכת בוציע 3 בשחמה יעדמ 2009 - ט"סשת - 899205 :ןולאש

עיצוב תכנה 27 מדעי המחשב

2009 - ט " תשס- 899205: שאלון

net.kadman.www הילה קדמן

‰Ï‡˘24:

class Park{ private string parkName; // שם גן השעשועים private int currentNumberOfAttractions; // האטרקציות כרגע' מס private Attraction [] attractions ; // האטרקציות הקיימות

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()); }

public static void Main (string[] args) { Park lunafun = new Park ("lunafun", 30); Attraction a = new Ride ("DareDevil", 10,14,5, 1); lunafun.AddAttraction (a); a = new Show ("Snow White", 100, 0, "Childen", true); lunafun. AddAttraction (a); }