200 likes | 424 Views
הוראת מערכים. אסנת חכמון סדנה פדגוגית כרמיאל 24.1.07. עצמים תחילה........ או לא? . אין לכך תשובה חד משמעית. נראה "בטוח" יותר להתחיל רגיל: משתנים משפטי תנאי לולאות עכשיו נעבור לעצמים?. גם לזה אין תשובה חד משמעית. שימוש במערכים לתרגול לולאות. התחלת עצמים. המערך כאמצעי לתרגול לולאות.
E N D
הוראת מערכים אסנת חכמון סדנה פדגוגית כרמיאל 24.1.07
עצמים תחילה........ או לא? • אין לכך תשובה חד משמעית.נראה "בטוח" יותר להתחיל רגיל: • משתנים • משפטי תנאי • לולאות עכשיו נעבור לעצמים?
גם לזה אין תשובה חד משמעית שימוש במערכים לתרגול לולאות התחלת עצמים
המערך כאמצעי לתרגול לולאות • הצהרה על משתנה רגיל: int x; הצהרה על מערך: int[] arr; • הצהרה והשמה במשתנה רגיל: int a=5;הצהרה והשמה במערך: int[] f= new int[10]; המערך הוא עצם!!
איך זה עובר את התלמידים? • כשם שהמשפט:public static void main (String[] args) עובר ללא יותר מידי שאלות.
אם כך מה שונה בתפיסת המערך? • במערך חד מימדי (ללא הבדל משמעותי): • אין אפשרות לחרוג מהמערך: היה קיים בפסקל,ב-C לא. • התכונה Length. • במערך דו מימדי: • לא חייב להיות סימטרי. a a[0] a[1] a[2] a[3]
מה שונה? * הצהרה על מערך דו מימדי סימטרי (מערך מלבני): int[,] scores = new int[10,7]; השמה במערך מלבני:scores[1,4]=17; * הצהרה על מערך דו מימדי לא סימטרי (מערך משונן):char[][] names = new char[3][]; כעת יש לאתחל בנפרד כל אחד מהמערכים שיאוחסנו ב- names: names[0] = new char[7]; names[1] = new char[2]; names[2] = new char[5];
אם למדנו עצמים: יש לבנות מחלקה למערך הכוללת את הפעולות עליו. האם ישנה "העמסה" על התלמיד ?
שאלות מבגרויות: שאלה 3 – בגרות 2004 פתרון שאלה 3 int[] arr = new int[28]; int count = 0; int i; for (i = 0; i < 28; i++) if (arr[i] > 9) count++; if (count > 14) Console.WriteLine("דו ספרתיים"); else Console.WriteLine("חד ספרתים"); יש הבדל?
שאלות מבגרויות שאלה 7 – בגרות 2004
שאלות מבגרויות שאלה 7 – בגרות 2004 • להגדיר מחלקה בעלת התכונה מערך. • הגדרת הפעולה לחישוב הסכום. האם זה נכון להגדירה במחלקה?? • להגדיר את הפונקציהכפעולה סטטית. • להגדיר את המערך ב-Main . 3. להגדיר פעולה שמבצעת את השינוי: change() 3. להגדיר פעולה הוספה:set(int x, int index) כיצד יראה ה-Main בכל אחת מהאפשרויות? האם העמסנו על התלמיד?
שאלות מבגרויות שאלה 9 – בגרות 2004
שאלות מבגרויות שאלה 9 – בגרות 2004 נחלק את הבעיה לתת-משימות: 1. בדיקת תוקף דרכון. 2. בדיקה האם יכול להירשם. 3. עדכון מספר הנרשמים. 4. הצגת מספרי הטיולים שלא נרשמו אליהם. אפשרויות לפתרון: מחלקה עם התכונה מערך ופעולות עליו מחלקת שירות עם פעולות סטטיות/ או לא ללא מחלקה עם פעולות סטטיות מעל ה-Main. המערך יוגדר ב-Main. היכן תוגדר פעולה 1? האם היא שייכת למחלקה?איך יתייחס הבוחן לכך?
שאלות מבגרויות שאלה 10 – בגרות 2004
שאלות מבגרויות שאלה 10 – בגרות 2004 במקרה זה אין קושי להגדיר מחלקה עם התכונה מערך דו מימדי, ולהגדיר את הפעולות המבוקשת בסעיפים א' ו- ב'. בתרגיל זה אין "העמסה" מחשבתית על התלמיד. זמן הפתרון דומה ב- OOP או בפרוצדורלי.
תרגיל • משחק "בינגו" הוא משחק בו מגרילים מספרים וכל שחקן מחזיק לוח שונה. אם המספר שהוגרל מופיע בלוח שלו, השחקן מאפס את אותה משבצת בה מופיע המספר. השחקן הראשון שאיפס שורה שלמה או עמודה שלמה או אלכסון שלם, נקרא "מנצח על" ומקבל פרס • "לוח בינגו" הוא טיפוס נתונים מופשט המאחסן לוח משחק בגודל 5x5, כשכל משבצת בלוח יכולה להכיל מספר שלם בין 1 ל- 100, או 0 – לציין שהמספר שהיה במשבצת כבר הוגרל. על לוח בינגו נגדיר את הפעולות הבאות : ( I ) אתחל לוח בינגו ריק. ( II ) מילוי לוח בינגו במספרים אקראיים, כאשר כל המספרים שונים זה מזה. (III ) בדיקה האם מספר מסוים מופיע בלוח. ( VI ) איפוס משבצת – המספר במשבצת הוגרל ( V ) בדיקה האם יש ניצחון של שורה. ( IV ) בדיקה האם יש ניצחון של עמודה (IIV ) בדיקה האם יש ניצחון של אלכסון.
תרגיל - המשך • הציעו דרך לייצוג טיפוס הנתונים המופשט "לוח בינגו". • כתבו חתימות עבור כל הפעולות הנ"ל. • ממשו פעולה בשם "האם יש ניצחון_על?" המקבל לוח בינגו ומחזיר 'אמת' במידה שיש ניצחון על, אחרת יחזיר 'שקר'. הערה: ניצחון על פירושו ניצחון באחת האפשרויות. • ניתן להשתמש בפעולות הממשק שכתבתם ללא צורך לממש אותם
הצעה לפתרון תרגיל זה מופיע בחומר של עיצוב תוכנה. לתלמיד שלמד OOP אין "קושי" לזהות מהי המחלקה הדרושה, תכונותיה ופעולותיה. • public class Bingo • { • private int[,] arr; • public Bingo() • { • arr = new int[5, 5]; • } • public void Fill(); • public Bool CheckNum(int x); • public void Mark(int i, int j); • public bool Row(); • public bool Col(); • public bool Cross(); • public bool Win(); • }
סיכום • יש לקבל החלטה אסטרטגית מתי מתחילים OOP. החלטה זו משפיעה על כל צורת ההתייחסות למערכים. • במידה והוחלט "לדחות" OOP – המערכים מופיעים ב- Main ללא שינוי משמעותי (אל דאגה, תוספת new לא מטרידה את התלמידים). • במידה והוחלט להתחיל OOP יש "העמסה" מחשבתית – מה שייך למחלקה ומה לא. • לעיתים ניתן להשתמש במחלקת שירות ו/או בפעולות סטטיות (תלוי שאלה) – שימוש זה אינו נוגד את תפיסת OOP אלא משלים אותה. חלק מהבעייתיות במעבר ל-OOP קיימת בגלל ההכרות שלנו עם יותר מגישה/ שפה אחת