Presentation is loading. Please wait.

Presentation is loading. Please wait.

תכנות תרגול 6 שבוע : 29.3.05. תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.

Similar presentations


Presentation on theme: "תכנות תרגול 6 שבוע : 29.3.05. תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב."— Presentation transcript:

1 תכנות תרגול 6 שבוע : 29.3.05

2 תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב של השורש של a. כתוב פונקציה המקבלת מספר ומחשבת את השורש שלו לפי סדרה זו. תנאי העצירה של החישוב יהיה כאשר : root n == root n-1

3 פתרון double MySqrt(int num) { double root, root_n = 1.0; do { root = root_n; root_n = (root + num / root) / 2; }while(root_n != root); return root; }

4 הגדרת משתנים הגדרת אפשריות : משתנה מקומי משתנה סטטי משתנה גלובלי int do_something () { int x; } int x; void main () { int x; int a; }

5 תרגיל כתוב פונקציה שהערך שהיא מחזירה הוא כמה פעמים קראו לה

6 פתרון int count() { static int i=0; return ++i; } ניתן לשלב את הפונקציה הזו בפונקציה לחישוב שורש על מנת לדעת כמה פעולות עשתה לולאת החישוב.

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

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

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

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

11 #include #include int rand_int() { return rand() % 46 + 5; return rand() % 46 + 5;} double rand_real() { return (double) rand() / RAND_MAX; return (double) rand() / RAND_MAX;} פתרון

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

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

14 #include #include double rand_real() { return (double) rand() / RAND_MAX; } int main() { intall = 0,good = 0; doublex,y,temp; srand(time(NULL));

15 while (1) { x = rand_real(); x = rand_real(); y = rand_real(); y = rand_real(); if ( x > y ) { 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 % 1000000 == 0 ) printf("%d / %d = %lf\n", good,all,(double) good/all); } return 0; }

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

17 פתרון #include int sum_of_dividers(int n) { intk,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; }

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


Download ppt "תכנות תרגול 6 שבוע : 29.3.05. תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב."

Similar presentations


Ads by Google