Паскаль. Основы программирования

       

Дополнительные задания


Пример 9. Задача об остроугольном треугольнике. На окружности случайно выбираются три точки. Какова вероятность того, что треугольник с вершинами в этих точках - остроугольный? (См. рис. 41).

Решение

 

Ясно, что при любом повороте окружности вероятности событий и условие "остроугольности" сохраняются; так что мы можем считать, что одна из трех выбираемых вершин A, B, C - скажем, C - фиксирована, а две другие уже выбираются случайно. Будем задавать их положения величинами дуг CA = a, CB = b, отсчитываемых против часовой стрелки. Будем измерять дуги в радианах, тогда пара (a, b) - это точка в квадрате 0 < a < 2Pi, 0 < b < 2Pi. По теореме о том, что величина вписанного угла измеряется половиной дуги между его сторонами, углы треугольника ABC равны Pi-b/2, a/2 и (b-a)/2 (мы считаем, что b>a; случай a>b совершенно аналогичен - a и b меняются ролями). Точки (a, b) в треугольнике a<b<Pi, для которых все три угла A, B, C меньше Pi/2, т.е. b>Pi, a<Pi и b-a<Pi, заполняют внутренность меньшего треугольника, образуемого средними линиями большего. Ситуация в нижнем треугольнике b<a<Pi симметрична относительно диагонали a=b квадрата. Поэтому искомая вероятность равна

Рис. 41


Program Problem9;

    uses WinCrt;

    var

       x, y, p, e, pp : real;

       i, n, m          : longint;



{-------------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function

FF(x : real) : real;

      var

         n      : integer;

         u, I  : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u;

                           n := n + 1;


                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{-------------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure

NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;

          x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{-------------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите гарантированную вероятность '); readln(PP);

      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      m := 0;

      for i := 1 to n do

         begin

           x := random*2*pi; y := random*2*pi;

           if ((y > pi) and (y < x + pi) and (x < pi)) or

              ((y < pi) and (y > x - pi) and (x > pi))

             then m := m + 1

         end;

      p := m/n;

      writeln('Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

155. На отрезке [0; 1] случайно выбираются три числа. Какова вероятность того, что а) выбранное последним число наибольшее? б) числа идут в порядке возрастания?

Пример 10. Какова вероятность того, что при двух бросаниях кубика выпадут а) два числа с суммой не меньше 10? б) два числа, из которых первое делится на второе?

Идея решения задачи проста. Каждое из двух бросаний мы смоделируем, как получение двух случайных чисел из промежутка [1; 6]. (Число очков на игральном кубике следующее: 1, 2, 3, 4, 5, 6).

Для получения таких чисел можно использовать функции:



x := random(6) + 1 и y := random(6) + 1.

"Бросать" кубик будем не два раза, а количество бросаний предоставим устанавливать пользователю. Из "выпавших" чисел x и y будем подсчитывать число случаев, когда: а) x + y > +10; б) x mod y = 0.

Это число случаев разделим на общее число бросаний и получим искомую вероятность (фактически мы получим частоту появления событий о чём речь шла выше).

Программы

Program Problem10a;

    uses WinCrt;

    var

       x, y, p, e, pp : real;

       i, n, m          : longint;

