اموزش C++ عبارات switch, break, continue

جزئیات عبارت switch
عبارت switchمتشکل از تعدادی برچسب case و یک حالت default اختیاری است. از این عبارت در این مثال برای تعیین اینکه کدام شمارنده باید براساس امتیاز وارد شده افزایش یابد، استفاده شده است. زمانیکه کنترل برنامه به switchمیرسد، برنامه مبادرت به ارزیابی عبارت موجود در درون پرانتزها میکند (یعنی grade) که بدنبال کلمه کلیدی switch قرار گرفته است (خط ۶۳). به این عبارت، عبارت کنترلی گفته میشود. عبارت switchشروع به مقایسه مقدار عبارت کنترلی با هر برچسب case میکند. فرض کنید که کاربر حرف C را بعنوان کد امتیاز وارد کرده باشد. برنامه شروع به مقایسه C با هر case موجود در بدنه switchمیکند. اگر مطابقتی....
بقیه اموزش در ادامه مطلب
اموزش C++ عبارات switch, break, continue

جزئیات عبارت 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 باشد، کنترل برنامه بسادگی به اجرای اولین عبارت پس از default ادامه خواهد داد.
نادیده گرفتن کارکترهای خطجدید،تب و فاصله در ورودی
خطوط ۹۰-۹۳ در عبارت switch شکل ۱۰-۵ سبب میشوند تا برنامه کاراکترهای خط جدید، تب و فاصلهها را در نظر نگیرد. خواندن یک کاراکتر در هر زمان میتواند مشکلساز شود. برای داشتن برنامهای که کاراکترها را بخواند، بایستی آنها را به کامپیوتر با فشردن کلید Enter صفحهکلید ارسال کنیم. با اینکار یک کاراکتر خط جدید (newline) در ورودی پس از کاراکترهایی که مایل به پردازش آنها هستیم، وارد میشود. غالباً برای اینکه برنامه بدرستی کار کند نیاز است تا به این کاراکتر رسیدگی شود. با قرار دادن case سابقالذکر در عبارت switch، مانع از نمایش پیغام خطا در حالت default در هر بار مواجه شدن با کاراکترهای خط جدید، تب (tab) یا فاصله در ورودی شدهایم.
تست کلاس GradeBook
برنامه شکل ۱۱-۵ یک شی GradeBook ایجاد میکند (خط ۹). خط ۱۱ تابع عضو displayMessage شی را برای نمایش پیغام خوشآمدگویی به کاربر فراخوانی میکند. خط ۱۲ تابع عضو inputGradesdisplayGradeReport تعریف شده در خطوط ۱۰۴-۱۱۴ از شکل ۱۰-۵ میکند و این تابع نتیجه برنامه را براساس امتیازهای وارد شده به نمایش در میآورد. را برای خواندن مجموعهای از امتیازها از سوی کاربر و شمارش تعداد دانشجویان دریافتکننده امتیاز فراخوانی میکند. به پنجره خروجی/ورودی به نمایش درآمده در شکل ۱۱-۵ توجه کنید که یک پیغام خطا در واکنش به وارد کردن یک امتیاز اشتباه (یعنی E) به نمایش درآورده است. خط ۱۳ مبادرت به فراخوانی تابع عضو

شکل ۱۱-۵ | ایجاد یک شی GradeBook و فراخوانی توابع عضو آن.
دیاگرام فعالیت UML عبارت switch
شکل ۱۲-۵ نشاندهنده دیاگرام فعالیت UML یک عبارت چند انتخابی switchاست. اکثر عبارات switchاز یک breakدر هر caseاستفاده میکنند تا به عبارت switchپس از پردازش آن caseخاتمه دهند. شکل۱۲-۵ بر استفاده از عبارتbreak در دیاگرام فعالیت تاکید دارد. بدون عبارتbreak کنترل به اولین عبارت پس از ساختار switchپس از اینکه یک caseپردازش شد، منتقل نمیشود. بجای آن کنترل به سراغ اجرای caseبعدی میرود.
این دیاگرام به وضوح نشان میدهد که عبارت breakدر انتهای یک caseسبب انتقال بلافاصله کنترل به خارج از عبارت switchمیشود. مجدداً توجه کنید که این دیاگرام حاوی نمادهای وضعیت عمل و تصمیمگیری است. همچنین توجه کنید که در این دیاگرام از نمادهای ادغام برای انتقال از عبارات breakبه وضعیت پایانی استفاده شده است.
به هنگام استفاده از عبارتswitch ، بخاطر داشته باشید که میتوان از آن فقط برای تست یک مقدار ارزشی ثابت استفاده کرد. هر ترکیبی از ثابتهای کاراکتری و ثابتهای عددی صحیح، بصورت یک ثابت عددی صحیح ارزیابی میشوند. یک ثابت کاراکتری بصورت یک کاراکتر خاص در میان علامت نقل قول همانند ‘A’ است. یک ثابت عددی، یک مقدار عددی صحیح است. همچنین هر برچسب caseمیتواند تعیینکننده یک عبارت ارزشی ثابت باشد.
شکل ۱۲-۵ | دیاگرام فعالیت 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 پرداخته است (خط ۱۴).

۱۳-۵ | عبارت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 ادامه مییابد و بدنبال آن شرط تکرار حلقه صورت میگیرد تا تعیین کند آیا بایستی حلقه ادامه یابد یا خیر.

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