Presentation is loading. Please wait.

Presentation is loading. Please wait.

תכנות תרגול 7 שבוע : 11.12.05. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.

Similar presentations


Presentation on theme: "תכנות תרגול 7 שבוע : 11.12.05. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא."— Presentation transcript:

1 תכנות תרגול 7 שבוע : 11.12.05

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

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

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

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

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

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

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

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

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

11 הבית האדום כתובת : רחוב קוקוריקו 2 הבית הירוק כתובת : רחוב קוקוריקו 4 הבית הצהוב כתובת : רחוב קוקוריקו 1 הבית הורוד כתובת : רחוב קוקוריקו 3 מה הכתובת של “ הבית האדום ?” 2 מי גר בבית מספר 2? רמי יוסי שמעון אבנר רמי מי גר ב “ בית האדום ?” רמי

12 כתובת : 2000 מה הכתובת של ?a 2000 מה נמצא בתא 2000? a 80 3 7 5 מה נמצא ב a? 5 5 b c d כתובת : 1000 כתובת : 3000 כתובת : 4000

13 מצביעים לכל משתנה שמוגדר בתוכנית יש כתובת לכל משתנה שמוגדר בתוכנית יש כתובת הכתובת שלו היא מיקומו בזכרון הכתובת שלו היא מיקומו בזכרוןלמשל כאשר משכנים מספר מסוג int אזי צורכים 4 bytes. int a; a 5000

14 מצביעים int a; int b; a = 5; b = 7; a 5000 b 5004 5 7

15 מצביעים int a, b; int *p1; int *p2; a = 5; b = 7; p1 = &a; p2 = &b; a 5000 b 5004 5 7 p1 7026 p2 7030 5000 5004

16 מצביעים int a, b; int *p1; int *p2; a = 5; b = 7; p1 = &a; p2 = &b; a 5000 b 5004 5 7 p1 7026 p2 7030 5000 5004 *p1 = 2; *p2 = *p1;

17 מצביעים int a, b; int *p1; int *p2; a = 5; b = 7; p1 = &a; p2 = &b; a 5000 b 5004 2 2 p1 7026 p2 7030 5000 5004 *p1 = 2; *p2 = *p1;

18 תרגיל הגדר שני משתנים a ו b אתחל אותם לערכים כלשהם. לאחר מכן הגדר שני משתנים להחזקת הכתובות שלהם הדפס את הכתובות שלהם ואת הערכים שנמצאים בכתובות האלו. להדפסת מצביע נשתמש בפורמט %p.

19 #include int main() { int a=10,b=2; int *p1,*p2; p1 = &a; p2 = &b; printf(“%p %p \n”,p1,p2); printf(“%d %d \n”,*p1,*p2); return 0; }

20 מצביעים ופונקציות עד היום הפונקציות שלנו ידעו לקבל ערכים של משתנים ולהשתמש בהם הן לא ידעו לקבל משתנים ולשנות את הערכים שלהם ( מלבד פונקציה אחת !) הפונקציות שלנו ימשיכו לקבל ערכים בלבד רק שכעת אנו יכולים להעביר להם בתור ערך כתובת של משתנה !

21 5 3 printf 3 a 2020 5 b 2034 int a=3,b=5; printf(“%d %d”,a,b) אין צורך לדעת את כתובותיהם של a ואת b, אלא רק את ערכיהם

22 scanf a 2020 b 2034 int a,b; scanf(“%d %d”,&a,&b) צריך לדעת את כתובותיהם של a ו b, ולא את ערכיהם 3 5

23 int main() { int a; scanf(“%d”,&a); } a 5000 scanf *pa = ערך מהמשתמש

24 void swap (int q,int p) { int temp =p; p = q; q = temp; } int main() { int a=10,b=2,x=3,y=5;  swap(x, y);  swap(a, b); }

25 void swap (int* q,int* p) { int temp = *p; *p = *q; *q = temp; } int main() { int a=10,b=2,x=3,y=5;  swap(&x,&y);  swap(&a,&b); } x 5000 y 5004 3 5 p 7026 q 7030 5000 5004 7034 temp 3 5 3

26 תרגיל 1 כתבו פונקציה שמקבלת אורך ורוחב של מלבן ומחזירה את שטח המלבן ואת היקפו. void rectangle(int a,int b,int *area,int *circuit); int main() { int x, y; int area,circuit; scanf("%d %d",&x,&y); rectangle(x,y, &area,&circuit); printf(“Area is %d Circuit is %d\n",area,circuit); return 0; }

27 פתרון void rectangle(int a,int b,int *area,int *circuit) { *area = a * b; *circuit = 2 * (a + b); }

28 הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו יש כתובת a[0] a[1] a[2] a[9]  5 5000 5004 5008 כדי להגיע לכתובת של תא במערך פשוט נכתוב &a[2] אם נרצה את הכתובת של המערך עצמו אזי זה שם המערך

29 הקשר בין מערכים לפונקציות כיצד נכתוב פונקציה אשר תקבל כפרמטר מערך ? הפונקציה תקבל מערך ( את כתובתו ) ותדפיס אותו : void PrintArray(int a[],int size) { int i; for (i=0;i<size;i++) printf(“%d”,a[i]);}

30 הקשר בין מערכים לפונקציות הפונקציה תקלוט איברים לתוך מערך void GetArray(int a[],int size) { int i; for (i=0;i<size;i++) scanf(“%d”,&a[i]);}

31 void PrintArray(int a[],int size); int main() { int a[SIZE]; GetArray(a,SIZE); PrintArray(a,SIZE); return 0; } void GetArray(int a[],int size);

32 תרגיל 2 כתבו את הפונקציות הבאות : פונקציה שממלא מערך במספרים אקראיים פונקציה שממלא מערך במספרים אקראיים פונקציה שמדפיסה מערך פונקציה שמדפיסה מערך פונקציה שהופכת את המערך ( רמז : השתמשו בפונקציה swap ) פונקציה שהופכת את המערך ( רמז : השתמשו בפונקציה swap )

33 פתרון מילוי מערך void fill_array(int array[], int size) { int i; srand(time(NULL)); for (i = 0; i < size; i++) array[i] = rand()/327; }

34 פתרון הדפסת מערך void print_array(int array[], int size) { int i; for (i = 0; i < size; i++) printf("%d ", array[i]); printf("\n"); }

35 פתרון הפיכת מערך void reverse_array(int array[], int size) { int i; for (i = 0; i < size/2; i++) swap(&array[i], &array[size - 1 - i]); }

36 #include #define SIZE 5 void fill_array(int array[], int size); void reverse_array(int array[], int size); void print_array(int array[], int size); void swap(int *a, int *b); int main() { int my_arr[SIZE]; fill_array(my_arr, SIZE); print_array(my_arr, SIZE); reverse_array(my_arr, SIZE); print_array(my_arr, SIZE); return 0; }


Download ppt "תכנות תרגול 7 שבוע : 11.12.05. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא."

Similar presentations


Ads by Google