Presentation is loading. Please wait.

Presentation is loading. Please wait.

תכנות תרגול 6 שבוע : 26.4.06. הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.

Similar presentations


Presentation on theme: "תכנות תרגול 6 שבוע : 26.4.06. הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת."— Presentation transcript:

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

2 הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת הערכים שהפונקציה מקבלת דוגמא : נממש את הפונקציה f(x) = x^2 double sqr(double x) { return x*x; } הגדרת הפונקציה גוף הפונקציה { Function body return-value }

3 הכרזה על פונקציות return-value-type function-name(parameter1, parameter2, …); הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת סוגי הערכים שהפונקציה מקבלת הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית מאפשרת לנו להשתמש בפונקציה בכל מקום. double sqr(double ); int minimum( int, int, int ); int main() {}

4 פונקציות - דוגמא נוספת נממש את הפונקציה שמוצאת את המינימום בין שלושה מספרים : int minimum( int x, int y, int z ) { int min = x; int min = x; if ( y < min ) if ( y < min ) min = y; min = y; if ( z < min ) if ( z < min ) min = z; min = z; return min; return min;} משתנה מקומי שמוכר רק בתוך הפונקציה

5 שימוש בפונקציות int main() { int a, b, c; int a, b, c; printf( "Enter three integers: " ); printf( "Enter three integers: " ); scanf( "%d%d%d", &a, &b, &c ); scanf( "%d%d%d", &a, &b, &c ); printf( "Min is: %d\n", minimum( a, b, c ) ); printf( "Min is: %d\n", minimum( a, b, c ) ); return 0; return 0;}

6 שימוש בפונקציות int main() { int a, b, c, min; int a, b, c, min; printf( "Enter three integers: " ); printf( "Enter three integers: " ); scanf( "%d%d%d", &a, &b, &c ); scanf( "%d%d%d", &a, &b, &c ); min = minimum( a, b, c ); min = minimum( a, b, c ); printf( "Min is: %d\n", min); printf( "Min is: %d\n", min); return 0; return 0;}

7 העברת הערכים משתמש 4 5 2 a b c45 2 x y z main minimum

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

9 פתרון 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; }

10 מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. אתגר : כתוב תוכנית שקולטת 100 מספרים שלמים ומדפיסה אותם מהאחרון שנקלט לראשון. אתגר : כתוב תוכנית שקולטת 100 מספרים שלמים ומדפיסה אותם מהאחרון שנקלט לראשון. קלט : 1 2 3 4 5,..., 99 100 פלט : 100 99,..., 5 4 3 2 1

11 פתרון ( בלי מערכים ) 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,…);} אל תנסו בבית !!!

12 מערכים int a; a=5; int a[10]; a[2] = 5; 5 a a[0] a[1] a[2] a[9]  5 משתנה בודד מערך גישה למשתנה השלישי במערך

13 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]);} קלט פלט

14 תרגיל כתוב תוכנית הקולטת 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

15 #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");} קלט פלט

16 מערכים - אתחול 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

17 תרגיל כתוב תוכנית המגדירה מערך אחד עם 10 איברים התוכנית תקלוט מהמשתמש את האיברים ובנוסף תקלוט איבר נוסף שאותו תחפש בתוך המערך. אם תמצא אותו תדפיס את מיקומו אם לא אז לא תעשה כלום

18 #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); }

19 תרגיל כתוב תוכנית המגדירה שני מערכים אחד עם 3 איברים ואחד עם 10 איברים וקולטת אותם מהמשתמש. התוכנית בודקת האם המערך הקטן מופיע כתת מערך במערך הגדול. אם כן היא מדפיסה איפה ואם לא היא לא מדפיסה דבר

20 10011223144535152244535 קלט פלט 4-6 a b 22445351715 0 1 2 3 4 5 6 7 8 9 0 1 2

21 #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); }}

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

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

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

25 תרגיל כתוב תוכנית המדפיסה 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

26 #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;} פתרון

27 פתרון - המשך 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;}

28 מערכים נכתוב תוכנית שזורקת קובייה 6000 פעמיים ונספור כמה פעמיים יצא כל מספר.

29 #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;}


Download ppt "תכנות תרגול 6 שבוע : 26.4.06. הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת."

Similar presentations


Ads by Google