max(sod1,sod2) 5 1 F (9321,345) סוד 1 1 max ( 1, 2 ) F (345,296) סוד 1 0 max ( 0, 2 ) F (296,7) סוד 1 2 max ( 2, 1 ) 2

Σχετικά έγγραφα
2 יח"ל ) השלמה ל - 5 יח"ל) (50 נקודות) מעבר חוקי, ו-'שקר' אחרת.

פתרון תרגיל מרחבים וקטורים. x = s t ולכן. ur uur נסמן, ur uur לכן U הוא. ur uur. ur uur

מבני נתונים מדעי המחשב שאלון: מועד ב' תשע"ו מדעי המחשב פתרון בחינת הבגרות. Java שאלה 1. blog.csit.org.

1 שאלון: תשס"ט { int listsize = size(list); int n = listsize / 3; if (listsize == 0 listsize % 3!

2 שאלות )בחירה מ - 4( סה"כ 25 נקודות לכל שאלה 22 נקודות

תרגול 1 חזרה טורי פורייה והתמרות אינטגרליות חורף תשע"ב זהויות טריגונומטריות

פתרון תרגיל 8. מרחבים וקטורים פרישה, תלות \ אי-תלות לינארית, בסיס ומימד ... ( ) ( ) ( ) = L. uuruuruur. { v,v,v ( ) ( ) ( ) ( )

שדות תזכורת: פולינום ממעלה 2 או 3 מעל שדה הוא פריק אם ורק אם יש לו שורש בשדה. שקיימים 5 מספרים שלמים שונים , ראשוני. שעבורם

תרגול פעולות מומצאות 3

אוטומט סופי דטרמיניסטי מוגדר ע"י החמישייה:

3-9 - a < x < a, a < x < a

שאלה 1 V AB פתרון AB 30 R3 20 R

צעד ראשון להצטיינות מבוא: קבוצות מיוחדות של מספרים ממשיים

חורף תש''ע פתרון בחינה סופית מועד א'

יסודות לוגיקה ותורת הקבוצות למערכות מידע (סמסטר ב 2012)

מדעי המחשב ב' פתרון בחינת הבגרות. One n 4.0. One n T 4 3 T 8 4 T 16 5 T 32 6 F

1 שאלון: תש"ע

לדוגמה: במפורט: x C. ,a,7 ו- 13. כלומר בקיצור

{ : Halts on every input}

פתרון תרגיל 5 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד

לוגיקה ותורת הקבוצות פתרון תרגיל בית 8 חורף תשע"ו ( ) ... חלק ראשון: שאלות שאינן להגשה נפריד למקרים:

= 2. + sin(240 ) = = 3 ( tan(α) = 5 2 = sin(α) = sin(α) = 5. os(α) = + c ot(α) = π)) sin( 60 ) sin( 60 ) sin(

תרגיל 13 משפטי רול ולגראנז הערות

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 315, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן

Logic and Set Theory for Comp. Sci.

s ק"מ קמ"ש מ - A A מ - מ - 5 p vp v=

1 שאלו : Together double x 5.0 int from 2 int to 6 One first Two second One n 5.0 Queue<One>q One n 4.0 One n 8.0 One n 16.

לוגיקה ותורת הקבוצות פתרון תרגיל בית 4 אביב תשע"ו (2016)

דף פתרונות 7 נושא: תחשיב הפסוקים: צורה דיסיונקטיבית נורמלית, מערכת קשרים שלמה, עקביות

מתמטיקה בדידה תרגול מס' 13

מדעי המחשב. פרק ראשון :Java. blog.csit.org.il מדעי המחשב שאלון: עיצוב תכנה 1 מועד ב' תשע"ו פתרון בחינת הבגרות שאלה 1 פעולות עזר:

ניתן לקבל אוטומט עבור השפה המבוקשת ע "י שימוששאלה 6 בטכניקתשפה המכפלה שנייה כדי לבנות אוטומט לשפת החיתוך של שתי השפות:

בחינה בסיבוכיות עמר ברקמן, ישי חביב מדבקית ברקוד

' 2 סמ ליגרת ןורתפ םיפרגה תרותב םימתירוגלא דדצ 1 : הלאש ןורתפ רבסה תורעה

תורת הגרפים - סימונים

ל הזכויות שמורות לדפנה וסטרייך

[ ] Observability, Controllability תרגול 6. ( t) t t קונטרולבילית H למימדים!!) והאובז' דוגמא: x. נשתמש בעובדה ש ) SS rank( S) = rank( עבור מטריצה m

השאלות ידי מצביעים לילדים.

חידה לחימום. כתבו תכappleית מחשב, המקבלת כקלט את M ו- N, מחליטה האם ברצוappleה להיות השחקן הפותח או השחקן השappleי, ותשחק כך שהיא תappleצח תמיד.

גבול ורציפות של פונקציה סקלרית שאלות נוספות

I. גבולות. x 0. מתקיים L < ε. lim אם ורק אם. ( x) = 1. lim = 1. lim. x x ( ) הפונקציה נגזרות Δ 0. x Δx

( )( ) ( ) f : B C היא פונקציה חח"ע ועל מכיוון שהיא מוגדרת ע"י. מכיוון ש f היא פונקציהאז )) 2 ( ( = ) ( ( )) היא פונקציה חח"ע אז ועל פי הגדרת

אלגוריתמים בתורת הגרפים חלק ראשון

מודלים חישוביים פתרון תרגיל 5

. {e M: x e} מתקיים = 1 x X Y

כלליים זמן: S מחסנית, top(s) ראש המחסנית. (Depth First Search) For each unmarked DFS(v) / BFS(v) רקורסיבי. אלגוריתם :BFS

רשימת בעיות בסיבוכיות

תרגיל 7 פונקציות טריגונומטריות הערות

תרגול מס' 6 פתרון מערכת משוואות ליניארית

חלק 1 כלומר, פונקציה. האוטומט. ) אותיות, אלפבית, א"ב (.

