Presentation is loading. Please wait.

Presentation is loading. Please wait.

מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);

Similar presentations


Presentation on theme: "מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);"— Presentation transcript:

1 מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
הפונקציה מייצרת מספר אקראי שלם בתחום 0 עד RAND_MAX מובטח ש-RAND_MAX הוא לפחות 32,767 הפונקציה מוגדרת ב-stdlib.h

2 דוגמאות יצירת מספר אקראי שלם בין 0 ל-19 (כולל): rand() % 20
יצירת מספר אקראי שלם בין 10 ל-20 (כולל): rand() % יצירת מספר אקראי ממשי בתחום [0,1]: (double) rand() / RAND_MAX

3 יצירת מספרים אקראיים - אתחול
אנו מעוניינים שבכל ריצה של התוכנית תיווצר סדרה שונה של מספרים אקראיים. את נקודת ההתחלה, ה-seed, ניתן לקבוע ע"י הפונקציה הבאה המוגדרת ב-stdlib.h: void srand(unsigned int seed); כדי שה-seed יהיה שונה בכל ריצה, יש לכתוב בתחילת התוכנית את הפקודה הבאה: srand(time(NULL)); כאשר הפונקציה time() מוגדרת ב-time.h

4 תרגיל כתוב תוכנית המדפיסה 7 מספרים אקראיים
שלמים בתחום 5 עד 50 (כולל), ואח"כ מדפיסה 7 מספרים אקראיים ממשיים בתחום [0,1]. דוגמה לפלט: 23 12 27 31 46 47

5 פתרון #include <stdio.h> #include <stdlib.h>
#include <time.h> int rand_int() { return rand() % ; } double rand_real() return (double) rand() / RAND_MAX;

6 פתרון - המשך int main() { int k; srand(time(NULL));
for ( k=0; k<7; k++ ) printf("%d\n",rand_int()); printf("%f\n",rand_real()); return 0; }

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

8 #include <stdio.h>
#include <stdlib.h> #include <time.h> double rand_real() { return (double) rand() / RAND_MAX; } int main() int all = 0,good = 0; double x,y,temp; srand(time(NULL));

9 while (1) { x = rand_real(); y = rand_real(); if ( x > y ) { temp = x; x = y; y = temp; } if ( x >= 0.5 || y - x >= 0.5 || 1 - y >= 0.5 ) good++; all++; if ( all % == 0 ) printf("%d / %d = %f\n", good,all,(double) good/all); return 0;

10 תרגיל מספר יקרא מושלם אם הוא שווה לסכום מחלקיו. דוגמאות: 6 = 1 + 2 + 3
28 = כתבו תוכנית הקוראת מספר שלם n ומדפיסה את כל המספרים המושלמים מ-1 עד n (כולל). התוכנית צריכה להיות יעילה ככל האפשר מבחינת זמן ריצה.

11 פתרון #include <stdio.h> int sum_of_dividers(int n) {
int k,sum = 1; for ( k = 2; k * k <= n; k++ ) if ( k * k == n ) sum += k; else if ( n % k == 0 ) sum += k + n / k; return sum; }

12 פתרון - המשך int main() { int n,k; scanf("%d",&n);
for ( k = 2; k <= n; k++ ) if ( sum_of_dividers(k) == k ) printf("%d\n",k); return 0; }


Download ppt "מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);"

Similar presentations


Ads by Google