jay
jay

Reputation: 99

What should I fix to create random calculation in this code?

I wanted to fix my code to create random operation here, what should I fix here?

    #include <stdio.h>

    int main()
    {
        int x,y,z,a;
        char o;
        while(1)
        {
            printf("give your three numbers: ");
            scanf("%d %d %d",&x,&y,&z);
            printf("(%d*%d-%d) what is the correct among following answers? \n 1. %d\n 2. %d\n 3. %d\n ", 
            x,y,z,x*y-z,x*y*z,x-y*z);
            printf("what is answer? \n: ");
            scanf("%d",&a);
            if(a == 1)
            {
                printf("you are right!\n");
            }
            else
            {
                printf("you are false!\n\n");
            }

            getchar();
            printf("Would you like to exit programm? (y/n) : ");
            scanf("%c",&o);
            if (o=='Y' || o=='y')
            {
                break;
            }
            else if(o=='N' || o=='n')
            {
                continue;
            }
            else
            {
                printf("Wrong input!!!!");
            }
            return 0;
        }
    }

What I mean is I want to try change operation such as * + - randomly when I run code, and also along with this question, the answer should be changed... thank you!

Upvotes: 3

Views: 109

Answers (2)

Kalana
Kalana

Reputation: 6143

Your question is mainly focused on shuffling the answers. By studying from couple of sites I have found an solution for this. This is little bit difficult but studying the code few times you can get it

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void randomize(int arr[], int n) {
    srand(time(NULL));
    int i;
    for(i = n-1; i > 0; i--) {
        int j = rand() % (i+1);
        swap(&arr[i], &arr[j]);
    }
}

int main() {
    int x,y,z,a;
    int i;
    int a1, a2, a3;
    int arr[] = {1, 2, 3};
    int n = sizeof(arr)/ sizeof(arr[0]);

    printf("give your three numbers: ");
    scanf("%d %d %d",&x,&y,&z);

    a1 = x*y-z;
    a2 = x*y*z;
    a3 = x-y*z;

    printf("Before shuffle = %d %d %d\n\n", a1, a2, a3);

    char answers[] = {a1, a2, a3};

    printf("(%d*%d-%d)what is the correct among following answers?\n", x, y, z);

    randomize (arr, n);
    for(i=0; i<n; i++) {
        int index = arr[i];
        printf("%2d - %d\n", i+1, answers[index]);
    }

    return 0;
}

This is the outputs

First time run

give your three numbers: 2
2
2
Before shuffle = 2 8 -2

(2*2-2)what is the correct among following answers?
 1 - 8
 2 - 2
 3 - -2

Second time run

give your three numbers: 2
2
2
Before shuffle = 2 8 -2

(2*2-2)what is the correct among following answers?
 1 - -2
 2 - 8
 3 - 2

You can try this multiple times. Every time answers will be shuffle. This is the Source I have referred.

Upvotes: 1

JimmyHu
JimmyHu

Reputation: 519

Just provide one of examples here. There are many kinds way to implement. In the random operation generation part. I would like to write a random number generator function, which purpose is to generate the given range of random number.

int gen_random(int min, int max)
{
    srand( time(NULL) );
    return rand() % (max - min + 1) + min;
}

In order to represent four operator (+, -, *, /), The number (let's call the operation number) 1 to 4 is used for represent four operator respectively. The calculation function map the operation number to operation and get the result.

int calculation(int number1, int number2, int op)
{
    switch(op)
    {
        case 1:
            return number1 + number2;
        case 2:
            return number1 - number2;
        case 3:
            return number1 * number2;
        case 4:
            return number1 / number2;
    }
}

You can use the gen_random and the calculation function above to change operation randomly. The usage of the gen_random and the calculation function is something like:

    int op = gen_random(1, 4);        //  Generate operation randomly
    printf("%d\n", op);
    printf("%d\n", calculation(x, y, op));        //  Pass x, y, and operation number into calculation function to get answer

Upvotes: 0

Related Questions