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

جستجو ...


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

ثبت نام کنید

int و float در زبان برنامه نویسی ++C داده‌های مطرحی هستند. در این مقاله از لیداوب به آن‌ها پرداخته‌ایم.


همه چیز درباره نوع داده ها در ++C

برای نوشتن هر برنامه‌ای به انواع متغیرها نیاز داریم، متغیرها جایی برای ذخیره داده‌ها هستند. قبل از اینکه بخواهیم از متغیرها استفاده کنیم، باید نوع آن‌ها را مشخص کنیم. نوع متغیر براساس نوع داده‌ای که استفاده می‌کنیم مشخص می‌شود. Int و float دو نوع داده در++C هستند. هرکدام از این دو نوع داده به انواع مختلفی تقسیم می‌شوند که تفاوت آن‌ها با نوع داده اصلی در این است که یا محدوده بزرگ‌تر یا کوچک‌تری را شامل می‌شوند یا بدون علامت هستند. ولی در واقع زیر مجموعه نوع داده اصلی هستند.

Int یک عدد کامل بدون نقطه اعشار مانند 47 است. مثلا امکان اینکه  4.5 تعداد نوزاد یا 32.9 بار تکرار در یک حلقه داشته باشیم، وجود ندارد. ولی در نوع داده float به طور مثال می‌توانیم 25.76 دلار داشته باشیم. بنابراین هنگام استفاده از برنامه باید مشخص کرد که چه نوع داده‌ای استفاده شود.

چرا از نوع داده float به تنهایی استفاده نمی‌کنیم؟

 در واقع استفاده ازنوع داده float  به تنهایی در برنامه ناکارآمد است، زیرا که هم به فضای حافظه بیشتری نیاز دارد و هم این‌که کندتر از نوع داده int است. همچنین مقایسه دو عدد float برای مشخص کردن اینکه با هم برابر هستند یا نه، نسبت به مقایسه دو نوع داده int کار سخت‌تری است.

برای دست‌کاری اعداد باید آن‌ها را درمتغیری در حافطه ذخیره کنیم. دلیل نام‌گذاری فضای حافظه به متغیر این است که ارزش آن به راحتی می‌تواند تغییر کند. کامپایلری که برنامه را به کد ماشین تبدیل می‌کند، باید مشخص کند که چه نوع داده‌ای اعم از float یا int استفاده شده است. به همین منظور بایستی قبل از استفاده از یک متغیر آن را اعلان کنیم.

در مثال زیر نحوه اعلان یک متغیر را مشاهده می‌کنید:

int Counter =0;
 float BasicSalary; 

متغیر Counter با صفر مقداردهی شده است. مثال بالا روش خوبی برای مقدار دهی اولیه به متغیرها است. اگر از مقداردهی اولیه برای متغیر استفاده نکنیم و آن را بدون مقداراولیه در کد برنامه استفاده کنیم، هنگام اجرا ممکن است متغیر با یک مقدار تصادفی مقداردهی شود که دراین صورت برنامه ما با مشکل مواجه می‌شود. ارزش هر متغیر در حافظه زمان بارگزاری برنامه مشخص می‌شود.

بیشتر بخوانید:

همه چیز درباره C#؛ آیا سی شارپ برای برنامه نویسی مناسب است؟

 نوع داده int در ++C

بیشترین مقداری که نوع داده int می‌تواند ذخیره کند چقدر است؟ بستگی به نوع CPU دارد. ولی معمولا از ۳۲ بیت استفاده می‌کند. از آنجایی که به اعداد مثبت و منفی نیاز داریم، محدوده  2,147,483,647+ تا 2,147,483,648 - برای نوع داده int به کار می‌رود. این محدوده  int امضا شده (signed int) است، ولی نوع دیگر int با نام (unsigned int) وجود دارد که شامل صفر و اعداد مثبت است. محدوده این نوع 4,294,967,295  تا 0 است. در این نوع داده دیگر نیازی به علامت مثبت و منفی نداریم زیرا که این نوع داده فقط صفر و اعداد مثبت را شامل می‌شود.

نوع داده Short Ints در ++C

