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

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

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

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

متغیر :

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

مثلا فرض کنید ما یه متغیری داریم به نام 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++ رو بررسی کردیم و با متغیر ها و اصول استفاده از اونها تا حدی آشنا شدیم .

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

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

کلمات کلیدی