آموزش C++ قسمت چهارم

1396/3/26 آقای دادخواه 6903

مصطفی دادخواه هستم با جلسه چهارم آموزش C++ در خدمت شما عزیزان

در جلسه پیش در مورد متغیر کاراکتر و کد اسکی صحبت کردیم . این جلسه میخوام در مورد متغیر دیگه ای باهاتون صحبت کنم به نام bool ( بولین هم بهش میگن )

اما این نوع متغیر چیه و چه وظیفه ای رو به عهده داره ؟

این متغیر وظیفش اینه که مقدار درستی یا نادرستی یه چیزی رو در خودش نگه داره. و این جوری نوشته میشه

; درستی یا نادرستی = اسم متغیر نوع متغیر

bool bl_true = true;


یعنی متغیر bl_true مقدار درستی رو داشته باشه

bool bl_false= false;

یعنی متغیر bl_false مقدار نادرستی رو داشته باشه.

اما ماهیت این false و true چیه ؟ از چه جنسین ؟

از نوع عدد صحیح هستند . برای false مقدار 0 و برای true مقدار 1 رو نسبت دادن. همین . یعنی شما بنویسید bool bl_true =1; یا bool bl_false =0; ایرادی نداره و کامپایلر متوجه درستی یا نادرستی میشه.

خب حالا از بحث انواع متغیر ها میایم بیرون و به مبحث عملگر ها میرسیم .

عملگر چیه ؟

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

–a

که در اینجا “-“ یه عملگر و a یه عملوند محسوب میشه . در جدول زیر میتونید لیست عملگر های محاسباتی رو ببینید

سی پلاس پلاس

خب دو تا نکته :

نکته اول : این اعمال جبری بر روی انواع داده ها امکان پذیره به جز عملگر % که فقط بر روی داده هایی که عدد صحیح هستند کار میکنه و برای داده های اعشاری تعریف نشده است .

نکته دوم : در مورد نحوه کار عملگر تقسیم بر روی نوع داده های مختلفه . در صورتیکه هر دو عملوند صحیحی باشند تقسیم به صورت صحیح بر صحیح انجام میشه اما اگه هر کدام با عملوند اعشاری باشند تقسیم به صورت اعشاری انجام میگیره . به قطعه کد زیر لطفا دقت کنید .

#include 
using namespace std;

void main(){

  int ifive = 5;

  int itwo = 2;

  float iDivision = ifive / itwo;

  float ffive = 5;

  float fDivision = ffive / itwo;

  cout << "Division for int is : " << iDivision << endl;

  cout << "Division for float is : " << fDivision << endl;

  }

سی پلاس پلاس

خب همون طور که مشاهده میکنید میبینید که وقتی دو عدد صحیح رو بر هم تقسیم کردیم جواب حاصل از تقسیم ما عدد 2 شد . اما وقتی همون عدد رو از نوع float تعریف کردیم . حاصل تقسیم ، عددی اعشاری بدست اومد.

خب اما بحث بعدی که وجود داره حالا فرض کنید که عبارت محاسباتی ما یک چیز ساده مثل a/b نباشه . بلکه دارای پیچیدگی بیشتری باشه . مثل a+b*c .

خب حالا این سوال به وجود میاد که کامپایلر با مواجه شدن با این عبارت جبری چه منطقی رو در پیش میگیره ؟ آیا a را با b جمع میکنه بعد جواب رو در c ضرب میکنه ؟ یا اینکه b*c رو حساب میکنه بعد با a جمع میکنه ؟

در جواب باید بگم که راه دوم رو انتخاب میکنه . اما چرا ؟

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

سی پلاس پلاس

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

به مثال زیر توجه کنید تا متوجه حرفم بشید .

عبارت

 a = b*c % ( d + e / ( f – g))

را در نظر بگیرید

خب میخوایم ببینیم که این عبارت چه جوری محاسبه میشه :

خب گفتیم اولویت اول برای پرانتز اما چون دو پرانتز تو در تو داریم پس داخلی ترین پرانتز باید محاسبه بشه . پس ابتدا f-g محاسبه میشه

خب پرانتز اول حل شد . یک پرانتز دیگه مونده . اون رو باید بررسی کنیم . خب در این پرانتز دو عملگر + و / وجود داره اما با توجه به اولویت عملگرها اول / محاسبه میشود

پس تا اینجا

 e+/(f-g)

محاسبه شد . پرانتز ما هنوز به پایان نرسیده پس عملگر + باید وارد محاسبات بشه

 ( d+ e/ (f – g))

خب دو عملگر * و % مونده . کدوم پردازش میشه ؟ اونی که اولویت بیشتری داره یعنی *

b*c

حالا باید دو عبارت

b*c 

و

( d+ e/ (f – g ))

توسط % مورد پردازش قرار بگیره .

تا اینجا ما مقدار

b*c % ( d + e / ( f – g))

را بدست اوردیم الان دیگه اولویت با عمل انتساب هست یعنی مقدار

b*c % ( d + e / ( f – g ))

در

a

قرار بگیره .

پس

a = b*c % ( d + e / ( f – g))

بدست اومد

سی پلاس پلاس

دقت کنید : بین

a = b*c % ( d + e / (f-g))

و

a= b*c % ( d + e/f-g )

کاملا فرق وجود داره .

در عبارت اول e بر f-g تقسیم میشود اما در عبارت دوم e بر f تقسیم شده سپس مقدار حاصل از g کم میشود .

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

سی پلاس پلاس

همون جور که پیش افزایشی و پس افزایشی داریم پیش کاهشی و پس کاهشی هم داریم ببینید :

سی پلاس پلاس

اجازه بدید با مثالی کارکرد این عملگر رو واستون تشریح کنم :

#include 

using namespace std;

void main(){

  int a = 5;

  int b, c, d, e;

  b = a++;

  cout << "a is " << a << endl;

  cout << "b is " << b << endl<

خب در خط اولِ تابع اصلی متغیری به نام a را تعریف کردیم که عدد صحیحه و مقدار اولیه 5 رو داره

در خط دوم متغیر هایی به نام b,c,d,e از جنس int تعریف کردیم .

و در خط سوم گفتیم


b=a++;

طبق جدول بالا این یعنی چی ؟ یعنی اینکه مقدار a هرچی هست اون رو در b قرار بده و بعد از این عمل a رو یک واحد افزایش بده .

یعنی در خروجی برای a باید مقدار 6 و برای b مقدار 5 چاپ بشه

در خط بعدش


c= ++a;

یعنی اینکه اول مقدار a را یک واحد افزایش بده بعد از این کار مقدار a را در c قرار بده

پس در خروجی برای a مقدار 7 و برای c مقدار 7 چاپ بشه


d= a--;

یعنی مقدار a را در d قرار بده بعد a را یک واحد کم کن .

پس در خروجی برای a مقدار 6 و برای d مقدار 7 چاپ میشه


e =--a;

و در آخر این خط به ما میگه که اول از مقدار a یک واحد کم کن و سپس اون رو در e قرار بده پس مقدار a برابر با 5 و مقدار e هم برابر با 5 خواهد شد .

سی پلاس پلاس

آیکن دانلود دانلود PDF قسمت چهارم آموزش C++

قسمت بعدی قسمت پنجم آموزش C++

کلمات کلیدی