# Thread: programming with random numbers

1. ## programming with random numbers

hi
i am writting a prgrame to do the following
generate a random numbers in a given range
count the occurrences of each number and return the total in arry 'a'

find the maximum integer in the arry 'a' of size 's'
find the minimum integer in the arry 'a' of size 's'

and using function to find max and min

this is what i did so far to generate the random numbers and but them in an arry 'a' and the range of the random numbers is less than 20 ,, i include a code to run the programme by pressing r and exit by pressing e ,,,,, but it is not working i dunno why i cant fix the errors if someone can help please

my code ::::

#include <stdlib.h>
#include <stdio.h>
#include <DBOS\LIB.h>
#include <CLIB.h>
int main(void)
{
int range,num,a;

int k;

printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf(" * Please pres r to run or press e to exit *\n");
printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
k=getch();

/*run by pressing r and exit by pressing e*/

if (k=='r' || k=='R'){ /*accept both lower and upper case */
do{
printf("Enter the range size(max=20)");
scanf("%d",&range);
}
while (range<0 || range>20); /*move to next statment only if the input in range 1 to 20*/

printf("How many numbers do you wish to generate?");
scanf("%d",&num); }
printf("Expected: %d\n", int (num / range));

if (k=='e' || k=='E'){
exit(0);}

date_time_seed();
int my_rand(int range){
int r ;
r=1+rand()%range;
}
void pic(int *a,int range,int num){
int i,t;
t=0;

for(i=0; i<(num); i++)
a[i]=0;
for(i=0; i<num; i++)
{
t=my_rand(range);
a[t]=a[t]+1;

}

}

return(0);
}

2. I fixed up the code and made it so it fills an array 'a' with the random numbers.
Code:
```#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int range,num;
int a[300];

int k;

printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf(" * Please pres r to run or press e to exit *\n");
printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
k=getchar();

/*run by pressing r and exit by pressing e*/

if (k=='r' || k=='R'){ /*accept both lower and upper case */
do{
printf("Enter the range size(max=20)");
scanf("%d",&range);
}
while (range<0 || range>20); /*move to next statment only if the input in range 1 to 20*/

printf("How many numbers do you wish to generate?");
scanf("%d",&num);
}
printf("Expected: %d\n", (int) (num / range));

if (k=='e' || k=='E'){
exit(0);}
pic(a,range,num);
}

int my_rand(int range){
int r ;
r=1+rand()%range;
return r;
}

void pic(int *a,int range,int num){
int i,t;
t=0;

for(i=0; i<(num); i++){
a[i]=0;
for(i=0; i<num; i++)
{
t=my_rand(range);
a[t]=a[t]+1;

}
}
}```
It still needs the rest of the things you mentioned, but try and show some code first.

- Sean

3. thanx alot i will try and do the rest 2moro and post it if i had any problem

thanx again

4. sorry but i just tried to run the programme and i got an error message :

function pic has not been declard in the line
pic(a,range,num);

i am using a compiler called Salford Plato

5. You could try putting a prototype for the function at the top before main. Like this:
Code:
```void pic(int*,int,int);
int my_rand(int);```
- Sean

6. many thanx to sean345 here is my full code but again i
cant fix the error it will be great help if sean345 or someone else can help me with it

code:

#include <stdlib.h>
#include <stdio.h>
#include <clib.h>
#include <DBOS\LIB.h>

void pic(int*,int,int);
int my_rand(int);
int find_max(int *a,int s);
int find_min(int *a,int s);
int main(void)
{
int range,num;
int a[300];

int k,s;

printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf(" * Please pres r to run or press e to exit *\n");
printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
k=getch();

/*run by pressing r and exit by pressing e*/

if (k=='r' || k=='R'){ /*accept both lower and upper case */
do{
printf("Enter the range size(max=20)");
scanf("%d",&range);
}
while (range<0 || range>20); /*move to next statment only if the input in range 1 to 20*/

printf("How many numbers do you wish to generate?");
scanf("%d",&num);
}
printf("Max count:%d\t",find_max(a,s));
printf("Minimum cont:%d\t",find_min(a,s));
printf("Expected: %d\n", (int) (num / range));

if (k=='e' || k=='E'){
exit(0);}
pic(a,range,num);
}

int my_rand(int range){
int r ;
r=1+rand()%range;
return r;
}

void pic(int *a,int range,int num){
int i,t;
t=0;

for(i=0; i<(num); i++){
a[i]=0;
for(i=0; i<num; i++)
{
t=my_rand(range);
a[t]=a[t]+1;

}

}
}
/* function to find the max*/
int find_max(int *a,int s){

int i,max;
max=0;
for(i=0;i<s;i++)
{
if(a[i]>max)
max=a[i];
}
return max

}

/*function to find the min*/
int find_min(int *a,int s){
int i,min;
min=*a;
for(i=0;i<s;i++)
if(!(a[i]>min))
min=a[i];
return min;
}

7. >return max
.... has a semi-colon missing.

Please use code tags in future.

What error messages are you getting?

8. thanx i fixed the error but still has a warning says ( s has been used but never given a value) i know that s should be the size of the arry 'a' but i dunno how can i assign a value for s . also when i run my programe i got a small error window saying
access violation the instraction to address 00401216 attampted to read from location 03713000

here is my code

Code:
```#include <stdlib.h>
#include <stdio.h>
#include <clib.h>
#include <DBOS\LIB.h>

void pic(int*,int,int);
int my_rand(int);
int find_max(int *a,int s);
int find_min(int *a,int s);
int main(void)
{
int range,num;
int a[300];

int k,s;

printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf(" * Please pres r to run or press e to exit *\n");
printf(" *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
k=getch();

/*run by pressing r and exit by pressing e*/

if (k=='r' || k=='R'){ /*accept both lower and upper case */
do{
printf("Enter the range size(max=20)");
scanf("%d",&range);
}
while (range<0 || range>20); /*move to next statment only if the input in range 1 to 20*/

printf("How many numbers do you wish to generate?");
scanf("%d",&num);
}
printf("Max count:%d\t",find_max(a,s));
printf("Minimum cont:%d\t",find_min(a,s));
printf("Expected: %d\n", (int) (num / range));

if (k=='e' || k=='E')
exit(1);

pic(a,range,num);
}

int my_rand(int range){
int r ;
date_time_seed();
r=1+rand()%range;
return r;
}

void pic(int *a,int range,int num){
int i,t;
t=0;

for(i=0; i<(num); i++){
a[i]=0;
for(i=0; i<num; i++)
{
t=my_rand(range);
a[t]=a[t]+1;

}

}
}
/* function to find the max*/
int find_max(int *a,int s){

int i,max;
max=0;
for(i=0;i<s;i++)
{
if(a[i]>max)
max=a[i];
}
return max;

}

/*function to find the min*/
int find_min(int *a,int s){
int i,min;
min=*a;

for(i=0;i<s;i++)
if(!(a[i]>min))
min=a[i];
return min;
}```

9. This is what I get
Code:
```1 - Function should return a value in function main
2 - Call to function 'date_time_seed' with no prototype in function my_rand
3 - 't' is assigned a value that is never used in function pic```
1 - Put a return (0); statement at the end of main().

2 - Where is function date_time_seed();

3 - is a warning only, because you did "t = 0;" without using t before assigning it a new value.

I had to change the header files, I don't have clib.h or DBOS/LIB.h, and I had to use conio.h for getch().

When I run it
Code:
``` *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
* Please pres r to run or press e to exit *
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Enter the range size(max=20)20
How many numbers do you wish to generate?10
Max count:0     Minimum cont:0  Expected: 0```
Without reading all your code, I am not sure what output you are expecting, but all zeros seems a bit strange to me! I'll leave that for you to debug once you get it compiled.

10. the output shold be the number of times that the maximum occures and the number of times that the minimum occures in the random numbers generated but i am getting zeros all the time ??

can anyone help

11. It looks to me that your function pic(a, range, num); is used to setup the random numbers in the array?

First off, the array is uninitialised when you start to use it, which is wrong. You are doing
>a[t] = a[t] + 1;
when you have no idea what a[t] has in it. Arrays of this nature do not start life set to zero.
I presume you are trying to zero everything here
>for(i=0; i<(num); i++){
> a[i]=0;
but because of the loop structure, it isn't working.

Now when you call this function:
>printf("Max count:%d\t", find_max(a, s));
where did s come from? it hasn't got a value either. I presume you meant to pass num?

Have a go at fixing, post again when you have more problems.

12. i tried to do this
>
Code:
` find_max(a,num)`
using num not s this time

also
Code:
```  for(i=0; i<(num); i++){
a[i]=0;}
for(i=0; i<num; i++)
{
t=my_rand(range);
a[t]=a[i]+1;

}```

so that each element in my arry a[t] is the zero element incremented by one each time the number occure in the random set

but still gettint the zero output as before

13. Ok, I think we wanted
Code:
`find_max(a,range)`
(Got confused between num and range!)

Also, if you add an int i to the top of main() and add this to end of main()
Code:
`for (i = 0; i < range; i++) printf ("%d:%d\n", i, a[i]);`
you will get to see what's in the array. That'll help you understand whats going on.

Code:
```Enter the range size(max=20)15
How many numbers do you wish to generate?99
Max count:11    Minimum cont:0  Expected: 6
0:0  <--- This will always be so, because of your code.
1:3
2:10
3:5
4:4
5:9
6:9
7:9
8:4
9:8
10:5
11:11
12:4
13:9
14:4```

14. my code dosent even generate the random numbers coz this is what i got when i added the line
Code:
`for (i = 0; i < range; i++) printf ("%d:%d\n", i, a[i]);`
0:0
1:0
2:0
3:0
4:0
..

.all zero arry i dunno whats wrong ............