I want to fill an array with random integers from -10 to 10. My function looks like this:
int array(int a[], int n, int min, int max){
for(int i=0;i<n;i ){
a[i]=(rand()%min);
printf("%d ", a[i] );
}
In main I have declared "min" to -10. But it does not really work, it still prints between 0 - 9. I have tried with 1 after min, then i get 10, but still no negative integers.
CodePudding user response:
Get a random number properly:
int random( int min, int max )
{
int N = max - min 1;
int K = RAND_MAX - (RAND_MAX % N);
int n;
do n = rand(); while (n >= K);
return (n % N) min;
}
This function cannot give you random values in ranges with magnitude greater than RAND_MAX
, and RAND_MAX
is often fairly small (32,767). If you need a greater range, let us know.
Thereafter, apply the function to each element of your array:
void randomize_array( int a[], int n, int min, int max )
{
while (n--) a[n] = random( min, max );
}
Keep separate operations separate. Randomizing an array has nothing to do with printing it. Print separately:
void print_array( int a[], int n )
{
if (!n) return;
printf( "%d", a[0] );
for (int i = 1; i < n; i )
printf( " %d", a[i] );
printf( "\n" );
}
Putting it all together:
#define sizeof_array(A) (sizeof((A)) / sizeof((A)[0]))
int a[20];
randomize_array( a, sizeof_array(a), -10, 10 );
print_array( a, sizeof_array(a) );
CodePudding user response:
The number of possible number is max - min 1
, so that's what you want to mod by, giving you a number from 0 to max - min
. Then you add min
to that to give you a number from min
to max
.
a[i]=(rand() % (max-min 1) min );
CodePudding user response:
The % (modulus) operator divides two integer types and returns the remainder, which is always positive or zero. This is why no negative numbers are getting inserted. Try:
a[i] = (rand()!) - 10;
Also, make sure to return a value from your function. Perhaps int * makes more sense, if you're returning the array you generated.