Проверка генератора случайных чисел - C (СИ)

Узнай цену своей работы

Формулировка задачи:

вот программа которая включает в себя генератор случайных чисел и "проверку случайности чисел"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 unsigned Xi=5, m=0x5A97;
 
unsigned srand(void)
 
{
unsigned R;
Xi=(Xi*m)%256;
R=Xi >> 2;
return R;
}

 void main(void) 
 
{ int i,Test[16];
unsigned j,r;
// obnulit schetchik
for(j=0;j<16;j++) Test[j]=0;
// podschet chisel
for(i=0;i<1000;i++)
  {
 
{
   int i;
   time_t t;
   srand((unsigned) time(&t));
   printf("Десять случайных чисел в интервале от 0 до 99\n\n");
   for(i=0; i<10; i++) printf("%d\n", rand() % 100);
 
}
  // sgenerirovat chislo
  r=srand();
j=r/1024; Test[j]++;
  }
printf(" nomer chislo\n");
printf("otezok popdeniy\n");
for(j=0;j<16;j++) printf("  %2u       %3d\n",j,Test[j]);
printf("\n");
}
она запускается потом генерирует 1000 чесел и все делал по лекционной вот она
#include <stdio.h>
 unsigned Xi=5, m=0x5A97;
 
// Генератор случайных целых чисел
unsigned URandom(void)
{
unsigned R;
asm     {
    mov     AX,Xi
    mov     DX,m
    mul     DX
    mov     Xi,AX
    shr     AX,1
    shr     AX,1
    mov     R,AX
    }
return R;
}
 void main(void) { int i,Test[16];
unsigned j,r;
// Обнулить счетчики попаданий
for(j=0;j<16;j++) Test[j]=0;
// Провести подсчет чисел на отрезках
for(i=0;i<1000;i++)
  {
  // Сгенерировать число
  r=URandom();
  // Определить номер отрезка и увеличить счетчик на 1
  j=r/1024; Test[j]++;
  }
printf(" Номер     Число\n");
printf("отрезка  попаданий\n");
for(j=0;j<16;j++) printf("  %2u       %3d\n",j,Test[j]);
printf("\n");
}
но моя прога работает не так как лекционная может кто подскажет что исправить

Решение задачи: «Проверка генератора случайных чисел»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 unsigned Xi=5, m=0x5A97;
 
unsigned srand(void)
 
{
unsigned R;
Xi=(Xi*m)%256;//Xi и m заданы постоянными значениями, поэтому в этой строке Xi становится всегда равной 243
R=Xi >> 2;// R всегда будет равной 60
return R;// Итак всегда возвращаемое значение будет равным 60
}
 
 
 void main(void) 
 
{ int i,Test[16];
unsigned j,r;
// obnulit schetchik
for(j=0;j<16;j++) Test[j]=0;
// podschet chisel
for(i=0;i<1000;i++)
  {
 
{
   int i;
   time_t t;
   srand((unsigned) time(&t));
   printf("Десять случайных чисел в интервале от 0 до 99\n\n");
   for(i=0; i<10; i++) printf("%d\n", rand() % 100);
 
}
  // sgenerirovat chislo
  r=srand(); // r тысячу раз будет равной 60
j=r/1024; Test[j]++; // соответственно j тысячу раз станет равной нулю, и значит только элемент с индексом ноль в массиве Test[] тысячу раз увеличится на 1.
  }
printf(" nomer chislo\n");
printf("otezok popdeniy\n");
for(j=0;j<16;j++) printf("  %2u       %3d\n",j,Test[j]);
printf("\n");
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы