ورود / ثبت نام
0
0

اموزش C++ عبارات switch, break, continue (قسمت بیست پنجم)

1738 بازدید

 

جزئیات عبارت switch

عبارت switch متشکل از تعدادی برچسب case و یک حالت default اختیاری است. از این عبارت در این مثال برای تعیین اینکه کدام شمارنده باید براساس امتیاز وارد شده افزایش یابد، استفاده شده است. زمانیکه کنترل برنامه به switch می رسد، برنامه مبادرت به ارزیابی عبارت موجود در درون پرانتزها می کند (یعنی grade) که بدنبال کلمه کلیدی switch قرار گرفته است (خط ۶۳). به این عبارت، عبارت کنترلی گفته می شود. عبارت switch شروع به مقایسه مقدار عبارت کنترلی با هر برچسب case می کند. فرض کنید که کاربر حرف C را بعنوان کد امتیاز وارد کرده باشد. برنامه شروع به مقایسه C با هر case موجود در بدنه switch می کند. اگر مطابقتی یافت شود (در خط ۷۵، case ‘C‘)، برنامه عبارات موجود در آن case را به اجرا در می آورد. در ارتباط با حرف ‍‍C، خط ۷۷ مبادرت به افزایش cCountbreak (خط ۷۸) سبب می شود که کنترل برنامه به اولین عبارت پس از switch منتقل شود که در این برنامه کنترل به خط ۱۰۰ انتقال می یابد. این خط، انتهای بدنه حلقه while را نشان می دهد (خطوط ۶۰-۱۰۰)، از اینرو جریان کنترل به سمت شرط while در خط ۶۰ می رود تا تعیین نماید که آیا حلقه بایستی ادامه یابد یا خیر. به میزان یک واحد می کند. عبارت caseهای موجود در عبارت switch بطور صریح مبادرت به تست حروف کوچک و بزرگ حرف‌های A، B، C، D و F می کنند. توجه کنید که caseهای موجود در خطوط ۶۵-۶۶ در تست مقادیر ‘A’ و ‘a’ کاربرد دارند (هر دو نشاندهنده امتیاز A می باشند). لیست caseها در این روش بصورت متوالی بوده و عبارتی مابین آنها وجود ندارد و به هر دو case اجازه می دهد تا یک مجموعه از عبارات را به اجرا درآورند، زمانیکه عبارت کنترلی با ‘A’ یا ‘a’ ارزیابی شود، عبارات قرار گرفته در خطوط ۶۷-۶۸ اجرا خواهند شد. توجه کنید که هرcase می تواند چندین عبارت داشته باشد. عبارت انتخابی switch متفاوت از دیگر عبارات کنترلی بوده و نیازی به استفاده از براکت‌ها در اطراف چندین عبارت در هر case ندارد.

بدون عبارات break، هر زمان که مطابقتی در switch تشخیص داده شود، عبارات آن case و caseهای متعاقب آن اجرا خواهند شد تا اینکه به یک عبارت break یا به انتهای switch برسد. به این حالت “falling through” یا عدم دستیابی به نتیجه در caseهای بعدی گفته می شود.

 

تدارک دیدن حالت default

اگر هیچ مطابقتی مابین مقدار عبارت کنترلی و یک برچسب case پیدا نشود، حالت default اجرا خواهد شد (خطوط ۹۵-۹۸). در این مثال از حالت default برای پردازش تمام مقادیر عبارت کنترلی که امتیازهای معتبر نیستند، کاراکترهای خط جدید، تب یا فاصله استفاده کرده‌ایم. اگر هیچ مطابقتی رخ ندهد، حالت default اجرا می شود و خطوط ۹۶-۹۷ یک پیغام خطا به نمایش در می آورند تا بر این نکته دلالت کنند که یک حرف امتیازی اشتباه وارد شده است. اگر هیچ مطابقتی در یک عبارت switch رخ ندهد و این عبارت فاقد حالت default باشد، کنترل برنامه بسادگی به اجرای اولین عبارت پس از switch ادامه خواهد داد.

 

نادیده گرفتن کارکترهای خط‌جدید،تب و فاصله در ورودی

