Posuvný register
Hod kockou
Program EXE
/* pripojenie potrebných hlavičkových súborov */
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
/* budeme používa? 5 - prvkový posuvný register */
#define N 5
typedef struct uzol {
int x;
struct uzol *dalsi;
} TUzol;
-----------------------------------------------------------------------------------
void vytvor_register(TUzol **z, TUzol **k)
{
TUzol *pom;
int i;
printf("\nZadaj zaciatocne hodnoty xi z mnoziny {1, 2, 3, 4, 5, 6}\n");
*z = (TUzol*)malloc(sizeof(TUzol));
printf("x0 = ");
scanf("%d", &((*z)->x));
(*z)->dalsi = NULL;
*k = *z;
for (i = 2; i <= N; i++) {
pom = (TUzol*)malloc(sizeof(TUzol));
if (i < N) {
printf("x%d = ", i-1);
scanf("%d", &(pom->x));
}
(*k)->dalsi = pom;
pom->dalsi = NULL;
*k = pom;
}
}
-----------------------------------------------------------------------------------
void posun_vlavo(TUzol **z, TUzol **k)
{
TUzol *pom;
pom = *z;
*z = (*z)->dalsi;
free((void*)pom);
pom = (TUzol*)malloc(sizeof(TUzol));
(*k)->dalsi = pom;
pom->dalsi = NULL;
*k = pom;
}
-----------------------------------------------------------------------------------
int nove_x(TUzol *z) /* rekurentný vz?ah */
{
int x = 7*z->x + z->dalsi->dalsi->dalsi->x + 991;
return ((x % 6) + 1);
}
-----------------------------------------------------------------------------------
void main(void) /* hlavný program */
{
TUzol *zac, *kon;
int pocetnost[6] = {0, 0 , 0, 0, 0, 0};
long PocetPokusov, i;
zac = kon = NULL;
clrscr();
printf("Hod hracou kockou - generator pseudonahodnych cisel\n\n");
printf("x4 = f(x0, x1, x2, x3)\n\n");
printf("Pocet pokusov: ");
scanf("%ld", &PocetPokusov);
vytvor_register(&zac, &kon);
clrscr();
/* prvý pokus */
kon->x = nove_x(zac);
printf("%d", kon->x);
pocetnost[kon->x - 1]++;
/* ostatné pokusy */
for (i = 2; i <= PocetPokusov; i++) {
posun_vlavo(&zac, &kon);
kon->x = nove_x(zac);
printf("%d", kon->x);
pocetnost[kon->x - 1]++;
}
/* výstup */
printf("\n\nRelativne pocetnosti nahodnych udalosti:\n\n");
for (i = 0; i<6; i++) {
printf("Padnutie cisla %ld ...... %8.4f %%\n", i+1, 100*(float)pocetnost[i]/PocetPokusov);
}
getch();
}
|