יסודות מדעי המחשב 2
DESCRIPTION
יסודות מדעי המחשב 2. פרק 1 – מחלקות ועצמים: הרחבה והעמקה מחלקה – הגדרה ושימוש פעולות גישה תכונות מורכבות פרק 2 – תבניות אלגוריתמיות מערך דו-ממדי חיפוש בינרי, מיון (בחירה, הכנסה ובועות) ומיזוג פרק 3 – פתרון בעיות בעיות המשלבות פיתוח אלגוריתמי יחד עם הגדרת מחלקות מתאימות לפתרון הבעיה. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/1.jpg)
1
2יסודות מדעי המחשב – מחלקות ועצמים: הרחבה והעמקה1פרק •
מחלקה – הגדרה ושימוש–פעולות גישה–תכונות מורכבות–
– תבניות אלגוריתמיות2פרק •מערך דו-ממדי-חיפוש בינרי, מיון )בחירה, הכנסה ובועות( ומיזוג-
– פתרון בעיות3פרק •בעיות המשלבות פיתוח אלגוריתמי יחד עם הגדרת –
מחלקות מתאימות לפתרון הבעיה
![Page 2: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/2.jpg)
2
דידקטיקה
הצגת הנושאים באמצעות אוסף של בעיות פתורות•
:לכל בעיה מוטיבציה כגון•הכרת המושגים מחלקה ועצם, הגדרת מחלקה בסיסית והיכרות עם –
פעולה בונהget ו-setהיכרות עם פעולות גישה – –הצגת תכונות מורכבות - מערך כתכונה–מערך של עצמים–העמקה בהעברת פרמטרים–הצגת מבנה נתונים – מערך דו ממדי–הצגת תבנית אלגוריתמית–
כל בעיה מלווה בשאלות נוספות•
![Page 3: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/3.jpg)
3
שלבים בפתרון בעיה
הצגת הבעיה•הצגת דוגמת קלט–
זיהוי המחלקה המתאימה לפתרון הבעיה•הגדרת התכונות–הגדרת הפעולות–מימוש–
הגדרת המחלקה הראשית•פירוק לתת משימות–בחירת משתנים–אלגוריתם–מימוש–
![Page 4: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/4.jpg)
4
הצגת בעיות
. משחק קוביות1
. סוכנות נסיעות2
. מפעל תכשיטים3
![Page 5: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/5.jpg)
5
– משחק קוביות1בעיה
כתבו תכנית המדמה משחק קובייה בין זוג שחקנים:• בתורו וצובר את הנקודות כל שחקן מטיל שתי קוביות –
מהטלות הקוביות שלו. ( השחקן השני מקבל ניקוד 3-3 )כגון אם שחקן מטיל דאבל–
כפול בתור הבא. מורכב מתור של שחקן ראשון ואחריו תור "סיבוב" במשחק –
של שחקן שני. נקודות או יותר. אם 100המנצח הוא הראשון שמגיע ל-–
נקודות או יותר באותו 100שני השחקנים הגיעו ל-"הסיבוב" נכריז על תיקו.
![Page 6: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/7.jpg)
7
פתרון מונחה עצמים
מחלקה המגדירה שחקן•
פעולה ראשית המדמה את המשחק•
![Page 8: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/8.jpg)
8
שחקןהמחלקה
הגדרת התכונות•points :
משתנה מטיפוס שלם המייצג את הניקוד המצטבר שצבר –השחקן עד כה.
הגדרת הפעולותפעולה בונה:•
הפעולה הבונה לא מקבלת פרמטרים. –הפעולה מאתחלת את הניקוד המצטבר.–
![Page 9: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/9.jpg)
9
- המשךהגדרת הפעולות•play :
האומר האם פרמטר בוליאניהפעולה מקבלת –לשחק תור רגיל או תור עם ניקוד כפול.
הפעולה מדמה את זריקת הקוביות. –מעדכנת את הניקוד המצטבר של השחקן. –הפעולה מחזירה האם יצא דאבל.–
•getPoints :פעולת גישה המחזירה את הניקוד המצטבר של –
השחקן.
•isWin: פעולת גישה בוליאנית המחזירה האם השחקן נצח.–
![Page 10: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/10.jpg)
10
import java.util.Random;
public class Player
{
private int points;
public Player)(
{
points = 0;
}
מימוש המחלקה שחקן
תכונות השחקן
הפעולה הבונה
![Page 11: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/12.jpg)
12
public int getPoints)( { return points; } public boolean isWin)( { return )points >= 100(; }} // class Player
פעולות גישה להחזרת מספר הנקודות שהשחקן צבר
פעולות המחזירה אמת אם הניקוד המצטבר גדול או שווה 100
![Page 13: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/13.jpg)
13
הפעולה הראשית מדמה את המשחק: פירוק לתת-משימות•
יצירת השחקנים–ניהול המשחק–הצגת תוצאות–
בחירת משתנים•– player1: 1 משתנה מטיפוס שחקן, מייצג את שחקן– player2 : 2משתנה מטיפוס שחקן, מייצג את שחקן–doub: משתנה בוליאני המציין אם יש לשחק תור
כפול
הגדרת הפעולה הראשית
![Page 14: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/16.jpg)
16
– סוכנות נסיעות2בעיה
.מארגנים טיולים" שלום שלום"בסוכנות הנסיעות • 1שלכל אחד מהם מספר בין , טיולים 100הסוכנות מציעה –
. 100-ל. מטיילים 50לכל טיול יכולים להירשם עד –.מטייל יכול להירשם לטיול רק אם יש מקום בטיול–
.פתחו וממשו אלגוריתם לניהול סוכנות הנסיעות•האלגוריתם ירשום אנשים על פי שמם לטיולים אליהם הם –
לסיום ”End"עד אשר יתקבל השם , מבקשים להירשםהקלט.
כפלט, האלגוריתם יציג את רשימת הנרשמים לכל טיול.–
![Page 17: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/17.jpg)
17
פתרון מונחה עצמים
מחלקה המגדירה טיול•
יוצרת טיולים, רושמת מטיילים פעולה ראשית:•לטיולים, ומציגה את רשימת הנרשמים בכל טיול.
![Page 18: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/18.jpg)
18
טיולהמחלקה הגדרת התכונות
•tripNum •numOfPassengers •passengers •MAX_PER_TRIP
הגדרת הפעולות פעולה בונה••addPassenger •getPassengers •getTripNum •getNumOfPassengers
מימוש המחלקה ...
![Page 19: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/20.jpg)
20
public boolean addPassenger)String name( { if )numOfPassengers < MAX_PER_TRIP( { passengers[numOfPassengers] = name; numOfPassengers++; return true; } // if return false; }
אם יש מקום
אין מקום
הוספת מטייל ועדכון מספר הנרשמים
הוספת מטייל והחזרת ערך בוליאני המציין אם יש מקום
![Page 21: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/22.jpg)
22
public int getTripNum)(
{
return tripNum;
}
public int getNumOfPassengers)(
{
return numOfPassengers;
}
}// class Trip
פעולות גישה להחזרת מספר הטיול
פעולות גישה להחזרת מספר הנרשמים לטיול
![Page 23: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/23.jpg)
23
רישום מטיילים לטיולים והצגת רשימת הנרשמים בכל טיול :
פירוק לתת-משימות ואתחול הטיולים. טיולים100יצירת מערך של –. עבור כל אחד קליטת מספר Endקליטת שמות אנשים עד –
הטיול אליו הוא מעוניין להירשם ורישום לטיול זה. הצגת רשימת הנרשמים בכל טיול.–
בחירת משתנים–TRIPS_NUM קבוע המייצג את מספר הטיולים :– trips:מערך הטיולים – name :מחרוזת המייצגת שם של מטייל–tripNum:מספר הטיול המבוקש
מימוש הפעולה הראשית...
הגדרת הפעולה הראשית
![Page 24: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/27.jpg)
27
– מפעל תכשיטים3בעיה
במפעל לתכשיטים מרכיבים שרשרות מחרוזים •בשלושה צבעים: אדום, צהוב, ירוק.
" היא שרשרת שיש בה שרשרת "אחידה–
מספר שווה של חרוזים מכל אחד מהצבעים. " היא שרשרת שאינה "אחידה".שרשרת "פגומה–
". מפעל תכשיטיםכתבו את מחלקת "•הגדירו פעולה המקבלת מחרוזת חרוזים ובודקת–
האם היא שרשרת אחידה או פגומה. הגדירו פעולות המחזירות: כמה שרשרות יוצרו באותו –
היום וכמה מתוכם היו פגומות.
![Page 28: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/28.jpg)
28
כתבו פעולה ראשית הקולטת את החרוזים •לייצור שרשרות במפעל ביום מסוים.
בעבור כל שרשרת יש לקלוט מחרוזת –
המייצגות את’G‘, ו-’R’, ‘Y‘המורכבת מהתווים
. Green ו-Red, Yellowצבעי החרוזים
הקלט יסתיים כאשר תיקלט מחרוזת ריקה.–לאחר סיום הקלט יש להציג: –
את מספר השרשרות שיוצרו במפעל באותו היום, •את מספר השרשרות הפגומות. •
“RRRGGGYYY”
![Page 29: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/29.jpg)
29
פתרון מונחה עצמים
מחלקה המגדירה מפעל תכשיטים•
המפעילה את מפעל התכשיטיםפעולה ראשית•
סה"כ שרשרות
סה"כ פגומות
![Page 30: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/30.jpg)
30
מפעל תכשיטיםהמחלקה
הגדרת התכונות•totalCount•faultyCount
הגדרת הפעולות
פעולה בונה••createNecklace •getTotalCount •getFaultyCount
מימוש המחלקה "מפעל תכשיטים"...
![Page 31: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/31.jpg)
31
public class Factory
{
private int totalCount;
private int faultyCount;
public Factory)(
{
totalCount = 0;
faultyCount = 0;
}
מימוש המחלקה "מפעל תכשיטים"
תכונות המפעל
הפעולה הבונה
![Page 32: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/33.jpg)
33
public int getTotalCount)( { return totalCount; } public int getFaultyCount)( { return faultyCount; }} // class Factory
פעולות גישה להחזרת מספר השרשרות שיוצרו במפעל
פעולות גישה להחזרת מספר השרשרות הפגומות
![Page 34: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/34.jpg)
34
הפעולה הראשית מפעילה את מפעל התכשיטים: פירוק לתת-משימות•
יצירת מפעל תכשיטים–קליטת מחרוזות חרוזים עד מחרוזת ריקה והעברתם –
לפעולת הייצור במפעל.הצגת פלט: מספר השרשרות שיוצרו במפעל באותו היום –
ומספר השרשרות הפגומות.
בחירת משתנים•– factory:משתנה מטיפוס מפעל התכשיטים – beeds :מחרוזת המייצגת חרוזים של שרשרת
מימוש הפעולה הראשית...•
הגדרת הפעולה הראשית
![Page 35: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/37.jpg)
37
שאלות?
![Page 38: יסודות מדעי המחשב 2](https://reader036.vdocuments.net/reader036/viewer/2022081421/56814e79550346895dbc13cb/html5/thumbnails/38.jpg)
38
הסוף !