logn) = nlog. log(2n

הגדרה: קבוצת פעילויות חוקית היא קבוצה בה כל שתי פעילויות

מתמטיקה בדידה תרגול מס' 5

brookal/logic.html לוגיקה מתמטית תרגיל אלון ברוק

מודלים חישוביים תרגולמס 7

מתמטיקה בדידה תרגול מס' 2

(2) מיונים השאלות. .0 left right n 1. void Sort(int A[], int left, int right) { int p;

מבחן מועד ב' בהצלחה! אנא קיראו היטב את ההוראות שלהלן: ודאו כי כל עמודי הבחינה נמצאים בידכם.

מבני נתונים ואלגוריתמים תרגול #3 נושאים: תור קדימויות/ערימה, עצים

תורת הקבוצות תרגיל בית 2 פתרונות

מבני נתונים ויעילות אלגוריתמים

Regular Expressions (RE)

אלגברה מודרנית פתרון שיעורי בית 6

מבני נתונים (234218) 1

פתרונות , כך שאי השוויון המבוקש הוא ברור מאליו ולכן גם קודמו תקף ובכך מוכחת המונוטוניות העולה של הסדרה הנתונה.

קבוצה היא שם כללי לתיאור אוסף כלשהו של איברים.

משוואות רקורסיביות רקורסיה זו משוואה או אי שוויון אשר מתארת פונקציה בעזרת ערכי הפונקציה על ארגומנטים קטנים. למשל: יונתן יניב, דוד וייץ

אוסף שאלות מס. 3 פתרונות

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

"קשר-חם" : לקידום שיפור וריענון החינוך המתמטי

תאריך הבחינה: שם המרצה: רפי כהן שם המתרגל: יסודות מבני נתונים שם הקורס:

אלגברה ליניארית (1) - תרגיל 6

סדרות - תרגילים הכנה לבגרות 5 יח"ל

מודלים חישוביים מבחן מועד א', סמסטר א' תשע''ה (2015)

סיכום- בעיות מינימוםמקסימום - שאלון 806

מבני נתונים מבחן מועד ב' סמסטר חורף תשס"ו

חישוביות הרצאה 4 לא! זיהוי שפות ע''י מכונות טיורינג הוכחה: הגדרת! : f r

דוגמה: יהי T עץ בינארי כפי שמתואר בציור הבא:

מתמטיקה בדידה תרגול מס' 12

gcd 24,15 = 3 3 =

תורת המספרים 1 פירוק לגורמים ראשוניים סיכום הגדרות טענות ומשפטים אביב הגדרות 1.2 טענות

הגדרה: מצבים k -בני-הפרדה

מבני נתונים ואלגוריתמים תרגול #11

אלגברה לינארית מטריצות מטריצות הפיכות

x a x n D f (iii) x n a ,Cauchy

פתרון תרגיל 6 ממשוואות למבנים אלגברה למדעי ההוראה.

אלגברה ליניארית 1 א' פתרון 2

תכנון אלגוריתמים 2016 עבודה 1 שאלה 1 פתרון נתונות שתי בעיות. יש למצוא: אורך מסלול קצר ביותר המתחיל באחד מן הקודקודים s 1,..., s k ומסתיים ב t.

אלגוריתמים / תרגיל #1

מתכנס בהחלט אם n n=1 a. k=m. k=m a k n n שקטן מאפסילון. אם קח, ניקח את ה- N שאנחנו. sin 2n מתכנס משום ש- n=1 n. ( 1) n 1

תרגול 8: מטלאב לולאות

תרגילים באמצעות Q. תרגיל 2 CD,BF,AE הם גבהים במשולש .ABC הקטעים. ABC D נמצאת על המעגל בין A ל- C כך ש-. AD BF ABC FME

מודלים חישוביים תרגולמס 5

רשימת משפטים והגדרות

אוטומטים- תרגול 10: מכונות טיורינג.

אלגוריתמים בתורת הגרפים חלק שני

אוטומטים- תרגול 8 שפות חסרות הקשר

משפטי בקרה ולולאות שעור מס. 3 כל הזכויות שמורות דר' דרור טובי המרכז האוניברסיטאי אריאל

מכונת טיורינג אוטומט מחסנית לא דטרמיניסטי שפות חופשיות הקשר (שפת ראי לא מסומנת)

התפלגות χ: Analyze. Non parametric test

Transcript:

1 ב' פתרון בחינת הבגרות פרק א - סוד 86)1 (31547, :1 Ï א. טבלת מעקב למשפט הזימון: n1 n2 n1 = 0, n2 = 0 n1 = 0, n2 0 = 0 n2 n1 0, ערך מוחזר 86 31547 F F F 3 8 3154 F F F 3 0 315 F T 1 + 2 3 0 31 F T 1 + 1 2 0 3 F T 1 + 0 1 0 0 T 0 ב. ג. הערך המוחזר הוא 3. האלגוריתם מחזיר את ההפרש במספר הספרות של n1 ו- n2 טבלת מעקב למערך ולזימון: סוד 2 1), 5, ( 1 2 3 4 5 9321 345 296 7 98 n k k = n - 1 (k = 4) סוד 1 ([k],[k+1]) ערך מוחזר mx(sod1,sod2) 5 1 F (9321,345) סוד 1 1 mx ( 1, 2 ) 2 5 2 F (345,296) סוד 1 0 mx ( 0, 2 ) 2 5 3 F (296,7) סוד 1 2 mx ( 2, 1 ) 2 1 1 סוד 1 (7,98) T 5 4 הערך המוחזר הוא 2. ד. סוד 2 מחזיר את הפרש מספר-הספרות הגדול ביותר בין שני תאים סמוכים במערך החל ממקום k ועד המקום N (סוף מהערך).

2 :2 Ï type מסעדת "טעמים 22" א. ייצוג בשפת פסקל: ingredienttype = string; מרכיב-מזון = מחרוזת list_info_type = ingredienttype; רשימת-המרכיבים-למנה = רשימה שכל איבר בה מטיפוס מרכיב-מזון. או: מערך בגודל 15 של מרכיבי-מזון. (שורה זו תרשם ביחידת ספריה (List ingredintlist = rry [1..15] of ingredienttype או: course = record code : integer; dishnme : string; L : list_type; end; מנה-במסעדה = רשומה קוד-מנה - מספר שלם שם-המנה - מחרוזת סוגי-מזון = רשימת המרכיבים למנה course = record code : integer; dishnme : string; L : ingredintlist; end; או : menu = record menunme : string; rr : rry [1..22] of course ; end; תפריט-במסעדה = רשומה שם-התפריט - מחרוזת מערך בגודל 22 של מנות-במסעדה

3 :C א. ייצוג בשפת typedef chr * ingredienttype ; מרכיב-מזון = מחרוזת רשימת-המרכיבים-למנה = רשימה שכל איבר בה מטיפוס מרכיב-מזון. או: מערך בגודל 15 של מרכיבי-מזון. typedef ingredienttype list_info_type; (שורה זו תרשם ביחידת ספריה (List או: ingredienttype ingredintlist [15] ; typedef struct int code; chr * dishnme; list_type L; course ; מנה-במסעדה = רשומה קוד-מנה - מספר שלם שם-המנה - מחרוזת סוגי-מזון = רשימת המרכיבים למנה typedef struct int code; chr * dishnme; ingredintlist L ; course; או : typedef struct chr * menunme; course rr[22]; menu ; תפריט-במסעדה = רשומה שם-התפריט - מחרוזת מערך בגודל 22 של מנות-במסעדה

4 ב. (1) מרכיב- F -לא-במנה f) (M, הפעולה מקבלת תפריט M ומרכיב-מזון f ומדפיסה את כל המנות ש- f אינו מרכיב בהן (את כל המנות שניתן להכין). הנחה: התפריט מאותחל ותקין. עבור i מ- 1 ועד 22 בצע: i מקבל את רשימת המרכיבים למנה L L M.rr[i].L (1.1) אם לא נמצא-ברשימה (f,l) אזי הדפס את M.rr[i].code (1.2) M : menu מערך המנות M.rr 1 2 3 k 21 22 קוד קוד קוד קוד קוד קוד שם שם שם שם שם שם L L L L L L שם התפריט מרכיב 1 M.rr[k].code k מנה M.rr[k] מרכיב 2 M.rr[k].nme בייצוג האחר, L הוא מערך בגודל 15 מרכיב 3 M.rr[k].L // נמצא-ברשימה f) (L, פעולה המחזירה 'אמת' אם f הוא איבר ברשימת מרכיבי המזון L ו-'שקר' אחרת. הנחה: L מאותחל. עוקב-ברשימה (עוגן-רשימה (L) p (L, (1) כל עוד p סוף-רשימה (L) בצע: (2) אחזר-מרשימה p) x (L, (2.1) אם x = f אזי (2.2) החזר 'אמת' עוקב-ברשימה p) p (L, (2.3) החזר 'שקר' (3)

5 ואם L הוא מערך מרכיבי המזון: נמצא-ברשימה f) (L, פעולה המחזירה 'אמת' אם f הוא איבר במערך מרכיבי המזון L ו-'שקר' אחרת. הנחה: L מאותחל. i 1 (1) כל עוד 15 i וגם L[i] אינו תא ריק, בצע: (2) אם L[i] = f אזי החזר 'אמת' (2.1) i i + 1 (2.2) החזר 'שקר' (3) הפעולה מקבלת תפריט M ומרכיב-מזון f ומדפיסה את כל המנות ש- f אינו מרכיב בהן (את כל המנות שניתן להכין). הנחה: התפריט מאותחל ותקין. procedure Ingredient_F_not_in_course (M : menu ; f : ingredienttype); vr i : integer; L : list_type; egin for i := 1 to 22 do egin L := M.rr[i].L; if not found_in_list (L, f) then writeln (M.rr[i].code); end; end; פסקל: פעולה המחזירה 'אמת' אם f הוא איבר ברשימת מרכיבי המזון L ו-'שקר' אחרת. הנחה: L מאותחל. function found_in_list (L : list_type ; f : ingredienttype) : oolen; vr p : pos_type; x : list_info_type; found : oolen; egin found := flse; p := list_next (L, list_nchor (L)); while (p <> list_end (L)) nd (not found) do egin list_retrieve (L, p, x); if (x = f) then found := true else p := list_next (L, p);

6 end; end; found_in_list := found; פעולה המחזירה 'אמת' אם f הוא איבר במערך מרכיבי המזון L ו-'שקר' אחרת. הנחה: L מאותחל. function found_in_list (L : ingredintlist ; f : ingredienttype) : oolen; vr i : integer; found : oolen; egin found := flse; i := 1; while (i <=15) nd (L[i] <> '' ) nd (not found) do if (L[i] = f) then found := true else i := i + 1; found_in_list := found; end; // // // הפעולה מקבלת תפריט M ומרכיב-מזון f ומדפיסה את כל המנות ש- f אינו מרכיב בהן (את כל המנות שניתן להכין). הנחה: התפריט מאותחל ותקין. void Ingredient_F_not_in_course (menu M, ingredienttype f) int i; list_type L; for (i = 0 ; i < 22 ; i++) L = M.rr[i].L; if (found_in_list (L, f) = = 0) printf ("%d \n", (M.rr[i].code); :C

7 // // פעולה המחזירה 'אמת' אם הנחה: L מאותחל. f הוא איבר ברשימת מרכיבי המזון L ו-'שקר' אחרת int found_in_list (list_type L, ingredienttype f) pos_type p; list_info_type x; p = list_next (L, list_nchor (L)); while (p!= list_end (L) list_retrieve (L, p, x); if (strcmp(x, f) = = 0) return 1; p = list_next (L, p); return 0; // // פעולה המחזירה 'אמת' אם f הוא איבר במערך מרכיבי המזון L ו-'שקר' אחרת. הנחה: L מאותחל. int found_in_list (ingredintlist L, ingredienttype f) int i = 0; while (i < 15 && strcmp (L[i], "")!= 0) if (strcmp (L[i], f) = = 0) return 1; i ++; return 0; הערה: בפתרון שאלות 2 ו- 4 נעשה שימוש בתבניות אלגוריתמיות המופיעות בתבניות ב של אוניברסיטת תל-אביב.

8 מסעדת "טעמים 22": א. ייצוג בשפת :Jv (הטבלה שלהלן מתאימה גם ל- #C) pulic clss Ingredient privte String ingredient ; pulic clss Course privte int code; privte String title; List <Ingredient> ingeds; pulic sttic int N = 15; Ingredient [] ingreds; privte int lst; pulic Course (int code,string title) this.code - code; this.title = title; ingreds = new List <Ingredient>(); or: ingreds = new Ingredient[N]; this.lst = 0; pulic void ddingredient (String nme) this.ingreds.insert (neme); or: if (this.lst < 15) ingreds[this.lst ++] = nme; pulic clss Menu pulic sttic int N = 22; privte int lst; Course [] rr; pulic Menu () this.rr = new Course [N]; this.lst = 0; pulic void ddcourse (Course cor) if (this.lst < N) rr[this.lst ++] = cor; מרכיב-מזון = מחרוזת מנה במסעדה = קוד מנה = מספר שלם שם המנה = מחרוזת רשימת-המרכיבים-למנה = רשימה שכל איבר בה מטיפוס מרכיב-מזון. או: מערך בגודל 15 של מרכיבי-מזון. הערות: במקום המחלקה Ingredeint ניתן להשתמש ב-.String בכל מקום שבו כתוב Ingredient נחליף את הכיתוב ב- String או: הקוד שבצבע ירוק אינו חלק שנדרש בפתרון הבחינה, והוא מובא כאן לצרכי הבהרת הפתרון בלבד. תפריט-במסעדה = שם-התפריט - מחרוזת מערך בגודל 22 של מנות-במסעדה

9 import unit4.collectionsli.list; import unit4.collectionsli.node; פתרון בשפת :Jv תודה לעפרה ברנדס מצוות הפיתוח בירושלים. /** פתרון לשאלה 2 בבגרות קיץ תשס "ז * צוות הפיתוח, האוניברסיטה העברית ירושלים @uthor * * @version 15/5/2007 */ pulic clss Course privte int code; privte String nme; privte List<String> ingredients; pulic sttic finl int MAX_INGREDIENTS = 15; pulic oolen continsingredient(string f) Node<String> pos = this.ingredients.getfirst(); while (pos!= null) if (pos.getinfo().equls(f)) return true; pos = pos.getnext(); return flse; pulic int getcode() return this.code; /** פתרון לשאלה 2 בבגרות קיץ תשס "ז * צוות הפיתוח, האוניברסיטה העברית ירושלים @uthor * * @version 15/5/2007 */ pulic clss Menu privte String nme; privte Course[] courses = new Course[22]; pulic void printavillecourses(string f) for (int i=0; i<22; i++) if ((courses[i]!= null) && (!courses[i].continsingredient(f))) System.out.println(courses[i].getCode());

10 פתרון בשפת #C: תודה לעפרה ברנדס מצוות הפיתוח בירושלים. using System; using System.Collections.Generic; using System.Text; nmespce Bgrut /// <summry> פתרון לשאלה 2 בבגרות קיץ תשס "ז /// /// </summry> /// <uthor> צוות הפיתוח, האוניברסיטה העברית ירושלים </uthor> /// <version> 17/5/2007 </version> pulic clss Course privte int code; privte string nme; privte List<string> ingredients; pulic const int MAX_INGREDIENTS = 15; pulic ool ContinsIngredient(string f) Node<string> pos = this.ingredients.getfirst(); while (pos!= null) if (pos.getinfo().equls(f)) return true; pos = pos.getnext(); return flse; pulic int GetCode() return this.code;

11 using System; using System.Collections.Generic; using System.Text; nmespce Bgrut /// <summry> פתרון לשאלה 2 בבגרות קיץ תשס "ז /// /// </summry> /// <uthor> צוות הפיתוח, האוניברסיטה העברית ירושלים </uthor> /// <version> 17/5/2007 </version> pulic clss Menu privte string nme; privte Course[] courses = new Course[22]; pulic void PrintAvilleCourses(string f) for (int i = 0; i < 22; i++) if ((courses[i]!= null) && (!courses[i].continsingredient(f))) Console.WriteLine(courses[i].GetCode());

12 :3 Ï מסלול-אחיד? (T) פעולה המחזירה 'אמת' אם קיים מסלול, המתחיל בשורש העץ T ומסתיים באחד העלים שלו, וכל ערכי הצמתים בו זהים, ו-'שקר' אחרת. הנחה: העץ T מאותחל. (1) החזר: קיים-מסלול-אחיד? 1) (T, או קיים-מסלול-אחיד? 2) (T, קיים-מסלול-אחיד? x) (T, פעולה המחזירה 'אמת' אם קיים מסלול, המתחיל בשורש העץ T ומסתיים באחד העלים שלו, וערכי כל הצמתים בו הם, x ו-'שקר' אחרת. הנחה: העץ T מאותחל. אם עץ-ריק? (T) החזר 'שקר' (1) אם אחזר-שורש (T) x החזר 'שקר' (2) בשלב זה כבר ברור שערך הצומת הוא x אם עלה? (T) החזר 'אמת' (3) קיים-מסלול-אחיד? x), תע"י ((T) או החזר קיים-מסלול-אחיד? x), תע"ש ((T) (4) עלה? (T) פעולה המחזירה 'אמת' אם T עלה, ו-'שקר' אחרת. הנחה: T מאותחל אם עץ-ריק? (T) החזר 'שקר' (1) אם עץ-ריק? (תע"ש (T)) וגם עץ-ריק? (תע"י (T)) החזר 'אמת' (2) החזר 'שקר'. (3) :Ë Ô È È È ÏÚ Î :2 ÔÂ Ù מסלול-אחיד? (T) הפעולה מחזירה 'אמת' אם קיים מסלול אחיד (לפי הגדרת השאלה) בעץ הבינארי T, ו 'שקר' אחרת. הנחה: העץ מאותחל. (1) אם (עץ-ריק?( T )) או (עלה?( T )) אזי (1.1) החזר: 'אמת' (2) (לא עץ-ריק?(תע"ש( T ))) וגם (אחזר-שורש( T ) = אחזר-שורש(תע"ש( T ))) וגם (מסלול-אחיד?(תע"ש( T ))) Left (3) (לא עץ-ריק?(תע"י( T ))) וגם (אחזר-שורש( T ) = אחזר-שורש(תע"י( T ))) וגם (מסלול-אחיד?(תע"י( T ))) Right (4) החזר: (Left) או (Right)

13 :ÈÏ ÈÓ È È ÏÚ Î :3 ÔÂ Ù מסלול-אחיד? (T) פעולה מקבלת עץ בינארי ומחזירה 'אמת' אם קיים מסלול אחיד אחרת יוחזר 'שקר'. הנחה: T עץ בינארי מאותחל. אם עץ-ריק? (T) אזי החזר 'שקר' (1) אם עלה? (T) אזי החזר 'אמת' (2) אחזר-שורש (T) x (3) אם לא עץ-ריק? (תת-עץ-שמאלי (T)) וגם לא עץ-ריק? (תת-עץ-ימני( T )) וגם (4) אחזר-שורש (תת-עץ-שמאלי( T ) x וגם אחזר-שורש (תת-עץ-ימני( T ) x החזר 'שקר' (4.1) אם לא עץ-ריק? (תת-עץ-שמאלי( T )) וגם (עץ-ריק? (תת-עץ-ימני( T )) וגם (5) אחזר-שורש (תת-עץ-שמאלי( T )) x אזי החזר 'שקר' (5.1) אם (עץ-ריק(תת-עץ-שמאלי( T ))) וגם (לא עץ-ריק(תת-עץ-ימני( T ))) וגם (6) אחזר-שורש (תת-עץ-ימני( T )) x אזי החזר 'שקר' (6.1) החזר: מסלול-אחיד? (תת-עץ-שמאלי( T )) או מסלול-אחיד? (תת-עץ-ימני( T )) (7) אזי :È -Ô ÙÚ È È ÏÚ Î :4 ÔÂ Ù אמנם תור ירד במיקוד, אבל הנה עוד רעיון לפתרון - אלגוריתם מסלול-אחיד, לא רקורסיבי, המשתמש בתור: מסלול-אחיד (T) פעולה מקבלת עץ בינארי ומחזירה 'אמת' אם קיים מסלול אחיד אחרת יוחזר 'שקר'. הנחה: T עץ בינארי מאותחל. אם לא עץ-ריק? (T) אזי: (1) x אחזר-שורש (T) (1.1) אתחל תור Q (1.2) הכנס-לתור (Q,T) (1.3) כל עוד לא תור-ריק? (Q), בצע: (1.4) T1 הוצא-מתור( Q ) (1.4.1) אם עלה? (T1), החזר 'אמת' (1.4.2) אם לא עץ-ריק? (תע"ש( T1 )), אזי: (1.4.3) אם אחזר-שורש(תע"ש( T1 )) x = אזי (1.4.3.1) הכנס-לתור (תע"ש( Q,(T1 ) אם לא עץ-ריק? (תע"י( T1 )), אזי: (1.4.4) אם אחזר-שורש(תע"י( T1 )) x = אזי (1.4.4.1) הכנס-לתור (תע"י( Q,(T1 ) החזר 'שקר' (2)

14 :4 Ï טלפון נייד: א. ייצוג: מספר-טלפון = מחרוזת. יומן-שיחות-נכנסות = רשומה - L רשימת מספרי הטלפון שביומן השיחות הנכנסות: רשימה שכל איבר בה מטיפוס מספר-טלפון. - mxclls מספר שלם ולא שלילי המייצג את המספר המקסימלי של מספרי-טלפון שניתן לשמור ביומן השיחות הנכנסות. - currentclls מספר שלם ולא שלילי המייצג את מספר מספרי הטלפון השמורים בזמן מסויים ביומן השיחות הנכנסות. type phonenum = string [10]; list_info_type = phonenum ; ייצוג בשפת פסקל: ביחידת ספרייה רשימה נרשום : incomingclllog = record L : list_type; mxclls, currentclls : integer; end; בתכנית נגדיר : ייצוג בשפת C: chr phonenum [10]; typedef phonenum list_info_type ; ביחידת ספרייה רשימה נרשום : typedef struct list_type L; int mxclls, currentclls; incomingclllog ; בתכנית נגדיר : משתנים: = d יומן השיחות הנכנסות = tel מספר טלפון.

15 ב. תת תכנית לעדכון יומן השיחות הנכנסות: תהליך עדכון שיחה נכנסת: האם tel נמצא ברשימת השיחות הנכנסות? אם כן - הוצאתו מהמיקום הנוכחי והעברתו לתחילת הרשימה. אם לא - האם יש מקום פנוי ביומן? אם כן - הכנסת tel לתחילת הרשימה ועדכון currentclls אם לא - מחיקת השיחה האחרונה ברשימה והכנסת tel לתחילת הרשימה. פעולות עזר: אתר-ברשימה tel) (L, הכנס-להתחלה tel) (L, מחק-מהסוף (L) יש-מקום-פנוי? (d) המחזיר את מקומו של tel ברשימה L. אם לא קיים tel יחזיר את סוף-רשימה. המכניס את מספר הטלפון לתחילת הרשימה. המוחק את מספר הטלפון האחרון ברשימה. המחזיר 'אמת' אם יש מקום פנוי ביומן השיחות, ו-'שקר' אחרת. שיחה-נכנסת tel) (d, יומן שיחות נכנסות d ומספר טלפון.tel ט.כניסה: יומן השיחות מעודכן. ט.יציאה: d מאותחל ותקין. הנחה: אתר-ברשימה tel) p (d.l, (1) אם p סוף-רשימה (d.l) אזי - (2) הוצא-מרשימה p) (d.l, (2.1) הכנס-להתחלה tel) (d.l, (2.2) tel אינו ברשימה אחרת - (3) אם יש-מקום-פנוי? (d) אז - (3.1) הכנס-להתחלה tel) (d.l, (3.1.1) d.currentclls d.currentclls + 1 (3.1.2) אחרת - (3.2) מחק-מהסוף (d.l) (3.2.1) הכנס-להתחלה tel) (d.l, (3.2.2)

16 פסקל: ט.כניסה: ט.יציאה: הנחה: יומן שיחות נכנסות d ומספר טלפון.tel יומן השיחות מעודכן. d מאותחל ותקין. procedure incommingcll (vr d : incoingclllog; tel : phonenum) vr p : pos_type; egin p := list_find_plce (d.l, tel); if (p <> list_end (d.l)) then egin list_delete (d.l, p); list_insert_top (d.l, tel); end else egin if (vil_plce (d)) then egin list_insert_top (d.l, tel); d.currentclls := d.currentclls + 1; end else egin list_delete_ottom (d.l); list_insert_top (d.l, tel); end; end; end; פעולה המחזירה את מקומו של tel ברשימה מאותחלת L, אם לא נמצא יוחזר המקום סוף-רשימה. function list_find_plce (L : list_type; tel : list_info_type) : pos_type; vr p : pos_type; x : list_info_type; found : oolen; egin found := flse; p := list_next (L, list_nchor (L)); while ( p <> list_end (L)) nd not found do egin list_retrieve (L, p, x); if (x = tel) then found := true else p := list_next (L, p); end;

17 end; list_find_plce := p; פעולה המכניסה את tel לתחילתה של רשימה מאותחלת L procedure list_insert_top (vr L : list_type, tel : list_info_type); egin list_insert (L, list_nchor (L), tel); end; פעולה המוחקת את האיבר שנמצא בסוף הרשימה המאותחלת L procedure list_delete_ottom (vr.l : list_type); vr p : pos_type; egin p := list_prev (L, list_end(l)); list_delete (L, p); end; פעולה המחזירה 'אמת' אם יש מקום פנוי ביומן השיחות המאותחל, d ו-'שקר' אחרת. function vil_plce (d : incomingclllog) : oolen; egin vil_plce := (d.currentclls < d.mxclls); end;

18 :C #define TRUE 1 #define FALSE 0 בראש התכנית הוגדר : // // // ט.כניסה: ט.יציאה: הנחה: יומן שיחות נכנסות d ומספר טלפון.tel יומן השיחות מעודכן. d מאותחל ותקין. void incommingcll (incoingclllog * d, phonenum tel) pos_type p; p = list_find_plce (d.l, tel); if (p!= list_end (d.l)) list_delete (&d.l, &p); list_insert_top (&d.l, tel); else if (vil_plce (d)) list_insert_top (&d.l, tel); d.currentclls := d.currentclls + 1; else list_delete_ottom (&d.l); list_insert_top (&d.l, tel); פעולה המחזירה את מקומו של tel ברשימה מאותחלת L, אם לא נמצא יוחזר המקום סוף-רשימה. // pos_type list_find_plce (list_type L, list_info_type tel) pos_type p; list_info_type x; p = list_next (L, list_nchor (L)); while ( p!= list_end (L)) list_retrieve (L, p, &x); if (strcmp(x, tel) = = 0) return p; p = list_next (L, p);

19 return p; פעולה המכניסה את tel לתחילתה של רשימה מאותחלת // L void list_insert_top (list_type *L, list_info_type tel) list_insert (*L, list_nchor (*L), tel); פעולה המוחקת את האיבר שנמצא בסוף הרשימה המאותחלת // L void list_delete_ottom (list_type *L) pos_type p; p = list_prev (*L, list_end(*l)); list_delete (L, p); פעולה המחזירה 'אמת' אם יש מקום פנוי ביומן השיחות המאותחל, d ו-'שקר' אחרת. // int vil_plce (incomingclllog d) if (d.currentclls < d.mxclls) return TRUE; return FALSE;

20 פתרון בשפת :Jv תודה לעפרה ברנדס מצוות הפיתוח בירושלים. import unit4.collectionsli.list; import unit4.collectionsli.node; /** פתרון לשאלה 4 בבגרות קיץ תשס "ז * צוות הפיתוח, האוניברסיטה העברית ירושלים @uthor * * @version 15/5/2007 */ pulic clss IncomingCllsDiry privte List<String> incomingclls; privte int mxclls; privte int currentclls; pulic void ddincomingcll(string tel) oolen telwsalredyindiry = flse; Node<String> prev = null; Node<String> curr = this.incomingclls.getfirst(); while (curr!= null) if (curr.getinfo().equls(tel)) this.incomingclls.remove(curr); telwsalredyindiry = true; prev = curr; curr = curr.getnext(); if (!telwsalredyindiry) if (this.currentclls < this.mxclls) this.currentclls++; else this.incomingclls.remove(prev); this.incomingclls.insert(null,tel);

21 פתרון בשפת #C: תודה לעפרה ברנדס מצוות הפיתוח בירושלים. using System; using System.Collections.Generic; using System.Text; nmespce Bgrut /// <summry> פתרון לשאלה 4 בבגרות קיץ תשס "ז /// /// </summry> /// <uthor> צוות הפיתוח, האוניברסיטה העברית ירושלים </uthor> /// <version> 17/5/2007 </version> pulic clss IncomingCllsDiry privte List<string> incomingclls; privte int mxclls; privte int currentclls; pulic void AddIncomingCll(string tel) ool telwsalredyindiry = flse; Node<string> prev = null; Node<string> curr = this.incomingclls.getfirst(); while (curr!= null) if (curr.getinfo().equls(tel)) this.incomingclls.remove(curr); telwsalredyindiry = true; prev = curr; curr = curr.getnext(); if (!telwsalredyindiry) if (this.currentclls < this.mxclls) this.currentclls++; else this.incomingclls.remove(prev); this.incomingclls.insert(null, tel);

22 הערה: :5 ÏÈ פרק ב' מערכות מחשב ואסמבלר הפתרון לפרק זה נכתב ע"י עידן פרייברג (תלמיד מגמת הנדסת תכנה, מקיף ח' ראשל"צ) הפתרון מובא כלשונו, וללא הגהה. :6 ÏÈ :7 ÏÈ סעיף א' i. הקטע אינו מבצע את הנדרש. בהוראת החיסור BX,M) (SUB האופרנדים מסוגים שונים (לא מתאימים) ) BX מסוג מילה, N=N[0] שהוא מסוג בית) דבר שאינו יתכן. הקטע אינו מבצע את הנדרש. ההוראה AX,[M] LEA לא תקינה. הקטע מבצע את הנדרש. הקטע אינו מבצע את הנדרש. נתון כי אינדקס המערך מקבל ערכים בין 0 לבין 49 ולכן אין צורך להגדיל את (INC BX) BX.ii.iii.iv סעיף ב'.i הקטע אינו מבצע את המשימה. לאחר ההוראה DEC AX חסרה הוראת הקפיצה.JMP A2 הקטע אינו מבצע את המשימה. השגיאה היא בהוראה JGE A1 באלגוריתם נתון כי רק אם 50<X עלינו להגדיל את ערכו ב- 1. לכן צריך להיות.JG A1 הקטע מבצע את המשימה. הקטע אינו מבצע את המשימה. יש להחליף בין הוראת DEC AX לבין.INC BX (הקטע הנ"ל מבצע את ההפך).ii.iii.iv :8 Ï

23.MODEL SMALL.STACK 100H N EQU 11 ; גודל המערך N.DATA A DB N dup(?).code START: MOV AX,@DATA MOV DS,AX הכתובת של מערך LEA BX,A ; BX A MOV SI,0 MOV AL,0 ; יכיל את סכום האיברים הסמוכים המקסימלי AL MOV CX,N-1 AGAIN:MOV AH,[BX+SI] INC SI MOV DH,[BX+SI] ADD AH,DH CMP AH,AL JLE CONT XCHG AL,AH CONT: LOOP AGAIN MOV AH,4CH INT 21H END START

24 פרק ב' תורת המחשב :9 Ï 4 ( x) x f = [ 1,5] נתון: בקטע: = 1 = 5 n = 4 1 2 3 4 5 x 0 x 1 x 2 x 3 x 4 S [ i, i+ 2] ( ) ( f ( x ) + 4 f ( x ) + f ( x )) = i i+ 1 i+ 2 3n א. חישוב השטח תחת גרף הפונקציה: S S [ 0,2] [ 2,4] = = ( ) 4 4 4 4 ( f ( x ) + 4 f ( x ) + f ( x )) = ( 1 + 4 2 + 3 ) 3n ( ) 4 4 4 4 ( f ( x ) + 4 f ( x ) + f ( x )) = ( 3 + 4 4 + 5 ) 3n 0 2 1 3 2 4 12 12 = 2 48 3 2 576 3 = S + S [ 0,2] [ 2,4] = 2 48 3 + 576 2 3 = 1 625 3 624 הערה: לצורך ההשוואה, חישוב האינטגרל מתחת לגרף הפונקציה בתחום הנתון הוא:

25 אלגוריתם לחישוב השטח לפי השיטה המתוארת: ב. תפקיד המשתנה טיפוס המשתנה טבלת משתנים: שם משתנה גבולות הקטע מספר שלם, גודל השגיאה המותרת: = 0.001 3-10 מספר ממשי eps מספר החלקים של הקטע. n זוגי מספר שלם n השטח מחישוב קודם מספר ממשי השטח מחישוב נוכחי מספר ממשי מספר ממשי רוחב הרצועה: (-)/(3*n) w - ערך ה- x הראשון בשלשה x i S 0 S 1 מספר ממשי שיעור c אתחול נתונים: 0.001 eps 1, 5, n 2, S 0 1, S 1 0 כל עוד S 0 - S 1 > eps בצע: S 0 S 1 (3.1) בהתחלה נקבע n להיות 2 כדי שהחישוב הראשון יתחיל עם 4 n n * 2 (3.2) רצועות. (3.3) חישוב-שטח n) S 1 (,, (1) (2) (3) פעולה המחזירה את x 4 F (x) חישוב-מקטע w) (x, y, z, פעולה המקבלת את שלשת נקודות y, x ו- z ואת רוחב הרצועה w ומחזירה את השטח עבור נקודות אלו. הנחה: x < y < z החזר: F(z)) w * (F(x) + 4*F(y) + עבור n הנוכחי חישוב-שטח n) (,, פעולה המחשבת את השטח תחת גרף הפונקציה בתחום [,] w ( - ) / (3 * n) (1) c (2) S 0 (3) עבור i מ- 1 ועד מחצית n בצע: (3) חישוב-מקטע c+2w) S S + (c, c+w, (3.1) c c + 2w (3.2) החזר את S (4)

26 פתרון בשפת C נכתב על ידי זיוה קונצמן S=S[1,3]+S[3,5] f(x)=x 4 S=4/12(1 4 +4*2 4 +3 4 )+4/12(3 4 +4*4 4 +5 4 )=1/3(1+64+81)+1/3(81+1024+625)= 146/3+1730/3=1876/3=625 1 / 3 #include<stdio.h> #define 1 #define 5 #define diyuk 0.001 flot f(flot x) f=sqr(x)* sqr(x); חישוב שטח של מקטע אחד // flot re1(flot x1,flot x2,flot x3,int n) return (-)/(3*n) * (f(x1) + 4*f(x2) + f(x3)); void min() flot x1, x2, x3, c, h, s1=0, s2=0; int n = 4, i; ב. h = (-)/ (3*n); c = ; for (i = 1 ; i <= n/2 ; i++) s1 += re1 (c, c+h, c+2*h, n); c = c + 2*h; n *= 2; h = (-)/ (3*n); c = ; for ( i = 1 ; i <= n/2 ; i++) s2 += re1(c, c+h, c+2*h, n); c = c + 2*h; while (s(s2-s1) > diyuk)

27 s1 = s2; s2 = 0; c = ; n *= 2; for (i = 1 ; i <= n/2 ; i++) s2 += re1(c, c+h, c+2*h, n); c = c + 2*h; printf ("%f", s2); הפתרון לשאלה זו נכתב ע"י: זיוה קונצמן :10 Ï א. 1 2 3 4 5 ב. מספר הקשתות בגרף "גלגל" W n הוא 2-2n. הסבר: מצומת 1 תמיד יוצאות 1-n קשתות. מצומת 2 תמיד יוצאת עוד קשת אחת לצומת n. מצומת 3 תמיד יוצאות עוד 2 קשתות (לצומת 2 ולצומת 4). כל שאר הצמתים - - מצומת 3 עד צומת n, לא כולל צומת n ז.א. 1-3-n צמתים, 4-n צמתים מכל צומת כזו יוצאת עוד קשת אחת, לצומת העוקבת לה. סה"כ : n-1+1+2+n-4=2n-2 ג. לא קיים n בעבורו נוצר מעגל אוילר, מכיוון שתמיד צומת 2 היא בדרגה אי-זוגית קשורה לצומת 1 ל, צומת 3 ולצומת n. ומעגל אוילר קיים רק אם כל הצמתים בגרף הן בדרגה זוגית. ד. המספר המינימלי של קבוצות ב"חלוקה זרה" בגרף "גלגל" W n תלוי ב n. אם n זוגי, המספר המינימלי הוא 4, אם n אי-זוגי המספר המינימלי הוא 3. הסבר: 1 תמיד יהווה קבוצה נפרדת, כי כולם קשורים אליו.

28 אם n אי-זוגי כל המספרים הזוגיים יהיו קבוצה שניה וכל המספרים האי-זוגיים יהיו קבוצה שלישית. אם nזוגי שוב, 1 לבד, כל הזוגיים יהיו קבוצה שניה, כל האי-זוגיים יהיו קבוצה שלישית ו- n יהיה קבוצה רביעית. מכיוון ש- 2 קשור תמיד לצומת n, אם n זוגי, הוא לא יכול להיות עם קבוצת הזוגיים ואז נוסםת הקבוצה הרביעית. :11 Ï L= k m 2k+ m j = 0, 1, 2, 3j + 1 m > 0, k > 0 2 3 = mod) m mod שארית (% כלומר - מספר ה- יהיה: 3j תנאים: או m = 1, k = 1 א. המילה הקצרה ביותר: ב. אוטומט מחסנית:,A / AA,B / ε,a / ε לל"ש = ללא שינוי, / AA,A / B # % 3 = 1,B / ε לל "ש /,ε,b / B,B / B,B / ε # % 3 = 2,B / B # % 3 = 0

29 :12 Ï א. אס"ד המקבל את כל המילים מעך, שיש בהן רצף, q 0 q 1 q 2 q 3 q 0 q 1 q 0 q 1 q 1 q 2 q 2 q 3 q 0 q 3 q 3 q 3 ב. אס"ד המקבל את כל המילים מעך,, שאין בהן רצף q 4 q 5 q 6 q 7 q 4 q 4 q 5 q 5 q 6 q 5 q 6 q 4 q 7 q 7 q 7 q 7

30 q 04 q 14 q 05 q 14 q 14 q 25 q 05 q 16 q 05 q 25 q 36 q 05 q 16 q 14 q 27 q 36 q 34 q 37 q 27 q 37 q 07 q 34 q 34 q 35 q 37 q 37 q 37 q 07 q 17 q 07 q 35 q 36 q 35 q 17 q 17 q 27 q 404 q 14 q 25 q 36 q 405 q 16 q 27 q 35 q 34 q 37 q 17 q 07, ניתן לאחד קבוצת מצבים זו למצב מלכודת אחד

31 L n = 1 n 1 0 n n L2 = R(0 n 0) = 0 n 0 n n L3 = 0 1 n 0 פרק ב' מודלים חישוביים הפתרון לפרק זה נכתב ע"י רחל לודמר. השפה n L = 0 n 0 :13 ÏÈ א. סעיף (i) L 1 ~ 1 = w1 w (, ) L2 = R(0w 0) w (, ) = 0R( w)0) w (, ) L3 = 0w0 1 w ~ 1 w (, ) n k L1 = 1 (10) n, k 0 n k k n L2 = R(0 (01) ) n, k 0 = (10) 0 ) n, k 0 n k n k L3 = 0 (01) 1 (10) n, k 0 L = 0w0 (, ) מעל w n k L = 0 (01) n, k 0 (ii) (iii) L = 0 n,1 n n 0 = ε, 0,1, 00,11, 000,111,... = ε, 1,0, 11,00, 111,000,... ב. (i) שפה L לא ריקה שעבורה מתקיים :L=L 1 = L 1 וגם :L L 1 L 1 לא ריקה שעבורה מתקיים =L 2 L שפה (ii) n L = 1 0 n n > 0 n n L1 = L2 = 0 1 n > 0

32 :14 ÏÈ (n>m אבל לא מתקיים, n=m=1>0) L 5 n=1,m=0 R( 1 (n=1) L, ולא שייכת ל- ) 1 L 1 (, ולא שייכת ל- L5 0) א. המילה שייכת ל- ב. המילה שייכת ל- L 4 ג. המילה בניגוד להגדרת השפה. 4 R( L ) שייכת ל- הסיפא,6 3, L ששייכת ל- 3 6 2 2, המילה אינה מסתיימת ב- בודד ובתחילתה יש יותר (דרוש.(m n לכן גם לא תמצא R( L 5 ) = = = m n = L 2 n n, m > 0, n > m m+ n n+ m m n, m > 0, n > m n, m > 0, n > m n, m > 0, n > m = L L 5 3 6 R( 2 : L הרישא שייכת ל- ) 2 L אינה שייכת ל- L 3 3 6 4 4=m, 0=n. מילה זו 4 מ בודד. ד. המילה הריקה נמצאת בשפה בשפת ההיפוך ולא בשרשורם.,(n=m=0) אך לא נמצאת ב- )R 5 L = נכונה. הנימוק מוכח באופן מתמטי. ה. הטענה ) 5 5 L, תוצאת הפונקציה תיכתב על הסרט ימין, 1,1 f ( x) = x mod3 x 0 :15 ÏÈ מכונת טיורינג המחשבת את הפונקציה במוסכמות המקובלות של המכונה. ימין, 1,1 ימין, 1,1 ימין,$, Δ ימין,$, Δ ימין,$, Δ ימין, Δ,1 ימין, Δ,1 ימין,$, Δ ימין,$, Δ ימין, Δ,1 ימין,$, Δ

33 :16 Ï א. אס"ד מעל, המקבל את כל המילים שיש בהם את הרצף., ב. אס"ד מעל, המקבל את כל המילים שאין בהם את הרצף., ג. אס"ד מעל, המקבל את כל המילים שיש בהם את הרצף, ואין בהם את הרצף. ניתן לבנות אוטומט "מכפלה" משני התנאים או לבנות את האוטומט באופן הרגיל.,

34 פרק ב' תכנות מונחה עצמים Jv הפתרון לפרק זה נכתב ע"י... :17 ÏÈ :18 ÏÈ :19 ÏÈ :20 Ï

35 C# פרק ב' תכנות מונחה עצמים :21 ÏÈ הפתרון נכתב על ידי סרחאן תאיר כל סעיפי השאלה פתורים ביחד ומשולבים בתוכנית שלמה. הפרוייקט מחולק ל 3 מחלקות עיקריות מחלקה ששומרת מידע עבור התשובות. ומחלקה אשר שומרת מידע עבור הסקר עצמו כוללת את השאלה ואת תאריך פרסום הסקר ואת המידע עבוד כל התשובות של המשתתפים. ומחלקה ששומרת את המידע על 50 הסקרים החדשים היא מוסיפה סקר חדש ושומרת שהסקרים החדשים יהיו רק 50 הסקרים החדשים ביותר. הרעיון: מערך של אובייקטים מסוג סקר וכל סקר הוא בעצם מכיל את התשובות של המשתתפים. המחלקה מגדירה את אפשרויות התשובה של שאלת הסקר // using system; using system.collections.generic; using system.text; clss nswer מספר התשובות של שאלת הסקר // privte const int n = 4 ; מספר המשתתפים שעונים על שאלת הסקר // pulic int[] nswers; בנאי לאתחול מספר המשתתפים לכל תשובה// pulic nswer() this.nswers = new int[n]; פעולה שקולטת את הבחירה של התשובה // ומעדכנת את נתוני מספר המשתתפים // pulic void inputnswer() console.writeline("enter your nswer. etween 1..4"); int personnswer = int.prse(console.redline()); this.nswers[personnswer - 1]++;

36 פעולה המחזירה את נתוני התשובות לסקר כמחרוזת // pulic override string tostring() int mx=0; for (int ns = 0; ns < nswers.length; ns++) if (nswers[ns] > mx) mx = nswers[ns]; return " select 1 nswer= " + nswers[0] + " select 2 nswer= " + nswers[1] + " select 3 nswer= " + nswers[2] + " select 4 nswer= " + nswers[3]+ "the mx person is=> "+mx; המחלקה מגדירה סקר אשר שומר את תאריך פרסום הסקר, // את שאלת הסקר ואת התשובות של כל המשתתפים. // clss survey תאריך פרסום הסקר // surveydte; privte string שאלת הסקר // questionsurvey; privte string מספר המשתתפים ותשובותיהם // surveynswer; pulic nswer אתחול התשובות לסקר // ) pulic survey(nswer this.surveynswer = ; this.surveydte = "0/00/0000"; this.questionsurvey = "its empty survey"; pulic void setsurveydte(string s) this.surveydte = s; pulic string getsurveydte() return this.surveydte; pulic void setquestionsurvey(string s) this.questionsurvey = s;

37 pulic string getquestionsurvey() return this.questionsurvey; pulic override string tostring() return this.surveynswer.tostring(); מספר כל המשתתפים בסקר מסויים // pulic int numerofprticipnt() int sum = 0; for (int i = 0; i < this.surveynswer.nswers.length; i++) return sum; sum += this.surveynswer.nswers[i]; using system; using system.collections.generic; using system.text; מחלקה אשר מגדירה את מאגר 50 הסקרים האחרונים באתר "הסקר השבועי " // clss llsurvey מערך של 50 הסקרים האחרונים // theweeksurvey; pulic survey[] מספר הסקרים האחרונים // 50; = numerofsurvey privte const int אתחול מערך כל הסקרים // מספר הסקרים הנוכחי // currentsurvey=0; privte int pulic llsurvey() this.theweeksurvey = new survey[numerofsurvey]; פעולה המקבלת סקר ומוסיפה אותו למאגר נתוני כל הסקרים // pulic void dd(survey s) if (currentsurvey < this.theweeksurvey.length -1 && currentsurvey > 0)

38 else הזזת כל הסקרים מקום אחד שמאלה // for (int k = currentsurvey; k > 0; k--) this.theweeksurvey[k + 1] = this.theweeksurvey[k]; currentsurvey++; currentsurvey = 0; הכנסת הסקר החדש למקום הראשון ברשימת // ;s this.theweeksurvey[0] = הסקרים קליטת תאריך פרסום הסקר והדפסת : מספר המשתתפים, תשובותיהם // ואת מספר המשתתפים המקסימלי. // pulic void inputsurveydte() console.writeline("enter the survey dte..."); string s=console.redline(); for (int seker = 0; seker < this.theweeksurvey.length; seker++) survey sur = this.theweeksurvey[0]; if (s == sur.getsurveydte()) console.writeline(sur.surveynswer.tostring()); פעולה המחזירה את מספר הסקרים שבהם יש יותר מ- 1000 משתתפים // pulic int numerofsurveyegerthnth() מספר הסקרים // countsurvey=0; int סריקת מערך הסקרים // for (int seker = 0; seker < this.theweeksurvey.length; seker++) אם קיים סקר שבו השתתפו יותר מ- 1000 משתתפים // if (this.theweeksurvey[seker].numerofprticipnt() > 1000) return countsurvey; countsurvey++;

39 using system; using system.collections.generic; using system.text; nmespce weeksurvy clss progrm דוגמא פשוטה לשימוש בפעולות המחלקות // sttic void min(string[] rgs) nswer = new nswer();.inputnswer(); survey s = new survey(); llsurvey ll = new llsurvey(); ll.dd(s); for (int i = 0; i < ll.theweeksurvey.length; i++) if (ll.theweeksurvey[i]!= null) console.writeline(ll.theweeksurvey[i]); console.redline(); :22 ÏÈ :23 ÏÈ :24 Ï