تالار گفتگوی کیش تک/ kishtech forum
برنامه نویسی پیشرفته 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 ضروری است.

مهسا ایلخانی..