1. ## Please help me on my simple program PSEUDO RANDOM NUMBERS

Code:
```#include <stdio.h>
#include <conio.h>

int main()
{
system("TITLE Pseudo Random Numbers");
system("COLOR 2");

char again;
int a,c,m,x;
int nn0,nn1,nn2,nn3,nn4,nn5,nn6,nn7,nn8,nn9,nn10,nn11,nn12,nn13,nn14,nn15,nn16,nn17,nn18,nn19,nn20;
int n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19,n20;
int b;

do
{
system("CLS");
for(b=0;b<66;b++)
{
printf("*");
}

printf("\n**********************PSEUDO*RANDOM*NUMBERS***************by:jan2\n");
for(b=0;b<66;b++)
{
printf("*");
}
printf("\n\n\t FORMULA: Xn + 1( A xn + C ) mod M with Seed Xn = X\n");

printf("\n Enter the value of A: ");
scanf("%d", &a);
printf(" Enter the value of C: ");
scanf("%d", &c);
printf(" Enter the value of M: ");
scanf("%d", &m);
printf(" Enter the value of X: ");
scanf("%d", &x);

printf("\n\tEQUATION: Xn + 1( %d xn + %d ) mod %d with Seed Xn = %d\n\n\n", a,c,m,x);

nn0 = (a*x+c)/m;
n0 = (a*x+c)-(nn0*m);

nn1 = (a*n0+c)/m;
n1 = (a*n0+c)-(nn1*m);

nn2 = (a*n1+c)/m;
n2 = (a*n1+c)-(nn2*m);

nn3 = (a*n2+c)/m;
n3 = (a*n2+c)-(nn3*m);

nn4 = (a*n3+c)/m;
n4 = (a*n3+c)-(nn4*m);

nn5 = (a*n4+c)/m;
n5 = (a*n4+c)-(nn5*m);

nn6 = (a*n5+c)/m;
n6 = (a*n5+c)-(nn6*m);

nn7 = (a*n6+c)/m;
n7 = (a*n6+c)-(nn7*m);

nn8 = (a*n7+c)/m;
n8 = (a*n7+c)-(nn8*m);

nn9 = (a*n8+c)/m;
n9 = (a*n8+c)-(nn9*m);

nn10 = (a*n9+c)/m;
n10 = (a*n9+c)-(nn10*m);

nn11 = (a*n10+c)/m;
n11 = (a*n10+c)-(nn11*m);

nn12 = (a*n11+c)/m;
n12 = (a*n11+c)-(nn12*m);

nn13 = (a*n12+c)/m;
n13 = (a*n12+c)-(nn13*m);

nn14 = (a*n13+c)/m;
n14 = (a*n13+c)-(nn14*m);

nn15 = (a*n14+c)/m;
n15 = (a*n14+c)-(nn15*m);

nn16 = (a*n15+c)/m;
n16 = (a*n15+c)-(nn16*m);

nn17 = (a*n16+c)/m;
n17 = (a*n16+c)-(nn17*m);

nn18 = (a*n17+c)/m;
n18 = (a*n17+c)-(nn18*m);

nn19 = (a*n18+c)/m;
n19 = (a*n18+c)-(nn19*m);

nn20 = (a*n19+c)/m;
n20 = (a*n19+c)-(nn20*m);

printf("\t\t n=0 x1=(%d.%d+%d)mod %d = %d\n",a,x,c,m,n0);
printf("\t\t n=1 x2=(%d.%d+%d)mod %d = %d\n",a,n0,c,m,n1);
printf("\t\t n=2 x3=(%d.%d+%d)mod %d = %d\n",a,n1,c,m,n2);
printf("\t\t n=3 x4=(%d.%d+%d)mod %d = %d\n",a,n2,c,m,n3);
printf("\t\t n=4 x5=(%d.%d+%d)mod %d = %d\n",a,n3,c,m,n4);
printf("\t\t n=5 x6=(%d.%d+%d)mod %d = %d\n",a,n4,c,m,n5);
printf("\t\t n=6 x7=(%d.%d+%d)mod %d = %d\n",a,n5,c,m,n6);
printf("\t\t n=7 x8=(%d.%d+%d)mod %d = %d\n",a,n7,c,m,n7);
printf("\t\t n=8 x9=(%d.%d+%d)mod %d = %d\n",a,n8,c,m,n8);
printf("\t\t n=9 x10=(%d.%d+%d)mod %d = %d\n",a,n9,c,m,n9);
printf("\t\t n=10 x11=(%d.%d+%d)mod %d = %d\n",a,n10,c,m,n10);
printf("\t\t n=11 x12=(%d.%d+%d)mod %d = %d\n",a,n11,c,m,n11);
printf("\t\t n=12 x13=(%d.%d+%d)mod %d = %d\n",a,n12,c,m,n12);
printf("\t\t n=13 x14=(%d.%d+%d)mod %d = %d\n",a,n13,c,m,n13);
printf("\t\t n=14 x15=(%d.%d+%d)mod %d = %d\n",a,n14,c,m,n14);
printf("\t\t n=15 x16=(%d.%d+%d)mod %d = %d\n",a,n15,c,m,n15);
printf("\t\t n=16 x17=(%d.%d+%d)mod %d = %d\n",a,n16,c,m,n16);
printf("\t\t n=17 x18=(%d.%d+%d)mod %d = %d\n",a,n17,c,m,n17);
printf("\t\t n=18 x19=(%d.%d+%d)mod %d = %d\n",a,n18,c,m,n18);
printf("\t\t n=19 x20=(%d.%d+%d)mod %d = %d\n",a,n19,c,m,n19);
printf("\t\t n=20 x21=(%d.%d+%d)mod %d = %d\n",a,n20,c,m,n20);

printf("\n\n The numbers generated are:\n %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%,d,%d,%d,%d,%d,%d,%d\n",n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19,n20);

printf("\nWould you like to back to start?? Press \"y\" if YES\n");
scanf("%s", &again);
}while (again == 'y');

return 0;
getch();

}```
What i want to happen is if the output of is repeatedly... the rest of the output will not be shown...
Ex.
n=0 x1 = ( 7.6 + 3 ) mod 4 = 1
n=1 x2 = ( 7.1 + 3 ) mod 4 = 2
n=2 x3 = ( 7.2 + 3 ) mod 4 = 1 <<<<it will stop here.. the program will stop to show the rest of the output because the output of n=0 and n=2 is the same.. so n=3,n=4 and so on will not be shown...