نوع داده کوتاه‌تر از int است که از ۱۶ بیت (۲ بایت) استفاده می‌کند.این نوع محدوده 32767+ تا 32768- را شامل می‌شود. اگر قرار است از تعداد زیادی نوع داده int با اعداد کوچک‌تراستفاده کنیم، می‌توانیم از short int استفاده کنیم. این کار باعث می‌شود برنامه سریع‌تر اجرا شود و اندازه حافظه مصرفی نیز نصف می‌شود. پردازنده‌های ۳۲ بیت، ارزش متغیرها را در بلوک‌های ۴ بایتی در یک زمان مشخص به دست می‌آورند. بنابراین واکشی ۱۶ بیتی از طریق واکشی ۳۲ بیتی انجام می‌شود. یک نوع داده ۶۴ بیتی دیگر که در C وجود دارد و long long نامیده می‌شود. برخی از کامپایلرهای ++C این نوع را مستقیما پشتیبانی نمی‌کنند و یک نام جایگزین برای آن استفاده می‌کنند. Borland و Microsoft هر دو از عنوان int64 استفاده می‌کنند. محدوده (signed) این نوع 9223372036854775807+ تا 9223372036854775807- است ولی نوع (unsigned) ان شامل محدوده 18446744073709551615 تا 0 است. همچنین یک نوع داده short int به صورت unsigned داریم که شامل محدوده 65535  تا 0 است.

توجه:

بعضی از زبان‌های برنامه نویسی نوع داده ۶۴ بیت را با عنوان Word می‌شناسند.

 نوع داده float  در ++C

نوع داده‌ای به نام long float وجود ندارد ولی نوع داده double دو برابر float است.

  • نوع داده float: اشغال ۴ بایت از حافظه و دارای محدوده  1.7x1038 تا 17x10-38.
  • نوع داده double: اشغال ۸ بایت از حافظه و دارای محدوده  3.4308 تا 3.4x10-308.

در مواردی که در برنامه‌نویسی از اعداد خیلی بزرگ یا خیلی کوچک استفاده می‌کنیم، برای داشتن دقت بیشتر اعداد اعشاری از نوع داده double استفاده می‌کنیم. نوع داده float تا ۶ رقم دقت و نوع داده Double تا ۱۵ رقم دقت را پشتیبانی می‌کند.

دقت (Precision) اعداد اعشاری در ++C

عدد  567.8976523 را در نظر بگیرید، این یک عدد float معتبر است. اما اگر آن را با کد زیر چاپ کنید مشاهده می‌کنید که با دقت کم چاپ می‌شود. این عدد دارای ۱۰ رقم هست ولی هنگام ذخیره در یک متغیراعشاری ازنوع float با دقت ۶ رقم ذخیره می‌شود.

#include 
 using namespace std;
 int main(int argc, char* argv[])
 {
 float value = 567.8976523;
 cout.precision(8) ;
 cout << value << endl;
 return 0;
 }

در این مثال دقت خروجی به ۸ رقم تنظیم شده است ولی متاسفانه نوع داده float  بیشتر از ۶ رقم را نگه نمی‌دارد. در این هنگام برخی از کامپایلرها هشداری در رابطه با تبدیل نوع داده double به float  صادر می‌کنند. خروجی این برنامه عدد 567.89764  خواهد بود ولی اگر از نوع داده double استفاده کنیم دقت عدد اعشاری به ۱۵ رقم افزایش می‌یابد و رقم 567.897644042969 چاپ خواهد شد که کاملا با عدد قبلی متفاوت است.

بیشتر بخوانید:

محبوب‌ترین زبان‌های برنامه نویسی دنیا کدام هستند؟

حالا رقم اعشار را دو رقم به سمت چپ می‌بریم و عدد ما  5.678976523 خواهد بود و دوباره برنامه را اجرا می‌کنیم، در این حالت خروجی ما به صورت 5.67897653579712 خواهد بود که این عدد دقیق‌تر است. در این حالت اگر نوع داده double باشد ودقت خروجی به ۱۰ رقم تنظیم شود، چیزی که چاپ می‌شود، دقیقا همان چیزی خواهد بود که انتظار داریم. به عنوان یک قانون کلی از داده float  فقط زمانی استفاده می شود که عدد کوچک وغیر صحیح باشد. ولی برای اعداد با دقت بیشتر از ۶ رقم باید از داده double استفاده کنیم.

عملیات ریاضی بر روی اعداد در ++C

اگر جمع، تفریق و غیره به درستی در برنامه انجام نشود نوشتن برنامه نرم افزاری مفید نخواهد بود.

 مثال ۲ را ببینید:

// ex2numbers.cpp 
 //
 #include 

 using namespace std;

 int main()
 {
 int a=9;
 int b= 12;
 int total=a+b;
 cout << "The total is " << total << endl;

 return 0;
 }

توضیح مثال ۲:

در ابتدای برنامه سه متغیراز نوع int تعریف شده است. متغیرهای A و B مقداردهی اولیه شده‌اند. سپس جمع دو مقدار A و B در متغیر total ریخته شده است. هنگام اجرای این برنامه از خط فرمان، باید خروجی عدد "۲۲" باشد.

علاوه بر این، می‌توان به جای جمع از تفریق، ضرب و تقسیم استفاده کرد. همچنین می‌توان برنامه را به برنامه تفریق یا ضرب تغییر داد و نوع داده را از int به float یا double  تبدیل کرد. با نوع داده  float نمی‌توان کنترل کرد که چند نقطه اعشاری نمایش داده شود. مگر آنکه دقت را همانطور که قبلا گفتیم، تنظیم کنید.

تعیین فرمت های خروجی با cout

وقتی اعداد را برای چاپ به خروجی می‌فرستیم باید مشخصات زیر را برای نمایش اعداد در نظر بگیریم.

  • عرض (width) : چقدر فضا برای کل عدد مورد نیاز است.
  • ترازبندی (Alignment) : تراز بندی به چپ یا راست. معمولا اعداد به راست ترازبندی می‌شوند.
  • تعداد فضاهای اعشاری
  • علامت یا براکت برای اعداد منفی
  • جداکننده اعداد (Thousands Separators) : اعداد بزرگ بدون استفاده از این ویژگی زیاد جالب به نظر نمی‌رسند.

عرض، ترازبندی، تعداد فضاهای اعشاری وعلائم را می‌توان با شی cout تنظیم کرد. استفاده از جدا کننده اعداد یا Thousands separators کمی پیچیده‌تر است. خصوصیت Thousands separators به صورت محلی در PCها تنظیم شده است که حاوی اطلاعات مربوط به کشور شما، مانند نمادهای ارز و نقطه اعشار و غیره است. برای مثال در انگلیس و ایالات متحده آمریکا، برای نمایش عدد 100.98 از نقطه اعشار استفاده می‌شود. درحالی‌که در برخی از کشورهای اروپایی عدد  €5,70 به معنای قیمت 5 یورو و 70 سنت است.

int main()
 {
 double a=925678.8750;
 cout.setf(ios_base::showpoint|ios_base::right) ;
 cout.fill('=') ;
 cout.width(20) ;
 locale loc("") ;
 cout.imbue( loc ) ; 
 cout.precision(12) ;
 cout << "The value is " << a << endl;

 //cout.unsetf(ios_base::showpoint) ;
 cout << left << "The value is " << a << endl;

 for (int i=5;i< 12;i++) {
 cout.precision(i) ;
 cout << setprecision(i)<< "A= " << a << endl;
 }

 const moneypunct  &mpunct = use_facet  >(loc) ;

 cout << loc.name( )<< mpunct.thousands_sep( ) << endl;
 return 0;
 }

خروجی این کد به صورت زیر خواهد بود: 

 =======The value is 925,678.875000
 The value is 925,678.875000
 A= 9.2568e+005
 A= 925,679.
 A= 925,678.9
 A= 925,678.88
 A= 925,678.875
 A= 925,678.8750
 A= 925,678.87500
 English_United Kingdom.1252,

استفاده از Locale و Moneypunct در ++C

در خط زیر از شی locale  برای PC  استفاده کردیم تا ویژگی‌های محلی را بدست آوریم.

locale loc("") ; 

 

const moneypunct  &mpunct = use_facet  >(loc) ;

یک شی mpunct  ایجاد می‌کند که مرجع کلاس  moneypunct هست، که اطلاعاتی درباره ویژگی‌های محلی به ما می‌دهد. متد thousands_sep کاراکتری که به عنوان جداکننده در کامپیوتر ما استفاده می‌شود را برمی‌گرداند.

cout.imbue( loc ) ;

با اجرای دستور cout هیچ گونه جداسازی برای اعداد انجام نمی‌شود. سعی کنید اول جداکننده را اضافه کنید و دوباره برنامه را اجرا کنید.

نکته:

به نظر می‌رسد بین کامپایلرهای مختلف در طرز رفتار cout.imbue  اختلاف وجود دارد. Visual C++ 2005 Express Edition، جدا کننده‌ها را شامل می‌شود. اما Microsoft Visual C++ 6.0 جدا کننده‌ها را شامل نمی‌شود.

