خب کم کم بحث های اصلیمون رو شروع می کنیم .
همیشه اولین بحثی که در نوشتن یک کد مطرح میشه . متغیر ها هستند . الان با هم میبینیم که متغیر اصلا چیه و کاربردش چیه ؟
متغیر :
متغیر از اسمش که پیداست چیزیه که هر لحظه ممکنه مقدارش تغییر پیدا کنه و با توجه به نوعش میزانی از حافظه رو اشغال میکنه.
مثلا فرض کنید ما یه متغیری داریم به نام� 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