Home > Software engineering >  c test if random number is positive or negative
c test if random number is positive or negative

Time:02-13

I have school work with C and Im new to it. I have to generate 17 random numbers and then test if they are positive/negative/equal to zero. I can't seem to find a way to take the random generated number from the for loop to test it in the if/else if loop. Heeeeelp please :D (The b variable is just there from tests)

#include <ctime>
using namespace std;
int main() {

    srand(
          (unsigned) time(0)
    );

    int a;
    int b;
    int num;

    for(int a = 0; a<17; a  ) {
        cout << "Skaitlis: " << rand()% 20   -10 << "\n";

        if(b > 0){
            cout << b << " is a positive number." << endl;
        }
        else if (b == 0){
            cout << b << " is equal to zero." << endl;
        }
        else {
            cout << b << " is a negative number." << endl;
        }
   }
}

CodePudding user response:

Easy enough, first assign the value to b, so you can then compare it. The current cout just outputs it.

b = rand()% 20 - 10;
cout << "Skaitlis: " << b << "\n";

CodePudding user response:

First of all, your variable b has no value at all. In your loop, you are asking 17 times if b is greater, lesser or equal to 0, where is your problem.

You have never never assigned to b. You will fix it by adding b = rand() % 20 -10 inside your loop. Now your b has an actual value.

Also, instead of

cout << "Skaitlis: " << rand()% 20 -10 << "\n";,

change to

cout << "Skaitlis: " << b << endl;.

Also, your cout doensn't exist since it's never declared. What I want to say is that you don't have cout function in your program because cout is found in "iostream" library. You have to include "iostream" library as well, with #include <iostream> at the start of the code.

To clarify:

Your b has no value. Assign a value to b before asking if it's greater, lesser or equal to 0;

cout is not added in your program. Include "iostream" with #include <iostream>

Final code can look like:

#include <iostream> // so I can use cout << and cin >>
#include <ctime>

int main() {
  int b;
  srand(time(NULL)); // NULL is same as 0

  for (int a = 0; a < 17; a  ) {
    b = rand() % 21 - 10; // Assign a value between -10 and  10 to b

    if (b > 0) cout << b << "is greater than 0" << endl;

    else if (b < 0) cout << b << "is lower than 0" << endl;

    else cout << b << "is equal to 0" << endl;
  }

  return 0;
}

I hope this explanation helps.

CodePudding user response:

You can use:

#include <random>
void function(){
std::random_device rd; // obtain a random number from hardware
std::mt19937 gen(rd()); // seed the generator
std::uniform_int_distribution<> distr(-100, 100); // define the range
int randomNumber = distr(gen);
if(randomNumber > 0)
    // bigger than 0
else if(randomNumber == 0)
    // equals 0
else
    // less than 0
}

CodePudding user response:

I'm not sure if that's what you mean, but you can just assign the result of your random function to a variable, for example:

int rnd = rand() % 20 - 10;
cout << "Skaitlis: " << rnd << '\n';
if (rnd > 0)
    cout << rnd << " is a positive number." << endl;
else if (rnd == 0)
    cout << rnd << " is equal to zero." << endl;
else 
    cout << rnd << " is a negative number." << endl;

Also, if you are just starting programming, I don't think that's necessary to know, but keep in mind that rand() isn't really a good way to create random numbers. It's way better to use for example mt19937 (although it's a little bit more complicated). rand() function generates random numbers only up to 32767 (though it also depends on the compilator you're using) and if you're trying to get a random number in a specific range, there's also a higher chance , that the rand() function will return a smaller number.

CodePudding user response:

Consider this sample code:

#include <iostream>
#include <string>

bool is_positive(int number)
{
    if (number >= 0) return true; // Positive number or 0
    else return false; // Negative number
}

int main()
{
    std::srand(time(0));

    for (int i = 0; i < 17; i  )
    {
        int number = std::rand() % 20   -10;

        if (is_positive(number))
        {
            std::cout << number << " is positive" << std::endl;
        }
        else
        {
            std::cout << number << " is negative" << std::endl;
        }
    }
}

Here I have defined a function is_positive that returns true if the number is greater than or equal to 0 else it returns false. I have also shown a simple implementation of the function.

  •  Tags:  
  • c
  • Related