تکین وب | آموزش برنامه نویسی
تکین وب | آموزش برنامه نویسی

آرایه ها در ++C

۱۰ شهریور ۱۳۹۴

برنامه هایی که تاکنون به بررسی و پیاده سازی آن ها پرداخته ایم ، برنامه هایی با تعداد داده های کمی بوده اند که آنها را در انواع متغیرها ذخیره کردیم . اگر به مثال حقوق کارمندان که در قسمت قبل بیان شد ، توجه کرده باشید ، باید به اندازه ی تعداد افراد شرکت متغیرهایی از نوع  float برای ذخیره حقوق آنها ، متغیرهایی از نوع char برای ذخیره نام هر کارمند و ….. در نظر گرفت . اما اگر بخواهیم برای افراد شرکت و حقوق آنها ، که داده های برنامه ی ما هستند ، متغیرهای زیادی را درنظر بگیریم ،استفاده از روش های قبل امکان پذیر نیست . برای حل این گونه مسائل ، یعنی مسائلی با تعداد زیادی متغیر ،از آرایه ها استفاده می کنیم .

معرفی آرایه ها

آرایه ها ، مجموعه ای از عناصر هم نوع هستند .می توان برای هر آرایه یک نام دلخواه درنظر گرفت که این نام دلخواه هم مانند نام گذاری متغیرها می باشد . برای اینکه به عناصر آرایه ها دسترسی داشته باشیم ، باید از متغیری به نام اندیس استفاده کرد . اولین اندیس هر آرایه از صفر شروع می شود . ساده ترین نوع آرایه ها ، آرایه های یک بعدی می باشند :

آرایه های یک بعدی

آرایه های یک بعدی به صورت زیر تعریف می شوند :

 [ طول آرایه ] نام آرایه   نوع آرایه   

در دستور بالا ، نوع آرایه یکی از انواع متغیرها می باشد . نام آرایه هم نامی دلخواه می باشد و طول آرایه تعداد داده های است که میخواهیم در این مجموعه داشته باشیم . برای مثال همانطور که در تکه کد زیر می بینید ، نوع آرایه از نوع int یا عدد صحیح ، نام آرایه array و طول آرایه ۷ می باشد . به این معنا که ما  ۷ داده از نوع int را در مجموعه ای یه نام array ذخیره کرده ایم :

  

   int array [7];
   

 

در شکل زیر نمایش ساختار آرایه را مشاهده می کنید :

 ar

در ساختار بالا آرایه ای به نام x را می بینید که اندیس خانه اول آن از صفر شروع شده است . نکته ای که باید بدانید این است که همه ی داده هایی که در این خانه ها ذخیره می شوند ، از همان نوعی هستند که شما در تعریف آرایه به کار برده اید . مثلا همگی از نوع عدد صحیح یا از نوع عدد اعشاری و … می توانند باشند .

حال سوالی که ممکن است برایتان پیش بیاید میزان حافظه ای است که یک آرایه ممکن است به خود اختصاص دهد . باید گفت با توجه به نوع آرایه ، این میزان قابل محاسبه می باشد . برای مثال در تکه کد بالا آرایه ای به نام array را تعریف کردیم که از نوع int می باشد . هر خانه از این آرایه ، ۴ بایت را به خود اختصاص می دهد (با فرض اینکه هرعدد صحیح ۴ بایت باشد ) و چون آرایه دارای ۷ خانه می باشد ، بنابراین در کل ۲۸ بایت از حافظه درگیر می باشد . می توان از فرمول زیر استفاده کرد :

 طول نوع آرایه * طول آرایه=میزان حافظه

روش دیگری برای بیان عناصر آرایه وجود دارد و آن ذکر تمام عناصر آرایه در تعریف می باشد :

int array [7]= {-137,2,-43,17,7,95,-13};

همانطور که می بینید در این تعریف داده ها از نوع int  می باشند و همه ی آن ها بین دو کروشه قید شده اند .

در تعریف اول می توانیم خودمان خانه های آرایه را از نوعی که تعریف کردیم ، پر کنیم . اما برای این کار از حلقه تکرار for و دستور cin استفاده می کنیم :

int array [3];
for(int i =0 ;i <3 ; i++)
cin>>array[i];

در تکه کد بالا ابتدا آرایه ای از نوع int به نام array به طول ۳ تعریف کرده ایم . در حلقه ی for اندیس i همان اندیس آرایه می باشد که از صفر شروع شده است و  تا i<3 ادامه دارد .هر بار به ازای iهای مختلف باید به وسیله دستور cin کاربر مقدار دلخواهی را از صفحه کلید وارد کند تا به عنوان داده در خانه های این آرایه ذخیره شود :

array[0] = ? // i = 0 —-> array[0]= your choice
array[1] = ? // i = 1 —-> array[1]= your choice
array[2] = ? // i = 2 —-> array[2]= your choice

به این ترتیب توانستیم با این روش خانه های آرایه را با داده هایی که میخواستیم ، پر کنیم .

int main()
{
int array [3];
cout<<"Enter numbers :"<<endl;
for(int i =0 ;i <3 ; i++)
cin>>array[i];
for(int i= 0 ; i<3 ; i++)
cout<<array[i]<<" ";
cout<<endl;
system("pause");
}

در کد بالا به آسانی می توانید با استفاده از آرایه ها داده ها را ذخیره نمایید .

آرایه یک بعدی به عنوان آرگومان تابع

در قسمت قبل به معرفی توابع و روش فراخوانی آنها پرداختیم . باید بگوییم آرایه ها نیز مانند متغیرها قابل فرستاده شدن به عنوان ورودی های یک تابع هستند . اما دو روش برای این کار وجود دارد . روش اول فرستاده شدن آرایه با طول آن و روش دوم  فرستادن آن به همراه طول آن که در یک متغیری ذخیره شده است ، می باشد . برای مثال به تکه کد زیر توجه نمایید :

/*********define functions*********/
void func1(int array[]);
void func2(int array[],int length);
/*********define main********/
int main()
{
int array [4];
....
func1(array);//call func1
func2(array , 4); //call func2
}
/*********func1********/
void func1(int array[4])
{
....
}
/*********func2********/
void func2(int array[] , int length)
{
.....
}

همانطور که مشاهده می کنید ، func1 به روش اول و func2 به روش دوم تعریف شده است . در ابتدا دو تابع در بالای main اعلان شده اند . در این اعلان در تابع func1 نوع داده های ذخیره شده در آرایه ها را به همراه نام آرایه که array می باشد و بعد از آن از علامت [] استفاده شده است. اما در func2 علاوه بر نکات func1 از متغیری به نام length برای ذخیره ی طول آرایه استفاده شده است . هنگام فراخوانی توابع ، در func1 چون طول آرایه مطرح نیست ، فقط از  نام آرایه به عنوان ورودی و در func2 چون متغیری برای ذخیره ی طول آن به کار برده شد ه است ، باید علاوه بر نام آرایه ، طول آرایه نیز قید شود . در اینصورت در جایی خارج از main به تعریف توابع می پردازیم .

می توان بر روی آرایه اعمال زیادی مانند اعمال ریاضی و منطقی و…. انجام داد . معروف ترین برنامه هایی که در زمینه ی یادگیری کار با آرایه ها مورد بحث می باشد ، جستجوی دودویی و انواع مرتب سازی ها در آرایه ها می باشد .

آرایه های چند بعدی

در این بخش به بررسی آرایه هایی با بیش از یک بعد می پردازیم . آرایه های دوبعدی یکی از انواع آرایه های چند بعدی است . این گونه آرایه ها  شامل چند سطر و ستون می باشند که بعد اول همان سطرهای آرایه و بعد دوم همان ستون های آن است . برای تعریف یک آرایه دوبعدی از دستور زیر استفاده می کنیم :

 [بعد ۲][ بعد ۱ ] نام آرایه   نوع آرایه

در تکه کد زیر آرایه ای به نام array دارای دو بعد می باشد : 

int array[3][5];

در شکل زیر جدول ۳ در ۵ ای را مشاهده می کنید که طبق تعریف از ۳ سطر و ۵ ستون ساخته شده است :

amk

در آرایه های دوبعدی همانند آرایه های یک بعدی می توان به وسیله حلقه for و دستور cin خانه های حافظه را پر کرد :

int array[3][5];
for(int i=0 ; i<3 ;i++)
for(int j=0 ; j<5 ; j++)
cin>>array[i][j];

در تکه کد بالا به ازای ۰=i حلقه ی داخلی ۵ بار تکرار خواهد شد . بنابراین خواهیم داشت :

array[0][0] = your choice —> i=0 , j=0
array[0][1] = your choice —> i=0 , j=1
array[0][2] = your choice —> i=0 , j=2
array[0][3] = your choice —> i=0 , j=3
array[0][4] = your choice —> i=0 , j=4

به همین ترتیب به ازای i=1 ، دوباره حلقه داخلی ۵ بار تکرار خواهد شد. تا وقتی که i=2 شود ، این روال( یعنی تکرار حلقه داخلی)  تکرار می شود  .

علاوه بر اینگونه تعریفی که ارائه شد ، نوع دیگری از تعریف آرایه دو بعدی مانند زیر می باشد :


int array[2][3]= {{3,4,1234},{0,3276,-444}};

همانطور که میبینید ، چون آرایه دارای دو سطر و سه ستون می باشد ، داده ها باید در دو مجموعه ی جداگانه مقداردهی شوند . مجموعه ی اول همان سطر اول و محموعه دوم سطر دوم می باشد . داده های موجود در این مجموعه ها همان تعداد ستون ها می باشند . در اینجا چون ۳ ستون داریم بنابراین باید در هر مجموعه ۳ عنصر از نوع int قرار داده شود .
ساده ترین برنامه برای تمرین آرایه های دوبعدی ، برنامه جدول ضرب می باشد :

int main()
{
int table[10][10];
for(int i =0 ;i<10 ; i++){
for(int j= 0 ; j<10 ; j++){
table[i][j]=(i+1)*(j+1);
}
}
for(int i =0 ;i<10 ; i++){
for( int j= 0 ; j<10 ; j++)
cout<<table[i][j]<<"\t";
cout<<endl;
}
system("pause");
}

آرایه دو بعدی به عنوان آرگومان تابع

مطابق با روشی که برای آرایه های یک بعدی بیان کردیم ،  آرایه های دوبعدی هم می توانند به عنوان ورودی برای تابع قرار بگیرند . به این صورت که در روش اول هم طول سطر و هم طول ستون ذکر می شوند اما در روش دوم فقط طول ستون ذکر می شود و طول سطر را به کار نمی بریم . در عوض این طول را در یک متغیر دیگر قرار خواهیم داد :

 

/*********define function*********/
void func1(int array[3][5]);
void func2(int array[][5],int );
/*********define main********/
int main()
{
int array [3][5];
....
func1(array);//call func1
func2(array , 3); //call func2
}
/*********func1********/
void func1(int array[3][5])
{
....
}
/*********func2********/
void func2(int array[][5] , int row)
{
.....
}

در تکه کد بالا دو تابع func1 و func2 تعریف شده اند . در این تعریف طبق روش اول در تابع  func1 هم طول سطر و هم طول ستون بیان شده ، اما در func2 طول سطر در متغیر row قرار گرفته است . نحوه ی فراخوانی این دوتابع ، در روش اول مطابق با آرایه های یک بعدی و در روش دوم هم فقط طول سطر همراه با نام آرایه به عنوان ورودی های تابع قرار گرفته اند و درنهایت به تعریف هر تابع پرداخته می شود .

ساده ترین برنامه ای که به عنوان تمرین می توان انجام داد ، برنامه ی ماتریس می باشد . همانطور که می دانید هر ماتریس از سطرها و سطون هایی تشکیل شده است . بنابراین می توان با در نظر گرفتن آنچه درمورد آرایه های دوبعدی می دانیم ، به پیاده سازی ماتریس بپردازیم :

#include"iostream"
#include<stdlib.h>
using namespace std;
void matrix(int mat[][3],int row);
int main()
{
cout<<"enter rows and colums of this matrix :"<<endl;
int mat[4][3] ;
matrix(mat , 4);
system("pause");
return 0;
}
/////define matrix function
void matrix(int mat[][3] , int row)
{
for(int i =0 ; i<4 ; i++)
{
for(int j =0 ; j<3 ; j++)
{
cout<<"matrix["<<i<<"]["<<j<<"] = ";
cin>>mat[i][j];
cout<<endl;
}
}

}

شما می توانید انواع اعمال منطقی و ریاضی را بر روی آرایه های دو بعدی نیز انجام دهید .

دانلود بازی دوز با آرایه : x-o game

در ضمن اگر اینستاگرامی هستید حتما @Takinweb را فالو کنید….

درباره ی عطیه رحمانی

دیدگاه ها

2 دیدگاه ارسال شده !

  1. برنامه نویس می‌گه:

    با سلام خدمت شما
    مطالب سایتتون خیلی عالی بود از شما تشکر میکنم. سپاس گذار

دیدگاه خود را به ما بگویید.

کلیه ی حقوق مادی و معنوی مطالب متعلق به سایت تکین وب می باشد و کپی برداری و بازنشر آن بدون ذکر منبع کاری غیر حرفه ای و غیر اخلاقی و قابل پیگرد قانونی خواهد بود.
کانال تلگرام تکین وب