در صورت برخورد به مشکل در عضویت و یا خرید محصولات سایت از طریق ID تلگرام ebrahimi_younes@ به مدیر سایت اطلاع دهید. به سوالات و مشکلات برنامه نویسی پاسخ داده نمی شود.
کتاب های سی شارپ و جاوا به زبان ساده

آرایه ها

آرایه نوعی متغیر است که لیستی از آدرسهای مجموعه ای از داده های هم نوع را در خود ذخیره می کند.تعریف چندین متغیر از یک نوع برای هدفی یکسان بسیار خسته کننده است.مثلا اگر بخواهید صد متغیر از نوع اعداد صحیح تعریف کرده و از آنها استفاده کنید. مطمئنا تعریف این همه متغیر بسیار کسالت آور و خسته کننده است.اما با استفاده از آرایه می توان همه آنها را در یک خط تعریف کرد. در زیر راهی ساده برای تعریف یک آرایه نشان داده شده است :

datatype arrayName[length];

Datatype نوع داده هایی را نشان می دهد که آرایه در خود ذخیره می کند.کروشه که بعد از نوع داده قرار می گیرد و نشان دهنده استفاده از آرایه است. lenght یا طول آرایه که به کامپایلر می گوید شما قصد دارید چه تعداد داده یا مقدار را در آرایه ذخیره کنید. arrayName که نام آرایه را نشان می دهد.هنگام نامگذاری آرایه بهتر است که نام آرایه نشان دهنده نوع آرایه باشد.به عنوان مثال برای نامگذاری آرایه ای که اعداد را در خود ذخیره می کند از کلمه numbers استفاده کنید.برای تعریف یک آرایه که 5 مقدار از نوع اعداد صحیح در خود ذخیره می کند باید به صورت زیر عمل کنیم :

int numbers[5];

در این مثال 5 آدرس از فضای حافظه کامپیوتر شما برای ذخیره 5 مقدار رزرو می شود. حال چطور مقادیرمان را در هر یک از این آدرسها ذخیره کنیم؟ برای دسترسی و اصلاح مقادیر آرایه از اندیس یا مکان آنها استفاده می شود.

numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;

اندیس یک آرایه از صفر شروع شده و به یک واحد کمتر از طول آرایه ختم می شود.به عنوان مثال شما یک آرایه 5 عضوی دارید،اندیس آرایه از 0 تا 4 می باشد چون طول آرایه 5 است پس 1-5 برابر است با 4.این بدان معناست که اندیس 0 نشان دهنده اولین عضو آرایه است و اندیس 1 نشان دهنده دومین عضو و الی آخر. برای درک بهتر مثال بالا به شکل زیر توجه کنید :
arrays-12-13-10-01
به هر یک از اجزاء آرایه و اندیسهای داخل کروشه توجه کنید. کسانی که تازه شروع به برنامه نویسی کرده اند معمولا در گذاشتن اندیس دچار اشتباه می شوند و مثلا ممکن است در مثال بالا اندیسها را از 1 شروع کنند. یکی دیگر از راه های تعریف سریع و مقدار دهی یک آرایه به صورت زیر است :

datatype arrayName[length] = { val1, val2, ... valN };

ر این روش شما می توانید فورا بعد از تعریف اندازه آرایه مقادیر را در داخل آکولاد قرار دهید. به یاد داشته باشید که هر کدام از مقادیر را با استفاده از کاما از هم جدا کنید. همچنین تعداد مقادیر داخل آکولاد باید با اندازه آرایه تعریف شده برابر باشد. به مثال زیر توجه کنید :

int numbers[5] = { 1, 2, 3, 4, 5 };

این مثال با مثال قبل هیچ تفاوتی ندارد و تعداد خطهای کدنویسی را کاهش می دهد.شما می توانید با استفاده از اندیس به مقدار هر یک از اجزاء آرایه دسترسی یابید و آنها را به دلخواه تغییر دهید.تعداد اجزاء آرایه در مثال بالا 5 است و ما 5 مقدار را در آن قرار می دهیم. اگر تعداد مقادیری که در آرایه قرار می دهیم کمتر یا بیشتر از طول آرایه باشد با خطا مواجه می شویم.یک راه بسیار ساده تر برای تعریف آرایه به صورت زیر است :

