PDA

View Full Version : سوال: چطوری این برنامه رو تکمیل کنم؟! (ویژوال ++C)



OMID CPP
یک شنبه 09 فروردین 1388, 12:01 عصر
سلام.
ممنون میشم راهنماییم کنید.

دوستان من یک برنامه میخوام بنویسیم که 3 قسمت داره و هر دفعه کاملتر از دفعه قبل میشه در واقع قسمت اول رو تکمیل میکنه و من خودم قسمت اولش رو خیلی فکر کردم و نوشتم ولی در ادامش که باید اون 2 قسمت رو (2 و 3) بهش اضافه کنم مشکل دارم و گیر میکنم خواستم از شما دوستان عزیز یک راهنمایی بگیرم و بنده رو کمک کنید. ممنون میشم.

و اما سوال ها:

قسمت 1 : برنامه ای بنویسید که به یک دانش آموز ابتدائی در فراگیری عمل ضرب کمک کند.
از rand برای تولید دو عدد صحیح یک رقمی مثبت استفاده کنید. برنامه باید سوالی مانند این را نمایش دهد ? How much is 6 times 7

بعد دانش آموز پاسخ را تایپ می کند. برنامه باید پاسخ دانش آموز را بررسی نماید. اگر پاسخ او صحیح بود عبارت Very good را چاپ نماید ، سپس سوال دیگری را مطرح نماید. اگر پاسخ او اشتباه بود ، عبارت No.Please try again را چاپ نماید ، سپس به دانش آموز این امکان را بدهید که همان سوال را مکررا پاسخ دهد تا در بینهایت پاسخ صحیح را وارد نماید.

قسمت 2: برنامه بالا را به گونه ای تغییر دهید که برای هر پاسخ درست و هر پاسخ نادرست ، توضیحات متنوعی را در خروجی چاپ کند ، به این شکل:
واکنش های صورت گرفته در مقابل یک پاسخ صحیح :


Very good
Excellent
Nice work
Keep up the good work

واکنش های صورت گرفته در مقابل یک پاسخ غلط:

No. Please try again
Wrong. Try once more
Don't give up
No. keep trying


از تولید کننده اعداد تصادفی برای گزینش یک عدد از 1 تا 4 برای انتخاب یک واکنش مناسب در مقابل هر پاسخ استفاده کنید. از یک دستور switch برای نمایش واکنش ها استفاده کنید.

قسمت 3: برنامه فوق را به گونه ای تغییر دهید که تعداد پاسخ های صحیح و غلط تایپ شده توسط دانش آموز را بشمارد. پس از آن که دانش آموز 10 پاسخ را تایپ نمود ، برنامه شما باید درصد پاسخ های صحیح را محاسبه کند. اگر این درصد کمتر از 75 درصد بود ، برنامه باید عبارت Please ask your instructor for extra help را چاپ کرده و خاتمه یابد.

اینم از برنامه ای که با توجه به قسمت 1 نوشتم ولی در تکمیلش واقعا مشکل دارم ، هر کاری میکنم درست نمیشه.



#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<cstdlib>
using std::rand;
using std::srand;
#include<ctime>
using std::time;
void getRandNums(int &n,int &m);
int main() {
int first,second,answer;
srand(time(0));
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
while (cin>>answer) {
for (int i=0; answer!=first*second; i++) {

cout<<"No.Please try again.\n";

cout<<first<<"*"<<second<<"=";
cin>>answer;
}
if (answer==first*second)

cout<<"Very Good!\n";
else
cout<<"Let's try something else\n";
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
}
return 0;
}
void getRandNums(int &n,int &m) {
n=rand()%10;
m=rand()%10;
}

SamaPic
دوشنبه 10 فروردین 1388, 10:34 صبح
با سلام خدمت دوست عزیز.
من منظور شما را درست متوجه نشدم.
این یک برنامه است که شاید به کار شما بیاید.این را من مدتی پیش نوشتم و فکر کنم پاسخ یکی از سوالات شما باشد.
کمی بهتر توضیح دهید تا بهتر بشود کمک کرد.



