Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Why no random values ?

  1. Oct 9, 2004 #1
    Thanks for the help
    I have another problem,

    int foo(){
    int n=rand()%2
    switch(n){
    case 0:
    h=1;
    break;
    case 1;
    h=0;
    }
    return h;
    }

    void mat(int a[][5]){
    for(i=0;i<5;i++)
    for(j=0;j<5;j++)
    a[j]=foo();
    }


    And in main function I can only print out all 0's or all 1's. There are no random values at all ? Why no random values ?
    If you can, please explain this in assembly code and in the above C code also, I'm very grateful.
    Thanks a lot
     
  2. jcsd
  3. Oct 9, 2004 #2
    Please help me, Okay ?
    Thank you...
     
  4. Oct 9, 2004 #3

    dduardo

    User Avatar
    Staff Emeritus

    Huh? rand()%2 will return 0 and 1 and this value is stored in n. The case statment is just inverting the n variable. You can actually invert the bit in one line by doing:

    n = !n

    I would add an srand() in the foo function to seed the rand number generator.
     
    Last edited: Oct 9, 2004
  5. Oct 9, 2004 #4
    No it didn't work. Can you check it out again for me ?
    Thanks
     
  6. Oct 10, 2004 #5
    What exactly are u looking for ?
    first of all as dduardo say,
    use srand()
    secondly,
    a call to randomize() is also needed....

    Also u say that u are getting only 1's and 0's ....
    if u don't know then that's what exactly ur program is programmed to do .....
    note that ur foo is returning 1 and 0's only.

    -- AI
     
  7. Oct 10, 2004 #6
    What you posted had a syntax error. That means that is wasn't cut and pasted directly from the source of the program that you ran. Since we're not seeing the actual code, it makes it hard to know what the problem is.
     
  8. Oct 10, 2004 #7
    I code my program in another computer, not this one.

    int foo(){
    srand(usignged(time(NULL));
    int n=rand()%2;
    switch(n){
    case 0:
    h=1;
    break;
    case 1:
    h=0;
    }
    return h;
    }

    void mat(int a[][5]){
    for(int i=0;i<5;i++)
    for(int j=0;j<5;j++)
    a[j]=foo();
    }

    In my main function

    int main(){
    int a[3][5];
    mat(a);
    for(int i=0;i<5;i++)
    for(int j=0;j<5;j++)
    std::cout<<a[j]<<" ";
    return 0;
    }

    I can only see alll 1's, I execute again and only see all 0's.

    What happens ?
    Thanks.
     
  9. Oct 10, 2004 #8
    Each time you generate a random number you are resetting the random number generator with the same seed. The seed is the integer value of the number of seconds since the start of 1970, and won't change during the running of the program.
     
  10. Oct 10, 2004 #9
    Thank you, chronon.
    But does that also mean I have to rewrite the program ? Do you know how to change the program above to make that random number generator work for me ?
     
  11. Oct 11, 2004 #10
    Example code.
    Code (Text):

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

    int main(void)
    {
      int i;

      /* seed */
      srandomdev();

      /* Get 10 random numbers (either 1 or 0) */
      for(i = 0; i < 10; i++)
        printf("%d\n", (int)random()%2 );

      return 0;
    }
    If you want the numbers to vary between 0 and 1, you could so something like:
    (changes in bold)
    Code (Text):

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

    int main(void)
    {
      int i;

      /* seed */
      srandomdev();

      /* Get 10 random numbers */
      for(i = 0; i < 10; i++)
        printf("[b]%f[/b]\n", [b](float)random()/RAND_MAX[/b] );

      return 0;
    }
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Why no random values ?
  1. Random Email Question (Replies: 3)

Loading...