Проверка генератора случайных чисел - C (СИ)
Формулировка задачи:
вот программа которая включает в себя генератор случайных чисел и "проверку случайности чисел"
она запускается потом генерирует 1000 чесел и все делал по лекционной вот она
но моя прога работает не так как лекционная может кто подскажет что исправить
#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"); }
#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"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д