תכנות תרגול 6 שבוע : 26.4.06. הגדרת פונקציות return-value-type...

29
ללללל ללללל ללללל ללללל6 6 לללל לללל: : 26.4.06 26.4.06

Post on 21-Dec-2015

232 views

Category:

Documents


6 download

TRANSCRIPT

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

66 תכנות תרגולתכנות תרגול

::שבועשבוע

26.4.0626.4.06

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

הגדרת פונקציותהגדרת פונקציות

return-value-typereturn-value-type function-name( function-name(parameter1parameter1, , parameter2parameter2, …), …)

הגדרת סוג הערכים שהפונקציהמחזירה

שם הפונקציה רשימת הערכים שהפונקציהמקבלת

f(x) = x^2f(x) = x^2נממש את הפונקציה נממש את הפונקציה דוגמא:דוגמא:

doubledouble sqr( sqr(double x)double x)

{{

return x*x;return x*x;

}}

הגדרת הפונקציה

גוף הפונקציה

{Function body return-value

}

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

הכרזה על פונקציותהכרזה על פונקציות

return-value-typereturn-value-type function-name( function-name(parameter1parameter1, , parameter2parameter2, …), …);;

הגדרת סוג הערכים שהפונקציהמחזירה

שם הפונקציה הערכים שהפונקציה סוגי רשימת מקבלת

הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית

מאפשרת לנו להשתמש בפונקציה בכל מקום. מאפשרת לנו להשתמש בפונקציה בכל מקום.

doubledouble sqr( sqr(double );double );

intint minimum( minimum( intint, , intint, , intint ); );

int main()int main()

{{

}}

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

פונקציות- דוגמא נוספתפונקציות- דוגמא נוספת ::נממש את הפונקציה שמוצאת את המינימום בין שלושה מספריםנממש את הפונקציה שמוצאת את המינימום בין שלושה מספרים

intint minimum( minimum( intint x, x, intint y, y, intint z ) z )

{{

int int minmin = x; = 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;

}}

משתנה מקומי שמוכר רקבתוך הפונקציה

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

שימוש בפונקציותשימוש בפונקציות

int main()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", printf( "Min is: %d\n", minimumminimum( ( a, b, ca, b, c ) ); ) );

return 0;return 0;

}}

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

שימוש בפונקציותשימוש בפונקציותint main()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 = min = minimumminimum( ( a, b, ca, b, c ); );

printf( "Min is: %d\n", min);printf( "Min is: %d\n", min);

return 0;return 0;

}}

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

העברת הערכיםהעברת הערכים

משתמש

44

55

22

a

b

c

44

55

22

x

y

z

mainminimum

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

תרגילתרגיל

שורש של מספר מחושב לפי הסדרה הבאה:

root0 = 1rootn = rootn-1 + a / rootn-1

2

של הסדרה הוא קירוב nכאשר האיבר ה- גדל.n. הקירוב משתפר ככל ש-aלשורש של

כתוב פונקציה המקבלת מספר ומחשבת את השורש שלו לפי סדרה זו.

:תנאי העצירה של החישוב יהיה כאשרrootn == rootn-1

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

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

}

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

מערכיםמערכים

עד היום התוכניות שלנו לא ידעו לשמור כמות עד היום התוכניות שלנו לא ידעו לשמור כמות •גדולה של מידע ללא הגדרת כמות גדולה של גדולה של מידע ללא הגדרת כמות גדולה של

משתנים. משתנים.

מספרים מספרים 100100אתגר: כתוב תוכנית שקולטת אתגר: כתוב תוכנית שקולטת •שלמים ומדפיסה אותם מהאחרון שנקלט שלמים ומדפיסה אותם מהאחרון שנקלט

לראשון. לראשון. 100100 9999 , ... , , ... , 55 44 33 22 11קלט: קלט: 11 22 33 44 55 , ... , , ... , 9999 100100פלט: פלט:

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

פתרון )בלי מערכים(פתרון )בלי מערכים(

void main()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,…);

}}

!!! אל תנסו בבית

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

מערכיםמערכים

int a;int a;

a=5;a=5;