int numbers[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

به سادگی و بدون احتیاج ذکر طول می توان مقادیر را در داخل آکولاد قرار داد. کامپایلر به صورت اتوماتیک با شمارش مقادیر طول آرایه را تشخیص می دهد.

 

دستیابی به مقادیر آرایه با استفاده از حلقه for

در زیر مثالی در مورد استفاده از آرایه ها آمده است. در این برنامه 5 مقدار از کاربر گرفته شده و میانگین آنها حساب می شود:

   1: #include <iostream>
   2: using namespace std;
   3: 
   4: int main()
   5: {
   6:     int numbers[5];
   7:     
   8:     int total = 0;
   9:     double average;
  10:     
  11:     for (int i = 0; i < size(numbers); i++)
  12:     {
  13:        cout << "Enter a number: ";
  14:        cin >> numbers[i];
  15:     }
  16:     
  17:     for (int i = 0; i < size(numbers); i++)
  18:     {
  19:        total += numbers[i];
  20:     }
  21:     
  22:     average = total / (double)size(numbers);
  23:     
  24:     cout << "Average = " << average << endl;
  25: }
Enter a number: 90
Enter a number: 85
Enter a number: 80
Enter a number: 87
Enter a number: 92
Average = 86

در خط 6 یک آرایه تعریف شده است که می تواند 5 عدد صحیح را در خود ذخیره کند.خطوط 8 و 9 متغیرهایی تعریف شده اند که از آنها برای محاسبه میانگین استفاده می شود.توجه کنید که مقدار اولیه total صفر است تا از بروز خطا هنگام اضافه شدن مقدار به آن جلوگیری شود.در خطوط 11 تا 15 حلقه for برای تکرار و گرفتن ورودی از کاربر تعریف شده است.از متد ()size برای تشخیص تعداد اجزای آرایه استفاده می شود.اگر چه می توانستیم به سادگی در حلقه for مقدار 5 را برای شرط قرار دهیم ولی استفاده از خاصیت طول آرایه کار راحت تری است و می توانیم طول آرایه را تغییر دهیم و شرط حلقه for با تغییر جدید هماهنگ می شود. در خط 14 ورودی دریافت شده از کاربر در آرایه ذخیره می شود.اندیس استفاده شده در number (خط 14) مقدار i جاری در حلقه است.برای مثال در ابتدای حلقه مقدار i صفر است بنابراین وقتی در خط 14 اولین داده از کاربر گرفته می شود اندیس آن برابر صفر می شود. در تکرار بعدی i یک واحد اضافه می شود و در نتیجه در خط 14 و بعد از ورود دومین داده توسط کاربر اندیس آن برابر یک می شود. این حالت تا زمانی که شرط در حلقه for برقرار است ادامه می یابد. در خطوط 20-17 از حلقه for دیگر برای دسترسی به مقدار هر یک از داده های آرایه استفاده شده است.در این حلقه نیز مانند حلقه قبل از مقدار متغیر شمارنده به عنوان اندیس استفاده می کنیم.

هر یک از اجزای عددی آرایه به متغیر total اضافه می شوند. بعد از پایان حلقه می توانیم میانگین اعداد را حساب کنیم (خط 22). مقدار total را بر تعداد اجزای آرایه ( تعداد عدد ها) تقسیم می کنیم.برای دسترسی به تعداد اجزای آرایه می توان از متد ()size استفاده کرد.توجه کنید که در اینجا ما خروجی متد ()size را به نوع double تبدیل کرده ایم بنابراین نتیجه عبارت یک مقدار از نوع double خواهد شد و دارای بخش کسری می باشد. حال اگر عملوند های تقسیم را به نوع double تبدیل نکنیم نتیجه تقسیم یک عدد از نوع صحیح خواهد شد و دارای بخش کسری نیست. خط 24 مقدار میانگین را در صفحه نمایش چاپ می کند. طول آرایه بعد از مقدار دهی نمی تواند تغیر کند. به عنوان مثال اگر یک آرایه را که شامل 5 جز است مقدار دهی کنید دیگر نمی توانید آن را مثلا به 10 جز تغییر اندازه دهید.البته تعداد خاصی از کلاسها مانند آرایه ها عمل می کنند و توانایی تغییر تعداد اجزای تشکیل دهنده خود را دارند.آرایه ها در برخی شرایط بسیار پر کاربرد هستند و تسلط شما بر این مفهوم و اینکه چطور از آنها استفاده کنید بسیار مهم است.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.