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

Post on 19-Jan-2016

64 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

1

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

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

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

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

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

2

דידקטיקה

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

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

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

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

3

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

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

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

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

4

הצגת בעיות

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

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

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

5

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

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

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

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

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

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

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

7

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

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

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

8

שחקןהמחלקה

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

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

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

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

9

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

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

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

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

השחקן.

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

10

import java.util.Random;

public class Player

{

private int points;

public Player)(

{

points = 0;

}

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

תכונות השחקן

הפעולה הבונה

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

הטלת קוביות

חישוב הניקוד

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

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

12

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

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

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

13

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

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

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

כפול

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

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

}

יצירת שחקנים

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

שחקן שני משחק

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

הצגת תוצאות

תיקו

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

שחקן שני ניצח

16

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

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

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

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

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

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

17

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

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

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

18

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

•tripNum •numOfPassengers •passengers •MAX_PER_TRIP

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

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

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

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

תכונות הטיול

הפעולה הבונה

20

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

אם יש מקום

אין מקום

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

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

21

public String[] getPassengers)(

{

String[] pass = new String[numOfPassengers];

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

{

pass[i] = passengers[i];

}

return pass;

}

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

העתקת הרשימה

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

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

22

public int getTripNum)(

{

return tripNum;

}

public int getNumOfPassengers)(

{

return numOfPassengers;

}

}// class Trip

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

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

23

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

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

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

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

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

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

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

}

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

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

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’

הוספת מטייל

אם יש מקום

אם אין מקום

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

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

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

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

לטיול

27

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

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

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

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

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

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

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

28

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

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

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

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

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

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

“RRRGGGYYY”

29

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

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

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

סה"כ שרשרות

סה"כ פגומות

30

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

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

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

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

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

31

public class Factory

{

private int totalCount;

private int faultyCount;

public Factory)(

{

totalCount = 0;

faultyCount = 0;

}

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

תכונות המפעל

הפעולה הבונה

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מתחלק ב-

פגומה.

33

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

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

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

34

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

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

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

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

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

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

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

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

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

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

36

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

factory.getTotalCount)((;

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

factory.getFaultyCount)((;

} // main

} // class FactoryRunner

הצגת פלט:

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

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

37

שאלות?

38

הסוף !

top related