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

انواع متغير ها در ++C

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

جلسه دوم آموزش برنامه نویسی سی پلاس پلاس به معرفي انواع متغير ها در ++C و نحوه به‌کارگيري آن‌ها در برنامه‌ها اختصاص دارد. انتظار مي‌رود پس از پايان اين جلسه بتوانيد انواع عددي صحيح در ++C را نام ببريد و متغيرهايي از اين نوع‌ها را در برنامه‌ها به کار ببريد. انواع عددي مميز شناور در ++C را نام ببريد و متغيرهايی از اين نوع‌ها را در برنامه‌ها به کار ببريد. نوع بولين را تعريف کرده و متغيرهايي از اين نوع را در برنامه‌ها به کار ببريد. نوع شمارشی را شناخته و متغيرهايی از اين نوع را در برنامه‌ها به کار ببريد. مفاهيم «تبديل نوع» و «گسترش نوع» را شناخته و انواع مختلف را به يکديگر تبديل نماييد. علت خطاهاي «سرريزي عددي» و «گردکردن» را دانسته و بتوانيد محل وقوع آن‌ها را کشف کنيد. عملگرهای حسابی و افزايشی و کاهشی و مقدارگذاري مرکب را در برنامه‌ها به کار ببريد.

رئوس مطالب این جلسه

  • انواع داده عددی
  • متغير عدد صحيح
  • محاسبات اعداد صحيح
  • عملگرهای افزايشی و کاهشی
  • عملگرهای مقدارگذاری مرکب
  • انواع مميز شناور
  • تعريف متغير مميز شناور
  • شکل علمی مقادير مميز شناور
  • نوع بولين bool
  • نوع کاراکتري char
  • نوع شمارشي enum
  • تبديل نوع، گسترش نوع
  • برخي از خطاهای برنامه‌نويسی
  • سرريزی عددی
  • خطای گرد کردن
  • حوزه متغيرها

مقدمه

ما در زندگي روزمره از داده‌های مختلفي استفاده مي‌کنيم: اعداد ، تصاوير، نوشته‌ها يا حروف الفبا، صداها، بوها و … . با پردازش اين داده‌ها می توانيم تصميماتی اتخاذ کنيم، عکس‌العمل‌هايی نشان دهيم و مساله‌اي را حل کنيم. کامپیوترها نيز قرار است همين کار را انجام دهند. يعني داده‌هايی را بگيرند، آن‌ها را به شکلي که ما تعيين مي‌کنيم پردازش کنند و در نتيجه اطلاعات مورد نيازمان را استخراج کنند. در ادامه انواع متغير ها در ++C مورد تشریح قرار می گیرند.

انواع داده عددی

در ++C دو نوع اصلی داده وجود دارد: «نوع صحيح» و «نوع مميز شناور». همۀ انواع ديگر از روي اين دو ساخته می شوند (به شکل زير دقت کنيد).

انواع متغيرها در ++C

نوع صحیح

نوع صحيح براي نگهداري اعداد صحيح (اعداد 0 و 1 و 2 و …) استفاده می شود. اين اعداد بيشتر براي شمارش به کار می روند و دامنه محدودی دارند.

انواع متغيرها در ++C

متغير عدد صحيح

انواع متغير ها در ++C شش نوع متغير عدد صحيح دارد تفاوت اين شش نوع مربوط به ميزان حافظۀ مورد استفاده و محدودۀ مقاديری است که هر کدام می توانند داشته باشند. اين ميزان حافظۀ مورد استفاده و محدودۀ مقادير، بستگي زيادي به سخت‌افزار و همچنين سيستم عامل دارد. يعني ممکن است روي يک کامپیوتر، نوع int دو بايت از حافظه را اشغال کند در حالي که روي کامپیوتر از نوع ديگر نوع int به چهار بايت حافظه نياز داشته باشد. وقتي برنامه‌اي مي‌نويسيد، توجه داشته باشيد که از نوع صحيح مناسب استفاده کنيد تا هم برنامه دچار خطا نشود و هم حافظۀ سيستم را هدر ندهيد.
محدوده انواع اصلی متغیر

محاسبات اعداد صحيح

++C مانند اغلب زبان‌های برنامه‌نويسی براي محاسبات از عملگرهای جمع (+) ، تفريق (-) ، ضرب (*) ، تقسيم (/) و باقيمانده (%) استفاده می کند.

عملگرهاي افزايشی و کاهشی

زبان برنامه نویسی ++C براي دستکاری مقدار متغيرهای صحيح، دو عملگر جالب ديگر دارد:

عملگر ++ : مقدار يک متغير را يک واحد افزايش مي‌دهد.

عملگر — : مقدار يک متغير را يک واحد کاهش مي‌دهد.

