سوالات امتحان پایان ترم فرزانگان 6 به همراه پاسخ
برای مطالعه بر روی ادامه مطلب کلیک کنید
1- برنامه ی زیر را به ازای عدد 122/765 اجرا کنید . خروجی برنامه چیست ؟
main() { int x; float z; cin >> z; x = z / 10; x = pow(x, 2) / 5; cout << "x = " << "\t" << x; getch(); }
خروجی این برنامه به ازای ورودی ذکر شده 28 می باشد.
2- در هر قسمت مشخص کنید که دستورات داخل حلقه چند بار یا تا چه زمانی اجرا می شوند ؟
الف)
main() { int n; cin >> n; while(n > 0) { cout << n * n * n; cin >> n; } getch(); }
این حلقه تا زمانی که عدد گرفته شده از ورودی مثبت باشد دائم اجرا میشود.
ب)
main() { int a, b = 4; a = 1; while(a <= 2 * b) { cout << a + 3 << "\t"; a = a + 2; b = b - 1; } getch(); }
این حلقه فقط دو بار اجرا می شود.
ج)
main() { int a, x; a = 4; cin >> x; while(x > 0 && a > 3) { x = x / 10; a = a * 2; } getch(); }
این حلقه به تعداد ارقام عدد x اجرا می شود.
د)
main() { float y; cin >> y; while(y >= 0) { y = y / 10; cout << y; } getch(); }
این حلقه اگر عدد ورودی یا همان y مثبت باشد تا ابد اجرا می شود و اگر منفی باشد هرگز اجرا نخواهد شد.
3-
الف) خروجی برنامه ی زیر به ازای n=4 چیست ؟ ( شکل بکشید ! )
ب) اگر بخواهیم شکل کشیده شده در هر بار اجرای حلقه با رنگی متفاوت باشد از چه دستوری و در کجای برنامه باید استفاده کنیم ؟
main() { int x = 200, y = 70, r = 70, n; initwindow(600, 700); cin >> n; while(n > 0) { fillellipse(x, y, r, r); y = y + r; r = r - 10; n = n - 1; }
الف)
ب) با استفاده از دستور زیر قبل از دستور fillellipse میتوان رنگ قلم را تغییر داد.
setfillstyle(1, n);
4- با توجه به برنامه ی زیر به سوالات پاسخ دهید :
main() { int x, y = 0; cin >> x; while(x > 0) { y = y + x % 10; x = x / 10; } if(y % 2 == 0) { if(y % 3 == 0) { cout << "A"; } } else { cout << "B"; } getch(); }
الف- جدول اجرای برنامه را به ازای x=24568 بکشید:
ب- مقدار متغیر y در اجرای دوم حلقه چند است ؟ 14
ج-خروجی برنامه به ازای x داده شده چیست ؟ B
د- هدف برنامه چیست ؟ این برنامه بیان میکند که آیا مجموع ارقام عدد بر 6 بخش پذیر است یا نه؟.. A یعنی بخش پذیر هست. B یعنی بخش پذیر نیست.
5- همانطور که می دانید یکی از مسائل قدیمی مصر باستان تقسیم بندی زمین های کشاورزی پس از تغییر مسیر رودخانه ها بوده است . احتمالا مسئله ی اصلی مصری ها این بوده که زمین ها طوری تقسیم شود که مساحت زمین هر کس قبل و پس از تقسیم بندی جدید ثابت بماند . برای اینکه محاسبات ساده شود یکی از بهترین شکل ها برای تقسیم زمین می تواند مثلث قائم الزاویه ای باشد که طول اضلاع آن عدد طبیعی هستند . در این مسئله ما از شما می خواهیم که طول اضلاع زمین را از ورودی دریافت کنید و مشخص کنید که آیا این اعداد تشکیل یک مثلث قائم الزاویه می دهند یا نه ؟
main() { cout << "Please enter 3 numbers: " << endl; int a, b, c; cin >> a >> b >> c; a = a * a; b = b * b; c = c * c; if(a == b + c || b == a + c || c == a + b) cout << "YES!" << endl; else cout << "NO!"; getch(); }
توضیح بیشتر
این سوال فقط صورتش یه مقدار طولانیه. اما آخرش اینه که یه برنامه بنویسید که سه تا عدد بگیره از ورودی و تشخیص بده که مثلث قائم الزاویه تشکیل میده یا نه؟ همین!
6- "عددبزرگ " عددی است که مقلوب آن از دو برابر خودش بیشتر باشد . برنامه ای بنویسید که یک عدد از ورودی دریافت کرده و تشخیص دهد که عدد بزرگ است یا نه ؟
main() { int num, revnum = 0, b, numb ; cin >> num; numb = num; while(num > 0) { b = num % 10; revnum = revnum * 10 + b; num = num / 10; } if(revnum > 2 * numb) cout << "adad bozorg ast!" << endl; else cout << "adad bozorg nist!" << endl; getch(); }
7- در سیاره ی مریخ دانشمندی زندگی می کند که نگران زباله های فضایی است . او دستگاهی اختراع کرده است که با استفاده از آن زباله های تولید شده در فضا را نابود می کند . عده ای خرابکار در دستگاه این دانشمند اختلال ایجاد کردند و باعث شدند که دستگاه به جای نابود کردن زباله ها ، زباله ی جدید تولید کند و این تولید زباله در هر ماه مریخی به صورت صعودی زیاد می شود . دانشمند مریخی بعد از چند روز متوجه این خرابکاری شد و سعی کرد که دستگاهش را تعمیر کند ولی شدت خرابکاری بسیار زیاد بود . او پس از دو ماه کار روی دستگاه توانست روند تولید صعودی دستگاه را تبدیل به یک روند نزولی بکند که هر ماه مقدار تولید زباله از میانگین مقدار زباله های تولید شده در دو ماه قبل حاصل می شود . یعنی اگر در ماه n ام مقدار زباله Fn باشد رابطه ی زیر را داریم :
ما از شما می خواهیم که برنامه ای برای کمک به این دانشمند بنویسید تا شماره ی ماه مریخی را از ورودی بگیرد و مقدار زباله ی تولید شده در آن ماه را محاسبه و در خروجی نمایش دهد . مقدار تولید زباله در 3 ماه اول به صورت زیر می باشد :
... , ... , ... , 6901 , 7349 , 6453
main() { cout << "Please enter the number: " << endl; int num, a, b, c; cin >> num; a = 6453; b = 7349; for(int i = 3 ; i <= num ; i++) { c = (a + b) / 2; a = b; b = c; } cout << c << endl; getch(); }
دقت کنید که این سوال شباهت بسیار زیادی به سوال فیبوناچی دارد. تنها با این تفاوت که هر بار پس از جمع و قبل از جا به جایی یک تقسیم بر دو هم داریم.
توضیح بیشتر
دقت کنید که در برنامه ی سری فیبوناچی یک رشته از اعداد داشتیم که با رابطه ی زیر درست می شدند:
...,1,1,2,3,5,8,13,21
خب حالا این سوال هم مثل فیبوناچی هستش. چه جوری؟ خب ... هر رشته از جمع دو تا رشته ی قبلی( تا اینجا مثل فیبوناچی) و یه تقسیم بر دوی کوچولو ساخته شده. پس ساخت رشته ها مثل فیبوناچی هستش.
اما توی فیبوناچی دو تا جمله ی اول 1 و 1 بودند. اما توی این برنامه طبق صورت سوال، دو تا جمله ی اول 6453 و 7349 هستش.
حالا اگه تا اینجا رو فهمیدید ولی بازم نفهمیدید که توی برنامه نویسی چیکار کردم پس یعنی فیبوناچی رو هم نفهمیدید... پس باید برید و الگوریتم فیبوناچی رو مرور کنید.