UNIVERSIDAD CENTRAL DEL ECUADOR
Facultad de Ciencias Económicas
Carrera de Ingeniería en Estadística
Materia: Programación
El presente taller tiene como propósito fundamental reforzar los
conocimientos en programación básica en R, con énfasis
en el uso de estructuras como condicionales
(if, else), bucles (for,
while), y funciones de entrada/salida de datos
(readline(), cat(), print(),
etc.). Este taller representa una herramienta didáctica que permite
aplicar la teoría vista en clase mediante ejercicios
prácticos, incentivando el pensamiento lógico y el razonamiento
algorítmico. Asimismo, refuerza la capacidad de los estudiantes para
interactuar con el usuario, procesar datos ingresados y generar salidas
ordenadas y comprensibles. Además, se promueve el uso de buenas
prácticas de programación, como la organización del código, la
validación de entradas, y la interpretación adecuada de los resultados
generados por el script.
Cada sección del taller incluye:
Un enunciado claro del ejercicio propuesto.
El script en R que resuelve el problema.
Una imagen ilustrativa que muestra la ejecución del programa.
Escribir un programa que lea un entero
positivo, n, introducido por el usuario y después muestre
en pantalla la suma de todos los enteros desde 1 hasta n.
La suma de los n primeros enteros positivos puede ser
calculada de la siguiente forma:suma = (n(n + 1)) / 2.
n <- as.numeric(readline("Ingrese un número entero positivo: "))
## Ingrese un número entero positivo:
if (!is.na(n) && n > 0 && floor(n) == n) {
suma <- (n * (n + 1)) / 2
cat("La suma de los enteros desde 1 hasta", n, "es:", suma, "\n")
} else {
cat("Error: Debe ingresar un número entero positivo.\n")
}
## Error: Debe ingresar un número entero positivo.
Calcular el área del triángulo rectángulo dadas su base y altura.
# Solicitar la base y la altura al usuario
base <- as.numeric(readline(prompt = "Ingrese la base del triángulo: "))
## Ingrese la base del triángulo:
altura <- as.numeric(readline(prompt = "Ingrese la altura del triángulo: "))
## Ingrese la altura del triángulo:
# Calcular el área
area <- (base * altura) / 2
# Mostrar el resultado
cat("El área del triángulo rectángulo es:", area, "\n")
## El área del triángulo rectángulo es: NA
Escribe un programa que solicite los catetos de un triángulo rectángulo y muestre su hipotenusa
# Solicitar los catetos al usuario
cateto1 <- as.numeric(readline(prompt = "Ingrese el valor del primer cateto: "))
## Ingrese el valor del primer cateto:
cateto2 <- as.numeric(readline(prompt = "Ingrese el valor del segundo cateto: "))
## Ingrese el valor del segundo cateto:
# Calcular la hipotenusa
hipotenusa <- sqrt(cateto1^2 + cateto2^2)
# Mostrar el resultado
cat("La hipotenusa del triángulo es:", hipotenusa, "\n")
## La hipotenusa del triángulo es: NA
Escribir un programa que pida al usuario su peso (en kg)
y estatura (en metros), calcule el índice de masa corporal y lo almacene
en una variable, y muestre por pantalla la frase Tu índice de masa
corporal es
# Pedir al usuario su peso en kg
peso <- as.numeric(readline(prompt = "Ingrese su peso en kg: "))
## Ingrese su peso en kg:
# Pedir al usuario su estatura en metros
estatura <- as.numeric(readline(prompt = "Ingrese su estatura en metros: "))
## Ingrese su estatura en metros:
# Calcular el índice de masa corporal (IMC)
imc <- peso / (estatura^2)
# Redondear el IMC a dos decimales
imc_redondeado <- round(imc, 2)
# Mostrar el resultado por pantalla
cat("Tu índice de masa corporal es", imc_redondeado, "\n")
## Tu índice de masa corporal es NA
Escribir un programa que pregunte al usuario una cantidad a invertir, el interés anual y el número de años, y muestre por pantalla el capital obtenido en la inversión
# Preguntar al usuario la cantidad a invertir
cantidad_invertir <- as.numeric(readline(prompt = "Ingrese la cantidad a invertir: "))
## Ingrese la cantidad a invertir:
# Preguntar al usuario el interés anual (en porcentaje)
interes_anual_porcentaje <- as.numeric(readline(prompt = "Ingrese el interés anual (en porcentaje): "))
## Ingrese el interés anual (en porcentaje):
# Convertir el interés anual a decimal
interes_anual_decimal <- interes_anual_porcentaje / 100
# Preguntar al usuario el número de años
num_anios <- as.integer(readline(prompt = "Ingrese el número de años: "))
## Ingrese el número de años:
# Calcular el capital obtenido (interés compuesto anual)
capital_obtenido <- cantidad_invertir * (1 + interes_anual_decimal)^num_anios
# Mostrar el capital obtenido redondeado a dos decimales
capital_redondeado <- round(capital_obtenido, 2)
cat("El capital obtenido en la inversión después de", num_anios, "años es:", capital_redondeado, "\n")
## El capital obtenido en la inversión después de NA años es: NA
Realizar un programa que pida el tiempo ya sea en horas, minutos o segundos, luego indicar en qué tipo de tiempo desea transformar y luego presentar el resultado
# Preguntar el tiempo y la unidad inicial
tiempo_str <- readline(prompt = "Ingrese el tiempo (ej: 5 horas): ")
## Ingrese el tiempo (ej: 5 horas):
# Separar el número y la unidad
partes <- strsplit(trimws(tiempo_str), "\\s+")[[1]] # trimws elimina espacios al inicio/final, \\s+ divide por uno o más espacios
if (length(partes) != 2 || is.na(as.numeric(partes[1]))) {
cat("Formato de entrada incorrecto. Por favor, ingrese el tiempo como 'cantidad unidad' (ej: 5 horas).\n")
} else {
cantidad <- as.numeric(partes[1])
unidad_inicial <- tolower(partes[2]) # Convertir a minúsculas para comparar
# Preguntar la unidad de destino
unidad_destino <- tolower(readline(prompt = "Ingrese la unidad a la que desea convertir (horas, minutos, segundos): "))
# Realizar la conversión
if (unidad_inicial %in% c("hora", "horas") && unidad_destino %in% c("minuto", "minutos")) {
resultado <- cantidad * 60
mensaje <- paste(cantidad, "hora(s) son", resultado, "minuto(s).")
} else if (unidad_inicial %in% c("hora", "horas") && unidad_destino %in% c("segundo", "segundos")) {
resultado <- cantidad * 3600
mensaje <- paste(cantidad, "hora(s) son", resultado, "segundo(s).")
} else if (unidad_inicial %in% c("minuto", "minutos") && unidad_destino %in% c("hora", "horas")) {
resultado <- cantidad / 60
mensaje <- paste(cantidad, "minuto(s) son", resultado, "hora(s).")
} else if (unidad_inicial %in% c("minuto", "minutos") && unidad_destino %in% c("segundo", "segundos")) {
resultado <- cantidad * 60
mensaje <- paste(cantidad, "minuto(s) son", resultado, "segundo(s).")
} else if (unidad_inicial %in% c("segundo", "segundos") && unidad_destino %in% c("hora", "horas")) {
resultado <- cantidad / 3600
mensaje <- paste(cantidad, "segundo(s) son", resultado, "hora(s).")
} else if (unidad_inicial %in% c("segundo", "segundos") && unidad_destino %in% c("minuto", "minutos")) {
resultado <- cantidad / 60
mensaje <- paste(cantidad, "segundo(s) son", resultado, "minuto(s).")
} else if (unidad_inicial %in% c("hora", "horas") && unidad_destino %in% c("hora", "horas")) {
mensaje <- paste(cantidad, "hora(s) son", cantidad, "hora(s).")
} else if (unidad_inicial %in% c("minuto", "minutos") && unidad_destino %in% c("minuto", "minutos")) {
mensaje <- paste(cantidad, "minuto(s) son", cantidad, "minuto(s).")
} else if (unidad_inicial %in% c("segundo", "segundos") && unidad_destino %in% c("segundo", "segundos")) {
mensaje <- paste(cantidad, "segundo(s) son", cantidad, "segundo(s).")
} else if (!unidad_destino %in% c("hora", "horas", "minuto", "minutos", "segundo", "segundos")) {
mensaje <- "Unidad de destino no válida. Por favor, ingrese horas, minutos o segundos."
} else {
mensaje <- "Unidad de tiempo inicial no válida. Por favor, ingrese horas, minutos o segundos después de la cantidad."
}
# Mostrar el resultado
cat(mensaje, "\n")
}
## Formato de entrada incorrecto. Por favor, ingrese el tiempo como 'cantidad unidad' (ej: 5 horas).
Calcule el área y perímetro de un trapecio dados su base mayor, base menor y altura.
#Solicitar entradas al usuario
base_mayor <- as.numeric(readline(prompt = "Ingresa la base mayor: "))
base_menor <- as.numeric(readline(prompt = "Ingresa la base menor: "))
altura <- as.numeric(readline(prompt = "Ingresa la altura: "))
# Calcular el área
area <- (base_mayor + base_menor) * altura / 2
Página 11 de 16
# Calcular el lado oblicuo (asumiendo trapecio isósceles)
lado_oblicuo <- sqrt(((base_mayor - base_menor) / 2)^2 + altura^2)
# Calcular el perímetro
perimetro <- base_mayor + base_menor + 2 * lado_oblicuo
# Mostrar resultados
cat("Área del trapecio:", area, "\n")
cat("Perímetro del trapecio:", perimetro, "\n")
Escribir un programa que calcule el factorial de un número que ha sido digitado por el usuario
Pedir al usuario que ingrese un número
numero <- as.integer(readline(prompt = "Ingrese un número: "))
#Verificar si el número es válido
if (is.na(numero)) {
cat("Error: No ingresaste un número válido.\n")
} else if (numero < 0) {
cat("No se puede calcular el factorial de un número negativo.\n")
} else {
#Calcular el factorial
factorial <- 1
for (i in 1:numero) {
factorial <- factorial * i
}
#Mostrar el resultado
cat("El factorial de", numero, "es:", factorial, "\n")
}
Escribe un programa que lea dos números y muestre su suma, resta, multiplicación y división.
# Leer los dos números
num1 <- as.numeric(readline(prompt = "Ingresa el primer número: "))
num2 <- as.numeric(readline(prompt = "Ingresa el segundo número: "))
# Operaciones
suma <- num1 + num2
resta <- num1 - num2
multiplicacion <- num1 * num2
# División con verificación para evitar dividir por 0
if (num2 != 0) {
division <- num1 / num2
cat("División:", division, "\n")
} else {
cat("No se puede dividir entre cero.\n")
}
# Mostrar resultados
cat("Suma:", suma, "\n")
cat("Resta:", resta, "\n")
cat("Multiplicación:", multiplicacion, "\n")
Realice un programa que pida una cantidad en dólares y muestre el IVA (12%) y el valor total a pagar.
# Leer la cantidad en dólares
cantidad <- as.numeric(readline(prompt = "Ingresa la cantidad en dólares: "))
# Calcular el IVA (12%)
iva <- cantidad * 0.12
# Calcular el total a pagar
total <- cantidad + iva
# Mostrar los resultados
cat("IVA (12%): $", round(iva, 2), "\n")
cat("Total a pagar: $", round(total, 2), "\n")
getwd()