•
•
•
•
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
![]() |
•
•
Join Date: Jul 2005
Posts: 4
Reputation:
Rep Power: 0
Solved Threads: 0
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
#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
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.
(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.
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:
Not only is it easier to verify, it's also considerably faster.
#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;
} I'm a programmer. My attitude starts with arrogance, holds steady at condescension, and ends with hostility. Get used to it.
Sometimes the standard library makes life easier:
Obviously not useful since we already have an implementation, but useful if you'll need it elsewhere.
#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.
>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.
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.
![]() |
•
•
•
•
•
•
•
•
DaniWeb C Marketplace
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
- Compile time errors in C++ while generating random numbers (C++)
- C++ Random Numbers (C++)
- need help, need to generate 10 random numbers, such that their sum is less than 1 (C)
- not getting non repeating random numbers many times (C)
Other Threads in the C Forum
- Previous Thread: help needed in assigning values..
- Next Thread: Need help with programming!



Linear Mode