Sabtu, 06 Maret 2010

pembangkit bilangan acak

---------------------------------------------------------------------------------------------------
BAHASA PASCAL
---------------------------------------------------------------------------------------------------

program rng;

uses crt;

var
    a, b, c, d, e, f: integer;
    i: integer;
    j1, j2, r, v: real;
    u: real;

begin
    a:= 450;
    b:= 23416;
    c:= 6720;

    for i:= 1 to 1000 do
    begin
        d:= 171 * (a mod 177) - 2 * (a div 177);
        e:= 172 * (b mod 176) - 2 * (b div 176);
        f:= 173 * (c mod 178) - 68 * (c div 178);

        if (d < 0) then d:= d + 30269;

        if (e < 0) then e:= e + 30307;

        if (f < 0) then f:= f + 30323;

        u:= d / 30269 + e / 30307 + f / 30323;

        u:= u - int(u);

        write(u:0:10);
        write(' ');

        j1:= j1 + u;
        j2:= j2 + (u * u);
        r:= j1 / 1000;
        v:= (j2 / 1000) - (r * r);

        a:= d;
        b:= e;
        c:= f;
    end;

    writeln;

    writeln('Rata - rata = ', r:0:10);
    writeln('Varian = ', v:0:10);

    readln;
end.
-------------------------------------------------------------------------------------------------
BAHASA c
-------------------------------------------------------------------------------------------------

#include <conio.h>
#include <iostream.h>
#define Modlus 2147483647
#define Mult1 24112
#define Mult2 26143
#define B2E15 32768
#define B2E16 65536

long zrng[]=
{ 1973272912 /*,281629770,    20006270, 1280689831, 2096730329, 1933576050,
   913566091,      246780520,1363774876,   604901985, 1511192140, 1259851944,
   824064364,      150493284,  242708531,     75253171, 1964472944, 1202299975,
   233217322,    1911216000,  726370533,   403498145,   993232223, 1103205531,
   762430696,    1922803170,1385516923,     76271663,   413682397,   726466604,
   336157058,    1432650381,1120463904,   595778810,   877722890, 1046574445,
   68911991,      2088367019,  748545416,   622401386, 2122378830,   640690903,
   1774806513,  2132545692, 2079249579,    78130110,   852776735, 1187867272,
   1351423507,  1645973084, 1997049139,  922510944, 2043512870,   898585771,
   243649545,    1004818771,   773686062,  403188473,   372279877, 1901633463,
   498067494,    2087759558,   493157915,  597104727, 1530940798, 1814496276,
   536444882,    1663153658,   855503735,    67784357, 1432404475,   619691088,
   119025595,      880802310,   176192644,1116780070,   277854671, 1366580350,
   1142483975,  2026948561, 1053920743,  786262391, 1792203830, 1494667770,
   1923011392,  1433700034, 1244184613,1147297105,   539712780, 1545929719,
   190641742,    1645390429,   264907697,  620389253, 1502074852,   927711160,
   364849192,    2049576050,   638580085,  547070247*/ };

float rand(long stream)
{
long lowprd,hi31,hi15,low15,ovflow ;
long z ;

z=zrng[stream];
hi15=z / B2E16;
lowprd=(z - hi15 * B2E16) * Mult1;
low15=lowprd / B2E16;
hi31=hi15* Mult1 + low15;
ovflow=hi31 / B2E15;
z=((lowprd - low15 * B2E16)- Modlus) + ((hi31 - ovflow * B2E15) * B2E16) + ovflow;
if (z<0)  z= z + Modlus;

hi15=z / B2E16;
lowprd=(z - hi15 * B2E16) * Mult2;
low15=lowprd / B2E16;
hi31=hi15 * Mult2 + low15;
ovflow=hi31 / B2E15;
z=((lowprd - low15 *B2E16) - Modlus) + ((hi31 - ovflow * B2E15) * B2E16) + ovflow;
if (z<0)  z = z + Modlus;
zrng[stream] = z;
return( (2 * (z / 256) + 1)/16777216.0);
}

int main()
{
int i,n;
float u,jlh,jlh2,rata;
float varian;
cout<<"Program Pembangkit Bilangan Acak"<<endl;
cout << "Masukkan banyak bilangan acak = ";
cin>>n;
jlh=0;
jlh2=0;
cout<<"--------------------------------"<<endl;
cout<<"NO    |       Bilangan Acak     "<<endl;
cout<<"--------------------------------"<<endl;
      for (i=1;i<=n;i++)
       {
            u=rand(0);
            cout<<i<<"    "<<u<<endl;
            jlh=jlh+u;
            jlh2=jlh2+(u*u);
              }
rata=jlh/n;   
varian=(jlh2/n)-(rata*rata);
cout<<"rata-rata = "<<rata<<endl;
cout<<"Varian : "<<varian;
getch();
}


 =============================================
=   Program Pembangkit Bilangan Acak          =
=   Masukkan banyak bilangan acak = 1000      =
=   rata-rata = 0.514131                      =
=   Varian : 0.0833642                        =
 =============================================

1 komentar:

thanks for your comment..