نقطه‌های اعشار (Decimal Points)

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

  • حالت ثابت یا (Fixed Mode): نمایش عدد به صورت 567.8
  • حالت علمی یا (Scientific Mode): نمایش عدد به صورت 1.23450e+009

در هر دو حالت قالب بندی از  cout.setf و سپس precision استفاده می‌کنیم تا تعداد رقم اعشار بعد ازنقطه اعشار را تنظیم کنیم (با توجه به تعداد ارقام عدد). ولی در این صورت نمی‌توانیم از جداکننده استفاده کنیم. صفرهای بعد از نقطه اعشار (که قبلا توسط ios_base::showpoint تنظیم می‌شد.) به صورت خودکار و بدون نیاز به showpoint تنظیم می‌شود.

بیشتر بخوانید:

اعلام متغیرها در برنامه نویسی جاوا

نکاتی که در مورد نوع داده های int  وfloat و bool در ++C باید رعایت کنیم:

به دستور زیر توجه کنید:

float f = 122/11; 

شما انتظار دارید عدد 11.0909090909 با این دستور داشته باشید، ولی این دستور در واقع، عدد 11 را به f  نسبت می‌دهد. علت اینکار این است که عبارت سمت راست شامل دوعدد صحیح است، بنابراین این کد، از محاسبات عدد صحیح استفاده می‌کند و بخش کوچک را حذف کرده وعدد 11 را به متغیر f نسبت می‌دهد.برای نمایش عدد به صورت 11.0909090909، باید دستور را به صورت زیر تغییر دهیم :

float f = 122.0/11 

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

استفاده از نوع داده bool و int در ++C

در زبان C نوع داده‌ای به نام bool وجود ندارد. دراین زبان نتیجه عبارت‌ها در صورت صفر بودن false و در صورت غیر صفر بودن true در نظر گرفته می‌شود. در++C نوع bool می‌تواند مقادیر true یا false را داشته باشد. این مقادیر معادل همان  0 و 1 هستند.

const int false=0;
 const int true= 1;

دو خط بالا، برای داشتن مقدار 0 و 1 معتبر هستند. در این کد برای داشتن نوع داده bool، به طور ضمنی ازنوع داده int استفاده کردیم که حتی مقدارش هم می‌تواند افزایش یابد. ولی این عمل در برنامه نویسی زیاد جالب نیست.

bool fred=0;
 int v = true;

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

bool bad = true;
 bad++
 if (bad) ...

اگر متغیر bad غیر صفر باشد، if اجرا می‌شود، اما استفاده از این کد زیاد جالب نیست. بهتر است از متغیرهای منطقی به همان صورتی که تعریف شده‌اند استفاده کنیم.

در ++C دستوری مثل (if (!v معتبر است، ولی ترجیحا به جای آن از (if (v != 0 استفاده می‌کنیم که برای درک بهتر عمل مقایسه مناسب است.

استفاده از Enum جهت نوشتن کد بهتر در ++C

ابتدا باید بدانیم که Enum  چیست و چه کاربردی دارد؟

یک نوع داده دیگراست که بر اساس نوع داده int عمل می‌کند. نوع داده enum برای محدود کردن یک متغیر به یک مجموعه ثابت از مقادیر است.

enum rainbowcolor {red,orange,green, yellow, blue,indigo,violet};

به طور پیش فرض  این رنگ‌ها مقادیر 0 تا 6 (قرمز 0، بنفش 6) را دارند. می‌توانید به جای استفاده از مقادیری که کامپایلر مشخص می‌کند، مقادیر را خودتان مشخص کنید.

enum rainbowcolor {red=1000,orange=1005,green=1009, yellow=1010, blue,indigo,violet};

در این مثال رنگ‌های مقداردهی نشده به ترتیب مقادیر1011و1012و1013 را می‌گیرند. مقادیر به ترتیب از آخرین عددی که اختصاص یافته اند ادامه می‌یابد.

می‌توانید مقدار enum را به یک متغیر نوع int نسبت دهید مانند مثال زیر:

int p=red; 

اختصاص مقداری که مربوط به یک متغیر enum است به یک متغیر دیگر باعث بروز خطا می‌شود.

rainbowcolor g=1000; // Error!

 مطالب مرتبط  

در قسمت زیر مطالبی وجود دارند که با مقاله فعلی مرتبط هستند

متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

برترین های