خب کم کم بحث های اصلیمون رو شروع می کنیم .

همیشه اولین بحثی که در نوشتن یک کد مطرح میشه . متغیر ها هستند . الان با هم میبینیم که متغیر اصلا چیه و کاربردش چیه ؟

متغیر :

متغیر از اسمش که پیداست چیزیه که هر لحظه ممکنه مقدارش تغییر پیدا کنه و با توجه به نوعش میزانی از حافظه رو اشغال میکنه.

مثلا فرض کنید ما یه متغیری داریم به نام� hour که مقدار زمان فعلی توش ذخیره میشه. حالا اگه الان بخوایم ببینیم چه مقداری داره مقدار 22 رو به ما میده اما یک ساعت دیگه� لزوما برابر با 22 نمیتونه باشه . بلکه میتونه عددی برابر با 23 رو در خودش داشته باشه.

نحوه اعلان متغیر ها در C++ :

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

مثلا

int a;

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

در جدول زیر انواع متغیر های قابل استفاده در سی ++ را با میزان فضایی که اشغال میکنند رو میگم:

انواع متغیرها

خب حالا شاید سوال واستون پیش بیاد که اووووه چه خبره بابااا ؟!؟!

انتظار داری این عدد ها یادمون بمونه یا حفظش کنیم؟ اصلا اینا یعنی چی ؟ به چه دردی میخورن ؟

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

اما الان بهتون میگم اینا یعنی چی .

ببینید مثلا برای int شما قادرید که اعدادی رو در نظر بگیرید که در بازه 2147483648- تا 2147483647 هستند. یعنی متغیرتون که از نوع عدد صحیح هست فقط این بازه اعداد رو میتونه رو در خودش ذخیره کنه . حالا یکی میگه نه آقا . من اصلا میخوام 21474783648 رو توی int ذخیره کنم ببینم کیه به من حرف بزنه ؟

منم میگم باشه . بیا باهم این کارو کنیم ببینیم اصلا چی میشه :

#include 

using namespace std; 

void main(){

  int number = 2147483647;

  cout << "number before increase is " << number << endl;

  number = number + 1;

  cout << "number after increase is " << number << endl;

}

سی پلاس پلاس

همون طور که مشاهده می کنید تا وقتی که ما متغیر number را زیاد نکرده بودیم مقدار درستی رو داشت اما وقتی� یک واحد افزایشش دادیم عدد ما به عددی منفی تبدیل شده در حالیکه همچنین چیزی اصلا منطقی نیست .

وقتی همچین چیزی اتفاق میفته میگیم خطای سرریز یا اور فلو ( overflow ) رخ داده. یعنی متغیر بیش از ظرفیتی که براش اختصاص داده شده پر شده و دیگه جایی نداره پس یه مقدار غیر قابل انتظار به ما برمیگردونه . بنابر این در انتخاب نوع متغیری که استفاده می کنید حتما توجه لازم را داشته باشید .

حالا باز یکی میگه آقا من اصلا اعصاب این لوس بازی ها رو ندارم.

�همه متغیر های عددیمو long long میگیرم

این جوری خیالمم راحته که احتمال خطای سر ریز تو برنامم کمه .

خب من در جواب این دوست عزیزمون باید بگم که اگه توجه کنی من در تعریف متغیر گفتم متغیر چیزیه که میزانی از حافظه را اشغال میکنه و در اون جدولی که فرستادم اندازه ای با واحد بایت گذاشتم . اگه با دقت نگاه کنید میبینید کهint� چهار بایت از حافظه ولی long long� هشت بایت رو اشغال میکنه . این شاید در نگاه اول به نظر بیاد که خب 4 بایته دیگه . 4 بایت که چیزی نیست . اما دقت کنید وقتی شما بلفرض بخواین یه پروژه بزرگ بنویسید اون موقع هر بیت از حافظه با ارزش میشه . چرا ؟

چون در روند سرعت برنامتون تاثیر میگذاره . وقتی متغیرهاتون میزان حافظه ای که اشغال کردن بیشتر از مورد نیازشونه اون موقع حافظه موقت سیستم ( RAM ) بیخود اشغال میشه و احتمال کندی و هنگ برنامتون رو میبره بالا .

در مطلب بعدی که باید در نامگذاری متغیر ها بگم اینه که شما هر اسمی رو نمیتونید به عنوان متغیر استفاده کنید . بعضی از اسم ها در سی ++ رزرو شده هستند که بهش کلمه کلیدی میگن . یعنی کامپایلر با رسیدن به اون کلمه متوجه میشه که باید عمل خاصی رو انجام بده . در مثالی که همین الان زدم . مثلا int یه کلمه کلیدی محسوب میشه و شما نمیتونی ازش به عنوان اسم یک متغیر استفاده کنید.

