Download presentation
Presentation is loading. Please wait.
1
תכנות תרגול 6 שבוע : 4.12.05
2
חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n
3
#include double CalcE(int last); int main() { int last; printf("Enter number of iterations\n"); scanf("%d", &last); printf("%lf\n", CalcE(last)); } double CalcE(int last) { int i; double e = 1, mul = 1 + 1 / (double)last; for(i = 1; i <= last; i++) e *= mul; return e; } קביעת n הביטוי : העלאה בחזקה :
4
חישוב e x כתוב פונקציה המקבלת את n ואת x ומחשבת את e x באמצעות הנוסחה 1 + x n n
5
הפונקציה double CalcE(int last,int power) { int i; double e = 1; double mul = 1 + power / (double)last; for(i = 1; i <= last; i++) e *= mul; return e; }
6
תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה -n של הסדרה הוא קירוב לשורש של a. הקירוב משתפר ככל ש -n גדל. כתוב פונקציה המקבלת מספר ומחשבת את השורש שלו לפי סדרה זו. תנאי העצירה של החישוב יהיה כאשר : root n == root n-1
7
פתרון 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; }
8
מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. אתגר : כתוב תוכנית שקולטת 100 מספרים שלמים ומדפיסה אותם מהאחרון שנקלט לראשון. אתגר : כתוב תוכנית שקולטת 100 מספרים שלמים ומדפיסה אותם מהאחרון שנקלט לראשון. קלט : 1 2 3 4 5,..., 99 100 פלט : 100 99,..., 5 4 3 2 1
9
פתרון ( בלי מערכים ) void main() { int a1,a2,a3,…,a100; int a1,a2,a3,…,a100; scanf(“%d %d %d,…”,a1,a2,a3,…); scanf(“%d %d %d,…”,a1,a2,a3,…); printf(“%d %d %d,…”,a100,a99,a98,…); printf(“%d %d %d,…”,a100,a99,a98,…);} אל תנסו בבית !!!
10
מערכים int a; a=5; int a[10]; a[2] = 5; 5 a a[0] a[1] a[2] a[9] 5 משתנה בודד מערך גישה למשתנה השלישי במערך
11
void main() { int i=0; int i=0; int a[100]; int a[100]; for (i=0;i<100;i++) for (i=0;i<100;i++) scanf (“%d”,&a[i]); scanf (“%d”,&a[i]); for (i=99;i>=0;i--) for (i=99;i>=0;i--) printf (“%d”,a[i]); printf (“%d”,a[i]);} קלט פלט
12
תרגיל כתוב תוכנית הקולטת 10 איברים לתוך מערך ומדפיסה תחילה את כל האיברים הזוגיים ואחר כך את כל האיברים האי זוגיים Enter numbers 1 2 3 4 5 6 7 8 9 10 Even: 2 4 6 8 10 Odd: 1 3 5 7 9
13
#include #include #define SIZE 10 void main() { int i,arr[SIZE]; printf("Enter numbers\n"); for (i=0;i<SIZE;i++) scanf("%d",&arr[i]);printf("Even:\n"); if (arr[i] % 2 == 0) printf("%d ",arr[i]); printf("\nOdd:\n"); for (i=0;i<SIZE;i++) if (arr[i] % 2 != 0) printf("%d ",arr[i]); printf("\n");} קלט פלט
14
מערכים - אתחול int a[10] = {1,2,3}; int a[10] = {0}; a[0] a[1] a[2] a[9] 1 2 3 0 a[0] a[1] a[2] a[9] 0 0 0 0
15
תרגיל כתוב תוכנית המגדירה מערך אחד עם 10 איברים התוכנית תקלוט מהמשתמש את האיברים ובנוסף תקלוט איבר נוסף שאותו תחפש בתוך המערך. אם תמצא אותו תדפיס את מיקומו אם לא אז לא תעשה כלום
16
#define SIZE_A 10 int main() { int i,A[SIZE_A],x; for (i = 0; i < SIZE_A; i++) scanf(“%d”,&A[i])scanf(“%d”,&x); if ( A[i]== x ) printf(“%d appears in %d”,x,i); }
17
תרגיל כתוב תוכנית המגדירה שני מערכים אחד עם 3 איברים ואחד עם 10 איברים וקולטת אותם מהמשתמש. התוכנית בודקת האם המערך הקטן מופיע כתת מערך במערך הגדול. אם כן היא מדפיסה איפה ואם לא היא לא מדפיסה דבר
18
10011223144535152244535 קלט פלט 4-6 a b 22445351715 0 1 2 3 4 5 6 7 8 9 0 1 2
19
#define SIZE_A 10 #define SIZE_B 3 int main() { int i, j; int A[SIZE_A],B[SIZE_B]; for (i = 0; i <= SIZE_A – SIZE_B; i++) { for (j = 0; j < SIZE_B; ++j) if ( A[i + j] != B[j] ) break; if (j == SIZE_B) printf(“Range %d-%d”,i,i + SIZE_B); }}
20
מספרים אקראיים ניתן לייצר מספרים אקראיים ע " י הפונקציה ניתן לייצר מספרים אקראיים ע " י הפונקציה int rand(void); הפונקציה מייצרת מספר אקראי שלם בתחום 0 עד RAND_MAX הפונקציה מייצרת מספר אקראי שלם בתחום 0 עד RAND_MAX מובטח ש -RAND_MAX הוא לפחות 32,767 מובטח ש -RAND_MAX הוא לפחות 32,767 הפונקציה מוגדרת ב -stdlib.h הפונקציה מוגדרת ב -stdlib.h
21
דוגמאות יצירת מספר אקראי שלם בין 0 ל -19 ( כולל ): יצירת מספר אקראי שלם בין 0 ל -19 ( כולל ): rand() % 20 יצירת מספר אקראי שלם בין 10 ל -20 ( כולל ): יצירת מספר אקראי שלם בין 10 ל -20 ( כולל ): rand() % 11 + 10 יצירת מספר אקראי ממשי בתחום [0,1]: יצירת מספר אקראי ממשי בתחום [0,1]: (double) rand() / RAND_MAX
22
יצירת מספרים אקראיים - אתחול אנו מעוניינים שבכל ריצה של התוכנית תיווצר סדרה שונה של מספרים אקראיים. אנו מעוניינים שבכל ריצה של התוכנית תיווצר סדרה שונה של מספרים אקראיים. את נקודת ההתחלה, ה -seed, ניתן לקבוע ע " י הפונקציה הבאה המוגדרת ב -stdlib.h: את נקודת ההתחלה, ה -seed, ניתן לקבוע ע " י הפונקציה הבאה המוגדרת ב -stdlib.h: void srand(unsigned int seed); כדי שה -seed יהיה שונה בכל ריצה, יש לכתוב בתחילת התוכנית את הפקודה הבאה : כדי שה -seed יהיה שונה בכל ריצה, יש לכתוב בתחילת התוכנית את הפקודה הבאה :srand(time(NULL)); כאשר הפונקציה time() מוגדרת ב -time.h
23
תרגיל כתוב תוכנית המדפיסה 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
24
#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;} פתרון
25
פתרון - המשך 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;}
26
מערכים נכתוב תוכנית שזורקת קובייה 6000 פעמיים ונספור כמה פעמיים יצא כל מספר.
27
#include #include #define SIZE 7 int main() { int num, face, roll, frequency[ SIZE ] = { 0 }; int num, face, roll, frequency[ SIZE ] = { 0 }; scanf("%d",&num); scanf("%d",&num); srand( num ); srand( num ); for ( roll = 1; roll <= 6000; roll++ ) { for ( roll = 1; roll <= 6000; roll++ ) { face = rand() % 6 + 1; face = rand() % 6 + 1; ++frequency[ face ]; ++frequency[ face ]; } printf( "%s%17s\n", "Face", "Frequency" ); printf( "%s%17s\n", "Face", "Frequency" ); for ( face = 1; face <= SIZE - 1; face++ ) for ( face = 1; face <= SIZE - 1; face++ ) printf( "%4d%17d\n", face, frequency[ face ] ); printf( "%4d%17d\n", face, frequency[ face ] ); return 0; return 0;}
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.