![]() |
برنامه نویسی پیشرفته c++ - نسخهی قابل چاپ +- تالار گفتگوی کیش تک/ kishtech forum (http://forum.kishtech.ir) +-- انجمن: پردیس فناوری کیش (http://forum.kishtech.ir/forumdisplay.php?fid=1) +--- انجمن: دانشگاه پیام نور (http://forum.kishtech.ir/forumdisplay.php?fid=8) +---- انجمن: درس برنامه نویسی پیشرفته - گروه فیزیک - بهار 1404 (http://forum.kishtech.ir/forumdisplay.php?fid=357) +---- موضوع: برنامه نویسی پیشرفته c++ (/showthread.php?tid=115551) |
برنامه نویسی پیشرفته c++ - Mahsailk - 25-05-2025 ۱.تفاوت ساختاری و کاربردی بین حلقههای while و do...while در چیست؟ جواب: در ساختار: while: شرط قبل از اجرای حلقه بررسی میشود. اگر شرط false باشد، بدنه حلقه حتی یک بار هم اجرا نمیشود. do...while: بدنه حلقه یک بار اجرا میشود و سپس شرط بررسی میشود. حتی اگر شرط false باشد، حلقه حداقل یک بار اجرا خواهد شد. در کاربرد: وقتی میدانیم باید حداقل یک بار بدنه حلقه اجرا شود، از do...while استفاده میکنیم. وقتی ممکن است شرط از ابتدا برقرار نباشد و بخواهیم حلقه اجرا نشود، از while استفاده میکنیم. --- ۲. در یک برنامهای که از while(true) و دستور break برای توقف استفاده شده، چه مزایا یا خطراتی ممکنه به وجود بیاد؟ در چه مواقعی این شیوه مناسب نیست؟ جواب: مزایا: مناسب برای حلقههای بینهایت که با شرط خاصی (مثلاً یک ورودی یا رویداد) متوقف میشوند. ساده و قابل فهم برای حلقههای نامشخص. خطرات: اگر break هرگز اجرا نشود، حلقه بینهایت میشود و منابع سیستم را مصرف میکند. ممکن است باعث هنگ کردن یا عملکرد نادرست برنامه شود. مناسب نبودن: در مواقعی که میتوان شرط حلقه را به طور واضح مشخص کرد (مثلاً while (x < 10))، بهتر است از while شرطدار استفاده شود. در برنامههای حساس (مثل سرورها یا سیستمهای بلادرنگ) که حلقه بینهایت خطرناک است. --- ۳. فرض کن قراره نمرههای دانشآموزان رو بگیری و فقط نمرههای معتبر (بین ۰ تا ۲۰) رو در میانگین حساب کنی. با استفاده از continue یک کد بنویس که نمرههای نامعتبر رو نادیده بگیره. جواب: #include <iostream> using namespace std; int main() { int n, sum = 0, count = 0; while (true) { cout << "Enter grade (-1 to stop): "; cin >> n; if (n == -1) break; if (n < 0 || n > 20) continue; sum += n; count++; } if (count > 0) cout << "Average grade: " << (sum / (double)count) << endl; else cout << "No valid grades entered." << endl; return 0; } --- ۴. چرا در زبان ++C از static_cast<> بهجای تبدیلهای ساده مثل (int)x استفاده میکنیم؟ یک مثال بزن که نشان بده این نوع cast چرا امنتر یا مناسبتره. جواب: دلیل: static_cast<> نوع تبدیل را مشخصتر و ایمنتر انجام میدهد. از تبدیلهای ناخواسته (مثلاً اشارهگرها یا کلاسهای مختلف) جلوگیری میکند. باعث خوانایی و قابلیت نگهداری بهتر کد میشود. سوال ۵: کدی بنویسید که با استفاده از switch، اعداد ۰ تا ۲ را به متن انگلیسی تبدیل کند و برای سایر مقادیر، پیام "Other number" نمایش دهد. توضیح بده اگر breakها را حذف کنیم چه اتفاقی میافتد. جواب: using namespace std; int main() { int num; cout << "Enter a number: "; cin >> num; switch (num) { case 0: cout << "Zero" << endl; break; case 1: cout << "One" << endl; break; case 2: cout << "Two" << endl; break; default: cout << "Other number" << endl; } return 0; } اگر breakها را حذف کنیم: بعد از اجرای یک case، برنامه بدون توقف به caseهای بعدی هم وارد میشود (به این اتفاق fall-through گفته میشود). مثلاً اگر عدد 1 را وارد کنیم، خروجی این میشود: One Two Other number برای جلوگیری از این مشکل و اجرای فقط یک case، استفاده از break ضروری است. مهسا ایلخانی.. |