سوالات و پاسخ امتحان پایان ترم فرزانگان 4
به ادامه مطلب مراجعه کنید.
سوال 1
خروجی برنامه ی زیر به ازای ورودی یازده چه مقداریست؟
main() { int x; int a; float b = 1.5; cin >> x; a = x / 2; a = b * a + x / b + 0.2; cout << a; getch(); }
خروجی این برنامه به ازای ورودی داده شده 15 می باشد. (محاسبات ساده ریاضی)
سوال 2
در برنامه های زیر در هر قسمت، دستورات داخل حلقه به ازای اولین ورودی چند بار و یا تا چه زمانی اجرا می شوند؟
الف)
main() { int n; cin >> n; while(n > 0) { cout << n / 2 << endl; } getch(); }
به ازای یک ورودی مثبت بی نهایت بار ادامه خواهد داشت
ب)
main() { int n; cin >> n; while(n > 1) { cout << n << endl; n = n / 2; } getch(); }
به تعداد توانهای 2 موجود در عدد ورودی اجرا خواهد شد. مثلا برای ورودی 1 ، یکبار اجرا خواهد شد و برای 2 و 3، دو بار و برای 4 و 5و 6و 7 سه بار و برای 8 و 9 و ... تا 15 چهار بار اجرا خواهد شد
ج)سه بار اجرا خواهد شد. ( ورودی ندارد)
main() { int a, b, c; a = 12; b = 2; while(a>b) { a=a-b; b++; cout<<'*'; } system("PAUSE"); return 0; }
سوال 3
خروجی برنامه زیر به ازای ورودی n برابر با 5 چیست؟ شکل رسم کنید:
#include <iostream> #include <graphics.h> using namespace std; int main() { int n; cin>>n; int x=150,y=150; initwindow(800,800); while(n>0) { setcolor(n); rectangle(x-50,50,x,y); x=x+10; n--; } system("PAUSE"); return 0; }
ب) با استفاده از چه دستوری اشکال به رنگ های مختلف در می آیند؟
با استفاده از دستور setcolor مستطیل ها به رنگهای مختلف در می آیند. باید متغیر دستور را n قرار دهیم.
سوال 4
به برنامه ی زیر توجه کنید:
#include <iostream> using namespace std; int main() { int sum=0,bet; int n=0; int num; cin>>num; while(num!=-1) { n++; sum=sum+num; bet=sum/n; cin>>num; if(num>bet) cout<<"A"; else cout<<"B"; } system("PAUSE"); return 0; }
الف) جدول اجرای برنامه بالا را به ازای ورودی های 2-4-6-2( به ترتیب از راست به چپ) رسم کنید:
ب) مقدار متغیر bet در دور دوم اجرای حلقه چند است؟
با توجه به جدول بالا بسیار واضح است که در دور دوم اجرای حلقه مقدار متغیر bet به 3 می رسد.
ج) آخرین خروجی برنامه به ازای ورودی های داده شده در قسمت الف چیست؟
آخرین خروجی برنامه با توجه به جدول B می باشد.
د) این برنامه چه کاری را اجام میدهد؟ ( A و B به چه معنایی است؟)
با کمی دقت میتوان فهمید که این برنامه دائم از ورودی عدد میگیرد و هربار میانگین اعداد گرفته شده را حساب کرده و با عدد جدید گرفته شده از ورودی مقایسه میکند و اگر عدد جدید از میانگین اعداد قبلی بزرگتر بود حرف A را چاپ می کند. و اگر عدد جدید از میانگین اعداد قبلی کوچکتر بود حرف B را چاپ می کند. در واقع به جای A میتوان نوشت " عدد وارد شده از میانگین قبلی ها بزرگتر است" و به جای B می توان نوشت" عدد وارد شده از میانگین قبلی ها کوچکتر است" .
سوال 5
برنامه ای بنویسید که یک عدد چند رقمی را دریافت و بزرگترین رقم آن را نمایش دهد.
#include <iostream> using namespace std; int main() { cout<<"Please enter a number: "; int num; cin>>num; int max=-1,b; while(num>0) { b=num%10; if(b>max) max=b; num=num/10; } cout<<endl<<"biggest digit is : "<<max<<endl; system("PAUSE"); return 0; }
سئوال 6
الف) برنامه ای با استفاده از حلقه for یا while بنویسید که برای تمامی اعداد کوچکتر از عدد گرفته شده از ورودی چک کند که آیا شمارنده ی حلقه، مقسوم علیه عدد هست یا نه؟ و به مقدار یک متغیر که تعداد مقسوم علیه ها را می شمارد یکی اضافه کند.
مثلا برای عدد 6 به عنوان ورودی 1،2،3،4،5و 6 را چک کند و به ازای 1،2،3 هر بار یکی به شمارنده اضافه کند و دست آخر چاپ کند: 3 (تعداد مقسوم علیه ها به جز خودش)
int main() { cout<<"Please enter a number: "<<endl; int num,n=0; cin>>num; for(int i=1;i<num;i++) { if(num%i==0) n++; } cout<<"tedade maghsum alayh ha= "<<n<<endl; system("PAUSE"); return 0; }
ب) کاری کنید که برنامه ی بالا در تعداد تکرارهای کمتری تعداد مقسوم علیه ها را بیابد. راهنمایی: شرط حلقه را تغییر دهید در واقع شرط هوشمندانه تری بیابید شاید لازم نباشد تا خود عدد گرفته شده از ورودی حلقه تکرار شود! یک مثال برای خودتان بزنید و سریع مراقب را صدا نکنید!!!
باید تا نصف عدد پیش برویم. یعنی شرط حلقه می شود
for(int i=1;i<num/2;i++)
ج) به برنامه ی بالا چند خط اضافه کنید و برنامه را به برنامه ای که یک عدد از ورودی می گیرد و می گوید اول است یا نه تبدیل کنید. راهنمایی: به سادگی می توان از تعداد مقسوم علیه ها به اول بودن پی برد!
با توجه به راهنمایی داده شده جواب سوال بسیار ساده است. به برنامه ی زیر دقت کنید!
int main() { cout<<"Please enter a number: "<<endl; int num,n=0; cin>>num; for(int i=1;i<num;i++) { if(num%i==0) n++; } if(n==1) cout<<"aval"<<endl; else cout<<"morakab"<<endl; system("PAUSE"); return 0; }
سوال 7
برنامه ای بنویسید که یک عدد چند رقمی دریافت کند و میانگین اعداد جایگاه های فرد آن را نمایش دهد؟
دقت کنید که برنامه ای سر کلاس نوشتیم که مجموع جایگاه های زوج را حساب می کند کار شما دو مرحله دارد تغییر بسیار کوچکی به برنامه دهید تا جایگاه های فرد را بیابد و تعداد جایگاه های فرد را نیز بشمارید.
#include <iostream> using namespace std; int main() { cout<<"Please enter a number: "<<endl; int num,n=0,b; float sum=0; cin>>num; while(num>0) { b=num%10; sum=sum+b; num=num/100; n++; } float avr; avr=sum/n; cout<<"average of odd numbers is= "<<avr<<endl; system("PAUSE"); return 0; }
سوال 9
برنامه ای بنویسید که یک عدد چند رقمی را از ورودی بگیرد و عدد را به شیوه ای که در زیر گفته میشود رمز نگاری کند!
در این شیوه جای رقم اول و دوم عوض میشوند. جای رقم سوم و چهارم عوض میشوند. جای رقم پنجم و ششم عوض میشوند... همینطور تا آخرین رقم. ( اگر تعداد ارقام عدد فرد بود یک صفر بی ارزش پشت آخرین رقم بگذارید مثلا 100 به 0100 تبدیل میشود)
نمونه ی ورودی اول: 234567
نمونه ی خروجی اول: 325476
نمونه ی ورودی دوم : 123(یا 0123)
نمونه ی خروجی دوم: 1032
#include <iostream> using namespace std; int main() { cout<<"Please enter a number: "<<endl; int num; cin>>num; int a,b,c,code=0; int r=1; //zaribe 100 while(num>0) //har bar ruye 2 ragham kar mikonim { a=num%10; //raghame aval num=num/10; //hazfe raghame aval az adad b=num%10; //raghame dovom num=num/10; //hazfe raghame dovom c=a*10+b; //sakhte adade 2 raghami ba raghame aval va dovom code=code+c*r;/*adade 2 raghami dar zaribe 100 zarb shode va be moteghayere code ezafe mishavad*/ r=r*100; //zaribe badi sakhte mishavad } cout<<"ramze adade dade shode= "<<code<<endl; system("PAUSE"); return 0; }
سوال 9
در ریاضیات ما با اعداد ثابت بسیاری سروکار داریم . همه ی این اعداد صحیح نیستند و بسیاری از آنها از محاسبه ی روابط پیچیده که تا بینهایت ادامه خواهند داشت محاسبه می شوند.
رابطه ی زیر برای بدست آوردن عدد نِپِر استفاده میشود.
حالا از شما میخواهم برنامه ای بنویسید که عدد نپر را با دقت N ( که n را از ورودی دریافت میکند) بدست آورد و حاصل را چاپ کند:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout<<"Please enter a number: "<<endl; int n; cin>>n; float p=1; float b,sum=0; for(int i=1;i<=n;i++) { p=p*i; b=1/p; sum=sum+b; } cout<<"neper = "<<sum<<endl; system("PAUSE"); return EXIT_SUCCESS; }