2. You could replace those definitions with 2 arrays and loop through them to initialize them.
eg.
Code:
```int i, n[20], nn[20];

nn[0] = (a*x+c)/m;
n[0] = (a*x+c)-(nn[0]*m);

for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}```

3. Originally Posted by User Name:
You could replace those definitions with 2 arrays and loop through them to initialize them.
eg.
Code:
```int i, n[20], nn[20];

nn[0] = (a*x+c)/m;
n[0] = (a*x+c)-(nn[0]*m);

for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}```
Wow thanks a lot for that codes .. i love you thank you )
Im still waiting to the answer in my question.. i love this forum

4. We'll take 4 steps:

1) assign a value to the final result. The number in red:
n=0 x1 = ( 7.6 + 3 ) mod 4 = 1
n=1 x2 = ( 7.1 + 3 ) mod 4 = 2
n=2 x3 = ( 7.2 + 3 ) mod 4 = 1 <<<<it will stop here.. the program will stop to show the rest of the output because the output of n=0 and n=2 is the same.. so n=3,n=4 and so on will not be shown...
And assignments always work right to left, of course.

2) do a distribution count on your data, using a small array:
Code:
```dcount[SIZE]; //set every element of dcount to zero
for(i=0;i<SIZE;i++)
dcount[i]=0;```
3) as each variable in #1 is produced (in a loop), increment it's element in dcount[], by one, like this:
dcount[Variable]++;

4) at the bottom of the loop that generates these variables in #1, you'll check the dcount[Variable] to see if it's greater than 1. If it is, then you have a duplicate value. A break statement exits your loop.

This looks like a big amount of code - but it is not. C is a pretty concise language, and it's best to keep it short, sweet, and clear.

This is a good trick to have in your programmer's bag of tricks, I've used it in many programs.