خطوط ۹۰-۹۳ در عبارت switch شکل ۱۰-۵ سبب می شوند تا برنامه کاراکترهای خط جدید، تب و فاصله‌ها را در نظر نگیرد. خواندن یک کاراکتر در هر زمان می تواند مشکل‌ساز شود. برای داشتن برنامه‌ای که کاراکترها را بخواند، بایستی آنها را به کامپیوتر با فشردن کلید Enter صفحه‌کلید ارسال کنیم. با اینکار یک کاراکتر خط جدید (newline) در ورودی پس از کاراکترهایی که مایل به پردازش آنها هستیم، وارد می شود. غالباً برای اینکه برنامه بدرستی کار کند نیاز است تا به این کاراکتر رسیدگی شود. با قرار دادن case سابق‌الذکر در عبارت switch، مانع از نمایش پیغام خطا در حالت default در هر بار مواجه شدن با کاراکترهای خط جدید، تب (tab) یا فاصله در ورودی شده‌ایم.

 

تست کلاس GradeBook

برنامه شکل ۱۱-۵ یک شی GradeBook ایجاد می کند (خط ۹). خط ۱۱ تابع عضو displayMessage شی را برای نمایش پیغام خوش‌آمدگویی به کاربر فراخوانی می کند. خط ۱۲ تابع عضو inputGradesdisplayGradeReport تعریف شده در خطوط ۱۰۴-۱۱۴ از شکل ۱۰-۵ می کند و این تابع نتیجه برنامه را براساس امتیازهای وارد شده به نمایش در می آورد. را برای خواندن مجموعه‌ای از امتیازها از سوی کاربر و شمارش تعداد دانشجویان دریافت‌کننده امتیاز فراخوانی می کند. به پنجره خروجی/ورودی به نمایش درآمده در شکل ۱۱-۵ توجه کنید که یک پیغام خطا در واکنش به وارد کردن یک امتیاز اشتباه (یعنی E) به نمایش درآورده است. خط ۱۳ مبادرت به فراخوانی تابع عضو

cpp-ch5-11

شکل ۱۱-۵ | ایجاد یک شی GradeBook و فراخوانی توابع عضو آن.

دیاگرام فعالیت UML عبارت switch

شکل ۱۲-۵ نشاندهنده دیاگرام فعالیت UML یک عبارت چند انتخابی switch است. اکثر عبارات switch از یک break در هر case استفاده می کنند تا به عبارت switch پس از پردازش آن case خاتمه دهند. شکل۱۲-۵ بر استفاده از عبارتbreak در دیاگرام فعالیت تاکید دارد. بدون عبارتbreak کنترل به اولین عبارت پس از ساختار switch پس از اینکه یک case پردازش شد، منتقل نمیشود. بجای آن کنترل به سراغ اجرای case بعدی می رود.

این دیاگرام به وضوح نشان می دهد که عبارت break در انتهای یک case سبب انتقال بلافاصله کنترل به خارج از عبارت switch می‌شود. مجدداً توجه کنید که این دیاگرام حاوی نمادهای وضعیت عمل و تصمیم‌گیری است. همچنین توجه کنید که در این دیاگرام از نمادهای ادغام برای انتقال از عبارات break به وضعیت پایانی استفاده شده است.

به هنگام استفاده از عبارتswitch ، بخاطر داشته باشید که می توان از آن فقط برای تست یک مقدار ارزشی ثابت استفاده کرد. هر ترکیبی از ثابت‌های کاراکتری و ثابت‌های عددی صحیح، بصورت یک ثابت عددی صحیح ارزیابی می شوند. یک ثابت کاراکتری بصورت یک کاراکتر خاص در میان علامت نقل قول همانند ‘A’ است. یک ثابت عددی، یک مقدار عددی صحیح است. همچنین هر برچسب case می تواند تعیین‌کننده یک عبارت ارزشی ثابت باشد.

cpp-ch5-12

شکل ۱۲-۵ | دیاگرام فعالیت UML ساختار switch با عبارت break.

نکاتی در ارتباط با نوع داده

زبان C++ دارای نوع داده با سایزهای مختلف است. برای مثال، امکان دارد برنامه‌های مختلف، به اعداد صحیح با سایزهای متفاوت نیاز داشته باشند. C++ دارای چندین نوع داده برای عرضه مقادیر صحیح است. طول مقادیر صحیح برای هر نوع بستگی به سخت‌افزار کامپیوتر دارد. علاوه بر نوع‌های int و char، زبان C++ نوع‌های short (کوتاه شده short int) و long (کوتاه شده long int) را در نظر گرفته است. حداقل محدوده مقادیر صحیح از نوع short از -۳۲.۷۶۸ تا ۳۲.۷۶۷ می باشد. برای اکثر محاسبات صحیح، مقادیر صحیح از نوع long کافی هستند. حداقل محدوده مقادیر از نوع long از       -۲.۱۴۷.۴۸۳.۶۴۸ تا ۲.۱۴۷.۴۸۳.۶۴۷ است. بر روی اکثر کامپیوترها، مقادیر int معادل short یا long هستند. محدوده مقادیر برای یک int حداقل برابر با مقادیر short بوده و بیشتر از مقادیر longchar می توان برای عرضه هر کاراکتری در مجموعه کاراکتری کامپیوتر استفاده کرد. همچنین می توان از آن برای نمایش مقادیر صحیح کوچک استفاده کرد. نمی باشند. از نوع داده

 

