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

1394/11/7 آقای دادخواه 4000

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

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

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

ایندفعه میخوام در مورد متغیر char صحبت کنم .

char

مخفف کلمه character هست

اما یک کاراکتر دقیقا چیه ؟

ببینید مثلا حروف الفبا به تنهایی میتونن یه کاراکتر باشن . مثل A,b,C,d

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

هرچیزی میتونه یک کاراکتر باشه . شما در زبان های برنامه نویسی میتونید یک نقطه ، یک ویرگول ، یک سیمبول یا حتی یک space رو به صورت کاراکتر در نظر بگیرید . برای تعریف متغیر های char همون قانون همیشگی تعریف متغیرها حاکمه و فرقی نداره .

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

مثال :

char a ="a";

char number ="1";

char symobl =",";

char space  = " ";

نکته : هرگاه خواستیم نوع داده ای کاراکتر رو مستقیما مقدار دهی کنیم یادمان باشد که حتما بین اون کاراکتر اپستروف ( ‘ ‘ ) بگذارید.

خطای شایع برنامه نویسی :

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

char number ='1';

با

int number=1; کاملا فرق میکنه . این دو مقوله کاملا جدا از هم هستند .

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

#include 

using namespace std;

void main(){

  int int_number = 9;

  char char_number = '9';

  int_number = int_number + 1;

  char_number = char_number + 1;

  cout << "your int number after increase is ( " << int_number <<" ) "<< endl;

  cout << "your Char number after increase is ( " << char_number <<" ) "<< endl;

}

سی پلاس پلاس

همون طور که مشاهده میکنید بعد از افزایش متغیر int_number ، سیستم عدد 10 را داره به ما نشون میده اما متغیر char_number داره به ما یه کولن ( : ) رو نشون نمیده . پس حواستون باشه که هیچوقت هیچوقت هیچوقت فکر نکنید که عدد با ‘عدد’ مساویه که الان این موضوع بهتون اثبات شد .

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

در جواب باید بگم که ما در زبان های برنامه نویسی یک بحثی رو داریم به نام کد اسکی ( ASCII code )

اما قضیه این کد اسکی چیه ؟

ببینید دوستان شده شما تا به حال مثلا روی دکمه A کیبوردتون فشار بدید اما عبارت N یا هرچیز غیر معمول دیگه به جای A تو صفحه تون چاپ بشه ؟ یا اینکه مثلا تو کامپیوتر خودتون A رو بزنید A باشه اما تو کامپیوتر دوستتون بلفرض C باشه ( یعنی اینکه دکمه C رو بزنید تا حرف A نمایش داده بشه ) و تو کامپیوتر اون یکی دوستتون مثلا Q باشه

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

خب چطور این نظم در تمام دنیا برقراره ؟

این به بحث کد اسکی مربوطه . برای یک انسجام و نظم جهانی این جوری گفتند که ما به هر کلید کیبورد و کاراکترهایی که قراره نمایش داده بشه یه عددی رو تعریف کنیم . مثلا بگیم برای حرف A عدد 65 رو بهش نسبت بدیم و برای B 66 رو و ...

حتی بین A , a فرق وجود داره برای a عدد 97 رو در نظر گرفتن.

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

#include 

using namespace std;

void main(){

    char number = 57;

  cout << number << endl;

}

سی پلاس پلاس

همون جوری که میبینید داره عدد 9 رو به ما نشون نمیده . اما همچین چیزی برای چی رخ میده ؟

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

char number = 57;

cout << number <

این یعنی چی ؟ این یعنی که کاراکتری رو چاپ کن که مقدار کد اسکیش برابر با 57 هست . کامپایلر نگاه میکنه ( البته کامپایلر هیچ وقت نگاه نمیکنه چون چشم نداره ) کدوم کاراکتر در ASCII برابر 57 ه . میبینه که کاراکتر 9 برابر با 57 تعریف شده و میاد اون رو چاپ میکنه .

حالا کد رو به این صورت تغییر بدید .


#include 

using namespace std;

void main(){

    char number = 57;

number = numebr +1;

  cout << number << endl;

}

سی پلاس پلاس


خب حالا همون طور که مشاهده میکنید و قتی ما متغیر char number را یک واحد افزایش می دهیم یعنی وقتی char number برابر با 60 میشود کالن رو به ما نشان می دهد . یعنی کد اسکی کالن برابر با 60 است .

الان فکر کنم دیگه متوجه شده باشید که چرا میگم 1 با ‘1’ برابر نیست . شما وقتی متغیری از نوع int را 1 واحد افزایش می دهید مقدار اون 1 واحد افزایش پیدا میکند . اما وقتی ‘1’ را افزایش می دهید ‘1’ را یک واحد افزایش پیدا نمیکند بلکه کد اسکی مربوط به ‘1’ یک واحد افزایش پیدا میکند .

برای همین بود که در مثال اول int_number برابر 10 شد اما char_numebr برابر با کالن شد .

اما چگونه بفهمیم که کد اسکی مربوط به هر حرف چه رقمی است ؟


#include 

using namespace std;

void main(){

  cout << (int)_getch() << endl;

}

شما اگه این کد رو وارد کنید با زدن حرف مورد نظرتون میتونید کد اسکیش رو مشاهده کنید .

خب حالا یه توضیحی برای این کد هم بدم .

اول از همه چیز جدیدی که میبینید


#include

هست.

وظیفه اش اینه که بیاد ورودی و خروجی رو از کنسول دریافت کنه ( به این محیط سیاهی که باز میشه برنامه رو توش میبیبنم میگن کنسول )

یه نکته ای رو هم بگم تو کتاب ها به iosteream , conio.h و...( هرچیزی که با include شروع میشه ) فایل سرآمد یا هدر فایل میگن . پس اگه به این کلمه خوردید وحشت نکنید . منظورش همیناست.

خب به برنامه برمیگردیم :

در تابع اصلی نوشتم


cout << (int)_getch() << endl;

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

تابع


 getch()

وظیفش اینه که بیاد کاراکتر رو از ورودی دریافت کند . برای اینکه ما بتونیم از این تابع استفاده کنیم باید هدر فایل conio.h رو وارد برناممون کنیم تا برای کامپایلر این تابع معرفی بشه . اگه


 #include 

رو در برنامتون ننویسید بعد بیاین


 getch() 

رو بنویسید کامپایلر اروری مبنی بر نشناختن یا معرفی نشدن


 getch()

بهتون میده .

سی پلاس پلاس

یه نکته دیگه : من همون جور که جلسه اول گفتم از نسخه 2013 ویژوال استادیو استفاده میکنم ممکنه که نحوه نوشتن بعضی توابعش با بقیه IDE ها فرق داشته باشه . مثلا برای همین


 getch() 

نوشتم


_getch()

که اگه این جوری ننویسم از من خطا میگیره .

اما برای دوستانی که از IDE های دیگه استفاده میکنند میگم : اگه دیدید من برای بعضی توابع این کارو انجام میدهم ( الان این سوال هم واستون پیش اومده که تابع چیه -_- فقط در همین حد بگم که یه زیر برنامه است که عمل خاصی رو انجام میده مثل همین


 getch() 

که وظیفش گرفتن کاراکتره.) شما اون آندر لاین ( _ ) قبل اسم تابع را بردارید بعد اسم تابع رو بنویسید . دیگه هر جلسه این موضوع رو نمیگم . پس لطفا این قضیه یادتون بشه.

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

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

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

قسمت بعدی قسمت چهارم آموزش C++