5. Originally Posted by Adak
We'll take 4 steps:

1) assign a value to the final result. The number in red:

And assignments always work right to left, of course.

2) do a distribution count on your data, using a small array:
Code:
```dcount[SIZE]; //set every element of dcount to zero
for(i=0;i<SIZE;i++)
dcount[i]=0;```
3) as each variable in #1 is produced (in a loop), increment it's element in dcount[], by one, like this:
dcount[Variable]++;

4) at the bottom of the loop that generates these variables in #1, you'll check the dcount[Variable] to see if it's greater than 1. If it is, then you have a duplicate value. A break statement exits your loop.

This looks like a big amount of code - but it is not. C is a pretty concise language, and it's best to keep it short, sweet, and clear.

This is a good trick to have in your programmer's bag of tricks, I've used it in many programs.
Thank's Sir Adak .. but would u mind if i request you to do the whole codes?? Thank you in advance.

6. Code:
```for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}```
it doesnt increment by 1.. why is it???

7. You must learn to indent.

8. Originally Posted by metaljacob
Code:
```for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}```
it doesnt increment by 1.. why is it???
Please show us the code where you are defining your variables...

9. Originally Posted by metaljacob
Code:
```for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}```
it doesnt increment by 1.. why is it???
"1" does NOT equal "i" or even "l"

Tim S.

10. I thought you were going to use rand(), MJ.

So what's your goal here? Generate 20 unique random numbers? Please post up your latest code, and a good description of just what you want to do? Also, of course, what has you stumped currently.

I see "eagle eye" Tim has been helpful - well done, Tim.

11. this is my latest codes..

Code:
```#include <stdio.h>
#include <conio.h>

int main(void)
{
system("TITLE Pseudo Random Numbers");
system("COLOR 2");

char again;
int a,c,m,x;
int i=1, n[21], nn[21];
int b;

do
{
system("CLS");
for(b=0;b<66;b++)
{
printf("*");
}

printf("\n**********************PSEUDO*RANDOM*NUMBERS***************by:jan2:@\n");
for(b=0;b<66;b++)
{
printf("*");
}
printf("\n\n\t FORMULA: Xn + 1( A xn + C ) mod M with Seed Xn = X\n");

printf("\n Enter the value of A: ");
scanf("%d", &a);
printf(" Enter the value of C: ");
scanf("%d", &c);
printf(" Enter the value of M: ");
scanf("%d", &m);
printf(" Enter the value of X: ");
scanf("%d", &x);

printf("\n\tEQUATION: Xn + 1( %d xn + %d ) mod %d with Seed Xn = %d\n\n\n", a,c,m,x);

nn[0] = (a*x+c)/m;
n[0] = (a*x+c)-(nn[0]*m);

for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}

printf("\t\t    n=0 x1=(%d.%d+%d)mod %d = %d\n",a,x,c,m,n[0]);
printf("\t\t    n=1 x2=(%d.%d+%d)mod %d = %d\n",a,n[0],c,m,n[1]);
printf("\t\t    n=2 x3=(%d.%d+%d)mod %d = %d\n",a,n[1],c,m,n[2]);
printf("\t\t    n=3 x4=(%d.%d+%d)mod %d = %d\n",a,n[2],c,m,n[3]);
printf("\t\t    n=4 x5=(%d.%d+%d)mod %d = %d\n",a,n[3],c,m,n[4]);
printf("\t\t    n=5 x6=(%d.%d+%d)mod %d = %d\n",a,n[4],c,m,n[5]);
printf("\t\t    n=6 x7=(%d.%d+%d)mod %d = %d\n",a,n[5],c,m,n[6]);
printf("\t\t    n=7 x8=(%d.%d+%d)mod %d = %d\n",a,n[6],c,m,n[7]);
printf("\t\t    n=8 x9=(%d.%d+%d)mod %d = %d\n",a,n[7],c,m,n[8]);
printf("\t\t   n=9 x10=(%d.%d+%d)mod %d = %d\n",a,n[8],c,m,n[9]);
printf("\t\t  n=10 x11=(%d.%d+%d)mod %d = %d\n",a,n[9],c,m,n[10]);
printf("\t\t  n=11 x12=(%d.%d+%d)mod %d = %d\n",a,n[10],c,m,n[11]);
printf("\t\t  n=12 x13=(%d.%d+%d)mod %d = %d\n",a,n[11],c,m,n[12]);
printf("\t\t  n=13 x14=(%d.%d+%d)mod %d = %d\n",a,n[12],c,m,n[13]);
printf("\t\t  n=14 x15=(%d.%d+%d)mod %d = %d\n",a,n[13],c,m,n[14]);
printf("\t\t  n=15 x16=(%d.%d+%d)mod %d = %d\n",a,n[14],c,m,n[15]);
printf("\t\t  n=16 x17=(%d.%d+%d)mod %d = %d\n",a,n[15],c,m,n[16]);
printf("\t\t  n=17 x18=(%d.%d+%d)mod %d = %d\n",a,n[16],c,m,n[17]);
printf("\t\t  n=18 x19=(%d.%d+%d)mod %d = %d\n",a,n[17],c,m,n[18]);
printf("\t\t  n=19 x20=(%d.%d+%d)mod %d = %d\n",a,n[18],c,m,n[19]);
printf("\t\t  n=20 x21=(%d.%d+%d)mod %d = %d\n",a,n[19],c,m,n[20]);

printf("\n\n   The numbers generated are:\n        %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%,d,%d,%d,%d,%d,%d,%d\n",n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],n[9],n[10],n[11],n[12],n[13],n[14],n[15],n[16],n[17],n[18],n[19],n[20]);

printf("\n\tWould you like to start again?? \n Enter \"y\" if YES or enter anykey to EXIT.\n");
scanf("%s", &again);
}while (again == 'y');

return 0;```
The output for n2,n3 until n20 is incorrect.. i think it doesn't increment by 1..
Code:
``` for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}```
thanks for the help..

