vendredi 13 mars 2015

Random numbers in C aren't random

Here's the code for my program. it's supposed to get two numbers from user then generate random numbers using rand function. but when I compile it, the numbers are not random.


I also wrote this in java, and that one works perfectly.


C version:



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

int cmpfunc();

int main()
{
puts("How many numbers do you want to generate?");
int n;
scanf("%d", &n);
int numbers[n];

puts("What should be the largest number possible?");
int m, i;
scanf("%d", &m);
int result[m];

for(i=0;i<m;i++)
numbers[i] = i + 1;

for(i=0;i<n;i++)
{
srand(time(NULL));
int r = rand() % m;

result[i] = numbers[r];
numbers[r] = numbers[m - 1];
m--;

}

qsort(result, n, sizeof(int), cmpfunc); //sorting the result array

for(i=0;i<n;i++)
{
printf("%d\n", result[i]);
}

getch();
return 0;
}

int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}


Java version:



import java.util.*;

public class RandomNumberGenerator {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

System.out.println("How many numbers do you want to generate?");
int n = in.nextInt();

System.out.println("What should be the largest number possible?");
int m = in.nextInt();

int numbers[] = new int[m];
for(int i=0;i<numbers.length;i++)
numbers[i] = i + 1;

int result[] = new int[n];
for(int i=0;i<result.length;i++)
{
// make a random index between 0 and n - 1
int r = (int) (Math.random() * m );

result[i] = numbers[r];
// move the last element into the random location
numbers[r] = numbers[m - 1];
m--;
}

System.out.println("Do you want the result to be sorted? (1 for Yes, others for No)");
int ans = in.nextInt();

if(ans==1)
Arrays.sort(result);

System.out.println("Result:");
for (int r : result)
System.out.println(r);

pressAnyKeyToContinue();

}

private static void pressAnyKeyToContinue()
{
System.out.println("Press Enter to continue.");
try
{
System.in.read();
}
catch(Exception e)
{}
}

}




Aucun commentaire:

Enregistrer un commentaire