Программирование с использованием генератора случайных чисел
program kursovik;
uses crt,graph;
var j,help,i,work,button:byte;
exitmenu,exitprog:boolean;
actionprog,action:char;
grmode,grdriver:integer;
dat:array[1..3]of real;
posle:array[1..100] of real;
xcor,ycor:array[1..3]of byte;
mat,disp:array[1..10]of real;
mat0,disp0,dispmax,matmax,x:real;
{*****DrawHelp*****}
procedure drawhelp(help:byte);
begin
textcolor(black);
textbackground(white);
gotoxy(1,25);
case help of
0: write(' F1-Парам. F2-Посл-ти F3-Гистогр. F10-Меню (Alt-x)-Выход
');
1: write(' Задать/изменить параметры
');
2: write(' Просмотреть последовательности
');
3: write(' Просмотреть гистограмму
');
4: write(' Выход
');
5: write(' Esc-Закончить изменение параметров. BckSp-Изменить параметр.
F4-Постр. посл-ть');
6: write(' Нажмите Up или Down для просмотра или Esc для выхода
');
end;
end;
{*****DrawWin*****}
procedure drawwin;
begin
textcolor(white);textbackground(blue);
GotoXY(1,2);
Write('г');
for i:=2 to 79 do
Write('=');
Write('¬');
for i:=3 to 23 do
begin
GotoXY(1,i1);
Write('¦');
for j:=2 to 79 do
Write(' ');
Write('¦');
end;
GotoXY(1,24);
Write('L');
for i:=2 to 79 do
Write('=');
Write('-');
{ gotoxy(39,2);write('T');}
gotoxy(39,24);write('¦');
for i:=5 to 23 do
begin
gotoxy(39,i);
write('¦')
end;
gotoxy(31,3);
writeln('Последовательности');
gotoxy(1,4);
write('¦=====================================T==============================
==========¦');
end;
{*****DoWork*****}
procedure dowork(work:byte);
begin
case work of
1: begin
textcolor(white);
textbackground(blue);
gotoxy(39,2);write('T');
gotoxy(2,3);
writeln(' Нормальный закон: ¦ Экспоненциальный
закон:');
gotoxy(1,4);
write('¦=====================================+==============================
==========¦');
drawhelp(5);
textcolor(white);
textbackground(blue);
gotoxy(2,6);write(' Мат. ожидание:');
gotoxy(2,8);write('
Дисперсия:');gotoxy(xcor[2],ycor[2]);write(dat[2]:2:1);
gotoxy(41,6);write('Коэффициент:');gotoxy(xcor[3],ycor[3]);write(dat[3]:2:1)
;
gotoxy(xcor[1],ycor[1]);write(dat[1]:2:1);i:=1;
repeat
action:=readkey;
case action of
#27: exitpar:=true;
#9: begin
i:=i+1;
if i<4 then
begin
gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);
end
else
begin
i:=1;
gotoxy(xcor[1],ycor[1]);write(dat[1]:2:1);
end;
end;
#8: begin
gotoxy(xcor[i],ycor[i]);write(' ');
gotoxy(xcor[i],ycor[i]);read(dat[i]);
gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);
if i<3 then i:=i+1 else i:=1;
gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);
end;
#13: begin
if i<3 then i:=i+1 else i:=1;
gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);
end;
#62: begin
for i:=1 to 50 do
begin
x:=ln(random(65525)+1);
posle[i]:=exp(-sqr(x-
dat[1])/(2*sqrt(dat[2])))/sqrt(2*pi*dat[2]);
x:=exp(1/(random(825)));
if x<0 then posle[i+50]:=0 else posle[i+50]:=dat[3]*exp(-
dat[3]*x);
end;
end;
end;
until exitpar=true;
drawwin;
end;
2: begin
action:=#1;
drawhelp(6);
textcolor(white);
textbackground(blue);
exitpar:=false;
j:=1;
for i:=1 to 19 do
begin
gotoxy(2,i+4);
if i+j-1<10 then write(' ',i+j-1,': ',posle[i+j]:2:6,'
¦ ',i+j+49,': ',posle[i+50+j]:2:6)
else write(' ',i+j-1,': ',posle[i+j]:2:6,'
¦ ',i+j+49,': ',posle[i+50+j]:2:6)
end;
repeat
action:=readkey;
case action of
#72: if j>1 then j:=j-1;
#80: if j<32 then j:=j+1;
#27: exitpar:=true;
end;
for i:=1 to 19 do
begin
gotoxy(2,i+4);
if i+j-1<10 then write(' ',i+j-1,': ',posle[i+j]:2:6,'
¦ ',i+j+49,': ',posle[i+50+j]:2:6)
else write(' ',i+j-1,': ',posle[i+j]:2:6,'
¦ ',i+j+49,': ',posle[i+50+j]:2:6)
end;
until exitpar=true;
drawwin;
end;
3: begin
for i:=1 to 10 do
begin
x:=0;
for j:=1 to 10 do
x:=x+posle[(i-1)*10+j];
mat[i]:=x/10;
mat0:=mat0+x;
end;
mat0:=mat0/100;
for i:=1 to 10 do
for j:=1 to 10 do
begin
disp[i]:=sqr(posle[(i-1)*10+j]-mat[i]);
disp0:=sqr(posle[(i-1)*10+j]-mat0);
end;
matmax:=mat[1];
dispmax:=disp[1];
for i:=1 to 10 do
begin
if disp[i]>dispmax then dispmax:=disp[i];
if mat[i]>matmax then matmax:=mat[i];
end;
initgraph(grdriver,grmode,'');
setBKcolor(black);setcolor(8);
for i:=1 to 11 do
line(5,i*30,15,i*30-10);
for i:=1 to 20 do
line(i*25+5,330,i*25+15,320);
line(5,330,505,330);
line(5,330,5,30);
for i:=0 to 20 do line(i*25+15,320,i*25+15,20);
for i:=1 to 11 do line(15,i*30-10,515,i*30-10);
setbkcolor(black);
for i:=1 to 10 do
begin
setcolor(cyan);
SetFillStyle(6, 7);
Bar3D(13,27+30*(i-1),13+round(mat[i]*10000),35+30*(i-1), 2, TopOn);
setcolor(green);
SetFillStyle(8, 8);
Bar3D(13,35+30*(i-1),13+round(disp[i]*1000000),43+30*(i-1), 2,
TopOn);
end;
SetFillStyle(6, 7);
setcolor(8);
bar(10, 430, 20, 440);
outtextxy(23,432,'- Mat. ozhidanie');
SetFillStyle(8, 8);
bar(10, 450, 20, 460);
outtextxy(23,452,'- Dispersiya');
readkey;
closegraph;
drawwin
end;
end;
end;
{*****DrawMenu*****}
procedure drawmenu(button:byte);
const light=green;{15,14,13,12,11,10,9}
dark=white;{7,6,5,4,3,2,1}
var col:array[1..4]of byte;
exitmenu:boolean;
begin
exitmenu:=false;
textcolor(black);
drawhelp(1);
repeat
for i:=1 to 5 do col[i]:=dark;
col[button]:=light;
gotoxy(1,1);
textbackground(col[1]);write(' Параметры ');
textbackground(col[2]);write(' Последовательности ');
textbackground(col[3]);write(' Гистограмма ');
textbackground(col[4]);write(' Выход ');textbackground(dark);write('
');
if button<>5 then action:=readkey else exitmenu:=true;
case action of
#77: begin
if button<4 then
begin
col[button]:=dark;
button:=button+1;
col[button]:=light
end
else
begin
col[4]:=dark;
col[1]:=light;
button:=1;
end;
end;
#75: begin
if button>1 then
begin
col[button]:=dark;
button:=button-1;
col[button]:=light
end
else
begin
col[1]:=dark;
col[4]:=light;
button:=4;
end
end;
#27: exitmenu:=true;
#13: case button of
1: begin
dowork(1);
button:=5
end;
2: begin
dowork(2);
button:=5
end;
3: begin
dowork(3);
button:=5
end;
4: begin
exitmenu:=true;
exitprog:=true
end;
end;
end;
if button<>5 then drawhelp(button);
until exitmenu=true;
drawhelp(0);textbackground(dark);gotoxy(1,1);
write(' Параметры Последовательности Гистограмма Выход
');
end;
{*****Главная программа*****}
begin
clrscr;
xcor[1]:=18;
xcor[2]:=18;
xcor[3]:=58;
ycor[1]:=6;
ycor[2]:=8;
ycor[3]:=6;
dat[1]:=5;dat[3]:=5;dat[2]:=4;
grmode:=detect;
grdriver:=detect;
drawwin;
repeat
drawmenu(5);
drawhelp(0);
actionprog:=readkey;
case actionprog of
#59: dowork(1);
#60: dowork(2);
#61: dowork(3);
#68: begin
drawmenu(1);
end;
#45: exitprog:=true;
end;
for i:=1 to 10 do begin mat[i]:=0; disp[i]:=0 end;
until exitprog=true;
end.