יסודות מדעי המחשב 2

38
1 בבבבבב בבבב בבבבב2 קקק1 – קקקקקק קקקקקק: קקקקק קקקקקק בבבבב – בבבבב בבבבבב בבבבבב בבבב בבבבבב בבבבבבב קקק2 – קקקקקק קקקקקקקקקקק- בבבב- בבבב בב- בבבבב, בבבבב( בבבבב בבבבב, בבבב בבבבבב) בבבבבב קקק3 – קקקקק קקקקק בבבבב בבבבבבב בבבבב בבבבבבבבב בבב בב בבבבב בבבבבב בבבבבבב בבבבבב בבבבב

Upload: heath

Post on 19-Jan-2016

64 views

Category:

Documents


1 download

DESCRIPTION

יסודות מדעי המחשב 2. פרק 1 – מחלקות ועצמים: הרחבה והעמקה מחלקה – הגדרה ושימוש פעולות גישה תכונות מורכבות פרק 2 – תבניות אלגוריתמיות מערך דו-ממדי חיפוש בינרי, מיון (בחירה, הכנסה ובועות) ומיזוג פרק 3 – פתרון בעיות בעיות המשלבות פיתוח אלגוריתמי יחד עם הגדרת מחלקות מתאימות לפתרון הבעיה. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: יסודות מדעי המחשב 2

1

2יסודות מדעי המחשב – מחלקות ועצמים: הרחבה והעמקה1פרק •

מחלקה – הגדרה ושימוש–פעולות גישה–תכונות מורכבות–

