User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C section within the Software Development category of DaniWeb, a massive community of 426,446 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 2,239 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C advertiser: Programming Forums
Views: 3249 | Replies: 5
Reply
Join Date: Jul 2005
Posts: 4
Reputation: xshashiy is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
xshashiy xshashiy is offline Offline
Newbie Poster

problem in generating non repeated random numbers

  #1  
Jul 4th, 2005
i want to generate non repeated random numbers from 0 to 156. here is the code for the purpose. but when i try to generate the random numbers more then 1 time by using a for loop, the same pattern on numbers repeats. how to solve this problem ?

#include "sys/types.h"
#include "stdio.h"
#include "time.h"
#define MAX 2000
#define N 156
main( )
{
int array[BIG_SIZE],r;
int n = 0; int count_check,count_gen ,i;
time_t t1;
(void) time(&t1);
srand48((long) t1);
for (count_gen=0;count_gen<=MAX;count_gen++)
{
r = lrand48()%N;
for ( count_check = 0; count_check < n; count_check++ )
{
if ( r == array[count_check] )break;
}
if ( count_check == n ) array[n++] = r;
}
for(i=0;i<N;i++)
printf("%d\n",array[i]);
}


regards
xshashiy
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Feb 2005
Posts: 462
Reputation: winbatch is on a distinguished road 
Rep Power: 4
Solved Threads: 18
winbatch's Avatar
winbatch winbatch is offline Offline
Posting Pro in Training

Re: problem in generating non repeated random numbers

  #2  
Jul 4th, 2005
You are using time for purposes of generating the random number, but only once before the loop. You should probably reset the time each part of the loop.

(void) time(&t1);

(Though you may continue to have the same problem as I think time only holds seconds... )

Also, what you posted won't compile - BIG_SIZE is not defined, etc.
Reply With Quote  
Join Date: Sep 2004
Posts: 6,324
Reputation: Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of 
Rep Power: 28
Solved Threads: 458
Super Moderator
Narue's Avatar
Narue Narue is offline Offline
Expert Meanie

Re: problem in generating non repeated random numbers

  #3  
Jul 4th, 2005
Since you already know the range of the sequence, and it's small, and you want non-repeating values, a random shuffle would be a better option than trying to check whether each new number was already generated or not:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 157

int main ( void )
{
  int seq[N];
  int i;

  srand ( (unsigned)time ( NULL ) );

  /* Initialize seq to an ordered range */
  for ( i = 0; i < N; i++ )
    seq[i] = i;

  /* Random shuffle */
  for ( i = 0; i < N - 1; i++ ) {
    int r = ( rand() % ( N - i ) + 1 );
    int save = seq[i];
    seq[i] = seq[i + r];
    seq[i + r] = save;
  }

  /* Test the sequence */
  for ( i = 0; i < N; i++ )
    printf ( "%d ", seq[i] );

  return 0;
}
Not only is it easier to verify, it's also considerably faster.
I'm a programmer. My attitude starts with arrogance, holds steady at condescension, and ends with hostility. Get used to it.
Reply With Quote  
Join Date: Jun 2005
Location: Troy
Posts: 1,277
Reputation: Rashakil Fol has a spectacular aura about Rashakil Fol has a spectacular aura about 
Rep Power: 7
Solved Threads: 36
Colleague
Rashakil Fol's Avatar
Rashakil Fol Rashakil Fol is offline Offline
Salamander Man

Re: problem in generating non repeated random numbers

  #4  
Jul 4th, 2005
Sometimes the standard library makes life easier:

#include <algorithm>
/* Random shuffle */
std::random_shuffle(seq, seq + N);

Obviously not useful since we already have an implementation, but useful if you'll need it elsewhere.
Reply With Quote  
Join Date: Sep 2004
Posts: 6,324
Reputation: Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of 
Rep Power: 28
Solved Threads: 458
Super Moderator
Narue's Avatar
Narue Narue is offline Offline
Expert Meanie

Re: problem in generating non repeated random numbers

  #5  
Jul 5th, 2005
>Sometimes the standard library makes life easier
Indeed. But since the original problem was clearly written in C, the C++ standard library is hardly useful. You might argue that C compiles as C++, so it's not a problem, but since you would be wrong, I recommend that you don't bother, and save yourself the intellectual manbeating I'll give you if you try.
I'm a programmer. My attitude starts with arrogance, holds steady at condescension, and ends with hostility. Get used to it.
Reply With Quote  
Join Date: Jun 2005
Location: Troy
Posts: 1,277
Reputation: Rashakil Fol has a spectacular aura about Rashakil Fol has a spectacular aura about 
Rep Power: 7
Solved Threads: 36
Colleague
Rashakil Fol's Avatar
Rashakil Fol Rashakil Fol is offline Offline
Salamander Man

Re: problem in generating non repeated random numbers

  #6  
Jul 5th, 2005
Oh man, what was I thinking?

Never mind then. :o

(It's not a question of whether C can compile to C++; C++ simply can't be compiled as C! ;-) )
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb C Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the C Forum

All times are GMT -4. The time now is 3:02 pm.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC