i am trying to get random numbers using rand % (5 -5) and it gives division by zero error
#include <iostream>
using namespace std;
int main()
{
int A[20];
for (int i-=0 ;i<20;i++)
 A[i]= rand() % -5;
system("pause")
return 0;
}
i am trying to get random numbers using rand % (5 -5) and it gives division by zero error
#include <iostream>
using namespace std;
int main()
{
int A[20];
for (int i-=0 ;i<20;i++)
 A[i]= rand() % -5;
system("pause")
return 0;
}
 
    
    Just use std::uniform_int_distribution
Produces random integer values i, uniformly distributed on the closed interval [a, b]...
std::random_device rd;  //Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
std::uniform_int_distribution<> dis(-5, 5);
std::cout << dis(gen) << std::endl;
 
    
    rand returns :
a pseudo-random integral value between 0 and RAND_MAX (0 and RAND_MAX included).
To get a value from the range [-5, .., 5] (inclusive) you have to calculate it from the range [0, .., RAND_MAX].
In the range [-5, .., 5] there are 11 values [-5, .., -1, 0, 1, .., 5].
Starting from (and including) 0, counting 11 values, the final number is 10.
To return values [0, .., 10] from the bigger range, mod can be used. But you need in the results a 10 so a mod 11 has to be used.
Now to get a value to a range [-5, .., 5] from a range [0, .., 10], you need to subtract 5.
const int val_from_rand = rand();
const int range_0_10 = val_from_rand % 11;
const int random_val = range_0_10 - 5;
 
    
    Use the new random library
#include <random>
// Seed with a real random value, if available
std::random_device r;
std::default_random_engine e1(r()); 
// A random number between - 5 and 5
std::uniform_int_distribution<int> uniform_dist(-5, 5);
int nextRandom()
{
    return uniform_dist(e1);
}
Which is called:
int r = nextRandom();
You can also create a generalized version:
template< int low, int high >
int nextRandom()
{
    static_assert( low < high, "low must be < high" );
    // Seed with a real random value, if available
    static std::random_device         r;
    static std::default_random_engine e1( r() );
    // A random number between low and high
    static std::uniform_int_distribution< int > uniform_dist( low, high );
    return uniform_dist( e1 );
}
Which is called:
int random = nextRandom< -5, 5 >();
 
    
    You forgot ; after system("pause").
Apart from that, you were not far from the solution.
However reading the the reference you see that %5 would return numbers between 0 and 4, and %-5 does not make any sense.
You can return numbers between 0 and 10 (10 included) and then scale it down by subtracting -5:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    int a[20];
    for (int i=0; i<20; i++)
        a[i] = (rand() % 11)-5; //use %10 if you do not want 5 as apossible outcome
    system("pause");
    return 0;
}
That is the easiest way and closest to your solution.
Please do not use capital letters for variables unless they are constant.
 
    
    You can try this code
`
#include <stdlib.h>
#include <time.h>
int main()
{
   int number = 0;
   srand(time(NULL));
   do
   {
      number = rand();
   }while(number > 5);
return 0;
}
`
