39
ללללל ללללל ללללל ללללל7 7 לללל לללל: : 10.5.06 10.5.06

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

  • View
    234

  • Download
    3

Embed Size (px)

Citation preview

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

77 תכנות תרגולתכנות תרגול

::שבועשבוע

10.5.0610.5.06

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

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

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

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

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

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

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

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

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 4: תכנות תרגול 7 שבוע : 10.5.06. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות

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

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 5: תכנות תרגול 7 שבוע : 10.5.06. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות

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 6: תכנות תרגול 7 שבוע : 10.5.06. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות

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

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

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

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

#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 8: תכנות תרגול 7 שבוע : 10.5.06. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות

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

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 9: תכנות תרגול 7 שבוע : 10.5.06. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות

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

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

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

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

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 11: תכנות תרגול 7 שבוע : 10.5.06. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות

#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 12: תכנות תרגול 7 שבוע : 10.5.06. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות

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

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

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

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

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

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

הבית האדום

2כתובת : רחוב קוקוריקו

הבית הירוק

4כתובת : רחוב קוקוריקו

הבית הצהוב

1כתובת : רחוב קוקוריקו

הבית הורוד

3כתובת : רחוב קוקוריקו

2?”הבית האדום“מה הכתובת של

?2מי גר בבית מספר

רמי

יוסי

שמעון

אבנר

רמי

רמי?”בית האדום“מי גר ב

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

2000כתובת :

a 2000?מה הכתובת של2000מה נמצא בתא ?

a

80

3

7

5

a?5מה נמצא ב

5

b

cd

1000כתובת :

3000כתובת : 4000כתובת :

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

מצביעיםמצביעים

לכל משתנה שמוגדר בתוכנית יש כתובת לכל משתנה שמוגדר בתוכנית יש כתובת •

הכתובת שלו היא מיקומו בזכרוןהכתובת שלו היא מיקומו בזכרון•

למשללמשל

. . bytesbytes 44 אזי צורכים אזי צורכים intintכאשר משכנים מספר מסוג כאשר משכנים מספר מסוג

int a; a5000

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

מצביעיםמצביעים

int a;

int b;

a = 5;

b = 7;

a5000

b5004

5

7

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

מצביעיםמצביעים

int a, b;

int *p1;

int *p2;

a = 5;

b = 7;

p1 = &a;

p2 = &b;

a5000

b5004

5

7

p17026

p27030

5000

5004

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

מצביעיםמצביעים

int a, b;int *p1;int *p2;a = 5;b = 7;p1 = &a;p2 = &b;

a5000

b5004

5

7

p17026

p27030

5000

5004

*p1 = 2;*p2 = *p1;

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

מצביעיםמצביעים

int a, b;int *p1;int *p2;a = 5;b = 7;p1 = &a;p2 = &b;

a5000

b5004

2

2

p17026

p27030

5000

5004

*p1 = 2;*p2 = *p1;

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

תרגילתרגיל

אתחל אותם לערכים b ו aהגדר שני משתנים כלשהם.

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

בכתובות האלו.

. p%להדפסת מצביע נשתמש בפורמט

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

#include <stdio.h>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;

}

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

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

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

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

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

5

3

printf

3

a

2020

5

b

2034

int a=3,b=5;printf(“%d %d”,a,b)

, b ואת aאין צורך לדעת את כתובותיהם שלאלא רק את ערכיהם

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

scanfa

2020

b

2034

int a,b;scanf(“%d %d”,&a,&b)

, ולא b ו aצריך לדעת את כתובותיהם שלאת ערכיהם

35

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

int main(){ int a;

scanf(“%d”,&a);}

a5000

scanf

*pa = ערך מהמשתמש

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

void swap (int q,int p)void swap (int q,int p)

{{

int temp =p;int temp =p;

p = q; p = q;

q = temp;q = temp;

}}

int main(){ int a=10,b=2,x=3,y=5;

swap(x, y);

swap(a, b);

}

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

void swap (int* q,int* p)void swap (int* q,int* p)

{{

int temp = *p;int temp = *p;

*p = *q; *p = *q;

*q = temp;*q = temp;

}}

int main(){ int a=10,b=2,x=3,y=5;

swap(&x,&y);

swap(&a,&b);

}

x5000

y5004

3

5

p7026

q7030

5000

5004

7034 temp3

5

3

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

11תרגיל תרגיל כתבו פונקציה שמקבלת אורך ורוחב של מלבן כתבו פונקציה שמקבלת אורך ורוחב של מלבן

ומחזירה את שטח המלבן ואת היקפו.ומחזירה את שטח המלבן ואת היקפו.

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;

}

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

פתרוןפתרון

void rectangle(int a,int b,int *area,int *circuit){

*area = a * b;*circuit = 2 * (a + b);

}

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

הקשר בין מערכים למצביעיםהקשר בין מערכים למצביעיםנרצה לעמוד על הקשר בין מערך למצביענרצה לעמוד על הקשר בין מערך למצביע

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

a[0]

a[1]

a[2]

a[9]

5

5000

5004

5008

כדי להגיע לכתובת של תא כדי להגיע לכתובת של תא a[2]a[2]&&במערך פשוט נכתוב במערך פשוט נכתוב

של של הכתובתהכתובתאם נרצה את אם נרצה את המערך עצמו אזי זה שם המערך עצמו אזי זה שם

המערךהמערך

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

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

הפונקציה תקבל מערך )את כתובתו( ותדפיס אותו:הפונקציה תקבל מערך )את כתובתו( ותדפיס אותו:void PrintArray(int a[],int size)void PrintArray(int a[],int size){{

int i;int i;for (i=0;i<size;i++)for (i=0;i<size;i++)

printf(“%d”,a[i]);printf(“%d”,a[i]);}}

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

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

הפונקציה תקלוט איברים לתוך מערךהפונקציה תקלוט איברים לתוך מערך

void GetArray(int a[],int size)void GetArray(int a[],int size){{

int i;int i;for (i=0;i<size;i++)for (i=0;i<size;i++)

scanf(“%d”,&a[i]);scanf(“%d”,&a[i]);}}

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

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);

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

22תרגיל תרגיל כתבו את הפונקציות הבאות: כתבו את הפונקציות הבאות:

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

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

פתרוןפתרון

מילוי מערךמילוי מערך

void fill_array(int array[], int size){

int i;srand(time(NULL));for (i = 0; i < size; i++)

array[i] = rand()/327;}

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

פתרוןפתרון

הדפסת מערךהדפסת מערך

void print_array(int array[], int size){

int i;for (i = 0; i < size; i++)

printf("%d ", array[i]);printf("\n");

}

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

פתרוןפתרון

הפיכת מערךהפיכת מערך

void reverse_array(int array[], int size){

int i;for (i = 0; i < size/2; i++)

swap(&array[i], &array[size - 1 - i]);}

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

#include <stdio.h>#include <stdlib.h>#include <time.h>#define SIZE 5void 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;

}