Este pequeño programa en R ofrece un número al azar mediante el uso de la función sample() entre los valores 0 y 99999. El número obtenido se compara con el que buscamos, que sería el número de lotería que estamos jugando (el 29570 en nuestro ejemplo). Contabilizamos el número de intentos hasta conseguir el número y, repetimos el proceso n veces (100 exactamente). El fin es obtener el número medio de intentos realizados hasta conseguir nuestro número tras probar 100 veces (que se correspondería con 100 sorteos diferentes). La función creada va generando un vector con los valores obtenidos (intentos) en cada sorteo y, posteriormente calculamos la media de estos. También calculamos la mediana y representamos estos resultados con un histograma de frecuencias.
library(beepr)
##### variables
i <- 1
n <- 1
precio = 20
contador = 1
intento <- c()
gasto <- c()
##### función
loteria <- function(numero) { run = TRUE while (run == TRUE) { sample <- sample(1:99999, 1) cat("Iter:", i, "intento:", n, "buscado:", numero, "lotería:", sample, "gasto:", precio*n, "\n") if (numero == sample) { cat("\nEl gasto total en lotería ha sido de:", precio*n, "euros") run = FALSE } n = n + 1 } intento <<- c(intento, n - 1) # va creando la lista de intentos gasto <<- c(gasto, precio*(n - 1)) # va creando la lista de gastos } cat("\nEl número", sample, "resulta premiado. \nIteración:", i , "Intento:", n)
##### ejecución
numero = 29570 # número a obtener
while (i < 101) {
loteria(numero)
beep(sound = 1)
Sys.sleep(2)
if (i == 100) {
print("FIN")
beep(sound = 2)
Sys.sleep(2)
}
i <- i + 1
}
mean(intento)
median(intento)
mean(gasto)
##### gráfico del histograma
options(scipen = 999) # eje X sin notación científica hist(intento, main = "Distribución de intentos | lotería", sub = "frecuencia de aciertos del número en n intentos", xlab = "Intentos", ylab = "Frecuencia", col = "skyblue", border = "black") abline(v=median(intento), col="purple") abline(v=mean(intento), col="blue") legend("topright", legend = "Media", col = "purple", lty = 1, lwd = 2, bty = "n", cex = 0.9, inset = c(0, 0.1), xpd = TRUE) legend("topright", legend = "Mediana", col = "blue", lty = 1, lwd = 2, bty = "n", cex = 0.9, inset = c(0, 0.2), xpd = TRUE)