Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
Learning ©➕➕
آرایه ها.mp4
👁‍🗨 آرایه ها
حجم : 32.8 MB
مدرس : آقای کیارش بازرگان
#فیلم
@Learncpp
با تشکر از آقای اسماعیل کمیجانی بابت تهیه مطالب 🙏🌺
#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
#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
This media is not supported in your browser
VIEW IN TELEGRAM
مرتب سازی حبابی (Animation)
@Learncpp
#85
☑️ آرایه ها
🔹مرتب سازی حبابی ( Bubble Sort) :

فرض کنید می‌خواهیم n داده به صورت صعودی مرتب شوند. عنصر اول را با با عنصر دوم مقایسه کرده، و در صورتی که عنصر اول بزرگتر باشد باشد جای عنصر اول و دوم را عوض می‌کنیم. همین کار را با عناصر دوم و سوم انجام می‌دهیم و همینطور عناصر سوم و چهارم ، الی آخر. وقتی این کار تمام شد بزرگ‌ترین عنصر بین داده‌ها به آخر لیست می‌رسد . حالا یک بار دیگر از اول این کار را انجام می‌دهیم اما این بار تا عنصر (n -۱)ام ادامه می‌دهیم (عنصر nام در مرحله اول در جای خودش قرار گرفته). باز هم این کار را تا عنصر (n - ۲)ام تکرار می‌کنیم ، و بازهم .... تا اینکه بالاخره داده‌ها مرتب می‌شوند. مثلا:
۰ - ۰) ۵ ۶ ۴ ۲

۱ - ۱) ۵ ۶ ۴ ۲

۱ - ۲) ۵ ۴ ۶ ۲

۱ - ۳) ۵ ۴ ۲ ۶

۲ - ۱) ۴ ۵ ۲ ۶

۲ - ۲) ۴ ۲ ۵ ۶

۳ - ۱) ۲ ۴ ۵ ۶

مرحله اول سه مقایسه ، مرحله دوم دو مقایسه و مرحله سوم یک مقایسه داره ، که روی هم می‌شوند شش مقایسه. در کل این روش n (n - ۱) / ۲ مقایسه لازم داره. اما نه همیشه. به مثال زیر توجه کنید:
۰ - ۰) ۰ ۷ ۱ ۳ ۵ ۴

۱ - ۱) ۰ ۱ ۷ ۳ ۵ ۴

۱ - ۲) ۰ ۱ ۷ ۳ ۵ ۴

۱ - ۳) ۰ ۱ ۳ ۷ ۵ ۴

۱ - ۴) ۰ ۱ ۳ ۵ ۷ ۴

۱ - ۵) ۰ ۱ ۳ ۵ ۴ ۷

۲ - ۱) ۰ ۱ ۳ ۵ ۴ ۷

۲ - ۲) ۰ ۱ ۳ ۵ ۴ ۷

۲ - ۳) ۰ ۱ ۳ ۵ ۴ ۷

۲ - ۴) ۰ ۱ ۳ ۴ ۵ ۷

۳ - ۱) ۰ ۱ ۳ ۴ ۵ ۷

۳ - ۲) ۰ ۱ ۳ ۴ ۵ ۷

۳ - ۳) ۰ ۱ ۳ ۴ ۵ ۷

۴ - ۱) ۰ ۱ ۳ ۴ ۵ ۷

۴ - ۲) ۰ ۱ ۳ ۴ ۵ ۷

۵ - ۱) ۰ ۱ ۳ ۴ ۵ ۷

همونطور که می‌بینید انتهای مرحله ۲ داده‌ها مرتب هستن. تشخیص این مساله هم کار سختی نیست: اگه به مرحله‌ای رسیدیم که هیچ جابجایی در اون رخ نداد نتیجه می‌شه که داده‌ها مرتب هستن (مرحله سوم). پس بعد از مرحله ۳ مطمئن می‌شیم که داده هامون مرتب شدن و نیازی به مراحل ۴ و ۵ نیست.
@Learncpp
#86
☑️ آرایه ها
مثال) برنامه ای بنویسید که ابتدا یک تابع با نام swap برای جابه جایی دو متغیر اعشاری و یک تابع برای چاپ عناصر یک آرایه داشته باشد سپس یک تابع با نام sort بنویسید که آرایه a و عدد n را به عنوان ورودی بگیرد و عناصر آرایه a را به روش مرتب سازی حبابی (به کمک تابع swap )به صورت صعودی مرتب نماید.
#include <iostream>

using namespace std;

/********/

void swap(float &x,float&y )

{

 float temp=x;

 x=y;

 y=temp;

}

void sort(float a[],int n)

{

 for (int i=1;i<n;i++)

  for (int j=0;j<n-i;j++)

   if (a[j]>a[j+1]) 

    swap(a[j],a[j+1]);

}

void print(float a[],int n)

{

  for (int i=0;i<n;i++)

   cout<<a[i]<<" ";

}

/*********/

int main ()

{

 float a[]={55.2,32.65,12.8,78.5,46.3,9.75,4.33,1.2};

 cout<<"before sort : ";

 print(a,8);

 sort(a,8);

 cout<<"after sort : " ;

 print(a,8);

 return 0;

}

@Learncpp
#87
☑️ آرایه ها
🔹آرایه چند بعدی :
آرایه چند بعدی دارای چند سطر و چند ستون می باشد. اولین بعد آرایه بیانگر سطرها و دومین بعد آن بیانگر ستونهاست. همانطور که در شکل پایین می بینید به ترتیب از اولین سطر شروع کرده و تا انتهای ستونهای آن سطر را اندیس گذاری کرده و سپس به سطر بعد رفته و به اندیس گذاری تا آخرین ستون سطر مربوطه پرداخته و این عمل را تا انتها برای اندیس گذاری تکرار کرده . سمت راست شکل هم کاملا گویاست که عناصر آرایه به چه ترتیبی در حافظه کامپیوتر قرار می گیرند.
@Learncpp