TALLER 12

Ejercicio 1

Escribe un programa que diga si un número introducido por teclado es o no primo. Un número primo es aquel que sólo es divisible entre él mismo y la unidad. Nota: Es suficiente probar hasta la raíz cuadrada del número para ver si es divisible por algún otro número.

f1 <- function(n) {
  if (n <= 1) {
    return(FALSE)
  }
  for (i in 2:sqrt(n)) {
    if (n %% i == 0) {
      return(FALSE)
    }
  }
  return(TRUE)
}
# Uso del programa
#n <- as.integer(readline("Ingrese un número: "))
n <- sample(1:30,1,replace=F) 
if (f1(n)) {
  cat(n, "es un número primo.\n")
} else {
  cat(n, "no es un número primo.\n")
}
## 15 no es un número primo.

Ejercicio 2

Realizar un algoritmo para determinar cuánto ahorrará una persona en un año, si al final de cada mes deposita cantidades variables de dinero; además, se quiere saber cuánto lleva ahorrado cada mes.

f2 <- function() {
  a_total <- 0
  for (mes in 1:12) {
    #cant_dep <- as.numeric(readline(paste("Ingrese la cantidad depositada en el mes", mes, ": ")))
    cant_dep <- sample(1:30,1,replace=F) 
    a_total <- a_total + cant_dep
    cat("Hasta el mes", mes, "ha ahorrado:", a_total, "\n")
  }
  return(a_total)
}
# Uso del programa
cat("Calculadora de ahorro anual\n")
## Calculadora de ahorro anual
total_ah <- f2()
## Hasta el mes 1 ha ahorrado: 5 
## Hasta el mes 2 ha ahorrado: 6 
## Hasta el mes 3 ha ahorrado: 9 
## Hasta el mes 4 ha ahorrado: 28 
## Hasta el mes 5 ha ahorrado: 47 
## Hasta el mes 6 ha ahorrado: 75 
## Hasta el mes 7 ha ahorrado: 92 
## Hasta el mes 8 ha ahorrado: 100 
## Hasta el mes 9 ha ahorrado: 106 
## Hasta el mes 10 ha ahorrado: 110 
## Hasta el mes 11 ha ahorrado: 126 
## Hasta el mes 12 ha ahorrado: 152
cat("Al final del año, habrás ahorrado:", total_ah, "\n")
## Al final del año, habrás ahorrado: 152

Ejercicio 3

Una empresa tiene el registro de las horas que trabaja diariamente un empleado durante la semana (seis días) y requiere determinar el total de éstas, así como el sueldo que recibirá por las horas trabajadas.

f3 <- function() {
  horas_trab <- numeric(6)
  for (dia in 1:6) {
    #horas_trab[dia] <- as.numeric(readline(paste("Ingrese las horas trabajadas en el día", dia, ": ")))
  }
  horas_trab <- sample(1:24,1,replace=F) 
  t_horas <- sum(horas_trab)
  sueldo <- t_horas * tarifa_por_hora  # Ajusta tarifa_por_hora según tu necesidad
  return(list(t_horas = t_horas, sueldo = sueldo))
}
# Uso del programa
#tarifa_por_hora <- as.numeric(readline("Ingrese la tarifa por hora: "))
tarifa_por_hora <- sample(1:30,1,replace=F) 
resultado <- f3()
cat("Total de horas trabajadas:", resultado$t_horas, "\n")
## Total de horas trabajadas: 1
cat("Sueldo recibido:", resultado$sueldo, "\n")
## Sueldo recibido: 11

Ejercicio 4

Una persona se encuentra en el kilómetro 70 de una carretera, otra se encuentra en el km 150, los coches tienen sentido opuesto y tienen la misma velocidad.Realizar un programa para determinar en qué kilómetro de esa carretera se encontrarán.

f4 <- function(km1, km2) {
 # speed <- as.numeric(readline("Ingrese la velocidad de los coches en km/h: "))
  speed <- sample(1:130,1,replace=F) 
  tim <- (km2 - km1) / speed
  e_km <- km1 + speed * tim
  return(e_km)
}
# Uso del programa
kilometro1 <- 70
kilometro2 <- 150
encuentro <- f4(kilometro1, kilometro2)
cat("Los coches se encontrarán en el kilómetro:", encuentro, "\n")
## Los coches se encontrarán en el kilómetro: 150

Ejercicio 5

Una persona adquirió un producto para pagar en 20 meses. El primer mes pagó 10 €, el segundo 20 €, el tercero 40 € y así sucesivamente. Realizar un algoritmo para determinar cuánto debe pagar mensualmente y el total de lo que pagó después de los 20 meses.

f5 <- function(meses) {
  pago1 <- 10
  ratio <- 2
  t_pago <- pago1 * (ratio^(meses - 1))
  p_mensual <- t_pago / meses
  return(list(p_mensual = p_mensual, t_pago = t_pago))
}
# Uso del programa
#num_meses <- as.integer(readline("Ingrese la cantidad de meses: "))
num_meses <- sample(1:50,1,replace=F)
r_pago <- f5(num_meses)
cat("Monto mensual a pagar:", r_pago$p_mensual, "\n")
## Monto mensual a pagar: 20480
cat("Total pagado después de", num_meses, "meses:", r_pago$t_pago, "\n")
## Total pagado después de 16 meses: 327680

Ejercicio 6

Una empresa les paga a sus empleados con base en las horas trabajadas en la semana. Realice un algoritmo para determinar el sueldo semanal de N trabajadores y, además, calcule cuánto pagó la empresa por los N empleados.

f6 <- function(num_empleados) {
  sueldos <- numeric(num_empleados)
  for (i in 1:num_empleados) {
    #h_trabajadas <- as.numeric(readline(paste("Ingrese las horas trabajadas por el empleado", i, ": ")))
    h_trabajadas <- sample(1:24,1,replace=F)
    sueldo <- h_trabajadas * tarifa_h  # Ajusta tarifa_por_hora según tu necesidad
    sueldos[i] <- sueldo
  }
  t_pago <- sum(sueldos)
  return(list(sueldos = sueldos, t_pago = t_pago))
}
# Uso del programa
#num_empleados <- as.integer(readline("Ingrese la cantidad de empleados: "))
num_empleados <- sample(1:130,1,replace=F)
#tarifa_h <- as.numeric(readline("Ingrese la tarifa por hora: "))
tarifa_h <- sample(1:30,1,replace=F)
r_sueldo <- f6(num_empleados)
cat("Sueldos semanales por empleado:", r_sueldo$sueldos, "\n")
## Sueldos semanales por empleado: 247 323 76 19 171 266 437 114 76 304 57 209 285 361 304 456 114 342 380 152 456 456 456 19 456 76 57 19 399 114 57 285 114 133
cat("Total pagado a los empleados:", r_sueldo$t_pago, "\n")
## Total pagado a los empleados: 7790

Ejercicio 7

Una empresa les paga a sus empleados con base en las horas trabajadas en la semana. Para esto, se registran los días que trabajó y las horas de cada día. Realice un algoritmo para determinar el sueldo semanal de N trabajadores y además calcule cuánto pagó la empresa por los N empleados.

f7<- function(num_empleados) {
  sueldos <- numeric(num_empleados)
  for (i in 1:num_empleados) {
    #d_trabajados <- as.integer(readline(paste("Ingrese los días trabajados por el empleado", i, ": ")))
    d_trabajados <- sample(1:365,1,replace=F)
    #h_diarias <- as.numeric(readline(paste("Ingrese las horas trabajadas por día para el empleado", i, ": ")))
    h_diarias <- sample(1:24,1,replace=F)
    sueldo <- d_trabajados * h_diarias * tarifa_h  # Ajusta tarifa_por_hora según tu necesidad
    sueldos[i] <- sueldo
  }
  t_pago <- sum(sueldos)
  return(list(sueldos = sueldos, t_pago = t_pago))
}
# Uso del programa
#num_empleados <- as.integer(readline("Ingrese la cantidad de empleados: "))
num_empleados <- sample(1:130,1,replace=F)
#tarifa_h  <- as.numeric(readline("Ingrese la tarifa por hora: "))
tarifa_h <- sample(1:30,1,replace=F)
r_sueldo <- f7(num_empleados)
cat("Sueldos semanales por empleado:", r_sueldo$sueldos, "\n")
## Sueldos semanales por empleado: 5958 1456 4592 3864 14160 14196 104 2632 1722 7518 174 6820 8 5680 2132 146 1098 5008 4900 5796 7832 340 3570 7176 6260 904 1866 15640 2508 4080 1260 12980 588 184 6468 2816 528 3320 9936 1932 2684 70 26 4028 3990 194 9912 5216 4360 5868 1056 3840 3776 1812 8580 276 1908 5904 3672 3952 13482 7440 13080 8466 2910 2124 13570 132 4768 4464 1580 792 2860 680 6670 2900 10620 4158 8056 468 8544 3090 1344 12198 512 8580 1968 430 1304 2212 11798 60 9936 882 288 2144 610 2412
cat("Total pagado a los empleados:", r_sueldo$t_pago, "\n")
## Total pagado a los empleados: 426808

