انواع متغير ها در ++C و نحوه بهکارگيری آنها

ما در زندگی روزمره از دادههای مختلفی استفاده میکنيم مثل: اعداد، تصاوير، نوشتهها يا حروف الفبا، صداها و….. که با پردازش اين دادهها میتونيم تصمیم بگیریم و عکس العمل مناسبی نشان بديم و مسالهای رو حل کنيم. کامپیوترها هم قرار هست همين کار رو انجام بدند. يعنی دادههايی رو بگيرن، اونها را به شکلی که ما تعيين میکنيم پردازش کنن و در نتيجه اطلاعات مورد نيازمان رو استخراج کنن.
انواع داده عددی
در ++C دو نوع اصلی داده وجود داره: نوع صحيح و نوع مميز شناور که همۀ انواع ديگر از روی اين دو نوع ساخته میشن.
نوع صحیح
نوع صحيح برای نگهداری اعداد صحيح (اعداد 0 و 1 و 2 و …) استفاده میشن. اين اعداد بيشتر برای شمارش به کار میرن و دامنه محدودی دارن.
متغير عدد صحيح
انواع متغير ها در ++C شش نوع متغير عدد صحيح داره تفاوت اين شش نوع مربوط به ميزان حافظۀ مورد استفاده و محدودۀ مقاديری هست که هر کدام می تونن داشته باشن. اين ميزان حافظۀ مورد استفاده و محدودۀ مقادير، بستگی زيادی به سختافزار و همچنين سيستم عامل داره. يعنی ممکن هست روی يک کامپیوتر، نوع int دو بايت از حافظه را اشغال کنه در حالی که روی کامپیوتر از نوع ديگر نوع int به چهار بايت حافظه نياز داشته باشه. وقتی برنامهای مینويسيم باید توجه داشته باشيم که از نوع صحيح و مناسب استفاده کنيم تا هم برنامه دچار خطا نشه و هم حافظۀ سيستم رو هدر نديم.
محاسبات اعداد صحيح
C++ مثل بقیه زبانهای برنامهنويسی برای محاسبات از عملگرهای جمع (+) ، تفريق (-) ، ضرب (*) ، تقسيم (/) و باقيمانده (%) استفاده می کنه.
عملگرهای افزايشی و کاهشی
زبان برنامه نویسی C++ برای دستکاری مقدار متغيرهای صحيح، دو عملگر جالب ديگه هم داره:
عملگر ++: مقدار يک متغير رو يک واحد افزايش ميده.
عملگر—: مقدار يک متغير رو يک واحد کاهش میده.
ولی هر کدام از اين عملگرها دو شکل متفاوت دارن: شکل پيشوندی و شکل پسوندی.
داخل شکل پیشوندی، عملگر قبل از نام متغير میاد مثل m++ يا n– و در شکل پسوندی، عملگر بعد از نام متغير میاد مثل m++يا n– در شکل پيشوندی ابتدا متغير، مناسب با عملگر، افزايش يا کاهش پیدا میکنه و پس از آن مقدار متغير برای محاسبات ديگر استفاده میشه. در شکل پسوندی ابتدا مقدار متغير در محاسبات به کار میره و پس از آن مقدار متغير يک واحد افزايش يا کاهش پیدا میکنه.
عملگرهای مقدارگذاری مرکب
در C++عملگرهای ديگری دارد که مقدارگذاری در متغيرها را تسهيل میکنه. مثلا با استفاده از عملگر =+ میتونيم هشت واحد به m اضافه کنيم اما با دستور کوتاهتر:
;m += 8
دستور بالا معادل دستور m = m +78 ; هست با اين تفاوت که کوتاهتره. به عملگر =+ عملگر مرکب میگن چون ترکيبی از عملگرهای + و =هست. قبلاً از عملگر = برای مقدارگذاری در متغيرها استفاده کرديم. C++ عملگرهای ديگری دارد که مقدارگذاری در متغيرها را تسهيل میکنه. عملگر مرکب در C++ عبارتند از: =+ و =- و =* و =/ و =% که نحوه عملکرد آنها به این صورت هست:
معادل هر عبارت:
m += 8; → m = m + 8
m -= 8; → m = m – 8
m *= 8; → m = m * 8
m /= 8; →m = m / 8
m %= 8; →m = m % 8
انواع مميز شناور
عدد مميز شناور به بيان ساده همان عدد اعشاری هست. مثلا عددی مانند 123.45 يک عدد اعشاری هست. برای اين که مقدار اين عدد در کامپیوتر ذخيره شه باید اول به شکل دودويی تبديل بشه:
123.45 = (1111011.0111001)2
حالا برای مشخص کردن محل اعشار در عدد، تمام رقمها را به سمت راست مميز منتقل میکنيم. البته با هر جابجايی مميز، عدد حاصل بايد در توانی از 2 ضرب بشه:
123.45 = 0.11110110111001× 27
به مقدار 11110110111001 مانتيس عدد و به 7 که توان روی دو هست، نمایعدد گفته میشه. داخل سی پلاس پلاس سه نوع ممیز شناور داریم.
- معمولا نوع float از چهار بايت برای نگهداری عدد استفاده میکنه.
- نوع double از هشت بايت برای نگهداری عدد استفاده میکنه.
- نوع long double از هشت يا ده يا دوازده يا شانزده بايت برای نگهداری عدد استفاده میکنه.
تعريف متغير مميز شناور
تعريف متغير مميز شناور مثل تعريف متغير صحيح هست. با اين تفاوت که از کلمۀ کليدی float يا double برای مشخص کردن نوع متغير استفاده می کنيم.
;Float x
;Double x, y=0
تفاوت نوع float با نوع double در اين هست که نوع double دو برابر float از حافظه استفاده میکنه. پس نوع double دقتی خیلی بيشتر از float داره. به همين خاطر محاسبات double وقتگيرتر از محاسبات float هست.
نوع بولین bool
نوع bool يک نوع صحيح هست که متغيرهای اين نوع فقط میتونه مقدار true ياfalse داشته باشن. True به معني درست و false به معني نادرست هست.
اما اين مقادير در اصل به صورت 1 و 0 درون کامپیوتر ذخيره میشن: 1 برای true و 0 برای false هست.
نوع کاراکتری char
یکی از انواع متغير ها در C++ نوع کاراکتری یا Char هست. يک کاراکتر يک حرف، رقم يا نشانه هست که يک شمارۀ منحصر به فرد داره. به زبان ساده تر، هر کليدی که روی صفحهکليد خود تون میبينيد يک کاراکتر رو نشان میده. مثلا هر يک از حروف ‘A’ تا ‘Z’ و ‘a’ تا ‘z’ و هر يک از اعداد ‘0’ تا ‘9’ و يا نشانههاي ‘~’ تا ‘+’ روي صفحهکليد رو يک کاراکتر مینامند. براي تعريف متغيری از نوع کاراکتر از کلمه کليدی char استفاده میکنيم. يک کاراکتر بايد درون دو علامت آپستروف (‘) قرار گرفته باشه. پس ‘A’ يک کاراکتر هست؛ همچنين ‘8’ يک کاراکتر هست اما 8 يک کاراکتر نيست بلکه يک عدد صحيح هست.
مثلا:
;’Char c =’M
نوع شمارشی enum
يک نوع شمارشی از نوع عدد صحيح هست که توسط کاربر مشخص میشه.
مدل تعريف يک نوع شمارشی به شکل زير است:
enum type name{enumerator-list}
که enum کلمهای کليدی هست، type name نام نوع جديد هست که کاربر مشخص می کنه و enumerator-list مجموعه مقاديری هست که اين نوع جديد میتونه داشته باشه.
برای مثال:
enum Day{SAT,SUN,MON,TUE,WED,THU,FRI}
حالا Day يک نوع جديد هست و متغيرهايی که از اين نوع تعريف میشن میتونه يکي از مقادير SAT و SUN و MON و TUE و WED و THU و FRI را داشته باشه:
;Day day1, day2
;day1 = MON
;day2 = THU
وقتي نوع جديد Day و محدودۀ مقاديرش رو تعيين شه، میتونيم متغيرهايی از اين نوع جديد بسازيم. در کد بالا متغيرهای day1 و day2 از نوع Day تعريف شده. وday1 با مقدار MON و day2 با مقدار THU مقداردهی شده.
در انواع متغير ها در نحوۀ انتخاب نامشمارشگرها آزاد هست اما بيشتر برنامهنويسان از توافق زير در برنامههايشان استفاده می کنن:
- برای نام ثابتها از حروف بزرگ استفاده شه.
- اولين حرف از نام نوع شمارشی رو با حرف بزرگ بنويسيم.
- در هر جای ديگر از حروف کوچک استفاده شه.
- نام شمارشگر بايد معتبر باشه. يعني این که:
- کلمۀ کليدي نباشه.
- با عدد شروع نشه.
- نشانههاي رياضی هم نداشته باشه.
تبديل نوع و گسترش نوع
در محاسباتی که چند نوع متغير وجود داره، جواب هميشه به شکل متغيری هست که دقت بالاتری داره. يعنی اگه يک عدد صحيح رو با يک عدد مميز شناور جمع ببنديم، پاسخ به شکل مميز شناور هست به اين عمل گسترش نوع میگن.
برای اين که مقدار يک متغير از نوع مميز شناور را به نوع صحيح تبديل کنيم از عبارت () intاستفاده میکنيم به اين عمل تبديل نوع گفته میشه.
برخی از خطاهای برنامهنويسی
خطای زمان کامپايل: از اين قبيل خطاها که اغلب خطاهای نحوی syntax هستن، توسط کامپايلر کشف میشن و به راحتی میتونیم اونها رو رفع کنیم.
خطاي زمان اجرا: کشف اين خطاها به راحتی ممکن نيستن و کامپايلر هم چيزی راجع به اون نمیدونه. برخی از خطاها زمان اجرا باعث میشن که برنامه به طور کامل متوقف بشه و از کار بيفته در اصطلاح خطاهای semantic هم بهش میگن.
سرريز عددی یا Overflow
يک متغير هر قدر هم که گنجايش داشته باشه، بالاخره مقداری هست که از گنجايش اون متغير بيشتر باشه. اگر تلاش کنيم در يک متغير مقداری قرار بديم که از گنجايش اون متغير بیشتر باشه، متغير سرريز میشه،در همچنين حالتی میگيم که خطای سرريز یا Overflow رخ داده.
وقتی يک عدد صحيح سرريز بشه، عدد سرريز شده به يک مقدار منفی برمیگرده ولی وقتی يک عدد مميز شناور سرريز بشه، نماد inf به معنی بی نهايت رو میده.
خطای گرد کردن
خطای گرد كردن نوع ديگه از خطا هست كه اغلب وقتی کامپیوترها روی اعداد حقيقی محاسبه می كنن این خطا رخ میده. براي مثال عدد 1/3ممكنه به صورت 0.333333 ذخيره بشه كه دقيقا معادل 1/3 نيست. اين خطا از اون جایی ناشی میشه که اعدادی مثل 1/3 مقدار دقيق نداره و کامپیوتر نمیتونه اين مقدار رو پيدا کنه، پس نزديکترين عدد قابل محاسبه رو به جای همچنين اعدادی نشان میده.
هیچ وقط از متغير مميز شناور برای مقايسه برابری استفاده نکنيد چون در متغيرهای مميز شناور خطای گرد کردن باعث میشه که پاسخ به سوالی که مورد نظر ماست متفاوت باشه.
حوزه متغيرها
انتخاب نامهای نامفهوم يا ناقص باعث کاهش خوانايی برنامه و افزايش خطاهای برنامهنويسی میشه. استفاده از متغيرها در حوزۀ نامناسب هم باعث بروز خطاهايی می شود. حوزه متغير محدودهای هست که يک متغير خاص اجازه داره در آن محدوده به کار گرفته شه يا فراخوانی بشه.
اصطلاح بلوک در C++ واژه مناسبی هست که میتونیم به وسيلۀ اون حوزۀ متغير رو مشخص کنیم. يک بلوک برنامه، قسمتی از برنامه هست که درون يک جفت علامت کروشه { } محدود شده.
حوزۀ يک متغير از محل اعلان اون شروع میشه و تا پايان همان بلوک ادامه پیدا میکنه. خارج از اون بلوک نمیتونیم به متغير دسترسی داشته باشیم. همچنين قبل از اين که متغير اعلان بشه نمیتونیم اون رو استفاده کنیم. می توانيم در يک برنامه، چند متغير متفاوت با يک نام داشته باشيم به شرطی که در بخش های مشترکی نباشن.
دیدگاهتان را بنویسید