آموزش C++ قسمت هشتم

1395/1/4 مصطفی دادخواه 3564

با عرض سلام و خسته نباشید خدمت دوستان گرامی ، مصطفی دادخواه هستم با هشتمین جلسه از آموزش برنامه نویسی سی ++ در کنار شما عزیزان

خب میریم سراغ آموزشمون . در جلسه قبل درباره ی ساختار های انتخاب صحبت کردیم . حالا در این جلسه میخواهم درباره ی ساختار های تکرار و حلقه ها با هاتون صحبت کنم .

آموزش را با این سوال شروع میکنم :
من میخواهم اعداد 1 تا 5 رو در صفحه خروجی به کاربر نشون بدهم .
چی کار کنم ؟

خب اولین کاری که میتونم بکنم اینه :

#include < iostream >
using namespace std;
void main(){
  cout << "1"<


خب حالا اگه بخوام بگم میخوام از ا تا 100 چاپ بشه چی ؟ آیا عاقلانه است که این کارو کنیم ؟ مسلما نه ! اینجاست که بحث ساختار های تکرار پیش میاد
ما در سی ++ سه نوع ساختار تکرار داریم
1- while
2 -  do while
3 -  for
در زبان های برنامه نویسی به این 3 تا یه حلقه یا لوپ ( loop ) میگن . دلیلش هم مشخصه چون مثل شی ء ای که داخل حلقه ای  باشه هیچ وقت به پایانی نمیرسه و هی مسیری رو طی میکنه دوباره به ابتدا میرسه .
خب گفتم هر چقدر مسیری رو طی میکنه دوباره به ابتدای خودش میرسه . اگه حلقه ها این جوری باشن و ما کد ها رو داخلشون بگذاریم پس اونا بی نهایت بار اجرا باید بشن. اما خب ما مسلما نمیخوایم این جوری بشه . پس باید حلقه رو حتما یه جایی متوقفش کنیم و بشکنیمش تا بتونیم ازش بیرون بیایم . برای این کار پس ما باید یه شرطی رو داشته باشیم . که بهش میگیم شرط حلقه .
خب تا اینجا از تئوری حلقه ها . حالا به بررسی ساختار اولین نوع حلقه یعنی while  می پردازیم .

while ( شرط  حلقه ) {
دستورات ;
}

پس حالا بیاین سوالی رو که در مقدمه پرسیدم رو باهم با حلقه ی  while بنویسیم
 

#include < iostream >
using namespace std;
void main(){
  int i = 1;
  while (i <= 5){
    cout << i <

خب همون جور که مشاهده میکنید یه متغیری داریم به نام i که مقدار اولیش برابر با 1 هست . بعد با یک حلقه مواجه میشیم . شرط درون حلقه کوچکترمساوی بودن i از عدد 5 هست . خب پس برنامه ما وارد حلقه میشه . در خط اول داخل حلقه مقدار i در خروجی چاپ میشه و به خطی بعدی میره . حالا یک متغیر i یک واحد بهش اضافه میشه . به پایان بلاک حلقه while میرسیم . پس برنامه میاد دوباره به خط چک کردنه شرط حلقه . خب i که الان مقدارش برابر 2 شده کوچکتر مساوی از 5 هست . پس دستورات داخل حلقه اجرا میشه . یعنی مقدار i برابر 2  در خروجی چاپ میشه بعد یک واحد به i اضافه میشه . این داستان همچنان ادامه دارد تا زمانی که i برابر 6 میشه . i وقتی که برابر 6 شد شرط ادامه حلقه از بین میره چون 6 < 5  نیست . پس برناممون از حلقه بیرون میاد و به پایان خودش میرسه.
سوال : اگه i++ رو تو برناممون نمیگذاشتیم چی می شد ؟
جواب : برنامه ما هیچوقت به اون شرط حلقه نمی رسید . برای همین بی نهایت 1 در خروجی چاپ می شد . برنامه هیچوقت متوقف نمیشد.
حلقه بعدی حلقه do while   هست . ساختار کلیش به این صورته

do {
دستورات;
}while (شرط حلقه);


حالا مثال قبل رو با این حلقه باز نویسی می کنم
 

#include < iostream >
using namespace std;
void main(){
  int i = 1;
  do {
    cout << i;
    i++;
  } while (i < 5);
}

اما خب تفاوت حلقه while با حلقه do while چیه ؟
تفاوتشون تو اینه که در حلقه do while  حداقل یک بار کد های حلقه اجرا میشوند حتی اگه شرط داخل حلقه درست نباشند .
به مثال زیر توجه کنید :

#include < iostream >
using namespace std;
void main(){
  int i = 1;
  do {
    cout << "This is C++ course !" << endl;

  } while (i < 1);
}


 

آموزش c++

خب همون طور که میبینید با اینکه 1<1 نیست . و شرط حلقه درست نیست اما برای یک بار دستور داخل حلقه اجرا شد .
خب ساختار بعدی ساختار for  هست . for کامل شده ی حلقه ی   while می باشد .
که به این صورت مینویسنش
for ( گام  شمارنده ;شرط حلقه ; شمارنده)
اجازه بدید با مثالی این رو براتون توضیح بدم .

#include < iostream >
using namespace std;
void main(){
  for (int i = 1; i <= 5; i++)
    cout << i << endl;
}

خب در ابتدا اومدیم یک متغیر از نوع int  تعریف کردیم و اسمش رو i با مقدار اولیه 1 قرار دادیم . در بخش دوم شرط حلقمون رو تعریف کردیم . تا زمانیکه i کوچکتر مساوی 5 باشه . حلقه برقراره و در بخش بعد گام i که برابر با افزایش 1 واحدی اون هست .
اما این حلقه for چه جوری کار میکنه :
در ابتدا میاد int i=1 رو تعریف میکنه بعد میبینه که ایا  i کوچکتر از 5 هست ؟ خب میبینه که درسته . پس میره سراغ دستورات . مقدار i را در خروجی چاپ میکنه . حالا شمارنده طبق گامش یه واحد افزایش پیدا میکنه . حالا i شده 2 . توی شرط مورد بررسی قرار میگیره که آیا کوچکتر از 5 هست یا خیر . جواب true هست . پس دستورات اجرا میشوند . یعنی مقدار i در خروجی چاپ میشه . بعد از پایان دستور  ، i یک واحد افزایش پیدا میکنه . این عمل تا زمانی که i برابر با 6 بشه ادامه پیدا میکنه . چون i برابر با 6 شده و 6<=5 نیست . کامپایلر از حلقه خارج می شود .
آشنایی با دستور continue و break :
دستور break برای خروج ناگهانی از حلقه استفاده میشه .
به مثال زیر دقت کنید :

 

#include < iostream >
using namespace std;
void main(){
  for (int i = 1; i <= 5; i++){
    if (i == 3)
      break;
cout << i << endl;
  }  
}


 

آموزش C++

در اینجا وقتی i برابر با 3 میشود به دستور break میرسد و حلقه را میشکند
دستور continue
وقتی کامپایلر به دستور continue میرسه از دستورات موجود رد میشه یعنی نادیده میگیرتشون و بعد به سراغ افزایش گام میره .

 

 

#include < iostream >
using namespace std;
void main(){
  for (int i = 1; i <= 5; i++){
    
    if (i == 3)
      continue;
    cout << i << endl;
  }  
}


 

آموزش C++

نکته فوق فوق فوق مهم : چنانچه تصمیم گرفتید از continue در حلقه   while یا do while استفاده کنید . حتما حتما حتما یادتون باشه که دستور افزایش شمارنده را برای رسیدن به شرط حلقه رو قبل از continue بگذارید . چون اگه بعد از continue بگذارید کامپایلر نادیده میگیره اونو و میره سراغ چک کردنه شرط حلقه و این کار تا ابد هی صورت میگیره . و حلقه شما به یک حلقه بی نهایت تبدیل میشه .
حلقه for تو در تو
اجازه بدید با مثالی توضیح بدم این موضوع رو

#include < iostream >
using namespace std;
void main(){
  for (int i = 1; i <= 3; i++)
  for (int j = 1; j <= 3; j++)
    cout << i << "t" << j << endl;
    
}

خب در اینجا ابتدا int i =1 تعریف میشه . سپس شرط اون که i<=3 هست . که به ما مقدار true رو برمیگردونه چون 1<=3 هست . بعد در خط بعدی با دومین for مواجه میشیم . که int j=1 و شرط آن برابر با 1<=3 که این هم مقدار درستی رو به ما بر میگردونه . حالا در این قسمت کامایلر کد
cout « i « "t" « j « endl;
رو اجرا میکنه بعد از این کار شمارنده j  یک واحد افزایش پیدا میکنه یعنی j برابر با 2 خواهد شد . و سپس شرط 2<=3  چک می شود .
این عمل تا جایی صورت میگیرد که j و برابر با 4 می شود که از حلقه for دوم خارج میشود پس به حلقه اول رفته و شمارنده  i یک واحد افزایش پیدا میکند . یعنی i=2 حالا در شرط 2 <=3 چک کیشود . خب شرط درسته پس سراغ for بعدی می رود خب دوباره int j =1  بعدش شرط حلقه 1<=3 چک میشود . حالا سراغ دستور
cout « i « "t" « j « endl;
می رود و اون رو اجرا میکنه . حالا دوباره j یک واحد افزایش پیدا میکنه و شرط حلقه و باقی ماجرا تا اینکه j =4 میشه و از حلقه for دوم خارج میشه . حالا اینجا i یک واحد افزایش پیدا میکنه . سپس دوباره چک میشه که ه <=3 و باز دوباره حلقه for دوم و باز تکرار این دستورات .
قانون کلی : همیشه یادتون باشه در for های تو در تو پایین ترین فوربیشترین اجرا را دارد و پس از رسیدن به شرط خود for بالاتر از خودش را یک واحد بهش اضافه میکنه . اگه اون for دستوراتی داشت اونها رو انجام میده سپس دوباره به for پایینی بر میگرده
اما در مورد قسمت “t”  بگم . این قسمت . کورسر رو به اندازه یک tab جلو میبرد .
در جلسات بعد بیشتر در مورد “” ها صحبت میکنیم.
برای امشب فکر میکنم دیگه کافیه . امیدوارم آموزش امشبم مفید بوده باشه . شبتون بخیر . خدا نگهدار