Exemple #1
0
        static void borracho(int iteraciones = 15, int simulaciones = 500, int end = 2)
        {
            string[] blanks =
            {
                "",
                " ",
                "  ",
                "   ",
                "    ",
                "     ",
                "      ",
                "       ",
                "        ",
                "         "
            };

            BoolInteger[] values = new BoolInteger[simulaciones];

            string[] toPrint = new string[simulaciones];

            for (int ii = 0; ii < simulaciones; ii++)
            {
                double[] numerosr = generateRandomSeries(iteraciones);
                int      x = 0, y = 0;
                int[]    xx = new int[iteraciones];
                int[]    yy = new int[iteraciones];
                for (int i = 0; i < iteraciones; i++)
                {
                    double r = numerosr[i];
                    if (r < 0.25)
                    {
                        x += 1;
                    }
                    else if (r < 0.5)
                    {
                        x -= 1;
                    }
                    else if (r < 0.75)
                    {
                        y += 1;
                    }
                    else
                    {
                        y -= 1;
                    }
                    xx[i] = x;
                    yy[i] = y;
                }
                if (print || save)
                {
                    string res = "+------------------+-------+-------+\n";
                    res += $"| Prueba   {(ii + 1)}{blanks[3 - ((ii + 1) + "").Length]}     |   X   |   Y   |\n";
                    res += "+---------+--------+-------+-------+\n";
                    res += "| Inicio  |  NPSA  |   0   |   0   |\n";
                    for (int i = 0; i < iteraciones; i++)
                    {
                        //{i + 1}{blanks[3 - ((i + 1) + "").Length]}
                        string sy, sx;
                        int    ny = yy[i], nx = xx[i];
                        if (ny < 0)
                        {
                            sy  = "-";
                            ny *= -1;
                        }
                        else
                        {
                            sy = " ";
                        }
                        if (xx[i] < 0)
                        {
                            sx  = "-";
                            nx *= -1;
                        }
                        else
                        {
                            sx = " ";
                        }

                        res += $"|   {i + 1}{blanks[3 - ((i + 1) + "").Length]}   | {numerosr[i]}{blanks[6 - (numerosr[i] + "").Length]} |  {sx}{nx}   |  {sy}{ny}   |\n";
                    }
                    res += "+---------+--------+-------+-------+\n";
                    if (print)
                    {
                        Console.WriteLine(res);
                    }
                    toPrint[ii] = res;
                }
                //Console.WriteLine("i: {0}; {1} {2} {3} {4}", ii, x, y, end, Math.Abs(x) + Math.Abs(y) == end);
                values[ii] = new BoolInteger(Math.Abs(x) + Math.Abs(y) == end);
            }
            if (save)
            {
                System.IO.File.WriteAllLines($@"{path}\borracho.txt", toPrint);
            }


            double p = 0;

            foreach (BoolInteger v in values)
            {
                p += (double)v.GetIntValue();
                //Console.WriteLine(v.GetIntValue());
            }
            p /= simulaciones;
            int e = (int)(p * 100);

            //Console.WriteLine(p);
            //Console.WriteLine(e);
            Console.WriteLine("La probabilidad de éxito es {0}%", e);
        }
Exemple #2
0
        static void integral(Func <double, double> f, int iteraciones = 500, int simulaciones = 1000)
        {
            string[] blanks =
            {
                "",
                " ",
                "  ",
                "   ",
                "    ",
                "     ",
                "      ",
                "       ",
                "        ",
                "         "
            };

            string[] toPrint = new string[simulaciones];

            double[] values = new double[simulaciones];

            for (int ii = 0; ii < simulaciones; ii++)
            {
                double[]      nx   = generateRandomSeries(iteraciones);
                double[]      ny   = generateRandomSeries(iteraciones);
                double[]      nf   = new double[iteraciones];
                BoolInteger[] cond = new BoolInteger[iteraciones];

                for (int i = 0; i < iteraciones; i++)
                {
                    //double fv = f(nx[i]);
                    //Console.WriteLine(fv);
                    //int val = (int) (fv * 10000);
                    int val = (int)(f(nx[i]) * 10000);
                    //Console.WriteLine(val);
                    //Console.WriteLine(val / 10000);
                    nf[i] = (double)val / 10000;
                }

                for (int i = 0; i < iteraciones; i++)
                {
                    cond[i] = new BoolInteger(ny[i] < nf[i]);
                }

                double count = 0;
                foreach (BoolInteger bi in cond)
                {
                    count += bi.GetIntValue();
                }

                if (print || save)
                {
                    string res = "+-----------------------------------------+\n";
                    res += $"|   Iteración {ii}{blanks[4 - (ii + "").Length]}                        |\n";
                    res += "+---------+---------+----------+----------+\n";
                    res += "|    X    |    Y    |   f(x)   |   Cond   |\n";
                    res += "+---------+---------+----------+----------+\n";
                    for (int i = 0; i < iteraciones; i++)
                    {
                        int    snx = (nx[i] + "").Length;
                        int    sny = (ny[i] + "").Length;
                        int    snf = (nf[i] + "").Length;
                        string c   = cond[i].GetBoolValue() ? "V" : "F";
                        res += $"| {nx[i]}{blanks[8 - snx]}| {ny[i]}{blanks[8 - sny]}| {nf[i]}{blanks[8 - snf]}|   {c}    |\n";
                    }
                    res += "+---------+---------+----------+----------+\n";
                    if (print)
                    {
                        Console.WriteLine(res);
                    }
                    toPrint[ii] = res;
                }

                values[ii] = count / iteraciones;
                //Console.WriteLine(count);
                //Console.WriteLine(count / iteraciones);
                //Console.WriteLine(printArray(nx));
                //Console.WriteLine(printArray(ny));
                //Console.WriteLine(printArray(nf));
            }

            if (save)
            {
                System.IO.File.WriteAllLines($@"{path}\integral.txt", toPrint);
            }

            double a = 0.0;

            foreach (double v in values)
            {
                a += v;
            }

            a /= simulaciones;

            Console.WriteLine("Área = {0}", a);
        }