מבוא למדעי המחשב
DESCRIPTION
מבוא למדעי המחשב. תרגול 6 - מערכים שעת קבלה: יום שני 11:00-12:00 דוא"ל: [email protected]. מערכים. מערך הוא טיפוס נתונים המכיל מספר אברים מאותו סוג. מיקום האיבר במערך נקרא אינדקס. למערך בעל n איברים יש n אינדקסים מ-0 עד n-1 . - PowerPoint PPT PresentationTRANSCRIPT
מערכים
מערך הוא טיפוס נתונים המכיל מספר אברים מאותו סוג.
מיקום האיבר במערך נקרא אינדקס.
. n-1 עד 0 אינדקסים מ-n איברים יש nלמערך בעל
, האיבר השני במקום 0 כלומר, האיבר הראשון יושב במקום
. n-1,..., האיבר האחרון יושב במקום ה 1
הצהרה על מערך
type name[size];
אברים מטיפוס שלם:20 שמכיל gradesלמשל, הצהרה על מערך בשם
int grades[20];
גודל המערך חייב להיות מוגדר מראש.
לכן לא ניתן להצהיר על מערך באופן הבא:
int x;
int array[x];
name[index]התייחסות לאיבר במערך:
לאיבר העשירי במערך:100למשל, ניתן את הערך
grades[9]=100;
אתחול המערך
בהצהרה על המערך ניתן לאתחל אותו.
;int a[5]={1,3,8,4,-2}למשל:
int b[5]={1,2}אם נאתחל מערך באופן הבא:
.0אז כל שאר האברים )השלישי עד החמשי( יקבלו את הערך
.למשל: 0בזמן ההצהרה על המערך, ניתן לאתחל את כל אבריו להיות
int array[10]={0};
על מנת לתת ערכים לאברי המערך לאחר ההצהרה נשתמש בלולאה.
13842-
0 1 3 42
העברת מערך חד מימדי לפונקציה
void function(int x[])דוגמה:
אם נרצה להעביר לפונקציה את גודל המערך, נעביר אותו כמשתנה מועבר.
( ולכן call by referenceהעברת המערך היא העברה לפי התייחסות )
הפונקציה מקבלת את כתובת תחילת המערך.
הבעיה: הפונקציה יכולה לשנות את ערכי המערך.
אם לא נרצה לשנות את הערכים נעביר את המערך כקבוע:
void function(const int x[])
טיפוס אברי
המערךשם המערך
סוגריים ריקים
ללא ציון הגודל
של מספרים שלמים, 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));{
תרגילים: איברים, ותבצע:9( כתבו תוכנית שמצהירה על מערך מטיפוס שלם של 1
בכל האברים.0 א. תציב את המספר באברים בעלי אינדקס אי זוגי.1 ב. תציב את המספר באברים בעלי אינדקס זוגי.2 ג. תציב את המספר
.3 לאברים שהאינדקס שלהם מתחלק ב-3 ד. תוסיף את המספר ה. תדפיס את המערך.
של תווים, ותו נוסף. התכנית תדפיס כמה 10( כתבו תכנית שקולטת מערך בגודל 2פעמים מופיע התו הנוסף במערך, ובאיזה מקום במערך הוא מופיע בפעם
הראשונה. תווים למערך ובונה מערך חדש מאותו גודל שאיבריו מוזזים 7( כתבו תכנית שקולטת 3
מקום אחד ימינה, והאיבר האחרון במערך המקורי יהפוך להיות ראשון בחדש. התכנית תדפיס את שני המערכים.
לדוגמה:
חדש מקורי ובונה 10 בגודל b ו-a( כתבו תכנית שקולטת ערכים שלמים אי שליליים לשני מערכים 4
.)כלומר הוא מכיל את האיברים בעלי -b וa שהוא מערך החיתוך של cמערך חדש (. ניתן להניח שבכל מערך אין איבר פעמיים.b ו-aערכים משותפים של
example eexampl
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]);{
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);{
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);{
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);{