۱. تفاوت ساختاری و کاربردی بین حلقههای while و do...while در چیست؟ یک مثال کدی بنویسید که خروجی این دو حلقه را با هم مقایسه کند.
۲. در یک برنامهای که از while(true) و دستور break برای توقف استفاده شده، چه مزایا یا خطراتی ممکنه به وجود بیاد؟ در چه مواقعی این شیوه مناسب نیست؟
۳. فرض کنید قراره نمرههای دانشآموزان رو بگیرید و فقط نمرههای معتبر (بین ۰ تا ۲۰) رو در میانگین حساب کنید. با استفاده از continue یک کد بنویس که نمرههای نامعتبر رو نادیده بگیرد.
۴. چرا در زبان ++C از static_cast<> بهجای تبدیلهای ساده مثل (int)x استفاده میکنیم؟ یک مثال بزنید که نشان بدهد این نوع cast چرا امنتر یا مناسبتر است.
۵. کدی بنویسید که با استفاده از switch، اعداد ۰ تا ۲ را به متن انگلیسی تبدیل کند و برای سایر مقادیر، پیام "Other number" نمایش دهد. توضیح بدهید اگر breakها را حذف کنیم چه اتفاقی میافتد.
مهسا ایل خانی
۱.تفاوت ساختاری و کاربردی بین حلقههای 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 ضروری است.
مهسا ایلخانی
۲. در یک برنامهای که از while(true) و دستور break برای توقف استفاده شده، چه مزایا یا خطراتی ممکنه به وجود بیاد؟ در چه مواقعی این شیوه مناسب نیست؟
۳. فرض کنید قراره نمرههای دانشآموزان رو بگیرید و فقط نمرههای معتبر (بین ۰ تا ۲۰) رو در میانگین حساب کنید. با استفاده از continue یک کد بنویس که نمرههای نامعتبر رو نادیده بگیرد.
۴. چرا در زبان ++C از static_cast<> بهجای تبدیلهای ساده مثل (int)x استفاده میکنیم؟ یک مثال بزنید که نشان بدهد این نوع cast چرا امنتر یا مناسبتر است.
۵. کدی بنویسید که با استفاده از switch، اعداد ۰ تا ۲ را به متن انگلیسی تبدیل کند و برای سایر مقادیر، پیام "Other number" نمایش دهد. توضیح بدهید اگر breakها را حذف کنیم چه اتفاقی میافتد.
مهسا ایل خانی
۱.تفاوت ساختاری و کاربردی بین حلقههای 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 ضروری است.
مهسا ایلخانی