{-------------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function

FF(x : real) : real;

      var

         n      : integer;

         u, I  : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u;

                           n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{-------------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure

NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;

          x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{-------------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите гарантированную вероятность '); readln(PP);



      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      m := 0;

      for i := 1 to n do

        begin

          x := random(6) + 1; y := random(6) + 1;

          if (x + y >= 10) then m := m + 1

        end;

      p := m/n;

      writeln('Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

 

Program Problem10b;

    uses WinCrt;

    var

      p, e, pp       : real;

      x, y, i, n, m : longint;

{----------------------------------------------------------------------------------------}

{  Функция Муавра-Лапласа }

   Function FF(x : real) : real;

      var

         n     : integer;

         u, I  : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u;

                           n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure

NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;

          x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{----------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите гарантированную вероятность '); readln(PP);



      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      m := 0;

      for i := 1 to n do

        begin

           x := random(6) + 1; y := random(6) + 1;

           if x mod y = 0 then

m := m + 1

        end;

      p := m/n;

      writeln('Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

156. Какова вероятность, что при первом бросании выпадет не меньше 5 очков, а при втором - не меньше 4?

157. Какова вероятность, что хотя бы при одном из двух бросаний кубика выпадет не менее 5 очков?

158. Какова вероятность, что количество очков, выпавших при двух бросаниях, отличаются не более чем на 1?

159. (Случайные числа и точки: равномерное распределение). Найдите вероятность того, что сумма x + y, где x, y - случайные числа на отрезке [0; 1], больше данного числа a.

160. На отрезке [0; 1] случайно выбираются три числа. Какова вероятность того, что а) выбранное последним число наибольшее? б) числа идут в порядке возрастания?

161. На окружности случайно выбраны четыре точки A, B, C, D. Какова вероятность того, что отрезки AC и BD пересекаются?

162. а) В окружности проведен диаметр. На нём случайно выбирается точка и через нее проводится хорда, перпендикулярная диаметру. Какова вероятность, что длина хорды больше радиуса окружности?

б) На окружности случайно выбираются две точки. Какова вероятность, что длина соединяющей их хорды больше радиуса?

в) В круге случайно выбрана точка. Какова вероятность, что хорды с серединой в этой точке больше радиуса?

г) Решите аналогичные задачи про хорду длины r
, где r - радиус.

Замечание. Задачи а), б), в) как бы три варианта одной и той же: проведем случайную прямую, пересекающую окружность: какова вероятность, что длина высекаемой хорды больше радиуса? Но ответ в них разный (парадокс Бертрана)!

163. На окружности случайно выбраны три точки.


Какова вероятность, что у треугольника с вершинами в этих точках: а) есть угол больше 30 градусов? б) все углы больше 30 градусов? в) все углы меньше 120 градусов?

164. На отрезке случайно выбраны две точки. Какова вероятность, что из отрезков, на которые он разбит, можно составить треугольник?

165. Плоскость разбита сеткой прямых на а) квадраты; б) правильные треугольники со стороной 1. Какова вероятность, что монета диаметра 1, случайно брошенная на плоскость, закроет одну из вершин сетки?

166. Найдите вероятность того, что а) выпуклый n-угольник с вершинами в случайных точках окружности содержит ее центр?

б) Докажите, что вероятность того, что n случайно выбранных точек на сфере лежат на одной полусфере (по одну сторону от некоторого большого круга) равна (n2 - n + 2)/2n.

 

Ответы

К заданию 2

Так как общее число карточек равно 7, то их можно упорядочить 7! способами. Поскольку обе буквы Т и обе буквы Р можно менять местами, не изменяя слова, то слово ТРАКТОР получится

2!.2! раза. Искомая вероятность равна:


Иначе тот же результат можно было бы получить, заметив, что в результате извлечения карточек мы получаем перестановку с повторениями состава (2, 2, 1, 1, 1), причем все такие перестановки имеют одну и ту же вероятность. Так как число перестановок равно P(2, 2, 1, 1, 1), то вероятность каждой из перестановок

равна
.

Program problem2;

    uses WinCrt;

    var

       p       : real;

       k1, k : integer;

{----------------------------------------------------------------------------------------}

    Procedure fakt(n : integer;  var f : integer);

        var

           i : integer;

        begin

           f := 1;

           if n = 0 then f := 1

                        else for i := 1 to n do

f := f*i

        end;

{----------------------------------------------------------------------------------------}

    begin

       fakt(7, k); fakt(2, k1);

       p := (k1*k1)/k;

       writeln('Вероятность получ. слова "трактор" равна ', p:10:8)



    end.

К заданию 3

Приведем лишь математическое решение задачи. Последующее составление программы достаточно простое.

Вычислить: P4(3) и P6(4).

По формуле Бернулли

.

Далее необходимо сравнить полученные результаты и сделать вывод.

 

К заданию 4 (пример 1)

{ Биномиальный закон распределения вероятностей }

Program Problem4_1;

   uses WinCrt;

   var

     p, pp : real;

     n, i  : integer;

{----------------------------------------------------------------------------------------}

{ Процедура возведения в степень }

   Procedure

Extent(a : real; n : integer; var e : real);

      var

        i : integer;

      begin

        e := 1;

        if n = 0 then e := 1

                     else for i := 1 to n do e := e*a

      end;