اما هر کدام از اين عملگرها دو شکل متفاوت دارند: شکل «پيشوندي» و شکل «پسوندي».

در شکل پیشوندی، عملگر قبل از نام متغير می آيد مثل m++ يا n– . در شکل پسوندی، عملگر بعد از نام متغير می آيد مثل ++m يا –n .در شکل پيشوندي ابتدا متغير، متناسب با عملگر، افزايش يا کاهش مي‌يابد و پس از آن مقدار متغير براي محاسبات ديگر استفاده مي‌شود. در شکل پسوندي ابتدا مقدار متغير در محاسبات به کار مي‌رود و پس از آن مقدار متغير يک واحد افزايش يا کاهش مي‌يابد. به مثال زیر توجه کنید.

پس از اجرای برنامه بخوبی متوجه خواهید بود که چه فرقی بین شکل پیشوندی و پسوندی وجود دارد. ما در کد بالا به هر دو متغیر x و y مقدار یکسان 10 را داده ایم. برای چاپ کردن هر کدام ابتدا ++x را چاپ می کنیم. در اینجا عدد 10 برای ما چاپ می شود و سپس 1 واحد x افزایش می یابد. ولی در مورد y ابتدا  این متغیر یک واحد افزایش پیدا می کند سپس چاپ می شود یعنی عدد 11.

عملگرهاي مقدارگذاري مرکب

در ++C عملگرهای ديگری دارد که مقدارگذاري در متغيرها را تسهيل مي‌نمايند. مثلا با استفاده از عملگر =+ مي‌توانيم هشت واحد به m اضافه کنيم اما با دستور کوتاه‌تر:

;m += 8

دستور بالا معادل دستور ;m = m + 8 است با اين تفاوت که کوتاه‌تر است. به عملگر =+ «عملگر مرکب» مي‌گويند زيرا ترکيبي از عملگرهاي + و = مي‌باشد. قبلاً از عملگر = براي مقدارگذاري در متغيرها استفاده کرديم. ++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

انواع مميز شناور

در ادامه بحث انواع متغير ها در ++C به مبحث اعداد ممیز شناور می رسیم. عدد مميز شناور به بيان ساده همان عدد اعشاری است. عددی مانند 123.45 يک عدد اعشاري است. براي اين که مقدار اين عدد در کامپیوتر ذخيره شود، ابتدا بايد به شکل دودويی تبديل شود:

123.45 = (1111011.0111001)2

اکنون براي مشخص نمودن محل اعشار در عدد، تمام رقم‌ها را به سمت راست مميز منتقل مي‌کنيم. البته با هر جابجايی مميز، عدد حاصل بايد در تواني از 2 ضرب شود:

123.45 = 0.11110110111001× 27

به مقدار 11110110111001 «مانتيس عدد» و به 7 که توان روی دو است، «نماي عدد» گفته می شود. در سی پلاس پلاس ++C سه نوع ممیز شناور داریم.

انواع ممیز شناور در ++C

  • معمولا نوع float از چهار بايت براي نگهداري عدد استفاده مِی کند.
  • نوع double از هشت بايت براي نگهداری عدد استفاده می کند.
  • نوع long double از هشت يا ده يا دوازده يا شانزده بايت براي نگهداری عدد استفاده می کند.

تعريف متغير مميز شناور

تعريف متغير مميز شناور مانند تعريف متغير صحيح است. با اين تفاوت که از کلمۀ کليدی float يا double براي مشخص نمودن نوع متغير استفاده می کنيم.

تفاوت نوع 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 يک کاراکتر نيست بلکه يک عدد صحيح است.

مثال

نوع شمارشي enum

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

enum typename{enumerator-list}

که enum کلمه‌ای کليدی است، typename نام نوع جديد است که کاربر مشخص می کند و 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 مقداردهي شده است.

مثال

خروجی برنامه

مقادير SAT و SUN و … هر چند که به همين شکل به کار می روند اما در کامپیوتر به شکل اعداد صحيح 0 و 1 و 2 و … ذخيره می شوند. به همين دليل است که به هر يک از مقادير SAT و SUN و … يک شمارشگر می گويند. مي‌توان مقادير صحيح دلخواهی را به شمارشگرها نسبت داد:

enum Day{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI=64}

اگر فقط بعضي از شمارشگرها مقداردهي شوند، آنگاه ساير شمارشگرها که مقداردهي نشده‌اند مقادير متوالي بعدي را خواهند گرفت:

enum Day{SAT=1,SUN,MON,TUE,WED,THU,FRI}

دستور بالا مقادير 1 تا 7 را به ترتيب به روزهاي هفته تخصيص خواهد داد.

همچنين دو يا چند شمارشگر در يک فهرست مي‌توانند مقادير يکسانی داشته باشند:

enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1}

در انواع متغير ها در ++C نحوۀ انتخاب نام‌شمارشگرها  آزاد است اما بيشتر برنامه‌نويسان از توافق زير در برنامه‌هايشان استفاده می کنند:

1 – براي نام ثابت‌ها از حروف بزرگ استفاده کنيد

2 – اولين حرف از نام نوع شمارشي را با حرف بزرگ بنويسيد.

3 – در هر جاي ديگر از حروف کوچک استفاده کنيد.

نام شمارشگر بايد معتبر باشد:

يعني:

  • کلمۀ کليدي نباشد.
  • با عدد شروع نشود.
  • نشانه‌هاي رياضي نيز نداشته باشد.

تبديل نوع و گسترش نوع

در محاسباتی که چند نوع متغير وجود دارد، جواب هميشه به شکل متغيری است که دقت بالاتری دارد. يعني اگر يک عدد صحيح را با يک عدد مميز شناور جمع ببنديم، پاسخ به شکل مميز شناور است به اين عمل گسترش نوع می گويند.

براي اين که مقدار يک متغير از نوع مميز شناور را به نوع صحيح تبديل کنيم از عبارت ()int استفاده مي‌کنيم به اين عمل تبديل نوع گفته مي شود.

مثال گسترش نوع

برنامۀ زير يک عدد صحيح را با يک عدد مميز شناور جمع مِی کند:

خروجی برنامه

برخي از خطاهای برنامه‌نويسی

خطای زمان کامپايل : اين قبيل خطاها که اغلب خطاهای نحوی syntax هستند ، توسط کامپايلر کشف مي‌شوند و به راحتي مي‌توان آن‌ها را رفع نمود.
خطاي زمان اجرا : کشف اينگونه خطاها به راحتي ممکن نيست و کامپايلر نيز چيزي راجع به آن نمي‌داند. برخي از خطاهاي زمان اجرا سبب مي‌شوند که برنامه به طور کامل متوقف شود و از کار بيفتد در اصطلاح خطاهای semantic نیز می گویند.

سرريز عددی یا Overflow

يک متغير هر قدر هم که گنجايش داشته باشد، بالاخره مقداری هست که از گنجايش آن متغير بيشتر باشد. اگر سعی کنيم در يک متغير مقداري قرار دهيم که از گنجايش آن متغير فراتر باشد، متغير «سرريز» مي‌شود،در چنين حالتي مي‌گوييم که خطاي سرريز یا Overflow رخ داده است.

مثال سریز عددی

اين‌ برنامه‌ به طور مكرر n را در 1000 ضرب‌ می كند تا سرانجام سرريز شود:

خروجی برنامه

وقتي يک عدد صحيح سرريز شود، عدد سرريز شده به يک مقدار منفی «گردانيده» می شود اما وقتی يک عدد مميز شناور سرريز شود، نماد inf به معنای بی نهايت را به دست می دهد.

خطای گرد کردن

خطای گرد كردن‌ نوع‌ ديگری از خطاست‌ كه‌ اغلب‌ وقتي‌ کامپیوترها روي‌ اعداد حقيقی محاسبه‌ می كنند، رخ‌ می دهد. براي‌ مثال‌ عدد 1/3ممكن‌ است‌ به‌ صورت‌ 0.333333 ذخيره‌ شود كه‌ دقيقا معادل‌ 1/3 نيست‌. اين خطا از آن‌جا ناشی می شود که اعدادي مثل 1/3 مقدار دقيق ندارند و کامپیوتر نمی تواند اين مقدار را پيدا کند، پس نزديک‌ترين عدد قابل محاسبه را به جای چنين اعدادي منظور مي‌کند.

«هيچ‌گاه از متغير مميز شناور براي مقايسه برابري استفاده نکنيد» زيرا در متغيرهاي مميز شناور خطاي گرد کردن سبب می شود که پاسخ با آن چه مورد نظر شماست متفاوت باشد.

حوزه متغيرها

در انتهای بحث انواع متغير ها در ++C به حوزه متغیر ها می رسیم. انتخاب نام‌های نامفهوم يا ناقص سبب کاهش خوانايی برنامه و افزايش خطاهای برنامه‌نويسی می شود. استفاده از متغيرها در حوزۀ نامناسب هم سبب بروز خطاهايی می شود. «حوزه متغير» محدوده‌ای است که يک متغير خاص اجازه دارد در آن محدوده به کار رود يا فراخواني شود.

اصطلاح «بلوک» در ++C واژه مناسبی است که می توان به وسيلۀ آن حوزۀ متغير را مشخص نمود. يک بلوک برنامه، قسمتی از برنامه است که درون يک جفت علامت کروشه { } محدود شده است.

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

مطالب زیر را حتما بخوانید

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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