12. Originally Posted by Adak
I thought you were going to use rand(), MJ.

So what's your goal here? Generate 20 unique random numbers? Please post up your latest code, and a good description of just what you want to do? Also, of course, what has you stumped currently.

I see "eagle eye" Tim has been helpful - well done, Tim.

Actually what i want to do is... the output will stop if the output is happened twice..

Example:

n=0( line 1 )= 2
n=1( line 2 )= 4
n=2( line 3 )= 1
n=3( line 4 )= 3
n=4( line 5 )= 7
n=5( line 6 )= 2 << it will stop here because the output here(which is "2") is the same in the output for n=0(which is in line 1)

another examples;
n=0( line 1 )= 2
n=1( line 2 )= 4
n=2( line 3 )= 12
n=3( line 4 )= 3
n=4( line 5 )= 7
n=5( line 6 )= 5
n=6( line 7 )= 10
n=7( line 8 )= 6
n=8( line 9 )= 11
n=9( line 10 )=42
n=10( line 11 )= 9
n=11( line 12 )= 2
____________

n=0( line 1 )= 4
n=1( line 2 )= 6
n=2( line 3 )= 4

I hope you understand what im trying to say.. Thank you

13. Code:
``` for(i = 1;i <= 19;i++)
{
nn[1] = (a*n[0]+c)/m;
n[1] = (a*n[0]+c)-(nn[1]*m);
}```
As was mentioned earlier, this loop looks flawed, because n[0], and nn[1], is never being changed.

Leading to no change happening in n[1].

Somewhere in the loop, you need to include a change made to your variables in one loop, which will effect the answer provided later in the loop. 99% of the time, the variable i will be a part of that change.

Do you see what I mean?

Let's get the calculation loop accurate, I can help with the "no repetitions" part, afterward.

14. Ok i did this

Code:
```for(i = 1;i <= 19;i++)
{
nn[i] = (a*n[0]+c)/m;
n[i] = (a*n[0]+c)-(nn[1]*m);
}```
still incorrect output..

15. It may take a bit to get them right. Your original equations had the answers on the far right hand side of the equation - which is (as you know), backward to what C requires. So be patient.

You are multiplying with int's (which is fine), but dividing with an int will truncate (cut off), any remainder at all. Is that OK, or do you need that remainder?

Popular pages Recent additions