{----------------------------------------------------------------------------------------}

{ Рекуррентная процедура вычисления биномиального закона  }

{ распределения }

   Procedure Recurro_binomial(n, k : integer; p : real;  var pp : real);

      var

         i : integer;

      begin

        Extent(1 - p, n, pp);

        for i := 1 to k do pp := (pp*(n - i + 1)*p)/(i*(1 - p))

      end;

{----------------------------------------------------------------------------------------}

{ Основная программа }

   begin

     write('Введите общее число рождений '); readln(n);

     write('Введите вероятность рождения мальчика ');  readln(p);

     writeln('Биномиальный закон распределения вероятностей');

     writeln;

     for i := 0 to n do

write(i:6, ' '); writeln; writeln;

     for i := 0 to n do

       begin

         Recurro_binomial(n, i, p, pp);  write(pp:1:4, ' ')

       end;

     writeln; writeln;

     Recurro_binomial(10, 6, p, pp);

     writeln('Вероятность того, что из 10 наугад выбранных');

     writeln('рождений будет 6 мальчиков, равна ', pp:1:6)

   end.

К заданию 7

{ Распределение Пуассона }

Program Problem7;

   uses WinCrt;

   var

      n, m : longint;

      p, a  : real;



{----------------------------------------------------------------------------------------}

{ Процедура вычисления вероятности распределения Пуассона }

   Function PS(m : integer; a : real) : real;

      var

         i    : integer;

         pp : real;

      begin

        pp := exp(-a);

        if m = 0 then pp := exp(-a)

                      else for i := 1 to m do pp := pp*a/i;

        PS := pp

      end;

{----------------------------------------------------------------------------------------}

{ Основная программа }

   begin

     write('Введите общее число изделий '); readln(n);

     write('Введите вероятность изделия быть бракованным ');

     readln(p);

     writeln('Введите число бракованных изделий, вероятность ');

     write('появления которых Вы находите '); readln(m);

     a := n*p;

     writeln('Вероятность ', m, ' бракованных изделий в ');

     writeln('партии из ',n, ' изделий равна ', PS(m, a):1:6)

   end.

К заданию 9

{ Применение интегральной формулы Муавра-Лапласа }

Program Problem1;

     uses WinCrt;

     var

        n, m1, m2 : longint;

        p, PP : real;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

    Function FF(x : real) : real;

          var

             n     : integer;

             u, I : real;

          begin

             if

x >= 5

               then

FF := 1

               else if x <= -5

                        then

FF := -1 else

                                                 begin

                                                     u := x; n := 0; I := 0;

                                                     repeat

                                                         I := I + u; n := n + 1;

                                                         u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                                                     until



abs(u) < 0.00001;

                                                     FF := 2*I/sqrt(2*Pi)

                                                 end

          end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисл. вероятн. наст. событ. из промеж. [m1; m2] }

    Procedure

Interval(n, m1, m2 : longint; p : real; var PP : real);

          var

             x1, x2 : real;

          begin

              x1 := (m1 - n*p)/sqrt(n*p*(1 - p));

              x2 := (m2 - n*p)/sqrt(n*p*(1 - p));

              PP := (FF(x2) - FF(x1))/2

          end;

{----------------------------------------------------------------------------------------}

{ Основная программа. Число бракованных изделий из промежутка }

    begin

        write('Введите общее число изделий '); readln(n);

        write('Введите вероятность наступление одного события ');

        readln(p);

        write('Введите левую границу промежутка '); readln(m1);

        write('Введите правую границу промежутка '); readln(m2);

        Interval(n, m1, m2, p, PP);

        writeln('Вероятность того, что число бракованных изделий');

        write('находится в промежутке [',m1, '; ', m2, '] равна ');

        writeln(PP:1:8)

    end.

{ Применение интегральной формулы Муавра-Лапласа }

Program Problem2;

     uses WinCrt;

     var

        n, m1, m2 : longint;

        p, q, PP    : real;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function FF(x : real) : real;

           var

              n     : integer;

              u, I : real;

           begin

               if

x >= 5

                  then FF := 1

                  else if x <= -5

                          then FF := -1

                          else

                             begin

                                u := x; n := 0; I := 0;



                                repeat

                                    I := I + u; n := n + 1;

                                    u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                                until

abs(u) < 0.00001;

                                FF := 2*I/sqrt(2*Pi)

                             end

           end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисл. вероятн. наст. событ. из промеж. [m1; m2] }

    Procedure

Interval(n, m1, m2 : longint; p : real; var PP : real);

          var

             x1, x2 : real;

          begin

             x1 := (m1 - n*p)/sqrt(n*p*(1 - p));

             x2 := (m2 - n*p)/sqrt(n*p*(1 - p));

             PP := (FF(x2) - FF(x1))/2

          end;

{----------------------------------------------------------------------------------------}

  begin

       write('Введите общее число изделий '); readln(n);

       write('Введите вероятность брака в одном изделии '); readln(q);

       write('Введите левую границу промежутка '); readln(m1);

       write('Введите правую границу промежутка '); readln(m2);

       p := 1 - q;

       Interval(n, m1, m2, p, PP);

       writeln('Вероятность того, что число пригодных изделий');

       write('находится в промежутке [',m1, '; ', m2, '] равна ');

       writeln(PP:1:8)

    end.





К заданию 10

{ Процедура нахождения числа испытаний n, чтобы обеспечить }

{ заданную вероятность отклонения частоты от np }

Procedure Number(p, e, PP : real; var n : longint);

     var

         x : real;

     begin

         x := 0;

         repeat

            x := x + 0.01

         until

FF(x) >= PP;

         n := round(e/(x*sqrt(p*(1 - p))) + 0.5);

         n := sqr(n)

     end;

{ Применение интегральной формулы Муавра-Лапласа }

Program Task10;

     uses WinCrt;

     var

        n           : longint;

        e, q, PP : real;

{----------------------------------------------------------------------------------------}



{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

     Function FF(x : real) : real;

           var

              n     : integer;

              u, I : real;

           begin

               if

x >= 5

                  then

FF := 1

                  else if x <= -5

                          then FF := -1

                          else

                            begin

                               u := x; n := 0; I := 0;

                               repeat

                                   I := I + u; 

                                   n := n + 1;

                                   u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                               until

abs(u) < 0.00001;

                               FF := 2*I/sqrt(2*Pi)

                            end

            end;

{----------------------------------------------------------------------------------------}

{ Процедура нахождения числа испытаний n }

      Procedure Number(p, e, PP : real; var n : longint);

            var

                x : real;

            begin

                x := 0;

                repeat

                    x := x + 0.01

                until FF(x) >= PP;

                 n := round(e/(x*sqrt(p*(1 - p))) + 0.5);

                 n := sqr(n)

             end;

{----------------------------------------------------------------------------------------}

    begin

         write(' Введите вероятность отклонения клемм от принято');

         write('го стандарта '); readln(q);

         write('Введите число стандартных клемм отличающихся ');

         write('от np (по модулю) '); readln(e);

         write('Укажите вероятность этого отклонения '); readln(PP);

         Number(q, e, PP, n);

         writeln('Искомое число взятых наудачу клемм равно ', n)

      end.

К заданию 11

 

{ Процедура определение границы отклонения (ReIection) частости}



{ от заданной вероятности наступления одного события }

Procedure ReIection(n : longint; p, PP, eps : real; var e : real);

     var

         x : real;

     begin

         x := 0;

         repeat

            x := x + eps

         until

FF(x) >= PP;

         e := x*sqrt(p*(1 - p)/n)

     end;

{ Применение интегральной формулы Муавра-Лапласа }

Program Task3;

     uses WinCrt;

     var

        n                   : longint;

        e, eps, p, pp : real;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

     Function FF(x : real) : real;

           var

              n     : integer;

              u, I : real;

           begin

               if

x >= 5

                 then

FF := 1

                 else if x <= -5

                         then

FF := -1

                         else

                           begin

                              u := x;

                              n := 0;

                              I := 0;

                              repeat

                                   I := I + u;

                                  n := n + 1;

                                  u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                              until

abs(u) < 0.00001;

                              FF := 2*I/sqrt(2*Pi)

                           end

           end;

{----------------------------------------------------------------------------------------}

{ Процедура определение границы отклонения (ReIection) частости}

{ от заданной вероятности наступления одного события }

     Procedure ReIection(n : longint; p, PP, eps : real; var e : real);

           var

               x : real;

           begin

               x := 0;

               repeat

                   x := x + eps

               until

FF(x) >= PP;



               e := x*sqrt(p*(1 - p)/n)

           end;

         {----------------------------------------------------------------------------------------}

{ Основная программа }

     begin

        write('Введите вероятность события в каждом испытании '); readln(p);

        write(' Введите общее число произведенных испытаний '); readln(n);

        write('Укажите гарантированную вероятность '); readln(PP);

        write('Укажите точность вычисления искомой величины '); readln(eps);

        ReIection(n, p, PP, eps, e);

        writeln('Искомая граница отклонения частости от вероят-');

        write('ности будет находиться в промежутке ');

        writeln('[', p-e:1:4, '; ', p+e:1:4, ']')

     end.

К заданию 12

{ Применение интегральной формулы Муавра-Лапласа }

Program Problem12;

   uses WinCrt;

   var

     n           : longint;

     e, p, PP : real;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function

FF(x : real) : real;

      var

        n     : integer;

        u, I : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                     repeat

                        I := I + u;

                       n := n + 1;

                       u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                     until abs(u) < 0.00001;

                     FF := 2*I/sqrt(2*Pi)

                   end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура нахождения числа испытаний n, чтобы обеспечить    }

{ заданную вероятность отклонения частности от заданного числа }

   Procedure

Number3(p, e, PP : real; var n : longint);



      var

        x : real;

      begin

        x := 0;

        repeat

          x  := x + 0.01

        until FF(x) >= PP;

        n := round((x*sqrt(p*(1 - p))/e) + 0.5);

        n := sqr(n)

      end;

{----------------------------------------------------------------------------------------}

{ Основная программа }

   begin

     write(' Введите постоянную для каждого испытания ');

     write('вероятность '); readln(p);

     writeln('Введите число, от которого по абсолютной ');

     write('величине должна отличаться частость '); readln(e);

     write('Укажите гарантированную вероятность '); readln(PP);

     writeln;

     Number3(p, e, PP, n);

     writeln('Число испытаний должно быть больше или равно ', n)

   end.

 

К

заданию 15


Program Normal1;

     uses WinCrt;

     var

         PP, x, l, c : real;

{-----------------------------------------------------------------------------------------}

{ Функция Муавра-Лапласа }

     Function FF(x : real) : real;

           var

              n    : integer;

              u, I : real;

           begin

              if x >= 5

                then FF := 1

                else if x <= -5

                         then FF := -1

                         else

                            begin

                                u := x; n := 0; I := 0;

                                repeat

                                   I := I + u;

                                   n := n + 1;

                                   u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                                until

abs(u) < 0.00001;

                                FF := 2*I/sqrt(2*Pi)

                            end

           end;

{----------------------------------------------------------------------------------------}

         { Процедура нахождения аргумента x }

      Procedure Argument(PP : real; var

x : real);

           begin

              x := 0;

              repeat

                 x := x + 0.0001



              until FF(x) >= PP

           end;

{----------------------------------------------------------------------------------------}

      begin

         write(' Введите среднее квадратическое отклонение '); readln(c);

         write('Введите вероятность попадания в интервал, симметричн. M(X) ');

         readln(PP);

         Argument(PP, x);

         l := 2*c*x;

         writeln('Длина искомого интервала равна ', L:4:6)

      end.

Ответ к задаче 2 задания

Указание

По формуле (6) находим
.

Ответ

0.06.

Program Exercise_Normal2;

     uses WinCrt;

     var

        PP, x, a, d, e, c : real;

{----------------------------------------------------------------------------------------}

{ Функция Муавра-Лапласа }

     Function FF(x : real) : real;

         var

            n    : integer;

           u, I : real;

         begin

              if x >= 5

                then FF := 1

                else if x <= -5

                          then FF := -1

                          else

                             begin

                                 u := x; n := 0; I := 0;

                                 repeat

                                    I := I + u;

                                    n := n + 1;

                                    u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                                 until

abs(u) < 0.00001;

                                 FF := 2*I/sqrt(2*Pi)

                             end

         end;

{----------------------------------------------------------------------------------------}

{ Процедура нахождения аргумента x }

     Procedure Argument(PP : real; var

x : real);

          begin

             x := 0;

             repeat

                x := x + 0.0001

             until FF(x) >= PP

          end;

{----------------------------------------------------------------------------------------}

     begin

        write('Введите среднее значение ');

        writeln('нормально распределенной случайной величины a = M(X) ');



        write('т.е. средний диаметр детали '); readln(a);

        write('Введите дисперсию '); readln(d);

        writeln('Введите гарантированную вероятность');

        write(' отклонения детали от среднего размера '); readln(PP);

        Argument(PP, x);

        c := sqrt(d);

        e := c*x;

       writeln('Максимальное отклонение диаметра от среднего равно ', e:2:6)

     end.

Ответ к задаче 3 задания

а) 0.9986; б) 0.7823.

Program Exercise_Normal13a;

     uses WinCrt;

     var

        e, c, d, pp, p1, sum : real;

        n, m, i                     : integer;

{----------------------------------------------------------------------------------------}

{ Функция Муавра-Лапласа }

     Function FF(x : real) : real;

           var

              n     : integer;

              u, I : real;

           begin

               if x >= 5

                 then FF := 1

                 else if x <= -5

                           then FF := -1

                           else

                              begin

                                  u := x; n := 0; I := 0;

                                  repeat

                                      I := I + u;

                                      n := n + 1;

                                      u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                                  until abs(u) < 0.00001;

                                  FF := 2*I/sqrt(2*Pi)

                              end

           end;

{----------------------------------------------------------------------------------------}

{ Процедура возведения в степень }

     Procedure Extent(a : real; n : integer; var e : real);

           var

              i : integer;

           begin

               e := 1;

               if n = 0 then e := 1 else for i := 1 to n do

e := e*a

           end;

   {--------------------------------------------------------------------------------------}

   { Рекуррентная процедура вычисления вероятности }



   { биномиального закона распределения }

     Procedure Recurro_binomial(n, m : integer; p : real; var p1 : real);

           var

              i : integer;

           begin

              Extent(1 - p, n, p1);

               for

i := 1 to m do p1 := (p1*(n - i + 1)*p)/(i*(1 - p))

           end;

{----------------------------------------------------------------------------------------}

     begin

        write('Введите дисперсию '); readln(d); c := sqrt(d);

        write(' Введите отклонение детали от заданного размера '); readln(e);

        write('Введите число измерений '); readln(n);

        write('Введите допускаемое число появления ощибок '); readln(m);

        pp := 1 - FF(e/c);

        sum := 0;

       for i := 0 to m do

          begin

             Recurro_binomial(n, i, pp, p1);

             sum := sum + p1

          end;

          writeln('Вероятность брака равна ', sum:1:6)

     end.

К

заданию 16


 

Program Task16_1;

    uses WinCrt;

    var

       x, y, p, e, pp : real;

       i, n, m, a, b  : longint;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function

FF(x : real) : real;

      var

         n     : integer;

         u, I : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u; n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }



{ ванной вероятности и заданной точности частости              }

   Procedure NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1; x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{----------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите длину отрезка - a = '); readln(a);

      write('Введите расстояние b от точки A '); readln(b);

      write('Введите гарантированную вероятность '); readln(PP);

      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      m := 0;

      for i := 1 to n do

        begin

          x := random*a; y := random*a;

          if (x <= b) and (y <= b) then m := m + 1

        end;

      p := m/n;

      writeln('Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

Program Task16_2;

    uses WinCrt;

    var

       x, y, p, a, q, k1, h, e, pp : real;

       i, n, k, m                         : longint;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function FF(x : real) : real;

      var

         n     : integer;

         u, I : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u; n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)



                     end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;  x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{----------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите длину стороны BC '); readln(a);

      write('Введите высоту трапеции '); readln(h);

      write('Введите величину угла BAE < Pi/2 в рад '); readln(q);

      write('Введите гарантированную вероятность '); readln(PP);

      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      k := 0; m := 0; k1 := sin(q)/cos(q);

      for i := 1 to n do

        begin

          x := random*(2*h/k1 + a); y := random*h;

          if (y < k1*x) and (y < -k1*x + k1*(2*h/k1 + a)) then k := k + 1;

          if ((x < h/k1) and (y < k1*x)) or

((x > a + h/k1) and

             (y < -k1*x + k1*(2*h/k1 + a))) then m := m + 1

        end;

      p := m/k;

      writeln('Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

К заданию 17

Пусть событие E - точка оказалась внутри куба с ребром, равным 3 см. Будем считать, что исходы испытания распределены равномерно. Тогда вероятность наступления события E  пропорциональна мере этого куба и равна:

, где V1 - объем куба,

V2 - объем параллелепипеда.

Program Task17;

    uses WinCrt;

    var

      x, y, z, p, e, pp : real;

      i, n, s                : longint;

{----------------------------------------------------------------------------------------}



{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function

FF(x : real) : real;

      var

         n     : integer;

         u, I  : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u;

                           n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure

NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;

          x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{----------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите гарантированную вероятность '); readln(PP);

      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      s := 0;

       for i := 1 to n do

          begin

             x := random*4; y := random*6; z := random*10;

             if (x < 3) and (y < 3) and (z < 3) then s := s + 1

          end;

       p := s/n;

       writeln('Вероятность появление точки внутри куба ', p:6:4);

       writeln('С точностью до ', e:1:6);

       writeln('С гарантированной вероятностью ', PP:1:4);

       writeln('При числе испытаний ', n)

    end.

К

заданию 18


Program Task18_1;



    uses WinCrt;

    var

      x, y, p, e, pp : real;

      i, n, m : longint;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function

FF(x : real) : real;

      var

         n     : integer;

         u, I : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u;

                           n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure

NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;

          x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{----------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите гарантированную вероятность '); readln(PP);

      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      m := 0;

      for i := 1 to n do

        begin

          x := random*12;

          y := random*12;

          if (y > x - 3) and (y < x + 3) then m := m + 1

        end;

      p := m/n;

      writeln('Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);



      writeln('При числе испытаний ', n)

    end.





Program Task18_2;

    uses WinCrt;

    var

      x, y, p, e, pp : real;

      i, n, m           : longint;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function FF(x : real) : real;

      var

         n     : integer;

         u, I : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u;

                           n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;

          x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{----------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите гарантированную вероятность '); readln(PP);

      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      m := 0;

      for i := 1 to n do

        begin

          x := random*20;

          y := random*20;

          if (y > x - 5) and (y < x + 5) and

(y > x - 2) and (y < x + 2)

            then m := m + 1

        end;



      p := (2*m)/n;

      writeln('Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

К

заданию 19


 

Program Task19;

    uses WinCrt;

    var

      p, x, y, z, e, pp : real;

      i, n, m              : longint;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

  Function

FF(x : real) : real;

      var

         n     : integer;

         u, I : real;

      begin

        if x >= 5

          then FF := 1

          else if x <= -5

                   then FF := -1

                   else

                     begin

                       u := x; n := 0; I := 0;

                       repeat

                           I := I + u;

                           n := n + 1;

                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))

                       until abs(u) < 0.00001;

                       FF := 2*I/sqrt(2*Pi)

                     end

      end;

{----------------------------------------------------------------------------------------}

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости              }

   Procedure

NumberExperiment(e, PP : real; var n : longint);

      var

        x : real;

      begin

        n := 0;

        repeat

          n := n + 1;

          x := 2*e*sqrt(n)

        until FF(x) >= PP

      end;

{----------------------------------------------------------------------------------------}

    begin

      randomize;

      write('Введите гарантированную вероятность '); readln(PP);

      write('Введите точность вычисления '); readln(e);

      NumberExperiment(e, PP, n);

      m := 0;

      for i := 1 to n do

         begin



            x := random; y := random; z := random;

            if ((x < 1/3) and (y > 1/3) and (y < 2/3) and (z > 2/3)) or

               ((y < 1/3) and (x > 1/3) and (x < 2/3) and (z > 2/3)) or

               ((y < 1/3) and (z > 1/3) and (z < 2/3) and (x > 2/3)) or

               ((z < 1/3) and (x > 1/3) and (x < 2/3) and (y > 2/3)) or

               ((z < 1/3) and (y > 1/3) and (y < 2/3) and (x > 2/3)) or

               ((x < 1/3) and (z > 1/3) and (z < 2/3) and (y > 2/3))

              then m := m + 1

         end;

      p := m/n;

      writeln(' Искомая вероятность равна ', p:6:4);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.






Содержание раздела