#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

using namespace System;
using namespace std;

void main()
{
int t=1;
char ans;
while (t)
{
time_t t;
srand((unsigned)time(&t));
int i,j,x,n,T,F;
char ch;
cout<<endl<<"You Enter 20 charecter"<<endl;
j=20;
for (i=0;i<=j;i++)
{
x=(rand()%94);
x+=32;
ch=x;
cout<<endl<<ch<<" Please Enter Charecter : ";
n=getche();
if (x==n)
T++;
else
F++;
}
cout<<endl<<"Number of Charecter true : "<<T<<endl<<"Number of Charecter false : "<<F;
int r=0;
L3:
cout<<endl<<"Do you want to countinue (Y/N) ?";

L1:
if (r==3)
{
cout<<endl<<"I can't answer you Please any key to exit.";
_getch();
return;
}

cin>>ans;
switch (ans)
{
case ('Y'):
t=1;
break;
case ('N'):
t=0;
break;
case ('y'):
t=1;
break;
case ('n'):
t=0;
break;
default:
cout<<endl<<"Charecter entery not avaibile.Please Enter agin : ";
r++;
goto L1;
}
}

_getch();
}



خدانگهدار.

OMID CPP
دوشنبه 10 فروردین 1388, 11:53 صبح
دوست عزیز ممنون از توجهتون.

در مورد برنامه که فکر میکنم توضیحات کامل رو در پست 1 دادم و خیلی واضح هستش ، من فقط توی قسمت 2 و 3 مشکل دارم و میخوام قسمت 2 و 3 رو به برنامه ای که نوشتم اضافه کنم که یکم گیر کردم.

راستی این برنامه من به زبان ویژوال ++C هستش.

بازم ممنون از شما. اگر در تکمیل برنامه هم راهنماییم کنید ممنون میشم.

SamaPic
دوشنبه 10 فروردین 1388, 15:23 عصر
با سلام خدمت دوست عزیز.
2.منظور شما از پاسخ های متنوع چیست؟
آیا منظور شما این است که مثلا 4 پاسخ داشته باشد و بطور رندوم یکی را چاپ کند (برای اینکار باید از یک سویچ استفاده کنید و سپس راند درصد 4 بگذارید که خود شما گفته اید) ولی اگر منظور شما چیز دیگری است که باید بیشتر توضیح دهید.


3.این را که خود شما پاسخ داده اید .کاری ندارد که .من تعجب می کنم شما که برنامه ی اول را نوشتید این یکی را هم با کمی فکر و نگاه کردن به برنامه ی من می توانید بنویسید.برنامه ی من هم همچین چیزی دارد.:متعجب:

خدانگهدار.