در ادرس زیر میتونید لیست کامل این اسامی رو ببینید

https://msdn.microsoft.com/en-us/library/2e6a4at9.aspx

خب میخوام از بحث متغیر ها یه کم بیام بیرون و کلا ساختار یک کد سی ++ رو بررسی کنم . برای شروع فکر میکنم همون کدی که فرستادم مناسب باشه .

در خط اول داریم

#include 

ببینید هر خطی که با # شروع میشه یه دستور سی++ نیست بلکه جزو دستورات پیش پردازنده محسوب میشه یعنی قبل از شروع به کامپایل انجام میشن . مثلا دستور include باعث میشه توابعی ( زیر برنامه هایی ) که قصد استفاده از اونها رو داریم به� برنامه اضافه بشن بعدا متوجه میشید که به اینها کتابخونه های سی ++ میگن.

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

using name space std

�بهش فضای نامی

std

میگن . وقتی به مبحث کلاس ها رسیدیم بیشتر در موردش توضیح میدم اما فعلا همین قدر از من قبول کنید که وظیفش اینه که ورودی رو از کاربر دریافت کنه و یا اطلاعات رو در صفحه نمایش چاپ میکنه

void main (){}

�بهش تابع اصلی میگن . این جزو جدا نشدنی و اجتناب ناپذیر یک برنامه سی ++ هست . وجودش الزامیه و تمام دستورات اصلی برناممون رو ما در تابع main مینویسم . برای دوستانی که از dev c++ استفاده میکنند احتمال داره که کامپایلر به void main گیر بده . اگه این اتفاق افتاد به جای void از int استفاده کنند و در آخر برنامه عبارت return 0; رو به برنامشون اضافه کنند . بعدا که به مبحث توابع رسیدیم میگم داستان void , int� و return� از چه قراره .

خب میرسیم به آکولاد ها . در بیشتر زبان های برنامه نویسی بین دو اکولاد باز و بسته رو یک بلاک (block ) میگن . وجود بلاک در تابع main الزامیه چون مشخص میکنه که این تابع از کجا شروع شده و کجا تموم میشه . یعنی ابتدا و انتهای دستورات یک برنامه رو مشخص میکنه .

int number = 2147483647;

یعنی ما یک متغیری داریم به اسم number که از نوع عدد صحیحه و مقدارش برابره با 2147483647 . دقت کنید نوشتن نوع متغیر الزامیه . نگید خب مینویسم

number=2147483647

دیگه کامپایلرش خودش میفهمه که عدد صحیح یعنی int �هست

یادتون باشه کامپایلر و کلا کامپیوتر قدرت تصمیم گیری و تشخیص نداره . شما باید همه چی رو براش مشخص کنید . اون حتی نمیتونه متوجه بشه که کجا دستور ما تموم میشه برای همین باید بعد هر دستور براش� سمی کالن(semi-colon)�بگذارید وگرنه بهتون خطا میده .

در ضمن یادتون باشه که سی++ به بزرگی و کوچکی حروف حساسه یعنی هیچ وقت number� با Number� یا� NUMBER و... برابر نخواهد بود پس به این موضوع هم دقت کافی رو داشته باشد .

Cout (سی اوت )

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

"number before increase is "

دقیقا همین رشته در خروجی چاپ میشه . اما رشته چیه ؟ مجموعه ای از کاراکتر ها یک رشته رو تشکیل میدن و برای مشخص کردشون به کامپایلر حتما باید از علامت " " ( دابل کوتیشن ) استفاده بشه .

خب حالا بعد از اینکه رشته "number before increase is " در خروجی چاپ شد چه اتفاقی میفته ؟

نوشتیم که

«number

یعنی اینکه بیا به متغیر number� مراجعه کن و ببین الان چه مقداری داره و اون رو در خروجی چاپ کن .

«endl

یعنی اینکه حالا مکان نما ( cursor ) رو به خط بعدی منتقل کن . خب به سمی کالن میرسیم . یعنی دستورات این خطمون تموم شده و برو دستور بعدی رو اجرا کن .

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

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

number=number+1; 

; یعنی مقدار متغیر number رو یک واحد افزایش بده بعد اون رو دوباره در خود متغیر number قرار بده� .

در خط بعد داریم

cout « "number after increase is

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

و بعدش

«number

که میاد مقدار فعلی متغیر number� رو نشون میده� بعد هم که

«endl;

که مکان نما رو به خط بعد میبره . و در اخر به { میرسیم که یعنی تابع main ما تموم شده و برنامه به پایان خودش رسیده .

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



Read more