دستور switch : در این دستور ما میتوانیم با توجه به مقادیر مختلف یک متغیر، کارهای مختلفی را انجام دهیم و به عبارت دیگر، این دستور با توجه به خواسته کاربر عمل کرده و کدهای درخواستی را اجرا میکند؛ حالت کلی دستور switch به این صورت است:
switch (x)
{
case 1: دستور اول
break;
case 2: دستور دوم
break;
.
.
.
default: دستور پیش فرض
break;
}
برای فهم بهتر این دستور به برنامه زیر توجه کنید؛ این برنامه دو عدد را از کاربر گرفته و با توجه به کار درخواستی کاربر، عملیات را روی اعداد انجام میدهد: (البته این برنامه را با استفاده از دستور do…while در ادامه کامل میکنیم)
همان طور که مشاهده میکنید، تنها قسمت جدید این کد دستور switch و بندهاش است که به توضیح آن میپردازم:
برخلاف بقیه دستورهای کنترلی (که در ادامه خواهید دید)، دستور switch دارای شرطی نیست و فقط یک متغیر را به عنوان ورودی میپذیرد و تمام تغییرات بر مبنای آن متغیر صورت میگیرد؛ در این برنامه ما میخواستیم بر خلاف برنامههای قبل که فقط توانایی انجام یک کار را داشتند (مثلا فقط اعداد را جمع میکردند) امکان انجام چند کار را بر حسب نیاز کاربر، به برنامه بدهیم؛ در این برنامه پس از این که کاربر عملیات خود را در برنامه وارد کرد، برنامه پس از تشخیص اینکه متغیر operation دارای چه مقداری است دستورهای مختلفی را انجام میدهد، که تمام این دستورات درون بدنه دستور switch نوشته میشود؛ برای درک بهتر این برنامه، کار کامپایل برنامه را از بالا تا پایین توضیح میدهم:
کامپایلر وارد بدنهی اصلی میشود، متغیرهای number1 ،number2 و operation (که از نوع کاراکتر است) تعریف میشوند، سپس پیام اول نمایش داده میشود، عدد اول، عملگر دلخواه کاربر و در آخر عدد دوم از کاربر گرفته میشود، خب رسیدیم سر اصل مطلب! دستور switch؛ ابتدا به این دستور میفهمانیم که با متغیر operation باید کارش را انجام دهد! در قسمت اول کنترل میشود که آیا کاراکتر عملگر، + است؟ اگر پاسخ بله است، پس دستور مقابل آن انجام میشود، و به علت وجود دستور break (در نکات تکمیلی درباره این دستور توضیح خواهم داد) از بدنهی دستور switch خارج میشود؛ و اگر پاسخ خیر است، کامپایلر به سراغ دستور دوم که وجود کاراکتر – را کنترل میکند، میرود و به همین ترتیب این کار انجام میشود تا دستور مورد نیاز کاربر انتحاب شود و دستور مقابل آن انجام شود؛ اگر دقت کنید! میبینید که در انتهای بدنه دستور switch دستور default وجود دارد که تعیین میکند اگر هیچ کدام از دستورهای بالا انجام نشود چه اتفاقی بیفتد، که من در اینجا با نوشتن یک پیام ساده این کار را انجام دادم! در هر حال ننوشتن این دستور در انتهای برنامه خللی در انجام کارهای دستور switch ایجاد نمیکند، به همین دلیل میتوانید آن را ننویسید.
دستور while: با استفاده از این دستور میتوان کار(ها)یی را تا وقتی که شرط داخل پرانتز آن درست باشد به صورت مکرر انجام داد؛ در صورت نادرست بودن شرط، کامپایلر از بدنه خارج شده و به کامپایل کردن دستورهای بعد از بدنه میپردازد؛ همچنین صورت کلی این دستور نیز به این صورت است:
while (شرط)
{
دستور(ها)
}
این دستور تا وقتی که شرط داخل پرانتز درست باشد به صورت مکرر دستور(ها)ی داخل بدنه را انجام دهد، به همین دلیل معمولا (نه همیشه) دستوری داخل یا خارج بدنه وجود دارد که به عنوان شمارنده (در نکات تکمیلی در این باره توضیح خواهم داد) عمل میکند و باعث به وجود آمدن تکرار میشود؛ در کد زیر کاربرد این دستور را توضیح میدهم:
در این برنامه مجوع اعداد 1 تا x را انجام میشود، تا وقتی که حاصل مجموع کمتر از عدد 1000 شود و عدد x را به ما نمایش میدهد؛ به عبارت دیگر وقتی کامپایلر به شرط دستور while میرشد کنترل میکند که مقدار متغیر sum کمتر از عدد 1000 است یا خیر، اگر کمتر باشد وارد بدنه دستور while میشود و مقدار متغیر sum را با مقدار متغیر x به اضافه یک واحد، جمع میکند، [توضیح درباره خط 13: این خط با این عبارت ریاضی یکسان است]:
sum = sum + (x++)
سپس این کار را آنقدر انجام میدهد تا زمانی که مقدار متغیر sum بیشتر یا مساوی عدد 1000 شود، در این صورت کامپایلر دستورهای بعد از بدنه را که نمایش عدد x است، اجرا میکند.
دستور do…while: این دستور همانند دستور while است، با این تفاوت که دستور(ها) در بدنه قسمت do نوشته میشوند و بعد شرط while کنترل میشود، به عبارت دیگر تنها تفاوت این دستور با while این است که در do…while دستور(ها) حتما یک بار اجرا میشوند و اجرای بعدی آنها توسط شرط while کنترل میشود، در برنامه زیر کاربرد do…while را توضیح میدهم: این برنامه، کاملشده برنامه قبل است که توضیح داده بودم که آن را با دستور do…while کامل میکنم:
اگر این برنامه را با برنامه قبل مقایسه کنید، میبینید که تنها تفاوت این است که دستور while به انتهای بدنه، منتقل شده است، تفاوت کار این برنامه، با برنامه قبل این است که در این برنامه کاربر تا وقتی که کاراکتر n را وارد نکند، برنامه به کامپایل دوباره دستوهای بدنه do میپردازد؛ به عبارت دیگر کاربر با یک بار اجرا کردن این برنامه میتواند، چند بار عملیات مختلف را انجام دهد، در صورتی که در برنامه قبل امکان انجام عملیات مختلف وجود نداشت؛ برای فهم بهتر به توضیح کامپایل برنامه میپردازم:
ابتدا کامپایلر، وقتی به دستور do میرسد، تمام دستورها را اجرا میکند، یعنی ابتدا به نمایش پیامها و سپس گرفتن عملیات میپردازد و سپس به دستور switch میرسد و با توجه به مقدار متغیر مورد نظر به اجرای دستورات میپردازد و سپس پیغامی را مبنی بر اینکه آیا کاربر مایل به اجرای دوباره این کار هست یا خیر؟ نمایش میدهد و سپس پاسخ را با استفاده از کاراکترهای y و n که نمایانگر بله و خیر هستند، از کاربر دریافت میکند و سپس با استفاده از دستور while و شرط آن، اجرای دوباره دستورات کمترل میشود، یعنی اگر کاربر کاراکتر n را تایپ کرده و کلید اینتر را بزند، برنامه بسته میشود.
نکات تکمیلی
- دستور break: وقتی این دستور در جایی از بدنه دستورهای تکرار و همین طور دستور switch نوشته میشود، باعث میشود، اجرای ادامه کدهای داخل بدنه متوقف شود و کامپایلر از بدنه خارج شود؛ به عنوان مثال در دستور switch، بعد از هر مورد دستور break نوشته میشود تا بعد از اجرای دستور هر مورد، کامپایلر از بدنه خارج شود و به کامپایل کدهای بعد از بدنه بپردازد؛ به عبارت دیگر اگر در دستور switch بعد از هر مورد، دستور break نوشته نشود، تمام موارد دستور switch اجرا میشود،(برای فهم بهتر ، دستورهای break را پاک کنید و به نتیجه برنامه دقت کنید.)
- همیشه در بدنهی دستورهای تکرار، دستوری قرار دهید تا در نهایت شرط while اجرا شود (به عبارت دیگر بالاخره در بدنه دستوری وجود داشته باشد که باعث خاتمه حلقه شود)، در غیر این صورت باعث به وجود آمدن حلقه بی پایان (infinite loop) میشود.
موضوع قسمت بعدی: دستور کنترلی for
توجه: اگر برای اولین بار است که این مقاله را میخوانید و هنوز قسمتهای قبلی آن را مطالعه نکردهاید، نگران نباشید زیرا از لینکهای زیر میتوانید چهار قسمت قبلی را در اختیار داشته باشید:
قسمت اول آموزش برنامهنویسی به زبان ++C
قسمت دوم آموزش برنامهنویسی به زبان ++C
سلام
برای سی شارپ هم اموزش بزارین.
واقعا ادم حظ میکنه مطالب شما رو میخونه منتظریم بعضی مطب مطب ساده رو طوری پیچیده میگن که جز خودشون کسی حرفاشونو نمیفهمه
با تشکر
بقیش کو؟؟
سلام
آموزش هاتون تا اینجا که دنبال کردم خیلی مفید و قابل فهم بود
قسمت های بعد رو نمیزارید؟؟؟؟؟؟؟؟؟؟!!!!!!
خیلی جامع و قابل فهمه توضیحاتتون.ممنونم.استادامون بیان یاد بگیرن
♥ آقا من برنامم رو نوشتم تموم کردم حالا می خوام توی سیستم یه جای دیگه اجرا کنم که ویژوال استدیو نداره !
ولی وقتی فایل رو اجرا می کنم قبل این که جواب رو ببینم از برنامه میاد بیرون ♥ چی کار کنم که این طور نشه ؟
وااااای پس کو بقیش؟ 🙁 🙁
با سلام
ممنوم از آموزش خوبتون اما نمیتونم از قسمت 6 به بعد را را پیدا کنم لطفا راهنمایی کنید.
با تشکر
سلام.
لطفا ی برنامه ای بنویسید که ریشه n ام یک تابع مختلط را بدست بیاره.(مثلا ریشه n ام تابع f(z)=z^n).ممنون میشم برنامشو به این ادرس برام بفرستین واسم خیلی مهمه.nazaninmaryam123@gmail.com
باتشکر بسیار زیاد از زحمات شما دوست عزیز میشه بگید بخش ششم کجاست؟
واقعا فوق العاده بود!ممنون!
لطفا ی برنامه از اعداد مختلط بنویسید که دو عضو a:bداشته باشه و سازنده و کپی و عملگر جمع برای دو عدد مختلط سر بار گذاری شود و از عملگر های پیش افزایشی و پس افزایشی هم استفاده بشه.خواهش میکنم این برنامه رو بنویسید و به mohsenabbasi2020@yahoo.comبفرستید منتظرم نزارید
دستتون درد نکنه ..من دستورات رو یادم رفته بود ولی با آموزشهای شما تونستم برنامه ای که دوستم لازم داشت رو بنویسم 🙂
ممنون از زحمتتون
باسلام،سایت خیلی عالی دارین ومطالب خیلی خوبه،ممنوووووووووووون
SLM.LTFAN AGE BALADIN BE MAN KOMAK KONIN TO BARNAME NEVESHTN BE ZABAN C++
DAR MORD MENU LTFAN TA FARDA BRAM EAMAIL BFRSTIN TA SOALM KAML BPORSM AZTON AGE MISHE LTFN KOMAKM KONIN.MAMNON
salam,ghashang bood faghat ye soal daram,inke aya mishe yek baze ro motanazer b yek adad kard k beshe oon ro dar case estefade konim?masalaan mikham az karbar adadi ro begiram va hargah adad dar bazeye (10 15]bood ye peygham bedam ya hamintoor baze haye digar,agar dastoori baraye tabdile baze be adad vojood dare khaheshan baram mail konid.ba sepase faravan
ممنون از شما .یک سوال دیگه. ما با c++ میتونیم رام و اینجور چیزها برای آندروید بسازیم؟
با تشکر
پاسخ شما را، در پاسخ دیدگاهی که در قسمت چهارم نوشته بودید، ارائه کردهام.
ممنون از زحماتتون. میشه بگید که کلاً چند قسمته؟؟
با تشکر
سپاسگزارم دوست عزیز، در واقع اگر بخوام تمام مباحث این زبان رو از سطح مقدماتی که الان در حال آموزشش هستم تا سطح پیشرفته که مباحث پیچیده تر میشن رو آموزش بدم، چیزی در حدود 90 تا 100 قسمت، رو شامل میشه، البته سعی میکنم برای زیاد نشدن، بعضی از نکات ظریف رو که برای یادگیری کلی زیاد لازم نیستند، نیارم و حتما در قسمت های بعد یک کتاب رو معرفی میکنم که علاقه مندان میتونن از اون ستفاده کنن.
بازم از شما دوستان عزیز سپاسگزارم که با دیدگاه های خودتون کیفیت کار مارو افزایش میدید.
سلام عزیز قسمت ۴ نیست تو آموزش ها ، ممنون از آموزش خوبتون من ده ساله کار نکردم الان قشنگ دارم یاد میگیرم خیلی عالی فقط قسمت چهار نیست قربان
مفید وعالی*
خسته نباشید
با آرزوی موفقیت برای شما دوستان زحمت کش