– תבניות אלגוריתמיות2פרק •מערך דו-ממדי-חיפוש בינרי, מיון )בחירה, הכנסה ובועות( ומיזוג-

– פתרון בעיות3פרק •בעיות המשלבות פיתוח אלגוריתמי יחד עם הגדרת –

מחלקות מתאימות לפתרון הבעיה

Page 2: יסודות מדעי המחשב 2

2

דידקטיקה

הצגת הנושאים באמצעות אוסף של בעיות פתורות•

:לכל בעיה מוטיבציה כגון•הכרת המושגים מחלקה ועצם, הגדרת מחלקה בסיסית והיכרות עם –

פעולה בונהget ו-setהיכרות עם פעולות גישה – –הצגת תכונות מורכבות - מערך כתכונה–מערך של עצמים–העמקה בהעברת פרמטרים–הצגת מבנה נתונים – מערך דו ממדי–הצגת תבנית אלגוריתמית–

כל בעיה מלווה בשאלות נוספות•

Page 3: יסודות מדעי המחשב 2

3

שלבים בפתרון בעיה

הצגת הבעיה•הצגת דוגמת קלט–

זיהוי המחלקה המתאימה לפתרון הבעיה•הגדרת התכונות–הגדרת הפעולות–מימוש–

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

Page 4: יסודות מדעי המחשב 2

4

הצגת בעיות

. משחק קוביות1

. סוכנות נסיעות2

. מפעל תכשיטים3

Page 5: יסודות מדעי המחשב 2

5

– משחק קוביות1בעיה

כתבו תכנית המדמה משחק קובייה בין זוג שחקנים:• בתורו וצובר את הנקודות כל שחקן מטיל שתי קוביות –

מהטלות הקוביות שלו. ( השחקן השני מקבל ניקוד 3-3 )כגון אם שחקן מטיל דאבל–

כפול בתור הבא. מורכב מתור של שחקן ראשון ואחריו תור "סיבוב" במשחק –

של שחקן שני. נקודות או יותר. אם 100המנצח הוא הראשון שמגיע ל-–

נקודות או יותר באותו 100שני השחקנים הגיעו ל-"הסיבוב" נכריז על תיקו.

Page 6: יסודות מדעי המחשב 2

6

דוגמה

3 1 2 9 5 4: 1סיבוב •

7+7 6 1 6 3 3: 2סיבוב •

5 3 2 11 5 6: 3סיבוב •

26 22

Page 7: יסודות מדעי המחשב 2

7

פתרון מונחה עצמים

מחלקה המגדירה שחקן•

פעולה ראשית המדמה את המשחק•

Page 8: יסודות מדעי המחשב 2

8

שחקןהמחלקה

הגדרת התכונות•points :

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

הגדרת הפעולותפעולה בונה:•

הפעולה הבונה לא מקבלת פרמטרים. –הפעולה מאתחלת את הניקוד המצטבר.–

Page 9: יסודות מדעי המחשב 2

9

- המשךהגדרת הפעולות•play :

האומר האם פרמטר בוליאניהפעולה מקבלת –לשחק תור רגיל או תור עם ניקוד כפול.

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

•getPoints :פעולת גישה המחזירה את הניקוד המצטבר של –

השחקן.

•isWin: פעולת גישה בוליאנית המחזירה האם השחקן נצח.–

Page 10: יסודות מדעי המחשב 2

10

import java.util.Random;

public class Player

{

private int points;

public Player)(

{

points = 0;

}

מימוש המחלקה שחקן

תכונות השחקן

הפעולה הבונה

Page 11: יסודות מדעי המחשב 2

11

public boolean play)boolean doublePoints( { Random rnd = new Random)(; int die1 = rnd.nextInt)6( + 1; int die2 = rnd.nextInt)6( + 1; if )!doublePoints( points = points + die1 + die2; else points = points + 2 * )die1 + die2(; return )die1 == die2(; }

הטלת קוביות

חישוב הניקוד

להחזיר האם יצא דאבל

פעולה לביצוע תור במשחק

Page 12: יסודות מדעי המחשב 2

12

public int getPoints)( { return points; } public boolean isWin)( { return )points >= 100(; }} // class Player

פעולות גישה להחזרת מספר הנקודות שהשחקן צבר

פעולות המחזירה אמת אם הניקוד המצטבר גדול או שווה 100

Page 13: יסודות מדעי המחשב 2

13

הפעולה הראשית מדמה את המשחק: פירוק לתת-משימות•

יצירת השחקנים–ניהול המשחק–הצגת תוצאות–

בחירת משתנים•– player1: 1 משתנה מטיפוס שחקן, מייצג את שחקן– player2 : 2משתנה מטיפוס שחקן, מייצג את שחקן–doub: משתנה בוליאני המציין אם יש לשחק תור

כפול

הגדרת הפעולה הראשית

Page 14: יסודות מדעי המחשב 2

14

מימוש הפעולה הראשיתpublic class DiceGame

{

public static void main)String[] args(

{

Player player1 = new Player)(;

Player player2 = new Player)(;

boolean doub = false;

while )!player1.isWin)( && !player2.isWin)((

{

doub = player1.play)doub(;

System.out.println)"player1: "+ player1.getPoints)((;

doub = player2.play)doub(;

System.out.println)"player2: "+ player2.getPoints)((;

}

יצירת שחקנים

שחקן ראשון משחק

שחקן שני משחק

Page 15: יסודות מדעי המחשב 2

15

if )player1.isWin)( && player2.isWin)((

System.out.println)"tie"(;

else if )player1.isWin)((

System.out.println)"player 1 won"(;

else

System.out.println)"player 2 won"(;

} // main

} // class DiceGame

הצגת תוצאות

תיקו

שחקן ראשון ניצח

שחקן שני ניצח

Page 16: יסודות מדעי המחשב 2

16

– סוכנות נסיעות2בעיה

.מארגנים טיולים" שלום שלום"בסוכנות הנסיעות • 1שלכל אחד מהם מספר בין , טיולים 100הסוכנות מציעה –

. 100-ל. מטיילים 50לכל טיול יכולים להירשם עד –.מטייל יכול להירשם לטיול רק אם יש מקום בטיול–

.פתחו וממשו אלגוריתם לניהול סוכנות הנסיעות•האלגוריתם ירשום אנשים על פי שמם לטיולים אליהם הם –

לסיום ”End"עד אשר יתקבל השם , מבקשים להירשםהקלט.

כפלט, האלגוריתם יציג את רשימת הנרשמים לכל טיול.–

Page 17: יסודות מדעי המחשב 2

17

פתרון מונחה עצמים

מחלקה המגדירה טיול•

יוצרת טיולים, רושמת מטיילים פעולה ראשית:•לטיולים, ומציגה את רשימת הנרשמים בכל טיול.

Page 18: יסודות מדעי המחשב 2

18

טיולהמחלקה הגדרת התכונות

•tripNum •numOfPassengers •passengers •MAX_PER_TRIP

הגדרת הפעולות פעולה בונה••addPassenger •getPassengers •getTripNum •getNumOfPassengers

מימוש המחלקה ...

Page 19: יסודות מדעי המחשב 2

19

public class Trip{ private final int MAX_PER_TRIP = 50; private int tripNum; private int numOfPassengers; private String[] passengers; public Trip)int tripNum( { this.tripNum = tripNum; passengers = new String[MAX_PER_TRIP]; numOfPassengers = 0; }

מימוש המחלקה טיול

תכונות הטיול

הפעולה הבונה

Page 20: יסודות מדעי המחשב 2

20

public boolean addPassenger)String name( { if )numOfPassengers < MAX_PER_TRIP( { passengers[numOfPassengers] = name; numOfPassengers++; return true; } // if return false; }

אם יש מקום

אין מקום

הוספת מטייל ועדכון מספר הנרשמים

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

Page 21: יסודות מדעי המחשב 2

21

public String[] getPassengers)(

{

String[] pass = new String[numOfPassengers];

for)int i = 0; i < numOfPassengers; i++(

{

pass[i] = passengers[i];

}

return pass;

}

הקצאת מערך חדש

העתקת הרשימה

החזרת רשימת המשתתפים

החזרת שמות הנרשמים לטיול

Page 22: יסודות מדעי המחשב 2

22

public int getTripNum)(

{

return tripNum;

}

public int getNumOfPassengers)(

{

return numOfPassengers;

}

}// class Trip

פעולות גישה להחזרת מספר הטיול

פעולות גישה להחזרת מספר הנרשמים לטיול

Page 23: יסודות מדעי המחשב 2

23

רישום מטיילים לטיולים והצגת רשימת הנרשמים בכל טיול :

פירוק לתת-משימות ואתחול הטיולים. טיולים100יצירת מערך של –. עבור כל אחד קליטת מספר Endקליטת שמות אנשים עד –

הטיול אליו הוא מעוניין להירשם ורישום לטיול זה. הצגת רשימת הנרשמים בכל טיול.–

בחירת משתנים–TRIPS_NUM קבוע המייצג את מספר הטיולים :– trips:מערך הטיולים – name :מחרוזת המייצגת שם של מטייל–tripNum:מספר הטיול המבוקש

מימוש הפעולה הראשית...

הגדרת הפעולה הראשית

Page 24: יסודות מדעי המחשב 2

24

מימוש הפעולה הראשיתpublic class TravelAgency

{

public static void main)String[] args(

{

final int TRIPS_NUM = 100;

Trip[] trips = new Trip[TRIPS_NUM];

String name;

int tripNum;

for )int i = 0; i < TRIPS_NUM; i++(

{

trips[i] = new Trip)i + 1(;

}

יצירת הטיולים

הגדרת המשתנים

Page 25: יסודות מדעי המחשב 2

25

name = In.readString)"Enter passenger name, type ‘End’ to finish"(;

while ) !name.equals)"End"( (

{

tripNum = In.readInt)"Enter the trip number"(;

if )trips[tripNum-1].addPassenger)name((

{

System.out.println)"You were added successfully"(;

}

else

{

System.out.println)"This trip is full"(;

}

name = In.readString)"Enter passenger name, type ‘End’ to finish"(;

} // while

קליטת מטיילים והוספתם לטיולים עד לקליטת 'End’

הוספת מטייל

אם יש מקום

אם אין מקום

Page 26: יסודות מדעי המחשב 2

26

String[] passengers;

for )int i = 0; i < TRIPS_NUM ; i++(

{

System.out.println)"Trip " + trips[i].getTripNum)( +

" has "+ trips[i].getNumOfPassengers)(+" passengers"(;

passengers = trips[i].getPassengers)(;

for )int j = 0; j < passengers.length; j++(

{

System.out.println)passengers[j](;

}

} // for

} // main

} // class TravelAgency

הצגת רשימת הנרשמים בכל טיול

מספר הנרשמים לטיול

הצגת רשימת הנרשמים

לטיול

Page 27: יסודות מדעי המחשב 2

27

– מפעל תכשיטים3בעיה

במפעל לתכשיטים מרכיבים שרשרות מחרוזים •בשלושה צבעים: אדום, צהוב, ירוק.

" היא שרשרת שיש בה שרשרת "אחידה–

מספר שווה של חרוזים מכל אחד מהצבעים. " היא שרשרת שאינה "אחידה".שרשרת "פגומה–

". מפעל תכשיטיםכתבו את מחלקת "•הגדירו פעולה המקבלת מחרוזת חרוזים ובודקת–

האם היא שרשרת אחידה או פגומה. הגדירו פעולות המחזירות: כמה שרשרות יוצרו באותו –

היום וכמה מתוכם היו פגומות.

Page 28: יסודות מדעי המחשב 2

28

כתבו פעולה ראשית הקולטת את החרוזים •לייצור שרשרות במפעל ביום מסוים.

בעבור כל שרשרת יש לקלוט מחרוזת –

המייצגות את’G‘, ו-’R’, ‘Y‘המורכבת מהתווים

. Green ו-Red, Yellowצבעי החרוזים

הקלט יסתיים כאשר תיקלט מחרוזת ריקה.–לאחר סיום הקלט יש להציג: –

את מספר השרשרות שיוצרו במפעל באותו היום, •את מספר השרשרות הפגומות. •

“RRRGGGYYY”

Page 29: יסודות מדעי המחשב 2

29

פתרון מונחה עצמים

מחלקה המגדירה מפעל תכשיטים•

המפעילה את מפעל התכשיטיםפעולה ראשית•

סה"כ שרשרות

סה"כ פגומות

Page 30: יסודות מדעי המחשב 2

30

מפעל תכשיטיםהמחלקה

הגדרת התכונות•totalCount•faultyCount

הגדרת הפעולות

פעולה בונה••createNecklace •getTotalCount •getFaultyCount

מימוש המחלקה "מפעל תכשיטים"...

Page 31: יסודות מדעי המחשב 2

31

public class Factory

{

private int totalCount;

private int faultyCount;

public Factory)(

{

totalCount = 0;

faultyCount = 0;

}

מימוש המחלקה "מפעל תכשיטים"

תכונות המפעל

הפעולה הבונה

Page 32: יסודות מדעי המחשב 2

32

public void createNecklace)String beeds( { int red = 0; int yellow = 0; int green = 0; totalCount++; if )!)beeds.length)(%3 == 0(({ faultyCount++; return; } for )int i=0; i<beeds.length)(; i++( switch )beeds.charAt)i(( { case ‘R’: red++; break; case ‘Y’: yellow++; break; case ‘G’: green++; break; } //switch if )!)red == yellow && yellow == green(( faultyCount++; }

מונים לצבעים

ספירת חרוזים

האם המחרוזת פגומה?

יצירת שרשרת

עדכון מונה השרשרות

אם מספר החרוזים לא => המחרוזת 3מתחלק ב-

פגומה.

Page 33: יסודות מדעי המחשב 2

33

public int getTotalCount)( { return totalCount; } public int getFaultyCount)( { return faultyCount; }} // class Factory

פעולות גישה להחזרת מספר השרשרות שיוצרו במפעל

פעולות גישה להחזרת מספר השרשרות הפגומות

Page 34: יסודות מדעי המחשב 2

34

הפעולה הראשית מפעילה את מפעל התכשיטים: פירוק לתת-משימות•

יצירת מפעל תכשיטים–קליטת מחרוזות חרוזים עד מחרוזת ריקה והעברתם –

לפעולת הייצור במפעל.הצגת פלט: מספר השרשרות שיוצרו במפעל באותו היום –

ומספר השרשרות הפגומות.

בחירת משתנים•– factory:משתנה מטיפוס מפעל התכשיטים – beeds :מחרוזת המייצגת חרוזים של שרשרת

מימוש הפעולה הראשית...•

הגדרת הפעולה הראשית

Page 35: יסודות מדעי המחשב 2

35

מימוש הפעולה הראשיתpublic class FactoryRunner { public static void main)String[] args( { Factory factory = new Factory)(; String beeds; beeds = In.readString)"Enter beeds using RYG, " +

"press ‘Enter’ to finish"(; while ) ! beeds.equals)""( ( { factory.createNecklace)beeds(; beeds = In.readString)"Enter beeds using RYG, " +

"press ‘Enter’ to finish"(; } // while

יצירת מחרוזות

הגדרת המשתנים

Page 36: יסודות מדעי המחשב 2

36

System.out.println)“Total Number of Necklaces created: “ +

factory.getTotalCount)((;

System.out.println)“Total Number of faulty Necklaces: " +

factory.getFaultyCount)((;

} // main

} // class FactoryRunner

הצגת פלט:

מספר השרשרות שיוצרו

מספר השרשרות הפגומות

Page 37: יסודות מדעי המחשב 2

37

שאלות?

Page 38: יסודות מדעי המחשב 2

38

הסוף !