# programming with random numbers

• 05-19-2002
xstudent
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);
}
• 05-19-2002
sean345
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
• 05-19-2002
xstudent
thanx alot i will try and do the rest 2moro and post it if i had any problem

thanx again
• 05-19-2002
xstudent
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
• 05-19-2002
sean345
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
• 05-20-2002
xstudent
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;
}

• 05-20-2002
Hammer
>return max
.... has a semi-colon missing.

Please use code tags in future.

What error messages are you getting?
• 05-20-2002
xstudent
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;           }```
• 05-20-2002
Hammer
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.
• 05-20-2002
xstudent
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
• 05-20-2002
Hammer
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.
• 05-20-2002
xstudent
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 :(
• 05-20-2002
Hammer
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```
• 05-21-2002
xstudent
:( 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 ............