#74☑️ آرایه ها
در آموزش های گذشته نحوه ذخیره و بازیابی اطلاعات و نمایش آنها با استفاده از متغیر ها را دیدیم , داده ها را در درون متغیرها و یا ثوابت ذخیره می کردیم اما گاهی لازم است تعدادی از داده ها را بگونه ای ذخیره نماییم که متعلق به یک مجموعه بوده و دسترسی به آنها آسان باشد یا اگر حجم دادهها زیاد باشدآن وقت است که میتوان دست به دامن آرایه ها شد.
مثلاً اگر شما بخواهید ۱۰۰ نوع داده ی مختلف برای مثال داده ی عددی را از ورودی بگیرید درصورت نبود آرایه ها میبایست صد متغیر تعریف کرد و صد بار هر عدد را گرفت ولی با استفاده از آرایه ها این کار هم آسانتر میشود و هم سرعت بیشتری برای مقایسه هست یا مثلا یک کنکوری رو در نظر بگیرین که 1000 شرکت کننده داره اگه بخوایم رتبه این 1000 نفر رو ذخیره کنیم بطبع تعریف 1000 متغیر از نوع int کار عاقلانه ای نیست پس میام یه آرایه از نوع int تعریف میکنیم که میانگین هر شخص رو توی عناصر(خونه هاش) قرار میدیم.
آرایه مجموعه ای از عناصر هم نوع است یعنی اگر آرایه رو از نوع int تعریف کردیم همه عناصرش از نوع int می باشد. در برنامه نویسی C++ برای تعریف آرایه باید نوع عناصر آنرا مشخص کنیم و آرایه باید حتما دارای نام باشد که از قانون نامگذاری برای متغیرها تبعیت می کند و بعد از نام از [ ] استفاده می کنیم که درون آن می توان از یک عدد صحیح برای تعیین طول آرایه استفاده نمود.
@Learncpp
#75☑️ آرایه ها
برای دسترسی به عناصر آرایه از اندیس استفاده می کنیم که اولین اندیس هر آرایه ای از عدد صفر شروع می شود .
int arr[10];کد برنامه نویسی ++C بالا آرایه ای را با نام arr تعریف می کند که عناصر آن از نوع عدد صحیح هستند و تعداد عناصر آرایه (طول) برابر با 10 است .
🔺توجه : تعداد عناصر آرایه بالا 10 است ولی اندیس عناصر آن از صفر شروع شده و به 9 ختم می شود و نباید تعداد را با اندیس اشتباه گرفت .
عناصر آرایه پشت سر هم در خانه های حافظه ذخیره می شوند و هر عنصر (خانه) از آرایه به اندازه طول نوع آرایه فضا اشغال می کند. در آرایه بالا چون نوع آرایه تعریف شده int است پس هر عنصر مقدار 4 بایت و چون طول آن 10 است در نهایت 40 بایت پشت سر هم از حافظه را اشغال می کند .
@Learncpp
#76☑️ آرایه ها
🔹آرایه های یک بعدی :
در آرایه های یک بعد با یک اندیس میتوان به هر عنصر از آن دست یافت و آرایه های یک بعدی به صورت زیر تعریف میشوند:
type ArrayName [ArraySize] ;
نوع (type) یکی از انواع دادهای قابل استفاده در سی پلاس پلاس است. MyArray نام آرایه است که از قوانین نامگذاری متغیر ها پیروی میکند ArraySize اندازه طول آرایه است که با یک عدد صحیح مشخص میشود.
مثلاً آرایه زیر یک آرایه به اسم integers است با طول ۵
int integers[5];برای مقدار دهی و دسترسی به عنصر هر آرایه از روشهای زیر میتوان استفاده کرد:
int integers[5]={1,2,3,4,5};🔺به این نکته توجه داشته باشین که آرایه ای که طول آن 5 است اندیس های آن از 0 تا 4 میباشد یعنی اندیس های آرایه از صفر شروع میشوند.
برای دسترسی به عناصر از روش زیر پیروی میکنیم:
integers[0]integers[1]و الی آخر..
🔺نکته : معمولاً برای دسترسی یا پیمایش خانههای آرایه های یک بعدی یا لیست ها می بایست از یک حلقه for استفاده نمود.
@Learncpp
#77☑️ آرایه ها
مثال) برنامهای بنوسید که ابتدا یک آرایه ۱۰ عنصری A تعریف نماید,سپس توان دوم اعداد ۰ تا ۹ را در آرایه قرار داده و آن هارا به خروجی ببرد.
#include <iostream>
using namespace std;
int main ()
{int i;
int a[10];
for(i=0;i<10;i++)
a[i]=i*i ;
for(i=0;i<10;i++)
cout<<"a["<<i<<"] = "<<a[i]<<endl;
return 0;
}
@Learncpp
#78☑️ آرایه ها
مثال) برنامهای بنوسید که n تعداد دانشجو را از ورودی خوانده (حداکثر۵۰) سپس نمرات ریاضی n دانشجو را از ورودی خوانده و در یک آرایه ذخیره نماید . سپس عناصر آرایه را از آخر به اول چاپ کند.
#include <iostream>
using namespace std;
int main ()
{ int i,n;
int a[50];
cout<<"Enter Number Of Students : ";
cin>>n;
for(i=0;i<n;i++)
{cout<<"Enter Student "<<i+1<<"Grade : ";
cin>>a[i];
}
cout<<"\n---Grade of students from end to begin ---\n";
for(i=n-1;i>=0;i--)
{cout<<"Grade of student"<<i+1<<"="<<a[i]<<endl;
}
return 0;
}
در این برنامه پس از تعریف آرایه با استفاده از یک حلقه for نمرات را گرفتیم سپس برای چاپ کردن عناصر از آخر به اول نیاز به حلقه for دوم داشتیم تا از n-1 تا 0 عدد هارا بخواند.
@Learncpp
#79☑️ آرایه ها
مثال) برنامه ای به زبان C++ بنویسید که تعداد 5 عدد را از کاربر دریافت کرده و حاصلجمع آنها را در خروجی نمایش دهد .
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{int num[5];
int sum=0,count;
for(count=0;count<5;count++)
{cout<<"Enter number "<<count+1<<" :";
cin>>num[count];
sum += num[count];
}
cout<<"\nSum of numbers is "<<sum;
return 0;
}
در برنامه بالا آرایه ای بنام num با طول 5 تعریف شده که از یک حلقه تکرار for برای مقدار دادن به عناصر آن استفاده می کنیم و در درون حلقه، مقدار هر عنصر از آرایه را با متغیر sum که دارای مقدار اولیه صفر است جمع می کنیم. دقت کنید که حلقه for باید حتما از صفر شروع شود چون اندیس اولین عنصر آرایه صفر است. در نهایت و با خروج از حلقه حاصلجمع عناصر آرایه که در متغیر sum ریخته شده است را چاپ می کنیم.
@Learncpp
#80☑️ آرایه ها
🔹آرایه ها به توابع :
آرایه ها را نیز همانند متغیر های معمولی میتوان به توابع ارسال نمود.
به صورت پیشفرض آرایه ها شبیه متغیر های ارجاع با آدرس به توابع ارسال میشوند.
برای ارسال يک آرايه به عنوان آرگومان به يک تابع ، کافيست نام آرايه را بدون علامت براکت ([]) به کار ببريد . به عنوان مثال اگر آرايه ای با نام x به صورت زير تعريف شده باشد :
int x[24];برای ارسال آن به تابع modifyArray کافيست تابع را به صورت زير:
modifyArray(x,24);فراخوانی کنيد . دستور فوق آرايه و طول آن را به تابع modifyArray ارسال می کند
@Learncpp
#81☑️ آرایه ها
مثال) تابعی بنوسید که آرایه a و عدد n که طول آرایه است را بگیرد و مجموع عناصر آرایه را به عنوان خروجی بفرستد.
#include <iostream>
using namespace std;
//*******
int sum(int a[],int n)
{int s=0;
for (int i=0;i<n;i++)
s += a[i];
return s;
}
/*******
int main ()
{ int a [4]={11,33,55,77};int size=4;
cout<<sum(a,size)<<endl;
return 0;
}
@Learncpp
#82☑️ آرایه ها
🔹الگوريتم جستجوي دودويي :
در روش جستجوي دودويي به يک آرايۀ مرتب نياز است.
هنگام جستجو آرايه از وسط به دو بخش بالايي و پاييني تقسيم ميشود. مقدار مورد جستجو با آخرين عنصر بخش پاييني مقايسه ميشود اگر اين عنصر کوچکتر از مقدار جستجو بود، مورد جستجو در بخش پاييني وجود ندارد و بايد در بخش بالايي به دنبال آن گشت , دوباره بخش بالايي به دو بخش تقسيم ميگردد و گامهاي بالا تکرار ميشود. سرانجام محدودۀ جستجو به يک عنصر محدود ميشود که يا آن عنصر با مورد جستجو برابر است و عنصر مذکور يافت شده و يا اين که آن عنصر با مورد جستجو برابر نيست و لذا مورد جستجو در آرايه وجود ندارد.
@Learncpp
This media is not supported in your browser
VIEW IN TELEGRAM
جستجوی دودویی (Animation)
@Learncpp
@Learncpp
#83☑️ آرایه ها
مثال) تابعي که در زير آمده از روش جستجوي دودويي براي يافتن مقدار درون آرايه استفاده ميکند:
#include <iostream>
#include <conio.h>
using namespace std;
int index(int,int[],int);
int main()
{ int a[]={22,33,44,55,66,77,88};cout<<"index(44,a,7) = "<<index(44,a,7)<<endl;
cout<<"index(60,a,7) = "<<index(60,a,7)<<endl;
}
int index(int x, int a[], int n)
{ int lo=0,hi=n-1,i;
while(lo<=hi)
{ i=(lo+hi)/2; //average of lo and hi
if(a[i]==x)
return i;
if (a[i] < x)
lo=i+1; //continue search in a[i+1..hi]
else
hi=i-1; //continue search in a[0..i-1]
}
return n; // x was not found in a[0..n-1]
}
@Learncpp
#84☑️ آرایه ها
🔹مرتب سازی حبابی ( Bubble Sort) :
در بسیاری موارد ما نیاز داریم تا دادههای خود را بر اساس نزولی یا صعودی بودن مرتب بنماییم در این روش آرایه چندین مرتبه پیمایش میشود و در هرمرتبه بزرگترین عنصر به ته آرایه منتقل میشودو سپس محدوده مرتب سازی برای عنصر بعدی یک واحد کاسته میشود.و در پایان این پیمایش ها آرایه ها مرتب میشوند.
از ابتداي آرايه شروع ميكنيم. در صورتي كه عنصراولي از دومي بزرگتر بود، جاي آنها را عوض ميكنيم. حالاعنصر دومي را با سومي و همينطور تا به پايان آرايه بريم. در اين حالت، بزرگترين عنصر در انتهاي آرايه قرار گرفته است. حالا همين كار را براي عناصر باقيمانده انجام ميدهيم. در مرحلهاي كه هيچ دو عنصري جابهجا نشوند يا اينكه ليست عناصر بزرگتر به ابتداي آرايه برسد، آرايه مرتب شده است.
@Learncpp