آرایه ها
آرایه ، اسمی برای چند متغیر همنوع است و یا بعبارت دیگر مجموعه ای است از
چند کمیت که دارای یک اسم باشند . به هر یک از این کمیت ها یک عنصر آرایه گفته
می شود . دسترسی به هر یک از عناصر آرایه توسط نام آرایه و محل قرار گرفتن این
عنصر در آرایه مشخص می شود . نامگذاری برای آرایه ها از قانون نامگذاری برای
متغیرها تبعیت می کند. بعنوان مثال ک مجموعه ای از دانشجویان یک کلاس می توانند
تشکیل یک آرایه بدهند . اگر نام این آرایه را Y انتخاب کنیم ، آنگاه (۱)Y اولین
عنصر آرایه ، (۲)Y دومین عنصر آرایه و بالاخره (n)Y، n امین عنصر آرایه را مشخص
می کند . به هر یک از اعداد ۱، ۲، و … و n که محل قرار گرفتن یک عنصر را در
آرایه مشخص می کنند ، اندیس آرایه گفته می شود . اندیس آرایه ارتباط بین عناصر
آرایه را مشخص می کند مثلا”(َ۲)Y در آرایه قبل از (۳)Y و بعد از (۱)Y قرار دارد.
چون دسترسی به عناصر آرایه از طریق اندیس امکان پذیر است ، آرایه را متغیر
اندیس دار نیز می گویند .
آرایه های دارای یک اندیس را آرایه های یک بعدی ، آرایه های دارای دو اندیس را
آرایه های دو بعدی و به طور کلی آرایه های دارای n اندیس را آرایه های n بعدی
می گویند .
آرایه ها و رشته ها دو قسمت مجزا نیستند زیرا : ” رشته آرایه ای از کاراکترها
است ” .
آرایه های یک بعدی
آرایه یک بعدی که نام دیگر آن لیست است ، بصورت زیر تعریف می شود : ]
طول آرایه [ <نوع آرایه > <اسم آرایه >
نوع ، یکی از نوع های معتبر در زبان C مثل intو floatو است که مشخص می کند
هر یک از عناصر آرایه از چه نوعی هستند . طول آرایه ، عددی صحیح است که تعداد
عناصر آرایه را مشخص می کند . با استفاده از طول آرایه و نوع آن می توان مشخص
کرد که آرایه چند بایت از حافظه را اشغال می کند :
طول آرایه * ( نوع آرایه ) = sizeof مقدار حافظه مورد نیاز آرایه
اندیس آرایه ها در زبان C از صفر شروع می شود . بعنوان مثال اگر آرایه ای به
طول ۵ داشته باشیم ، اولین متغیر آن دارای اندیس صفر و آخرین عنصر دارای اندیس ۴
خواهد بود .
مثال ۱: int temp [5];
دستور فوق آرایه ای بنام temp و به طول ۵ را تعریف میکند که همه عناصر آن از
نوع int هستند . شکل ۱ نشان می دهد که چگونه می توان به هر یک از عناصر آرایه temp
دسترسی پیدا کرد .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ temp | | | | | |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ temp [0] temp [1] temp [2] temp [3] temp [4]
شکل (۱) . نحوه دسترسی به عناصر آرایه
نکته ای که در مورد آرایه ها در زبان C باید توجه داشت این است که در آن bounds checking
وجود ندارد. بعنوان مثال ، اگر آرایه ای بنام x و به طول ۱۰ را
تعریف کرده باشیم ( با توجه به این که بزرگترین اندیس آن ۹ است ) ، می توانیم
این آرایه را با اندیس های بزرگتر از ۹ ( بدون اینکه از طرف کامپایلر C جلوی
آن گرفته شود ) مورد استفاده قرار دهیم . در این مورد دستوراتی مثل y = x[10]
و k = x[n] ازنظر کامپایلر با اشکالی مواجه نخواهد شد. ولی بدیهی است که نتیجه
مطلوبی حاصل نخواهد شد. لذا برنامه نویس باید مطلب فوق را در نظر داشته باشد تا
در نتیجه اجرای برنامه اشکالی پیش نیاید .
مثال ۲: برنامه ای که با تعریف یک آرایه به طول ۱۰ ، مقدار هر عنصر آن را
برابر با اندیس آن قرار داده و سپس با محاسبه مجموع مربعات عناصر آرایه ، آنها
را در خروجی چاپ می کند . main)(
{
float list[20]/max ;
int i / j ;
for(i=0 ; i<20/i++)
{
printf(“\n enter moadel %d :”/i+1);
scanf(“%f”/&list[i] );
}
max=list[0] ;
j=1 ;
for(i=1 ;i<20 ; i++)
{
if(list[i]>max)
{
max=list[i] ;
j=i+1 ;
}
}
printf(“\nmax=%f/position=%d”/max/j);
}
خروجی حاصل از برنامه مثال ۲ : enter moadel 1 :12
enter moadel 2 :12.5
enter moadel 3 :10.75
enter moadel 4 :14
enter moadel 5 :13
enter moadel 6 :16
enter moadel 7 :17.25
enter moadel 8 :18.5
enter moadel 9 :17.5
enter moadel 10 :18.25
enter moadel 11 :19.5
enter moadel 12 :15.75
enter moadel 13 :16.25
enter moadel 14 :17.5
enter moadel 15 :18.5
enter moadel 16 :19.25
enter moadel 17 :20
enter moadel 18 :11.5
enter moadel 19 :10.5
enter moadel 20 :10.75
max=20.000000/position=17
مثال ۳: برنامه ای که با خواندن تعدادی عدد از ورودی ، آنها را در آرایه ای
قرار می دهد . سپس این آرایه را به طریق حبابی (bubble sort) مرتب می کند . main)(
{
counst int k=7 ;
int temp[7]/i/j/item ;
for(i=0 ; i
{
printf(“\n enter number %d:”/i+1);
scanf(“%d”/&temp[i] );
}
printf(“\n\t\t the intitial”);
printf(” data are: ” );
printf(“\n\n\t\t” );
for(i=0 ;i
printf(” %3d”/temp[i] );
for(i=k-1 ;i>0;i)–
for(j=0;j
if(temp[j]>temp[j+1])
{
item=temp[j] ;
temp[j]=temp[j+1];
temp[j+1]=item ;
}
printf(“\n\t\t the sorted data”);
printf(” are: ” );
printf(“\n\n\t\t” );
for(i=0 ;i
printf(” %3d”/temp[i] );
}
نمونه ای از خروجی برنامه مثال ۳ : enter number 1:10
enter number 2:1
enter number 3:20
enter number 4:6
enter number 5:45
enter number 6:34
enter number 7:47
the initial data are:
10 1 20 6 45 34 47
the sorted data are:
1 6 10 20 34 45 47
مثال ۴: برنامه ای که با خواندن تعدادی عدد از ورودی آنها را در یک آرایه
قرار داده ، سپس کلیه عناصر آرایه را بر عنصر وسط تقسیم می کند . اگر عنصر وسط
صفر باشد ، بر عنصر بعد از عنصر وسط و اگر این عنصر نیز صفر باشد بر عنصر قبل
از عنصر وسط تقسیم می کند . اگر این عناصر صفر باشند برای پیدا کردن عنصری غیر
صفر و انجام عمل تقسیم به ترتیبی که در بالا گفته شد عمل می کند و اگر چنانچه
کلیه عناصر آرایه برابر با صفر باشند پیام مناسبی صادر می شود ( تعداد عناصر
آرایه فرد است ) . main)(
{
int i/j/m/k/sign/y ;
const int n=9 ;
int list[9] ;
printf(“\nenter 9 number and press”);
printf(” enter\n”);
for(i=0;i
scanf(“%d”/&list[i] );
m=(n+1)/2-1 ;
k=list[m] ;
if(k==0)
{
j=1 ;
sign=1 ;
while(j
{
y=0 ;
while(y<2)
{
k=list[m+j*sign] ;
sign=-sign ;
if(k==0)
y++ ;
else
{
action(list/k/n );
break ;
}
}
j++ ;
}
printf(“\nall elemens are zero.”);
}
else
action(list/k/n );
}
action(int arr[]/int gol/int length)
{
int i ;
printf(“\n\t\t the intitial list:”);
printf(“\n\n\t\t” );
for(i=0 ; i
printf(” %3d”/arr[i] );
for(i=0 ; i
arr[i]=arr[i]/gol ;
printf(“\n\t\t the final list: “);
printf(“\n\n\t\t” );
for(i=0 ; i
printf(” %3d”/arr[i] );
}
دو نمونه از خروجی برنامه مثال ۴ :
( الف ) enter 9 number and press enter.
10 12 14 16 2 18 20 22 24
the initial list:
10 12 14 16 2 18 20 22 24
the final list:
5 6 7 8 1 9 10 11 12
( ب ) enter 9 number and press enter.
0 0 0 0 0 0 0 0 0
all elements are zero.
آرایه های چند بعدی
تاکنون نحوه تعریف و استفاده از آرایه های یک بعدی را مورد بررسی قرار
داده ایم . اکنون می خواهیم ببینیم که ” چگونه می توان آرایه بیش از یک بعدی را
تعریف کرده و به عناصر آن دسترسی پیدا کرد ” . در تعریف آرایه دو بعدی باید ۲
اندیس و در تعریف آرایه سه بعدی باید ۳ اندیس و در تعریف آرایه n بعدی باید n
اندیس را ذکر کرد . بعنوان مثال ، دستور : int table [10] [10];
یک آرایه دو بعدی بنام table را تعریف میکند که دارای ۱۰ سطر و ۱۰ ستون است
و نوع عناصر آن int است . دستور : int k[5] [10] [15];
آرایه ای سه بعدی بنام k را تعریف می کند که دارای ۵ سطر ، ۱۰ ستون و ۱۵
ارتفاع است و نوع عناصر آن int می باشد .
به دو نکته در مورد آرایه توجه کنید : ۱
عناصر آرایه در محل های متوالی حافظه ذخیره می شوند . ۲
عناصر آرایه به صورت سطر ذخیره می شوند . بعنوان مثال اگر آرایه ای بصورت [۴]
table [3] داشته باشیم مشابه شکل (۲) در حافظه ذخیره می شوند .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | table [0] [0] |
| table [0] [0] |
| table [0] [1] |
| table [0] [2] |
| table [0] [3] |
| table [1] [0] |
| table [1] [1] |
| table [1] [2] |
| table [1] [3] |
| table [2] [0] |
| table [2] [1] |
| table [2] [2] |
| table [2] [3] |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شکل (۲) . نحوه ذخیره شدن آرایه در حافظه
مثال ۵: برنامه ای که با محاسبه جدول ضرب اعداد ۱ تا ۱۰، ضمن قرار دادن آنها
در یک آرایه به خروجی نیز منتقل می کند . main)(
{
int table[10] [10] ;
int i / j ;
for(i=0;i<10 ; i++)
for(i=0;i<10;i++)
table[i][j]=(i+1)*(j+1 );
for(i=0;i<10;i++)
{
for(i=0;i<10;i++)
printf(“%4d”/table[i] [j] );
printf(“\n” );
}
}
خروجی حاصل از مثال ۵ : ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
۲ ۴ ۶ ۸ ۱۰ ۱۲ ۱۴ ۱۶ ۱۸ ۲۰
۳ ۶ ۹ ۱۲ ۱۵ ۱۸ ۲۱ ۲۴ ۲۷ ۳۰
۴ ۸ ۱۲ ۱۶ ۲۰ ۲۴ ۲۸ ۳۲ ۳۶ ۴۰
۵ ۱۰ ۱۵ ۲۰ ۲۵ ۳۰ ۳۵ ۴۰ ۴۵ ۵۰
۶ ۱۲ ۱۸ ۲۴ ۳۰ ۳۶ ۴۲ ۴۸ ۵۴ ۶۰
۷ ۱۴ ۲۱ ۲۸ ۳۵ ۴۲ ۴۹ ۵۶ ۶۳ ۷۰
۸ ۱۶ ۲۴ ۳۲ ۴۰ ۴۸ ۵۶ ۶۴ ۷۲ ۸۰
۹ ۱۸ ۲۷ ۳۶ ۴۵ ۵۴ ۶۳ ۷۲ ۸۱ ۹۰
۱۰ ۲۰ ۳۰ ۴۰ ۵۰ ۶۰ ۷۰ ۸۰ ۹۰ ۱۰۰
مثال ۶: برنامه ای که دو ماتریس را از ورودی خوانده و با حاصل ضرب آنها ، به
خروجی منتقل می کند . main)(
{
int mat1[2][3]/mat2[3][4] ;
static int mat3[2][4]={0} ;
int i/j/k/l ;
for(i=0 ; i<2 ; i++)
{
for(i=0 ; i<3 ; i++)
{
printf(“\n\tenter”);
printf(” mat1[%d][%d] :”/i/j);
scanf(“%d”/&mat1[i][j] );
}
for(i=0 ; i<3 ; i++)
{
for(i=0 ; i<4 ; i++)
{
printf(“\n\tenter”);
printf(” mat2[%d][%d] :”/i/j);
scanf(“%d”/&mat2[i][j] );
}
}
for(i=0 ; i<2 ; i++)
{
for(i=0 ; i<4 ; i++)
{
mat3[i][j]=0 ;
for(k=0 ;k<3 ; k++)
mat3[i][j]=mat3[i][j]+mat1[i][k]*
mat2[k][j];
}
}
printf(“\nthe product of mat1 & “);
printf(“mat2 is: \n\n” );
for(i=0 ;i<2 ;i++)
{
for(i=0 ; i<4 ; i++)
printf(“%5d”/mat3[i][j] );
printf(“\n\n” );
}
}
نمونه ای از خروجی برنامه مثال ۶ : enter mat1[0][0]:1
enter mat1[0][1]:2
enter mat1[0][2]:3
enter mat1[1][0]:5
enter mat1[1][1]:4
enter mat1[1][2]:7
enter mat2[0][0]:8
enter mat2[0][1]:9
enter mat2[0][2]:5
enter mat2[0][3]:8
enter mat2[1][0]:10
enter mat2[1][1]:0
enter mat2[1][2]:12
enter mat2[1][3]:21
enter mat2[2][0]:0
enter mat2[2][1]:5
enter mat2[2][2]:9
enter mat2[2][3]:12
the product of mat1
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن