Программирование и комп-ры

Программирование с использованием генератора случайных чисел


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.


смотреть на рефераты похожие на "Программирование с использованием генератора случайных чисел"