برنامه اول: برنامه ای بنویسید که مشخص کند آیا پارامتر number یک عدد کامل است یا خیر.با استفاده از این تابع برنامه ای بنویسید که همه اعداد کامل بین 1 تا 100 را بدست آورده و در خروجی چاپ کند.مقسوم علیه های هر یک از اعداد کامل را نیز چاپ کند تا مطمئن شوید که عدد مزبور واقعا یک عدد کامل است.مهارت برنامه نویسی خود را با آزمایش اعداد بزرگتر از 1000 امتحان کنید.
کد:
#include<iostream>
using namespace std;
int complete(int );
int main(){
int num;
int sum=0;
cin>> num;
for(int i=1;i<=(num/2);i++)
{
if (num%i==0)
sum+=i;}
if (sum == num)
cout<<"the number " << num <<" is complete\n";
else
cout<<"the number " << num <<" isnot complete\n";
return 0;
}
سوال 1 : بالاخره تو هر دفعه تکرار حلقه باید مقداری به متغیر اضافه شه و در نهایت میتونیم بگیم این عدد کامل هست یا نه . ولی تو صورت مساله خواسته مقسوم علیه ها رو هم باید چاپ کنیم. اگر تو این دستور if (num%i==0) ، بخوایم اون عدد رو چاپ کنیم ممکنه در نهایت عدد ما کامل نباشه و این وسط ممکنه مقسوم علیه های اعداد غیر کامل هم چاپ بشه و صورت مساله خواسته مقسوم علیه های عدد اول رو چاپ کنه . باید چی کار کنم باید دو تا تابع تعریف کنم که اول کامل بودن رو بررسی کنه اگر کامل بود بفرسته توی تابع دیگه که مقسوم علیه هاشو چاپ کنه ؟؟؟؟ که خب اینجوری دوباره کاری میشه .
سوال 2: منظور از قسمت آخر سوال چی هست ؟ از لحاظ بهینگی برنامه این سوال رو گفته اگر بله چطوری باید این برنامه رو بهینه کنم؟ البته میدونید خود برنامه ، نوشتنش راحته ولی من توی ریزه کاریاش مشکل دارم
برنامه 2:
برنامه ای بنویسید که پرتاب سکه را شبیه سازی کند برنامه باید برای هر بار پرتاب کلمه heads یا tail را چاپ کند.برنامه را برای 100 بار پرتاب سکه بنویسید و تعداد دفعاتی را که هر یک از دو روی سکه می آید شمرده و نتیجه را چاپ کنداین برنامه باید تابع دیگری به نام flip را فراخوانی کند.این تابع هیچ آرگومانی را دریافت نمیکند و برای خط( tail) عدد 0 و برای شیر(head) عدد 1 را باز گرداند.]نکته:اگر برنامه عمل پرتاب سکه را مطابق با واقعیت شبیه سازی کند،وقوع هر یک از دو روی سکه باید تقریبا برابر با نیمی از تعداد پرتاب ها باشد.[
کد:
#include<iostream>
#include<iomanip>
#include<ctime>
#include<cstdlib>
using namespace std;
int flip ();
int tail=0;//global variable
int head=0;//global variable
int main()
{
for(int i=1;i<=100;i++)
{
if (flip())
cout<< "head"<<"\n";
else
cout<<"tail"<<"\n";
}
cout << "tail"<<setw(10)<<"head"<<setw(10)<<"\n";
cout<<tail<<setw(10)<<head<<"\n";
return 0;
}
int flip(){
int value;
srand(time(0));
value=rand()%2;
if (value==0)
{tail++;
return 0;}
else
{head++;
return 1;}
}
سوال 1:برنامه رو درست نوشتم ؟دقیقا نمیدونم مشکلش چیه که یا همه رو tail میده یا همه رو head .البته برای گرفتن جواب متفاوت این دوتا باید برنامه چند بار اجرا کنیم.!
سوال 2:(امان از دست این rand ) برای تولید عدد بین 0و1 باید این دستوررو چطوری بنویسم؟
برنامه 3:
این برنامه جواب 3 تمرین توام با همدیگه هست .یعنی تو تمرین اول یه کار خواسته بود و تو تمرین های بعدی خواسته بود که اجزای دیگه ای رو به برنامه اضافه کنیم .
حالا برنامه از این قرار هس:
برنامه ای بنویسید که دانش آموزان ابتدایی را در فراگیری جدول ضرب کمک نماید. این برنامه با استفاده از تابع rand دو عدد صحییح یک رقمی تولید کرده و سوالی به صورت زیر چاپ کند:
Haw much is 6 times 7?
اگر جواب درست بود باید یه پیغام میداد اگر غلط بود یه جواب دیگه .و خواسته شده بود برنامه تعداد پاسخ های درست و نادرست رو بشماره .پس از آنکه دانش آموز 10 پاسخ را وارد کرد ،برنامه باید درصد پاسخ های درست رو محاسبه کند.اگر این درصد کمتر از 0.75 بود ، برنامه باید پیغام please ask your instructor for extra help را در خروجی چاپ کند و به کار خود پایان دهد.
کد:
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
void table( int , int , int );
int sum_tru=0;//global variable
int sum_fals=0;//global variable
int main(){
int a;//number1
int b;//number2
int c;//a*b
int i;//counter
double result=0.0;
srand(time(0));
for(i=1;i<=5;i++){
a=(rand ()%10);
b=(rand ()%10);
c=a*b;
table(a,b,c);}
cout<<"sum_tru "<<sum_tru<<" sum_fals "<<sum_fals<<"\n";
result=(((sum_tru*3)- sum_fals)/(i*3))*100;
cout<<"result "<<result<<"\n";
if (result < (75/100))
cout<<"pleas ask your instructor for extra help\n";
else
return 0;
}
void table (int a,int b,int c){
srand(time(0));
int ans;
int tru;//select answer for true answer
int fals;//select answer for false answer
cout<<"how much is "<<a<<" times "<<b<<"? ";
cin>>ans;
if (ans==c){
sum_tru++;
tru=rand()%4+1;
switch (tru){
case 1:
cout<<"\nvery good!\n";
break;
case 2:
cout<<"\nexcellent!\n";
break;
case 3:
cout<<"\nNice work!\n";
break;
case 4:
cout<<"\nKeep up the good work!\n";
break;}}
else
{
sum_fals++;
while(ans!=c){
fals=rand()%4+1;
switch (fals){
case 1:
cout<<"\nNo.pleas try again!\n";
break;
case 2:
cout<<"\nWrong.Try once more!\n";
break;
case 3:
cout<<"\nDon't give up!\n";
break;
case 4:
cout<<"\nNo.Keep trying!\n";
break;}
cin>>ans;}
cout<<"\nvery good\n\n";}
}
سوال1:چرا مقدار result فقط صفر چاپ میکنه؟؟؟