2013-08-20 14 views
7

Đây là sản phẩm tôi đang cố gắng để đạt được:Sử dụng rand() để tạo ra các số trong bảng phân chia

(var1 ngẫu nhiên)/(var2 ngẫu nhiên) =
Ans: (var ans)

Tôi đã thực hiện cộng, trừ và nhân nhưng tôi gặp khó khăn khi chia vì tôi cần số chia và số chia chính xác để chia để không khó trả lời.

Ví dụ:

40/5 =
Ans: 8

không phải là một điều này:

7/5 =
ans: giá trị float

Đây là mã của tôi:

int x,num,num2,ans,quo,score=0; 
time_t t; 

clrscr(); 

for(x=0;x<5;x++) 
{ 
    srand((unsigned) time(&t)); 
    num2=rand()%10; 
    quo=num/num2; 

    if(num2==1) 
    { 
     num=rand()%9; 
    } 
    else if(num2==2) 
    { 
     num=2 + (2 * rand()) %18; //this should return a value divisible by 2(ranges 0-18) 
    } 
    else if(num2==3) 
    { 
     num=rand()% //this should return a value divisible by 3 only (ranges 0-27) 
    } 
    else if(num2==4) 
    { 
     num=rand()% //this should return a value divisible by 4 only (ranges 0-36) 
    } 
    else if(num2==5) 
    { 
     num=rand()% //this should return a value divisible by 5 only (ranges 0-45) 
    } 
    else if(num2==6) 
    { 
     num=rand()% //this should return a value divisible by 6 only (ranges 0-54) 
    } 
    else if(num2==7) 
    { 
     num=rand()% //this should return a value divisible by 7 only (ranges 0-63) 
    } 
    else if(num2==8) 
    { 
     num=rand()% //this should return a value divisible by 8 only (ranges 0-72) 
    } 
    else if(num2==9) 
    { 
     num=rand()% //this should return a value divisible by 9 only (ranges 0-81) 
    } 
    else if(num2==10) 
    { 
     num=rand()% //this should return a value divisible by 10 only (ranges 0-90) 
    } 
    else 
    { 
    } 

    gotoxy(30,14); 
    printf("\n%d/%d = ",num,num2); 
    printf("\nAns: "); 
    scanf("%d",&ans); 
} 
+5

Run nó ngược? Cho x/y = z, tạo y và z, sau đó giải cho x. – VolatileDream

+1

Vâng, đôi khi một chút cảm giác thông thường có thể đi một chặng đường dài. – dtech

Trả lời

2

bạn có thể làm

float quo=(float)num/num2; 
printf("%f\n", quo); 

và in kết quả chính xác

nếu bạn muốn số ngẫu nhiên mà divideable giữa bản thân sau đó bạn muốn cái gì khác.

bạn cũng không khởi tạo num trước num/num2; và bạn không kiểm tra nếu num2 bằng 0 để bạn có thể bị ném.

finaaly bạn có thể làm một cái gì đó giống như

num2=rand()%10; 
num=rand(); 
while((float)num/num2 != (float)(num/num2)) 
    num=rand(); 
int quo=num/num2; 

nếu absolutly có thể chỉ chấp nhận các cặp vợ chồng divideable

+0

ok .. Tôi sẽ thử nó .. cảm ơn bạn rất nhiều – Hasmine

0

Thử nghiệm với các nhà điều hành mô đun:

int test, result; 

test = 6%3; //test == 0 
if(test == 0) result = 6/3; //test passes, assignment made 

test = 7%3; //test == 1 
if(test == 0) result = 7/3; //test fails, assignment not made 

Điều này sẽ đảm bảo tỷ lệ dẫn đến giá trị số nguyên.

Cũng, một chức năng máy phát điện ngẫu nhiên có thể làm cho mọi việc dễ dàng hơn, một cái gì đó như thế này:

int randGenerator(int min, int max) 
{ 
    int random, trying; 

    trying = 1;   
    while(trying) 
    { 
     srand(clock()); 
     random = (rand()/32767.0)*(max+1); 
     (random >= min) ? (trying = 0) : (trying = 1); 
    } 
    return random; 
} 
+0

cảm ơn bạn .. cảm ơn bạn .. tôi sẽ thử nó – Hasmine

+0

Chào mừng bạn, Bạn cũng có thể thử viết một trình tạo ngẫu nhiên đơn giản, nói với max và min sẽ nhổ ra các số nguyên. Tôi sẽ chỉnh sửa câu trả lời của tôi ở trên với chức năng này. – ryyker

3

Bạn chỉ có thể chọn một kết quả ngẫu nhiên và tạo ra các câu hỏi

denominator = 14 (randomly chosen) 
result = 21 (randomly chosen) 

numerator = denominator * result 

bạn sau đó hỏi số tiền là numerator/denominator

+0

oh i see .. ok tôi sẽ cố gắng sửa đổi .. cảm ơn bạn – Hasmine

1

Đơn giản chỉ cần:

num2=rand()%9+1; 
quo=rand()%10; 
num = quo * num2; 
printf("\n%d/%d = ",num,num2); 

Ngoài ra, bạn nên di chuyển các cuộc gọi srand()-trước của vòng lặp. Nếu không, nếu ai đó trả lời câu hỏi quá nhanh, họ sẽ lại nhận được câu hỏi tương tự.

0

Câu trả lời:

int x, num, num2, ans, quo, score = 0; time_t t;

clrscr(); srand ((chưa ký) thời gian (& t));

for(x=0;x<5;x++) 
{ 
num2=rand()%9; 

if(num2==1) 
{ 
srand((unsigned) time(&t)); 
num=rand()%9; 
} 
else if(num2==2) 
{ 
srand((unsigned) time(&t)); 
num=(rand()%9+1)*2; 
} 
else if(num2==3) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*3; 
} 
else if(num2==4) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*4; 
} 
else if(num2==5) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*5; 
} 
else if(num2==6) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*6; 
} 
else if(num2==7) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*7; 
} 
else if(num2==8) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*8; 
} 
else if(num2==9) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*9; 
} 
else if(num2==10) 
{ 
    srand((unsigned) time(&t)); 
    num=(rand()%9+1)*10; 
} 
else 
{ 
    clrscr(); 
    printf(""); 
} 

quo=num/num2; 
clrscr(); 
gotoxy(30,14); 
printf("\n%d/%d = ",num,num2); 
printf("\nAns: "); 
scanf("%d",&ans); 

}

Các vấn đề liên quan