int a[10];int a[10];

a[2] = 5;a[2] = 5;

5a

a[0]

a[1]

a[2]

a[9]

5

משתנה בודד

מערך

גישה למשתנה

השלישי במערך

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

void main()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]);

}}

קלט

פלט

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

תרגילתרגיל איברים איברים 1010כתוב תוכנית הקולטת כתוב תוכנית הקולטת

לתוך מערך ומדפיסה תחילה את כל האיברים לתוך מערך ומדפיסה תחילה את כל האיברים

הזוגיים ואחר כך את כל האיברים האי זוגייםהזוגיים ואחר כך את כל האיברים האי זוגייםEnter numbers12345678910Even:2 4 6 8 10Odd:1 3 5 7 9

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

#include <stdio.h>#include <stdio.h>#define SIZE 10#define SIZE 10

void main()void main(){{

int i,arr[SIZE];int i,arr[SIZE];printf("Enter numbers\n");printf("Enter numbers\n");for (i=0;i<SIZE;i++)for (i=0;i<SIZE;i++)

scanf("%d",&arr[i]);scanf("%d",&arr[i]);printf("Even:\n");printf("Even:\n");for (i=0;i<SIZE;i++)for (i=0;i<SIZE;i++)

if (arr[i] % 2 == 0)if (arr[i] % 2 == 0)printf("%d ",arr[i]);printf("%d ",arr[i]);

printf("\nOdd:\n");printf("\nOdd:\n");for (i=0;i<SIZE;i++)for (i=0;i<SIZE;i++)

if (arr[i] % 2 != 0)if (arr[i] % 2 != 0)printf("%d ",arr[i]);printf("%d ",arr[i]);

printf("\n");printf("\n");}}

קלט

פלט

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

מערכים - אתחולמערכים - אתחול

int a[10]int a[10] = {1,2,3}; = {1,2,3};

int a[10]int a[10] = {0}; = {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

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

תרגילתרגיל איברים התוכנית איברים התוכנית 1010כתוב תוכנית המגדירה מערך אחד עם כתוב תוכנית המגדירה מערך אחד עם

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

מיקומו אם לא אז לא תעשה כלוםמיקומו אם לא אז לא תעשה כלום

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

#define SIZE_A 10#define SIZE_A 10int main()int main(){{

int i,A[SIZE_A],x;int i,A[SIZE_A],x;for (i = 0; i < SIZE_A; i++)for (i = 0; i < SIZE_A; i++)

scanf(“%d”,&A[i])scanf(“%d”,&A[i])scanf(“%d”,&x);scanf(“%d”,&x);for (i = 0; i < SIZE_A; i++)for (i = 0; i < SIZE_A; i++)

if ( A[i]== x )if ( A[i]== x )printf(“%d appears in printf(“%d appears in

%d”,x ,i);%d”,x ,i);}}

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

תרגילתרגיל איברים ואחד איברים ואחד 33כתוב תוכנית המגדירה שני מערכים אחד עם כתוב תוכנית המגדירה שני מערכים אחד עם

איברים וקולטת אותם מהמשתמש. התוכנית בודקת איברים וקולטת אותם מהמשתמש. התוכנית בודקת 1010עם עם האם המערך הקטן מופיע כתת מערך במערך הגדול. אם כן האם המערך הקטן מופיע כתת מערך במערך הגדול. אם כן

היא מדפיסה איפה ואם לא היא לא מדפיסה דברהיא מדפיסה איפה ואם לא היא לא מדפיסה דבר

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

100 11 2231 445 35 15 22 445 35

קלט

4-6פלט

a b

22 445 35 17 15

0 1 2 3 4 5 6 7 8 9 0 1 2

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

#define SIZE_A 10#define SIZE_A 10#define SIZE_B 3#define SIZE_B 3int main()int main(){{

int i, j;int i, j;int A[SIZE_A],B[SIZE_B];int A[SIZE_A],B[SIZE_B];for (i = 0; i <= SIZE_A – SIZE_B; i++)for (i = 0; i <= SIZE_A – SIZE_B; i++){{

for (j = 0; j < SIZE_B; ++j)for (j = 0; j < SIZE_B; ++j)if ( A[i + j] != B[j] )if ( A[i + j] != B[j] )

break;break;if (j == SIZE_B)if (j == SIZE_B)

printf(“Range %d-%d”,i ,i + SIZE_B);printf(“Range %d-%d”,i ,i + SIZE_B);}}

}}

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

מספרים אקראייםמספרים אקראיים

ניתן לייצר מספרים אקראיים ע"י הפונקציהניתן לייצר מספרים אקראיים ע"י הפונקציה•

int rand(void);int rand(void);

הפונקציה מייצרת מספר אקראי שלם הפונקציה מייצרת מספר אקראי שלם •RAND_MAXRAND_MAX עד עד 00בתחום בתחום

32,76732,767 הוא לפחות הוא לפחות RAND_MAXRAND_MAXמובטח ש-מובטח ש-•

stdlib.hstdlib.hהפונקציה מוגדרת ב-הפונקציה מוגדרת ב-•

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

דוגמאותדוגמאות

)כולל(: )כולל(:1919 ל- ל-00יצירת מספר אקראי שלם בין יצירת מספר אקראי שלם בין •

rand() % 20rand() % 20

)כולל(: )כולל(:2020 ל- ל-1010יצירת מספר אקראי שלם בין יצירת מספר אקראי שלם בין •

rand() % 11 + 10rand() % 11 + 10

::[[0,10,1]]יצירת מספר אקראי ממשי בתחום יצירת מספר אקראי ממשי בתחום •

(double) rand() / RAND_MAX(double) rand() / RAND_MAX

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

יצירת מספרים אקראיים - אתחוליצירת מספרים אקראיים - אתחול

אנו מעוניינים שבכל ריצה של התוכנית תיווצר אנו מעוניינים שבכל ריצה של התוכנית תיווצר • של מספרים אקראיים. של מספרים אקראיים.שונהשונהסדרה סדרה

, ניתן לקבוע ע"י , ניתן לקבוע ע"י seedseedאת נקודת ההתחלה, ה-את נקודת ההתחלה, ה-•::stdlib.hstdlib.hהפונקציה הבאה המוגדרת ב-הפונקציה הבאה המוגדרת ב-

void srand(unsigned int seed);void srand(unsigned int seed);

יהיה שונה בכל ריצה, יש לכתוב יהיה שונה בכל ריצה, יש לכתוב seedseedכדי שה-כדי שה-•בתחילת התוכנית את הפקודה הבאה:בתחילת התוכנית את הפקודה הבאה:

srand(time(NULL));srand(time(NULL));

time.htime.h מוגדרת ב- מוגדרת ב-)()(timetimeכאשר הפונקציה כאשר הפונקציה

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

תרגילתרגיל מספרים אקראיים מספרים אקראיים77כתוב תוכנית המדפיסה כתוב תוכנית המדפיסה

)כולל(, ואח"כ מדפיסה )כולל(, ואח"כ מדפיסה5050 עד עד 55 שלמים בתחום שלמים בתחום

..[[0,10,1]] מספרים אקראיים ממשיים בתחום מספרים אקראיים ממשיים בתחום 77

דוגמה לפלט:231227314647310.0168770.5540640.4000060.7842950.4818570.4877770.724479

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

#include <stdio.h>#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>

#include <time.h>#include <time.h>

int rand_int()int rand_int()

{{

return rand() % 46 + 5;return rand() % 46 + 5;

}}

double rand_real()double rand_real()

{{

return (double) rand() / RAND_MAX;return (double) rand() / RAND_MAX;

}}

פתרוןפתרון

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

פתרון - המשךפתרון - המשך

int main()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;}}

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

מערכיםמערכים

פעמיים פעמיים 60006000נכתוב תוכנית שזורקת קובייה נכתוב תוכנית שזורקת קובייה

ונספור כמה פעמיים יצא כל מספר.ונספור כמה פעמיים יצא כל מספר.

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

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#define SIZE 7#define SIZE 7int main()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, printf( "%4d%17d\n", face,

frequency[ face ] );frequency[ face ] ); return 0;return 0;}}