nimvb123456
دوشنبه 10 فروردین 1388, 15:57 عصر
سلام دوستان
این کد پایینی فکر کنم بتونه کمکتون کنه.
تو این کد دانش آموز سطح خودش رو(ضعیف'متوسط'قوی) مشخص میکنه بعد برنامه ازش میخواد که نوع سوالاتشو انتخاب کنه
دانش آموز هروقت خواست که از برنامه خارج شه باید عدد 1- رو وارد کنه.
موفق باشید.

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
//---------------------------------
int num(int);
int numOfSum(int);
int numOfDivide(int);
int numOfSubTract(int);
int AnswerMessageNumber(void);
int FalseAnswerMessageNumber(void);
//---------------------------------
int main(void)
{
//Declare variables
int num1,Unum,AnswerMsg,FalseAnswerMsg,RightAnswerCoun ter=0,FalseAnswerCounter=0;
int AllAnswerCounter=0;
int DarsadeRightAnswer=0;
int DarsadeFalseAnswer=0;
int Rate,TypeOfExam,RandFunction;
char ch='n';
bool Answer=false,Continue=true,WantToCancel=false;
//Finishing The Declaration
cout<<" If You Want To Exit Program PLease Enter -1.\n\n";
cout<<"Please Enter Your Skill Level.";
cout<<"\n1.Beginner.";
cout<<"\n2.Junior.";
cout<<"\n3.Master."<<endl;
cin>>Rate;
cout<<"Please Enter Type Of The Exam That You Want To Take.";
cout<<"\n1.Product Of Numbers.";
cout<<"\n2.Sum Of The Numbers.";
cout<<"\n3.SubTract Of The Numbers.";
cout<<"\n4.Divide Of The Numbers.";
cout<<"\n5.I Want To Do Exam That Have All Of These Exams!"<<endl;
cin>>TypeOfExam;
if(TypeOfExam==4)
{
cout<<"\n***WARNING***";
cout<<"You Must Only Enter The Rational Numer Of The 2 Numbers.\n";
}
srand(time(0));
do
{
RandFunction=(rand()%4)+1;
switch(TypeOfExam)
{
case 1:
num1=num(Rate);
break;
case 2:
num1=numOfSum(Rate);
break;
case 3:
num1=numOfSubTract(Rate);
break;
case 4:
num1=numOfDivide(Rate);
break;
case 5:
switch(RandFunction)
{
case 1:
num1=num(Rate);
break;
case 2:
num1=numOfSum(Rate);
break;
case 3:
num1=numOfSubTract(Rate);
break;
case 4:
num1=numOfDivide(Rate);
break;
}
}
while(Answer==false)
{
cin>>Unum;
AllAnswerCounter++;
if(Unum==num1)
{
AnswerMsg=AnswerMessageNumber();
cout<<"That's Right.";
switch(AnswerMsg)
{
case 1:
cout<<"Very Good!\n";
break;
case 2:
cout<<"Excellent!\n";
break;
case 3:
cout<<"Nice Work!\n";
break;
case 4:
cout<<"Keep Up The Good Work!\n";
break;
}
Answer=true;
RightAnswerCounter++;
}
else if(Unum==-1)
{
cout<<"Please Answer The Question First And Then Program Prompt You.\n";
WantToCancel=true;
AllAnswerCounter--;
}
else
{
FalseAnswerMsg=FalseAnswerMessageNumber();
switch(FalseAnswerMsg)
{
case 1:
cout<<"No,Please Try Again.\n";
break;
case 2:
cout<<"Wrong.Try Once More.\n";
break;
case 3:
cout<<"Don't Give Up!\n";
break;
case 4:
cout<<"No,Keep Trying.\n";
break;
}
FalseAnswerCounter++;
}
}
Answer=false;
if(WantToCancel==true)
{
cout<<"Do You Really Want To Exit(y/n)?";
cin>>ch;
if(ch=='y')
{
Continue=false;
}
else
{
WantToCancel=false;
}
}
}while(Continue);
cout<<"All Answers"<<"\t\t"<<"Rigth Answers"<<"\t\t"<<"False Answers\n";
cout<<"-----------"<<"\t\t"<<"-------------"<<"\t\t"<<"-------------\n";
cout<<AllAnswerCounter<<"\t\t\t"<<RightAnswerCounter<<"\t\t\t"<<FalseAnswerCounter;
DarsadeRightAnswer=(RightAnswerCounter*100)/AllAnswerCounter;
DarsadeFalseAnswer=(FalseAnswerCounter*100)/AllAnswerCounter;
cout<<"\n-----------"<<"\t\t"<<"-------------"<<"\t\t"<<"-------------\n";
cout<<"Percent Of Right Answer Is "<<DarsadeRightAnswer<<"%"<<endl;
cout<<"Percent Of False Answer Is "<<DarsadeFalseAnswer<<"%"<<endl;
cout<<"\nGood Luck";
getch();
return 0;
}
//-----------------------------------
//Generate The Two Random Number And Return They Product To Main Function
int num(int Rate)
{
srand(time(0));
int Fnum,Snum,ProductOfNum;
switch(Rate)
{
case 1:
Fnum=rand()%10;
Snum=rand()%10;
ProductOfNum=Fnum*Snum;
break;
case 2:
Fnum=(rand()%11)+10;
Snum=(rand()%11)+10;
ProductOfNum=Fnum*Snum;
break;
case 3:
Fnum=(rand()%901)+100;
Snum=(rand()%901)+100;
ProductOfNum=Fnum*Snum;
break;
}
cout<<Fnum<<" * "<<Snum<<"=???\n";
return ProductOfNum;
}
//-----------------------------------
//Return Sum Of 2 Random Number
int numOfSum(int Rate)
{
srand(time(0));
int Fnum,Lnum,SumOfNum;
switch(Rate)
{
case 1:
Fnum=(rand()%10);
Lnum=(rand()%10);
SumOfNum=Fnum+Lnum;
break;
case 2:
Fnum=(rand()%11)+10;
Lnum=(rand()%11)+10;
SumOfNum=Fnum+Lnum;
break;
case 3:
Fnum=(rand()%901)+100;
Lnum=(rand()%901)+100;
SumOfNum=Fnum+Lnum;
break;
}
cout<<Fnum<<" + "<<Lnum<<"=???\n";
return SumOfNum;
}
//-----------------------------------
//Return SubTract Of 2 Random Number
int numOfSubTract(int Rate)
{
srand(time(0));
int Fnum,Lnum,SubTractOfNum,Temp;
switch(Rate)
{
case 1:
Fnum=(rand()%10);
Lnum=(rand()%10);
if(Fnum<Lnum)
{
Temp=Lnum;
Lnum=Fnum;
Fnum=Temp;
}
SubTractOfNum=Fnum-Lnum;
break;
case 2:
Fnum=(rand()%11)+10;
Lnum=(rand()%11)+10;
if(Fnum<Lnum)
{
Temp=Lnum;
Lnum=Fnum;
Fnum=Temp;
}
SubTractOfNum=Fnum-Lnum;
break;
case 3:
Fnum=(rand()%901)+100;
Lnum=(rand()%901)+100;
if(Fnum<Lnum)
{
Temp=Lnum;
Lnum=Fnum;
Fnum=Temp;
}
SubTractOfNum=Fnum-Lnum;
break;
}
cout<<Fnum<<" - "<<Lnum<<"=???\n";
return SubTractOfNum;
}
//-----------------------------------
//Divide 2 Rand Number And Return it To The Main Function
int numOfDivide(int Rate)
{
srand(time(0));
int Fnum,Lnum,DivideOfNum,Temp;
switch(Rate)
{
case 1:
Fnum=(rand()%10);
Lnum=(rand()%10);
if(Lnum==0)
{
Temp=Lnum;
Lnum=Fnum;
Fnum=Temp;
}
DivideOfNum=Fnum/Lnum;
break;
case 2:
Fnum=(rand()%11)+10;
Lnum=(rand()%11)+10;
if(Lnum==0)
{
Temp=Lnum;
Lnum=Fnum;
Fnum=Temp;
}
DivideOfNum=Fnum/Lnum;
break;
case 3:
Fnum=(rand()%901)+100;
Lnum=(rand()%901)+100;
if(Lnum==0)
{
Temp=Lnum;
Lnum=Fnum;
Fnum=Temp;
}
DivideOfNum=Fnum/Lnum;
break;
}
cout<<Fnum<<" / "<<Lnum<<"=???\n";
return DivideOfNum;
}
//-----------------------------------
//Generate Random Number Between 1 And 4
int AnswerMessageNumber(void)
{
int MsgNum=(rand()%4)+1;
return MsgNum;
}
//-----------------------------------
//Generate Random Number Between 1 And 4
int FalseAnswerMessageNumber(void)
{
int MsgNum=(rand()%4)+1;
return MsgNum;
}

