 
        
        Лабораторная работа №1 / Отчет
.docМинистерство Образования Российской Федерации
Уфимский Государственный Авиационный Технический Университет
Кафедра ТК
Отчет по лабораторной работе №1
по предмету «Теоретические основы автоматизации управления»
на тему: Структурно-топологические характеристики систем и их применение
Выполнил: студент
гр.Т28-320 ФИРТ
Кривошеев А.С
Проверила: Валеева Р.Г.
Уфа 2005
Цель работы
Изучение методов получения на ЭВМ равномерно распределенных псевдослучайных чисел и тестов проверки их качества.
Листинг программы:
Unit1.cpp
#include <vcl.h>
#include <stdio.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
FILE *out;
int N;
double *x_m1;
double *x_m2;
double *x_m3;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
N = StrToInt(Edit4->Text);
}
void TForm1:: NewHTMLReport(void)
{
fprintf(out, "<html>\n");
fprintf(out, "<head>\n");
fprintf(out, " <title>Генерация случайных чисел и проверка их качества</title>\n");
fprintf(out, " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\n");
fprintf(out, " <style>\n");
fprintf(out, " body { font-family: Verdana; }\n");
fprintf(out, " th { font-size: 9pt; padding: 3px; background-color: #e0e0e0; }\n");
fprintf(out, " td { font-size: 9pt; padding: 3px; }\n");
fprintf(out, " </style>\n");
fprintf(out, "</head>\n");
fprintf(out, "<body>\n");
}
void TForm1:: WriteGenResults(double *x,char *label)
{
fprintf(out, "<b><font size=3 Color = darkblue>%s</font></b>",label);
fprintf(out, ",<br><b><font size=2 Color = darkblue>Сгенеренные числа</font></b>");
fprintf(out, "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" >\n");
fprintf(out, "<tr>");
for(int i=0;i<N;i++)
{
fprintf(out, "<td>%.7f</td>",x[i]);
if(!fmodl(i+1,13)) fprintf(out, "</tr><tr>\n");
}
fprintf(out, "</tr>\n");
fprintf(out, "</table><p>");
}
double TForm1:: avq(double x,double y)
{
char x_str[256];
double fraction, integer,integer2;
strcpy(x_str,FloatToStr(x).c_str());
int x_lng = strlen(x_str) - 2;
if(fmod(x_lng,2)) x_lng++;
x_lng/=2;
double xrez = x*y*pow10(3*x_lng);
fraction = modf(xrez, &integer);
xrez = modf(integer/pow10(2*x_lng),&integer2);
return(xrez);
}
double TForm1:: DecToBin(int x)
{
int i=0,n,l;
char bin[20],arr[20];
do{
if(fmod(x,2)) bin[i] ='1';
else bin[i] = '0';
x/=2;
i++;
}while(x);
n = i;
for(l=0;l<i;l++) arr[l]=bin[--n];
arr[l] = '\0';
return(StrToFloat(arr));
}
int TForm1:: BinToDec(double x)
{
int rez=0,i=0;
modf(x,&x);
char bin[16];
strcpy(bin, FloatToStr(x).c_str());
int bin_lng = strlen(bin);
do{
rez += StrToInt(bin[bin_lng-1])*pow(2,i);
bin_lng--;i++;
}while(bin_lng);
return(rez);
}
double TForm1:: DoubleCut(double x,int g)
{
char d_arr[16];
strcpy(d_arr, FloatToStr(x).c_str());
int arr_lng = strlen(d_arr);
int cmp = arr_lng - g;
if(cmp>0)
for(int i=0;i<cmp;i++) d_arr[i] = '0';
return(StrToFloat(d_arr));
}
void TForm1::AvqMethod()
{
x_m1 = new double[N];
x_m1[0]=StrToFloat(Edit1->Text);
for(int i=0;i<N-1;i++) x_m1[i+1] = avq(x_m1[i],x_m1[i]);
WriteGenResults(x_m1,cbxAvq->Caption.c_str());
}
void TForm1::AvmMethod(void)
{
x_m2 = new double[N];
x_m2[0]=StrToFloat(Edit1->Text);
x_m2[1]=StrToFloat(Edit2->Text);
for(int i=1;i<N-1;i++) x_m2[i+1] = avq(x_m2[i],x_m2[i-1]);
WriteGenResults(x_m2,cbxAvm->Caption.c_str());
}
void TForm1::MplMethod()
{
double X0,X1;
double h=5.0,temp;
x_m3 = new double[N];
int g=8;
X0=7;
for(int i=0;i<N;i++)
{
temp=X0*h;
temp = DecToBin(temp);
X1 = DoubleCut(temp,g);
X1 = BinToDec(X1);
x_m3[i] = X1/pow(2,g);
X0=X1;
}
WriteGenResults(x_m3,cbxMpl->Caption.c_str());
}
void TForm1::RndTest(double *x)
{
int *s_ln = new int[N];
int l=0,Z=0,Zm=0;
int *z = new int[10];
double temp=0;
for(int i=0;i<N;i++) s_ln[i]=0;
for(int i=0;i<N;i++) {
if(x[i]>=0.5) s_ln[l]++;
else l++;
}
for(int t=1;t<10;t++) {
z[t]=0;
for(int k=0;k<l;k++) if(s_ln[k]==t) z[t]++;
Z+=z[t];
}
for(int l=5;l<10;l++) Zm+= z[l];
for(int l=1;l<5;l++)
temp = pow((z[l] - 9*pow10(-l)*Z),2)/(9*pow10(-l)*Z);
temp += pow((Zm - pow10(-4)*Z),2)/(pow10(-4)*Z);
double z_lim = 0.5 * (N+1 - 1.65*sqrt(N-1));
double z_pr = 0.25 * (N - 1.65*sqrt(N+1));
double l_max = 33 *(log10(N)+1);
fprintf(out, "<b><font size=2 Color = darkblue>Тест проверки \"случайности\" последовательности</b>");
fprintf(out, "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" >\n");
fprintf(out, "<tr>");
for(int i=1;i<5;i++) fprintf(out, "<th width=60>z[%d]</th>",i);
fprintf(out, "<th width=50>z[m+1]</th>");
fprintf(out, "<th width=50>Н.гр.</th>");
fprintf(out, "<th width=50>X^2</th>");
fprintf(out, "<th width=50>В.гр.</th>");
fprintf(out, "<th width=50>Z^n</th>");
fprintf(out, "<th width=50>Zп.р,Zв.р</th>");
fprintf(out, "<th width=50>l_max</th>");
fprintf(out, "</tr><tr>\n");
for(int i=1;i<5;i++) fprintf(out,"<td>%d</td>",z[i]);
fprintf(out, "<td>%d</td>",Zm);
fprintf(out, "<td width=50>0.71</td>");
fprintf(out, "<td width=50>%.2f</td>",temp);
fprintf(out, "<td width=50>9.5</td>");
fprintf(out, "<td width=50>%f</td>",z_lim);
fprintf(out, "<td width=50>%f</td>",z_pr);
fprintf(out, "<td width=50>%.f</th>",l_max);
fprintf(out, "</tr>\n");
fprintf(out, "</table><p>");
}
void TForm1:: RsprTest(double *x)
{
int *v = new int [10];
double temp=0,E=0,D=0;
for(int l=0;l<10;l++) {
v[l]=0;
for(int i=0;i<N;i++)
if(x[i]>=l*0.1 && x[i]<(l+1)*0.1) v[l]++;
}
for(int i=0;i<10;i++) temp+= pow(v[i] - 0.1*N,2)/(0.1*N);
for(int i=0;i<N;i++) E+=x[i];
double M = E/N;
for(int i=0;i<N;i++) D+= pow(x[i] - M,2);
D/=(N-1);
fprintf(out, "<b><font size=2 Color = darkblue>Проверка равномерности закона распределения</font></b>");
fprintf(out, "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" >\n");
fprintf(out, "<tr>");
for(int i=0;i<10;i++) fprintf(out, "<th >v[%d]</th>",i);
fprintf(out, "<th width=50>Н.гр.</th>");
fprintf(out, "<th width=50>X^2</th>");
fprintf(out, "<th width=50>В.гр.</th>");
fprintf(out, "<th width=50>M[x]</th>");
fprintf(out, "<th width=50>D</th>");
fprintf(out, "</tr><tr>\n");
for(int i=0;i<10;i++) fprintf(out, "<td>%d</td>",v[i]);
fprintf(out, "<td>3.32</td>");
fprintf(out, "<td>%.2f</td>",temp);
fprintf(out, "<td>16.9</td>");
fprintf(out, "<td>%f</td>",M);
fprintf(out, "<td>%f</td>",D);
fprintf(out, "</tr>\n");
fprintf(out, "</table><p>");
}
void TForm1:: KorrTest(double *x)
{
double tmp1=0,tmp2=0,tmp3=0;
for(int i=0;i<N;i++) {
tmp1+=(i+1)*x[i];
tmp2+=x[i];
tmp3+=pow(x[i],2);
}
double p = ((tmp1/N) - ((N+1)*tmp2)/(2*N))/(sqrt((tmp3/N - pow(tmp2/N,2))*(N*N-1)/12));
double p_max = 1.95 * (1 - p*p)/sqrt(N);
fprintf(out, "<b><font size=2 Color = darkblue>Проверка независимости последовательности</font></b>>");
fprintf(out, "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" >\n");
fprintf(out, "<tr>");
fprintf(out, "<th width=60>P(x)</th>");
fprintf(out, "<th width=50>Zb</th>");
fprintf(out, "<th width=50>Pmax</th>");
fprintf(out, "</tr><tr>\n");
fprintf(out, "<td>%f</td>",p);
fprintf(out, "<td>1.95</td>");
fprintf(out, "<td>%f</td>",p_max);
fprintf(out, "</tr>\n");
fprintf(out, "</table><p>");
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
out = fopen("rezults.htm", "w");
NewHTMLReport();
if(cbxAvq->Checked) {
AvqMethod();
if(cbxRnd->Checked) RndTest(x_m1);
if(cbxRspr->Checked) RsprTest(x_m1);
if(cbxKorr->Checked) KorrTest(x_m1);
}
if(cbxAvm->Checked) {
AvmMethod();
if(cbxRnd->Checked) RndTest(x_m2);
if(cbxRspr->Checked) RsprTest(x_m2);
if(cbxKorr->Checked) KorrTest(x_m2);
}
if(cbxMpl->Checked) {
MplMethod();
if(cbxRnd->Checked) RndTest(x_m3);
if(cbxRspr->Checked) RsprTest(x_m3);
if(cbxKorr->Checked) KorrTest(x_m3);
}
fcloseall();
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
Работа программы

Сгенеренный HTML файл
Метод серединных квадратов, Сгенеренные числа
| 0.1234000 | 0.5227000 | 0.3215000 | 0.3362000 | 0.3030000 | 0.0000001 | 0.0000025 | 0.0006397 | 
| 0.9214599 | 0.6872359 | 0.1710043 | 0.5769443 | 0.5838413 | 0.7537627 | 0.6172278 | 0.8130530 | 
| 0.7457671 | 0.4332707 | 0.3892622 | 0.9581565 | 0.6389938 | 0.8907208 | 0.2596598 | 0.4676849 | 
| 0.2948070 | 0.0594262 | 0.9440768 | 0.5319149 | 0.0004212 | 0.3717396 | 0.2215495 | 0.1582113 | 
| 0.5770195 | 0.1417493 | 0.7236597 | 0.4240614 | 0.4836686 | 0.8341734 | 0.1471933 | 0.7567410 | 
| 0.0142147 | 0.7327912 | 0.2192093 | 0.6946289 | 0.5178409 | 0.2655870 | 0.7843045 | 0.4203531 | 
| 0.6013081 | 0.8956415 | 0.8007302 | 0.2135354 | 0.7212040 | 0.3356370 | 0.7908672 | 0.1882928 | 
| 0.4663150 | 0.8607641 | 0.2716872 | 0.7475952 | 0.6441515 | 0.6299798 | 0.3034648 | 0.8477442 | 
| 0.2955691 | 0.8166568 | 0.4626670 | 0.9707062 | 0.6755358 | 0.4080270 | 0.3940094 | 0.8700543 | 
| 0.1570649 | 0.2749878 | 0.9430291 | 0.4667294 | 0.9106939 | 0.1587732 | 0.3901175 | 0.2318165 | 
| 0.7141128 | 0.2688505 | 0.6246591 | 0.3145635 | 0.0110248 | 0.5950931 | 0.1212565 | 0.4252300 | 
| 0.3487808 | 0.1012212 | 0.5689203 | 0.6749655 | 0.2283973 | 0.4518182 | 0.6240863 | 0.4863240 | 
| 0.6660019 | 0.6683607 | 0.8864249 | 0.6779048 | 0.9413496 | 0.5648063 | 0.9941856 | 0.8843830 | 
| 0.0990664 | 0.5846938 | 0.5206841 | 0.0467552 | 0.2408311 | 0.0219869 | 0.3767101 | 0.1218507 | 
| 0.8339348 | 0.9102937 | 0.0055582 | 0.0033664 | 0.7956553 | 0.6089449 | 0.6442068 | 0.8405783 | 
| 0.0615804 | 0.9906012 | 0.0413523 | 0.9169955 | 0.2793115 | 0.9278210 | 0.4279730 | 0.8871878 | 
| 0.1048603 | 0.9979723 | 
 | 
 | 
 | 
 | 
 | 
 | 
Тест проверки "случайности" последовательности
| z[1] | z[2] | z[3] | z[4] | z[m+1] | Н.гр. | X^2 | В.гр. | Z^n | Zп.р,Zв.р | l_max | 
| 23 | 7 | 3 | 1 | 2 | 0.71 | 1136.01 | 9.5 | 56.129801 | 27.778722 | 103 | 
Проверка равномерности закона распределения
| v[0] | v[1] | v[2] | v[3] | v[4] | v[5] | v[6] | v[7] | v[8] | v[9] | Н.гр. | X^2 | В.гр. | M[x] | D | 
| 14 | 12 | 14 | 12 | 13 | 11 | 16 | 11 | 14 | 13 | 3.32 | 1.69 | 16.9 | 0.497798 | 0.088411 | 
Проверка независимости последовательности>
| P(x) | Zb | Pmax | 
| 0.089466 | 1.95 | 0.169657 | 
Метод середины произведения, Сгенеренные числа
| 0.1234000 | 0.9876500 | 0.8760100 | 0.6499994 | 0.6971641 | 0.9567455 | 0.2615959 | 0.1692747 | 
| 0.4365219 | 0.2842928 | 0.4484211 | 0.2819252 | 0.7020452 | 0.4909000 | 0.2467882 | 0.1713305 | 
| 0.7035445 | 0.7849619 | 0.7939964 | 0.2023476 | 0.9461152 | 0.0615897 | 0.0727433 | 0.3140718 | 
| 0.7429672 | 0.0710851 | 0.0477639 | 0.1037785 | 0.8519762 | 0.8794458 | 0.3621682 | 0.9571070 | 
| 0.0569339 | 0.0481381 | 0.1146974 | 0.9687534 | 0.3074315 | 0.5471730 | 0.5171299 | 0.5490421 | 
| 0.1176226 | 0.0228225 | 0.5990394 | 0.0050620 | 0.3527632 | 0.6776337 | 0.5432593 | 0.4176235 | 
| 0.4156700 | 0.2416108 | 0.2458315 | 0.2970577 | 0.3582657 | 0.6744748 | 0.3890897 | 0.0672114 | 
| 0.8736710 | 0.3048280 | 0.3473562 | 0.8518473 | 0.9269937 | 0.7847285 | 0.1731151 | 0.2293062 | 
| 0.6188408 | 0.3916318 | 0.2537476 | 0.4045722 | 0.2877349 | 0.1251715 | 0.7824017 | 0.5481121 | 
| 0.9452895 | 0.1077583 | 0.8934378 | 0.9064664 | 0.4116035 | 0.2629024 | 0.7945906 | 0.0172758 | 
| 0.4376557 | 0.8687301 | 0.5632382 | 0.9104583 | 0.6348606 | 0.2417358 | 0.9774491 | 0.7346028 | 
| 0.7941681 | 0.2425697 | 0.2596228 | 0.7133029 | 0.3660246 | 0.7762699 | 0.8232870 | 0.4740549 | 
| 0.7598936 | 0.0316955 | 0.2404292 | 0.3390440 | 0.8854304 | 0.4168000 | 0.0782847 | 0.6405997 | 
| 0.7634648 | 0.0780755 | 0.7709590 | 0.2173158 | 0.6579842 | 0.9673403 | 0.0158319 | 0.7687863 | 
| 0.9872901 | 0.0124579 | 0.3880823 | 0.7976023 | 0.2848310 | 0.6182847 | 0.6067636 | 0.0424254 | 
| 0.0680826 | 0.0444237 | 0.8268103 | 0.1609007 | 0.6073164 | 0.9205633 | 0.4672345 | 0.0429020 | 
| 0.5067964 | 0.9100854 | 
 | 
 | 
 | 
 | 
 | 
 | 
Тест проверки "случайности" последовательности
| z[1] | z[2] | z[3] | z[4] | z[m+1] | Н.гр. | X^2 | В.гр. | Z^n | Zп.р,Zв.р | l_max | 
| 16 | 9 | 5 | 1 | 1 | 0.71 | 343.25 | 9.5 | 56.129801 | 27.778722 | 103 | 
Проверка равномерности закона распределения
| v[0] | v[1] | v[2] | v[3] | v[4] | v[5] | v[6] | v[7] | v[8] | v[9] | Н.гр. | X^2 | В.гр. | M[x] | D | 
| 19 | 10 | 18 | 12 | 11 | 8 | 11 | 17 | 10 | 14 | 3.32 | 10.00 | 16.9 | 0.478464 | 0.094537 | 
Проверка независимости последовательности>
| P(x) | Zb | Pmax | 
| 0.046586 | 1.95 | 0.170655 | 
Мультипликативный метод, Сгенеренные числа
| 0.1367188 | 0.6835938 | 0.4179688 | 0.0898438 | 0.4492188 | 0.2460938 | 0.2304688 | 0.1523438 | 
| 0.7617188 | 0.8085938 | 0.0429688 | 0.2148438 | 0.0742188 | 0.3710938 | 0.8554688 | 0.2773438 | 
| 0.3867188 | 0.9335938 | 0.6679688 | 0.3398438 | 0.6992188 | 0.4960938 | 0.4804688 | 0.4023438 | 
| 0.0117188 | 0.0585938 | 0.2929688 | 0.4648438 | 0.3242188 | 0.6210938 | 0.1054688 | 0.5273438 | 
| 0.6367188 | 0.1835938 | 0.9179688 | 0.5898438 | 0.9492188 | 0.7460938 | 0.7304688 | 0.6523438 | 
| 0.2617188 | 0.3085938 | 0.5429688 | 0.7148438 | 0.5742188 | 0.8710938 | 0.3554688 | 0.7773438 | 
| 0.8867188 | 0.4335938 | 0.1679688 | 0.8398438 | 0.1992188 | 0.9960938 | 0.9804688 | 0.9023438 | 
| 0.5117188 | 0.5585938 | 0.7929688 | 0.9648438 | 0.8242188 | 0.1210938 | 0.6054688 | 0.0273438 | 
| 0.1367188 | 0.6835938 | 0.4179688 | 0.0898438 | 0.4492188 | 0.2460938 | 0.2304688 | 0.1523438 | 
| 0.7617188 | 0.8085938 | 0.0429688 | 0.2148438 | 0.0742188 | 0.3710938 | 0.8554688 | 0.2773438 | 
| 0.3867188 | 0.9335938 | 0.6679688 | 0.3398438 | 0.6992188 | 0.4960938 | 0.4804688 | 0.4023438 | 
| 0.0117188 | 0.0585938 | 0.2929688 | 0.4648438 | 0.3242188 | 0.6210938 | 0.1054688 | 0.5273438 | 
| 0.6367188 | 0.1835938 | 0.9179688 | 0.5898438 | 0.9492188 | 0.7460938 | 0.7304688 | 0.6523438 | 
| 0.2617188 | 0.3085938 | 0.5429688 | 0.7148438 | 0.5742188 | 0.8710938 | 0.3554688 | 0.7773438 | 
| 0.8867188 | 0.4335938 | 0.1679688 | 0.8398438 | 0.1992188 | 0.9960938 | 0.9804688 | 0.9023438 | 
| 0.5117188 | 0.5585938 | 0.7929688 | 0.9648438 | 0.8242188 | 0.1210938 | 0.6054688 | 0.0273438 | 
| 0.1367188 | 0.6835938 | 
 | 
 | 
 | 
 | 
 | 
 | 
Тест проверки "случайности" последовательности
| z[1] | z[2] | z[3] | z[4] | z[m+1] | Н.гр. | X^2 | В.гр. | Z^n | Zп.р,Zв.р | l_max | 
| 12 | 8 | 0 | 2 | 4 | 0.71 | 6312.81 | 9.5 | 56.129801 | 27.778722 | 103 | 
Проверка равномерности закона распределения
| v[0] | v[1] | v[2] | v[3] | v[4] | v[5] | v[6] | v[7] | v[8] | v[9] | Н.гр. | X^2 | В.гр. | M[x] | D | 
| 12 | 15 | 12 | 12 | 14 | 12 | 15 | 12 | 12 | 14 | 3.32 | 1.23 | 16.9 | 0.502464 | 0.083961 | 
Проверка независимости последовательности>
| P(x) | Zb | Pmax | 
| 0.148262 | 1.95 | 0.167267 | 
Вывод:
