100 likes | 116 Views
אקראיות. אקראיות מהי?. ישנן הגדרות רבות למושג זה, נביא שתיים מהעיקריות: תוצאותיו של תהליך המוגדר כאקראי אינן ניתנות לניבוי מראש באופן מוחלט תהליך שלו דפוס בלתי סדיר שאינו ניתן לשליטה או שינוי לתהליכים מסוג זה השפעה רבה בתחומים כגון: מחקר גנטי (מוטציות) הצפנה
E N D
אקראיות מהי? • ישנן הגדרות רבות למושג זה, נביא שתיים מהעיקריות: • תוצאותיו של תהליך המוגדר כאקראי אינן ניתנות לניבוי מראש באופן מוחלט • תהליך שלו דפוס בלתי סדיר שאינו ניתן לשליטה או שינוי • לתהליכים מסוג זה השפעה רבה בתחומים כגון: • מחקר גנטי (מוטציות) • הצפנה • תהליכים פיזיקליים (תורת הקוונטים) • תורת המשחקים ועוד...
Pseudo-Randomness • מחשבים מייצרים מספרים אקראיים באמצעות נוסחאות שונות המקנות אקראיות (לכאורה) • האקראיות המושגת באמצעות נוסחאות אלו מתבססת על פרמטרים רבים ושונים כגון הזמן בו נוצרים המספרים (בעברית יש לומר מחוללים), מצב המעבד וכו׳. • בשונה מאקראיות בטבע אשר מושפעת מתהליכים טבעיים. • Atmospheric noise (http://www.random.org/)
Randomמחלקת • אובייקט ממחלקת ה- Randomמייצר מספרים אקראיים. מחלקה זו נמצאת בחבילה java.util: import java.util.*;נשתמש בפקודה הבאה בכדי שנוכל להשתמש באוביקטים שכאלו לא נדון כעת במשמעות המחלקות או החבילות. לקראת בסוף הקורס נעסוק בכך בהרחבה. לדוגמא: Random rand = new Random(); intrandomNumber = rand.nextInt(10); // 0-9
יצירת מספרים אקראיים - המשך • שימוש שכיח: יצירת מספרים אקראיים בטווח מסויים בדוגמא זו אנו נייצר מספר אקראי מטיפוס integer ונכניס אותו אל תוך המשתנה n. int n = rand.nextInt(20) + 1; // 1-20 כולל * שימו לב כי טרם השימוש בפקודות, יהיה עלינו תמיד להשתמש בפקודה Random <שם המשתנה> = new Random(); • בכדי לייצר מספר אקראי בין שני מספרים ספציפיים (כולל): name.nextInt(size of range) + min • כאשרsize of rangeהינו(max - min + 1) • לדוגמא: ניצור מספר אקראי בין 4 ל10 כולל int n = rand.nextInt(7) + 4;
Randomשאלות לדוגמא על • בהנתן שיצרתם את המשתנה rand באופן הבא, פתרו את השאלות הבאות: Random rand = new Random(); • מספר אקראי בין 1 ל -47 כולל הקצוות int random1 = rand.nextInt(47) + 1; • מספר אקראי בין 23 לבין 30 כולל int random2 = rand.nextInt(8) + 23; • שאלת בונוס – מספר זוגי בין 4 לבין 12 כולל int random3 = rand.nextInt(5) * 2 + 4;
תרגיל כיתה • כתבו קוד אשר ייצג באמצעות מספרים אקראיים את המשחק אבן-נייר-ומספריים. נסו לחשוב כיצד לעשות זאת באמצעות פקודת if שלמדנו וערך המתקבל ממספר אקראי מסוג integer. • פתרון:נייצג כל אפשרות באמצעות מספר 0 – אבן, 1 – נייר , 2 - מספריים: int r = rand.nextInt(3); if (r == 0) { System.out.println("Rock"); } else if (r == 1) { System.out.println("Paper"); } else { // r == 2 System.out.println("Scissors"); }
Randomוטיפוסים שונים... • nextDouble מייצרת (מחזירה) doubleבין 0.0 - 1.0 • מספר אקראי מסוג double בטווח של 1.5 ועד 4 כולל: double randomDouble= rand.nextDouble() * 2.5 + 1.5;
Randomדוגמא לשאלה נוספת • לשם כתיבת תוכנה זו עליכם להיות בקיאים בשימוש בלולאות. אם אינכם יודעים כיצד לפתור אותה – המתינו עד לשיעור המתאים בקורס. • שאלה: כתבו תוכנה המטילה שתי קוביות עד שהסכום המתקבל הוא הוא 7. הקפידו להציג את תוצאות ההטלה באופן הבא בכל פעם שהתוכנה מגרילה זוג הטלות: 2 + 4 = 6 3 + 5 = 8 5 + 6 = 11 1 + 1 = 2 4 + 3 = 7 You won after 5 tries!
Randomפתרון // Rolls two dice until a sum of 7 is reached. import java.util.*; public class Dice { public static void main(String[] args) { Random rand = new Random(); int tries = 0; int sum = 0; while (sum != 7) { // roll the dice once int roll1 = rand.nextInt(6) + 1; int roll2 = rand.nextInt(6) + 1; sum = roll1 + roll2; System.out.println(roll1 + " + " + roll2 + " = " + sum); tries++; } System.out.println("You won after " + tries + " tries!"); } }