Ejercicio 8

Hacer un programa que muestre un cronometro, indicando las horas,minutos y segundos.

cr <- function() {
  horas <- minutos <- segundos <- 0
  tiempo_total <- 10  # Establece el tiempo total en segundos
  while (segundos < tiempo_total) {
    Sys.sleep(1)
    segundos <- segundos + 1
    if (segundos == 60) {
      segundos <- 0
      minutos <- minutos + 1
      if (minutos == 60) {
        minutos <- 0
        horas <- horas + 1
      }
    }
    cat("\r", sprintf("%02d:%02d:%02d", horas, minutos, segundos), flush = TRUE)
  }
  cat("\nContador ha llegado a 10 segundos.\n")
}
# Llama a la función cr
cr()
## 
 00:00:01 TRUE
 00:00:02 TRUE
 00:00:03 TRUE
 00:00:04 TRUE
 00:00:05 TRUE
 00:00:06 TRUE
 00:00:07 TRUE
 00:00:08 TRUE
 00:00:09 TRUE
 00:00:10 TRUE
## Contador ha llegado a 10 segundos.

Ejercicio 9

Realizar un ejemplo de menú, donde podemos escoger las distintas opciones hasta que seleccionamos la opción de “Salir”.

menu <- function() {
  opcion <- 0
  while (opcion != 3) {
    cat("1. Realizar tarea 1\n")
    cat("2. Realizar tarea 2\n")
    cat("3. Salir\n")
    #opcion <- as.integer(readline("Ingrese su opción: "))
    opcion <- sample(1:3,1,replace = F)
    if (opcion == 1) {
      cat("Realizando tarea 1...\n")
      # Código para la tarea 1
    } else if (opcion == 2) {
      cat("Realizando tarea 2...\n")
      # Código para la tarea 2
    } else if (opcion != 3) {
      cat("Opción inválida. Intente de nuevo.\n")
    }
  }
}
# Uso del programa
menu()
## 1. Realizar tarea 1
## 2. Realizar tarea 2
## 3. Salir
## Realizando tarea 1...
## 1. Realizar tarea 1
## 2. Realizar tarea 2
## 3. Salir
## Realizando tarea 2...
## 1. Realizar tarea 1
## 2. Realizar tarea 2
## 3. Salir
## Realizando tarea 2...
## 1. Realizar tarea 1
## 2. Realizar tarea 2
## 3. Salir
## Realizando tarea 1...
## 1. Realizar tarea 1
## 2. Realizar tarea 2
## 3. Salir
## Realizando tarea 1...
## 1. Realizar tarea 1
## 2. Realizar tarea 2
## 3. Salir

Ejercicio 10

Mostrar en pantalla los N primero número primos. Se pide por teclado la cantidad de números primos que queremos mostrar.

# Función para verificar si un número es primo
primo <- function(num) {
  if (num <= 1) {
    return(FALSE)
  }
  for (i in 2:sqrt(num)) {
    if (num %% i == 0) {
      return(FALSE)
    }
  }
  return(TRUE)
}
# Función para mostrar los primeros N números primos
f10 <- function(n) {
  primos_encontrados <- 0
  numero <- 2
  while (primos_encontrados < n) {
    if (primo(numero)) {
      cat(numero, " ")
      primos_encontrados <- primos_encontrados + 1
    }
    numero <- numero + 1
  }
}
# Uso del programa
#cantidad_primos <- as.integer(readline("Ingrese la cantidad de números primos que desea mostrar: "))
cantidad_primos <- sample(1:130,1,replace=F)
cat("Los primeros", cantidad_primos, "números primos son:\n")
## Los primeros 23 números primos son:
f10(cantidad_primos)
## 3  5  7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73  79  83  89