מבוא למדעי המחשב

11
בבבב בבבבב בבבבב ללללל6 לללללל- ללל לללל: ללל ללל11:00-12:00 :ללל"ל[email protected]

Upload: samuel-hodge

Post on 02-Jan-2016

40 views

Category:

Documents


2 download

DESCRIPTION

מבוא למדעי המחשב. תרגול 6 - מערכים שעת קבלה: יום שני 11:00-12:00 דוא"ל: [email protected]. מערכים. מערך הוא טיפוס נתונים המכיל מספר אברים מאותו סוג. מיקום האיבר במערך נקרא אינדקס. למערך בעל n איברים יש n אינדקסים מ-0 עד n-1 . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: מבוא למדעי המחשב

מבוא למדעי המחשב

- מערכים6תרגול

11:00-12:00שעת קבלה: יום שני

[email protected] :דוא"ל

Page 2: מבוא למדעי המחשב

מערכים

מערך הוא טיפוס נתונים המכיל מספר אברים מאותו סוג.

מיקום האיבר במערך נקרא אינדקס.

. n-1 עד 0 אינדקסים מ-n איברים יש nלמערך בעל

, האיבר השני במקום 0 כלומר, האיבר הראשון יושב במקום

. n-1,..., האיבר האחרון יושב במקום ה 1

Page 3: מבוא למדעי המחשב

הצהרה על מערך

type name[size];

אברים מטיפוס שלם:20 שמכיל gradesלמשל, הצהרה על מערך בשם

int grades[20];

גודל המערך חייב להיות מוגדר מראש.

לכן לא ניתן להצהיר על מערך באופן הבא:

int x;

int array[x];

name[index]התייחסות לאיבר במערך:

לאיבר העשירי במערך:100למשל, ניתן את הערך

grades[9]=100;

Page 4: מבוא למדעי המחשב

אתחול המערך

בהצהרה על המערך ניתן לאתחל אותו.

;int a[5]={1,3,8,4,-2}למשל:

int b[5]={1,2}אם נאתחל מערך באופן הבא:

.0אז כל שאר האברים )השלישי עד החמשי( יקבלו את הערך

.למשל: 0בזמן ההצהרה על המערך, ניתן לאתחל את כל אבריו להיות

int array[10]={0};

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

13842-

0 1 3 42

Page 5: מבוא למדעי המחשב

העברת מערך חד מימדי לפונקציה

void function(int x[])דוגמה:

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

( ולכן call by referenceהעברת המערך היא העברה לפי התייחסות )

הפונקציה מקבלת את כתובת תחילת המערך.

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

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

void function(const int x[])

טיפוס אברי

המערךשם המערך

סוגריים ריקים

ללא ציון הגודל

Page 6: מבוא למדעי המחשב

של מספרים שלמים, 10כתוב תכנית שקולטת ערכים למערך מגודל מוסיפה לכל איבר את סכום הערכים של אברי המערך, ומדפיסה את

המערך החדש.

#include <stdio.h>#define N 10int kelet(int a[])} int i,sum=0; printf ("\n enter %d numbers",N); for (i=0;i<N;i++) { scanf ("%d",&a[i]); sum+=a[i]; { return (sum);{

void add(int b[],int sum)} int i; for (i=0;i<N;i++) } b[i]+=sum; printf ("\n array[%d]=%d",i,b[i]); { {void main()} int array[N]; add(array,kelet(array));{

Page 7: מבוא למדעי המחשב

תרגילים: איברים, ותבצע:9( כתבו תוכנית שמצהירה על מערך מטיפוס שלם של 1

בכל האברים.0 א. תציב את המספר באברים בעלי אינדקס אי זוגי.1 ב. תציב את המספר באברים בעלי אינדקס זוגי.2 ג. תציב את המספר

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

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

הראשונה. תווים למערך ובונה מערך חדש מאותו גודל שאיבריו מוזזים 7( כתבו תכנית שקולטת 3

מקום אחד ימינה, והאיבר האחרון במערך המקורי יהפוך להיות ראשון בחדש. התכנית תדפיס את שני המערכים.

לדוגמה:

חדש מקורי ובונה 10 בגודל b ו-a( כתבו תכנית שקולטת ערכים שלמים אי שליליים לשני מערכים 4

.)כלומר הוא מכיל את האיברים בעלי -b וa שהוא מערך החיתוך של cמערך חדש (. ניתן להניח שבכל מערך אין איבר פעמיים.b ו-aערכים משותפים של

example eexampl

Page 8: מבוא למדעי המחשב

1תרגיל

#include <stdio.h>#define N 9void main()} int i,a[N]={0}; for (i=0;i<N;i++) } if (i%2) a[i]=1; else a[i]=2; if (!(i%3)) a[i]+=3; { for (i=0;i<N;i++) printf ("\n a[%d]=%d",i,a[i]);{

Page 9: מבוא למדעי המחשב

2תרגיל #include <stdio.h>#define N 10void kelet(char a[])} int i; printf ("\n enter %d chars",N); for (i=0;i<N;i++) } flushall(); scanf("%c",&a[i]); { {int find_index(const char a[],char tav)} int i; for (i=0;i<N;i++) if (a[i]==tav) return(i); return(-1);{

void main()} char array[N],c; int i,count=0,index; kelet(array); printf ("\n enter another char"); flushall(); scanf ("%c",&c); for (i=0;i<N;i++) if (array[i]==c) count++; printf ("\n %c appears %d times at array",c,count); index=find_index(array,c); if (index!=-1) printf ("\n %c appears at %d place",c,index+1);{

Page 10: מבוא למדעי המחשב

3תרגיל #include <stdio.h>#define N 7void kelet(char a[])} int i; printf ("\n enter %d chars",N); for (i=0;i<N;i++) } flushall(); scanf ("%c",&a[i]); { {pelet(const char a[])} int i; printf ("\n"); for (i=0;i<N;i++) printf ("%c",a[i]);{

void main()} char arr[N],new[N]; int i; kelet(arr); new[0]=arr[N-1]; for (i=1;i<N;i++) new[i]=arr[i-1]; pelet(arr); pelet(new);{

Page 11: מבוא למדעי המחשב

4תרגיל #include <stdio.h>#define N 10void kelet(int array[])} int i; printf ("\n enter %d

numbers",N); for (i=0;i<N;i++) scanf ("%d",&array[i]);{pelet(const int arr[])} int i; printf ("\n"); for (i=0;i<N;i++) if (arr[i]>0) printf ("%d",arr[i]);{

void main()} int a[N],b[N],c[N]={0}; int i,j; kelet(a); kelet(b); for (i=0;i<N;i++) for (j=0;j<N;j++) if (a[i]==b[j]) c[i]=a[i]; pelet(c);{