۷-۵  عبارات break و continue

علاوه بر عبارات کنترلی و انتخابی، زبان C++ عبارات break و continue را برای ایجاد تغییر در جریان کنترل در نظر گرفته است. بخش بعدی شما را با نحوه استفاده از break در خاتمه دادن به اجرای یک عبارت switch آشنا خواهد کرد. همچنین این بخش در مورد نحوه استفاده از break در یک عبارت تکرار مطالبی عرضه خواهد کرد.

عبارت break

دستور break با اجرا در عبارات while ,for ,do..while یا switch سبب می شود تا کنترل بلافاصله از عبارت خارج شده، و برنامه با اولین عبارت پس از عبارت ادامه می یابد. معمولا از دستور break برای خارج شدن زود هنگام از حلقه یا پرش از مابقی عبارت switch (همانند برنامه ۱۰-۵) استفاده می شود. برنامه شکل ۱۳-۵ به توضیح عملکرد دستور break در عبارت تکرار for پرداخته است (خط ۱۴).

cpp-ch5-13

۱۳-۵ | عبارت break در یک عبارت for.

زمانیکه عبارت if تشخیص می دهد که count برابر ۵ است، دستور break اجرا می شود. با اینکار عبارت for خاتمه می یابد و برنامه به خط ۱۹ منتقل می شود (بلافاصله پس از عبارت for)، و پیغامی مبنی بر اینکه متغیر کنترلی به هنگام خاتمه حلقه چه مقداری داشته به نمایش در می آید. عبارت for بطور کامل و فقط چهار بار بجای ده بار اجرا می‌شود. توجه کنید که متغیر کنترلی count در خارج از سرآیند عبارت for تعریف شده است، از اینروست که میتوانیم از متغیر کنترلی هم در بدنه حلقه و هم پس از آن استفاده کنیم.

عبارت countinue

دستور continue، با اجرا شدن در عبارات while ,for یا do..while از مابقی عبارات موجود در درون بدنه عبارت پرش کرده و کار را با حلقه بعد دنبال می‌کند. در عبارات while و do..while، شرط تکرار حلقه بلافاصله پس از اجرای continue ارزیابی میشود. در عبارات for، بخش افزایش دهنده، پس از ارزیابی شرط تکرار حلقه صورت می گیرد. این مورد تنها اختلاف مابین for و while است. قرار دادن اشتباه continue قبل از بخش افزایش در while میتواند سبب بوجود آمدن یک حلقه بی نهایت شود.

در برنامه ۱۴-۵ از دستور continue در یک عبارت for استفاده شده (خط ۱۲) تا از عبارت خروجی خط  ۱۴پرش شود، زمانیکه عبارت if در خطوط  ۱۱-۱۲تشخیص دهد که مقدار count برابر ۵ شده است. زمانیکه عبارت continue اجرا شود، برنامه از مابقی بدنه for پرش خواهد کرد. کنترل برنامه با افزایش متغیر کنترلی عبارت for ادامه می‌یابد و بدنبال آن شرط تکرار حلقه صورت می‌گیرد تا تعیین کند آیا بایستی حلقه ادامه یابد یا خیر.

cpp-ch5-14

شکل ۱۴-۵ | عبارت continue در یک عبارت for.

در بخش ۳-۵ مشخص کردیم که عبارت while میتوانند در بسیاری از موارد بجای عبارت for بکار گرفته شود. یک استثناء زمانی رخ میدهد که عبارت افزایش‌دهنده در ساختار while بدنبال دستورcontinue آمده باشد. در اینحالت، عمل افزایش قبل از تست شرط ادامه حلقه اجرا نخواهد شد.

switch

  • پسورد: www.mspsoft.com
آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=3113
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
مسعود شریفی پور
از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.
مطالب بیشتر
برچسب ها:

نظرات

3 نظر در مورد اموزش C++ عبارات switch, break, continue (قسمت بیست پنجم)

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

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