OMID CPP
دوشنبه 10 فروردین 1388, 19:00 عصر
دوستان عزیز ممنون از راهنمایی هاتون.

همونطور که دوست عزیزمون هم گفتن من میخوام با استفاده از switch بنویسم ولی بازم نشد.

حالا من برنامه ای که با switch نوشتم و قسمت دوم رو بهش اضافه کردم براتون میزارم اگر براتون ممکنه کامپایل بکنید و راهنماییم کنید ببینم مشکل از کجاست و چطوری باید درستش کنم ، ممنون میشم:



#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<cstdlib>
using std::rand;
using std::srand;
#include<ctime>
using std::time;
void getRandNums(int &n,int &m);
void getRandNums2(int &a);
int main() {
int first,second,answer,third;
srand(time(0));
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
while (cin>>answer) {
for (int i=0; answer!=first*second; i++) {
getRandNums2(third)
switch(third) {
case 1:
cout<<"No.Please try again.\n";
break;
case 2:
cout<<"Wrong. Try once more.\n";
break;
case 3:
cout<<"Don't give up!\n";
break;
case 4:
cout<<"No.keep trying.\n";
}
cout<<first<<"*"<<second<<"=";
cin>>answer;
if (answer==first*second) {
switch(third) {
case 1:
cout<<"Very Good!\n";
break;
case 2:
cout<<"Excellent!\n";
break;
case 3:
cout<<"Nice work!\n";
break;
case 4:
cout<<"Keep up the good work!\n";
}
}
else {
cout<<"Let's try something else\n";
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
}
return 0;
}
void getRandNums(int &n,int &m) {
n=rand()%10;
m=rand()%10;
}
void getRandNums2(int &a) {
a=1+rand()%4;
}

MOHSEN8000
دوشنبه 10 فروردین 1388, 20:44 عصر
با سلام خدمت شما دوست عزیز



#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<cstdlib>
using std::rand;
using std::srand;
#include<ctime>
using std::time;
void getRandNums(int &n,int &m);
void getRandNums2(int &a);

int main() {
int first,second,answer,third;
srand(time(0));
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
while (cin>>answer) {
for (int i=0; answer!=first*second; i++) {
getRandNums2(third);
switch(third) {

case 1:
cout<<"No.Please try again.\n";
break;

case 2:
cout<<"Wrong. Try once more.\n";
break;

case 3:
cout<<"Don't give up!\n";
break;

case 4:
cout<<"No.keep trying.\n";
break;
}

cout<<first<<"*"<<second<<"=";
cin>>answer;
if (answer==first*second) {
switch(third) {

case 1:
cout<<"Very Good!\n";
break;

case 2:
cout<<"Excellent!\n";
break;

case 3:
cout<<"Nice work!\n";
break;

case 4:
cout<<"Keep up the good work!\n";
break;
}
}
else {
cout<<"Let's try something else\n";
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
}
}
}
return 0;
}
void getRandNums(int &n,int &m){
n=rand()%10;
m=rand()%10;
}


این سوال فکر کنم ماله فصل 3 یا 4 کتاب دایتل هست. منظورش این نبوده که این قدر از Ref و این چیزا استفاده کنی. درسته که بهتره برنامه هاتو به صورت ساخت یافته و functional بنویسی ولی عزیزم دیگه وقتی اومدن مثلا یه تابع مثل rand رو تعریف کردن ، دیگه این که تو بیایی یه تابع استفاده کنی که توش فقط rand رو فراخونی کنی و این قدر هم از Ref و این چیزا استفاده کنی ، هیچ سودی برات نداره. برنامت یه چند تا مشکل کوچک مثل آکلاد و ... داشت برات درستش کردم. اگه اصرار داری که از getRandNums و getRandNums2 استفاده کنی ، بگو برات در مورد آرگومان هاش و چگونگی فراخوانی اون ها توضیح بدم ، والا اگه فقط هدفت نوشتن برنامه هست ، توی تابع main سه بار rand رو فراخوانی کن و سه تا متغیرت رو مقدار دهی کن. و اون دو تا تابعی که بهت گفتم رو پاک کن چون بدتر خودتو گیج می کنی. برای استفاده از کلا اشاره گر ها و ... باید به قدر کافی مهارت توی استفاده از توابع عادی و ... داشته باشی اون وقت بری سراغ اون کارا وگرنه نمی تونی استفاده اون ها و مزیت هاشونو بفهمی.
ضمنا تابع getRandNums2 رو هم که تعریف کردی ، اصلا ننوشتیش ولی ازش استفاده هم کردی تو برنامه!!!!

موفق باشی

OMID CPP
دوشنبه 10 فروردین 1388, 21:12 عصر
آقا محسن عزیز خیلی خیلی لطف کردید ، ممنون از پاسختون.

ولی محسن جان درسته که نوشتن یک تابع برای فقط تولید عدد تصادفی کار خیلی جالبی نیست ، اما اون تابع اولیه که مخصوص تولید 2 عدد هستش رو اگر ممکنه میخوام در برنامه باشه. (چون خود استادمون گفت که با تابع بنویسم و این مثال اصلا در بخش تابع کتاب قرار داره!)

در مورد تابع دوم که نوشته بودم ، برای اینکه اون عبارت های مختلف رو با دستور switch چاپ کنه درست میگید اگر تابع نباشه بهتره.

برنامه ای که شما درست کرده بودید هم من کامپایل کردم نمیدونم چرا باز ارور میده.

از شما یه خواهش دارم که اگر براتون ممکنه و وقتش رو دارید در تکمیل قسمت 1 این برنامه که خودم نوشته بودم و میخوام قسمت 2 و 3 رو بهش اضافه کنم کمکم کنید و بنده رو راهنمایی کنید که بتونم به بهترین شکل تکمیلش کنم.

از توجهتون خیلی خیلی ممنونم.

MOHSEN8000
دوشنبه 10 فروردین 1388, 21:37 عصر
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<cstdlib>
using std::rand;
using std::srand;
#include<ctime>
using std::time;
void getRandNums(int &n,int &m);
int main() {
int first,second,answer , c;
srand(time(0));
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
while (cin>>answer) {
for (int i=0; answer!=first*second; i++) {
c = ( rand()%4 ) + 1;
switch( c ) {
case 1:
cout<<"No.Please try again.\n";
break;
case 2:
cout<<"Wrong. Try once more.\n";
break;
case 3:
cout<<"Don't give up!\n";
break;
case 4:
cout<<"No.keep trying.\n";
break;
}

cout<<first<<"*"<<second<<"=";
cin>>answer;
}

if (answer==first*second){
c = ( rand()%4 ) + 1;
switch( c ) {
case 1:
cout<<"Very Good!\n";
break;
case 2:
cout<<"Excellent!\n";
break;
case 3:
cout<<"Nice work!\n";
break;
case 4:
cout<<"Keep up the good work!\n";
break;
}
}

else
cout<<"Let's try something else\n";
getRandNums(first,second);
cout<<first<<"*"<<second<<"=";
}
return 0;
}
void getRandNums(int &n,int &m) {
n=rand()%10;
m=rand()%10;
}




قسمت سوم رو خودت بنویس اگه جاییشو مشکل داشتی کدتو بگذار تو سایت تا کمکت کنیم.

OMID CPP
دوشنبه 10 فروردین 1388, 22:01 عصر
محسن جان خیلی لطف کردید ، زحمت کشیدی.

چشم قسمت سوم هم سعی میکنم ، مینویسم اگر جایی گیر کردم بازم مزاحم شما میشم.

تشکر میکنم از توجهتون...