سوال پایانترم برنامه نویسی پیشرفته پیام نور (تکرار حلقه)
توی امتحان پایانترم پیام نور یه کد زیر رو نوشته
سوال: این حلقه چند بار اجرا میشود و در نهایت مقدار z چند خواهد بود؟
int z=0; while (z<5) { if(z>3) break; z++; }
جواب: z=4 و پنج بار
حالا مشکل من:
جواب بدون شک میشه ۴
اما حلقه اول چون هیچ وقت از پنج بزرگتر نمیشه پس بی نهایت اجرا میشه و حلقه دوم هم چهار بار
من اشتباه میکنم یا برگه؟
4 پاسخ
در کد زیر چه اتفاقی افتاده؟
int a=0; for (i=0;i<5;i++) for (j=0;j<5;j++) a++; a--; cout << a;
جوابش شده ۲۴ اما هر چی فکر میکنم متوجه نمیشم چی شده؟
سلام رضای عزیز، به نظرم شما اشتباه کد رو متوجه شدی، قسمت if در صورتی که مقدار z بزرگتر از 3 بشه دستور break اجرا میشه، یعنی از حلقه کلاً خارج میشه، ولی دستور ++z جزو شرط if نیست، پس با هر بار تکرار حلقه while دستور ++z اجرا میشه و وقتی مقدار z برابر 4 شد، یعنی بزرگتر از 3 از حلقه خارج میشه. مشکلی وجود نداره تو. فکر کنم اون break به خاطر اینکه جلوی if نوشته شده شما رو به اشتباه انداخته.
شما اول کد بالا به را رو به صورت باز نویسی کن:
int a = 0, i = 0, j = 0; for(i = 0; i < 5; i++) { for(j = 0; j<5;j++) { a++; } } a--; cout << a;
اینجا چیزی که شخص رو به اشتباه می اندازه scope های مربوط به حلقه ها هست، دستور ++a در حقیقت 25 بار اجرا میشه، یعنی 25 بار 1 مقدار به a اضافه میشه، که بعد اتمام حلقه ها مقدار a برابر 25 خواهد بود، بعد دستور --a یک مقدار از a کم کرده و خروجی مقدار 24 چاپ میشه.
دوست عزیز توجه داشته باش که یک خط بعدی که بعد از if یا for می آید زیرمجموعه آن محسوب می شود. در کد بالا for دوم زیر مجموعه for اول است و a++ هم زیر مجموعه for دوم است. بنابراین for اول 5 بار اجرا می شود و در هر بار اجرا for دوم 5 بار اجرا می شود بنابر این a++ تعداد 25 بار اجرا می شود که بعد از اجرای این حلقه ها یک بار از مقدار a با کد a-- کم می شود. بنابراین جواب 24 است در اصل این کد باید به شکل زیر باشد.
int a=0; for (i=0;i<5;i++) for (j=0;j<5;j++) a++; a--; cout << a;