954,504 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Random number generation from an array in C programming

Hello friends,

Need help in generating a random number from an array.Once a number is generated, the number has to be deleted from the array so that only the remaining numbers can be generated from the array.And it should go on until all the numbers from the array are deleted.

Hope replies asap from you friends.

kishore84
Newbie Poster
12 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

Which part are you stuck on?

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

I am able to generate a random number from an array but was unable to delete the number that have already appeared once.....I was stuck at this point

kishore84
Newbie Poster
12 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

>but was unable to delete the number that have already appeared once.

http://www.daniweb.com/forums/thread38345.html

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

Show us what code you already have. It might enlighten us on the problem you are encountering.

ddanbe
Senior Poster
3,829 posts since Oct 2008
Reputation Points: 2,070
Solved Threads: 661
 

the problem is the erase command may not work in C.Need help in C coding

kishore84
Newbie Poster
12 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int pick()
{
int arr[5]={2,3,4,5,6};
int random;
srand(time(NULL));
random = arr[rand() % 5 ];
return random;
}

int main()
{
pick();
int i = 0;
while(i<5)
{
printf("random number from the array %d\n",pick());
}
getch();
}

This is code i have written and stuck up on how to delete the number that have already appeared once

kishore84
Newbie Poster
12 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

sorry its the for loop in the place of while loop

for(i=0;i<5;i++) in the place of while(i<5)

kishore84
Newbie Poster
12 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

#include #include #include #include

int pick() { int arr[5]={2,3,4,5,6}; int random; srand(time(NULL)); random = arr[rand() % 5 ]; return random; }

int main() { pick(); int i = 0; while(i<5) { printf("random number from the array %d\n",pick()); } getch(); }

This is code i have written and stuck up on how to delete the number that have already appeared once

Not 100% sure what you are trying to do and what you mean by "delete", but this code snippet might be useful: http://www.daniweb.com/code/snippet1034.html

Also, what "erase" command are you referring to in your earlier post. Here's an "erase" command from the vector library.

http://www.cplusplus.com/reference/stl/vector/erase.html

You would have to have a vector rather than an array to use it.

VernonDozier
Posting Expert
5,527 posts since Jan 2008
Reputation Points: 2,633
Solved Threads: 711
 

Vernondozier thanks for ur valuable info in the first link.Its informative.But the same functinality cannot be implemented in C as we are using namespace in here.Please help me out.

Hope reply from you asap.

kishore84
Newbie Poster
12 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

Vernondozier thanks for ur valuable info in the first link.Its informative.But the same functinality cannot be implemented in C as we are using namespace in here.Please help me out.

Hope reply from you asap.

I think you are going to have to clarify what you mean here. One, if this is C, you're in the wrong forum. Two, if this is C, namespace is a C++, not a C, concept. Regarding the first link, it'll work in C too, with some modification. You can't use iostream, namespace, or bool in C, but the logic and the arrays would be the same and have nothing to do with namespaces. You set up a boolean array (integer array with 0 or 1 as values in C), set all elements to false/unpicked, then as you pick each element, set the flag for that index from false/unpicked to true/picked in order to prevent repeats.

VernonDozier
Posting Expert
5,527 posts since Jan 2008
Reputation Points: 2,633
Solved Threads: 711
 

Vernondozier the code i have developed with your logic is below

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

int random ()
{
    srand (time (NULL));

    int picked[8], i;
    for (i = 0; i < 9; i++)
         picked[i] = 0;
    
    int array[9];  
    int value;
     
    for (i = 0; i < 9; i++)
    {
        value = rand () % 9;
        if (picked[value])
            i--;  // already picked.  for-loop increments, so decrement here
        else
        {
            array[i] = value;
            picked[value] = 1; // hasn't been picked yet.  Assign to array,
                                // flag as picked.
        }
     }
     
     // display
     for (i = 0; i < 9; i++)
        printf("Values in the array are %d\n", array[i]);   
       getch();
      return value; 
}
int main()
{
     int s;
    s = random();

    printf("value=%d", s);
    getch();
    
}


But i was stuck at the point how to delete the value in the array.The next time it has entered the loop the value that has come before should not appear once again and the loop should run until it has no values in the array.

Hoping a reply as soon as possible.

kishore84
Newbie Poster
12 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

Vernondozier the code i have developed with your logic is below

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

int random ()
{
    srand (time (NULL));

    int picked[8], i;
    for (i = 0; i < 9; i++)
         picked[i] = 0;
    
    int array[9];  
    int value;
     
    for (i = 0; i < 9; i++)
    {
        value = rand () % 9;
        if (picked[value])
            i--;  // already picked.  for-loop increments, so decrement here
        else
        {
            array[i] = value;
            picked[value] = 1; // hasn't been picked yet.  Assign to array,
                                // flag as picked.
        }
     }
     
     // display
     for (i = 0; i < 9; i++)
        printf("Values in the array are %d\n", array[i]);   
       getch();
      return value; 
}
int main()
{
     int s;
    s = random();

    printf("value=%d", s);
    getch();
    
}

But i was stuck at the point how to delete the value in the array.The next time it has entered the loop the value that has come before should not appear once again and the loop should run until it has no values in the array.

Hoping a reply as soon as possible.

Not sure what you mean by "delete". The code snippet I wrote/linked to ensures that no number is picked more than once. You could say that a number in the INTEGER array is "deleted" after it is selected by flagging it as "picked" in the BOOLEAN array, but nothing is "deleted" in the normal sense of the word.

On a separate note, you are going to have trouble here:

int picked[8], i;
    for (i = 0; i < 9; i++)
         picked[i] = 0;


When i is 8, you are assigning a value to picked[8] , which is a segmentation fault, since you only allocated storage for indexes 0 through 7.

What your code does (after you fix the segmentation fault) in your random () function is randomly populate a 9 element array with the values 0 through 8 so that each number from 0 through 8 show up once and exactly once in a random order.

Your value variable will contain array[8] at the end, so that's what be returned by the random () function. The arrays called picked and array go out of scope at the end of the random () function and are deleted automatically.

I'm not 100% sure what you are trying to do in this program and in particular, what you mean by "delete". Arrays can be resized, arrays can be deleted, but array elements are whatever is stored at a particular address, and that address is either part of the array or it isn't. Perhaps you want a container like a stack, queue, or vector where you can delete/"pop" elements, rather than an array? And again, is this C or C++?

VernonDozier
Posting Expert
5,527 posts since Jan 2008
Reputation Points: 2,633
Solved Threads: 711
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You