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); }
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); }