UNIVERSIDAD CENTRAL DEL ECUADOR

                            Facultad de Ciencias Económicas

                        Colaborador: Ing. Francisco Valverde PhD

EJERCICIOS EN R

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.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
El comando if (si) es usado cuando deseamos que una operación se ejecute únicamente cuando una condición se cumple.
El comando else (de otro modo) es usado para indicarle a R qué hacer en caso de la condición de un if no se cumpla.
is.prime <- function(num) {
   if (num == 2) {
      TRUE
     j<-print(" Es número primo")
   } else if (any(num %% 2:(num-1) == 0)) {
      FALSE
     j<-print(" No es número primo")
   } else { 
      TRUE
     j<-print(" Es número primo")
   }
}

is.prime(5)
## [1] " Es 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.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
La función data.frame()crea marcos de datos, colecciones de variables estrechamente acopladas que comparten muchas de las propiedades de las matrices y las listas, utilizadas como estructura de datos fundamental por la mayoría del software de modelado de R.
La función cat() convierte sus argumentos en cadenas de caracteres, los concatena, separándolos por la cadena sep= dada y luego los imprime.
ahorros<-function(a){
  print("DEPOSITO ANUAL")
 MESES<-c("ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNEO",
           "JULIO","AGOSTO","SEPTIEMBRE","OCTUBRE","NOVIEMBRE","DICIEMBRE")
  DEPOSITOS_M<-round(runif(12,min = 250,max = 500),2)
  DATOS<-data.frame(MESES,DEPOSITOS_M)
  print(DATOS)
  cat("TOTAL DE DEPOSITO ANUAL : ",sum(DEPOSITOS_M))
}
depositosA<-ahorros(a)
## [1] "DEPOSITO ANUAL"
##         MESES DEPOSITOS_M
## 1       ENERO      300.42
## 2     FEBRERO      291.62
## 3       MARZO      403.80
## 4       ABRIL      376.87
## 5        MAYO      487.02
## 6       JUNEO      474.19
## 7       JULIO      304.79
## 8      AGOSTO      485.25
## 9  SEPTIEMBRE      446.63
## 10    OCTUBRE      289.52
## 11  NOVIEMBRE      398.72
## 12  DICIEMBRE      250.49
## TOTAL DE DEPOSITO ANUAL :  4509.32

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.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
La función data.frame()crea marcos de datos, colecciones de variables estrechamente acopladas que comparten muchas de las propiedades de las matrices y las listas, utilizadas como estructura de datos fundamental por la mayoría del software de modelado de R.
La función cat() convierte sus argumentos en cadenas de caracteres, los concatena, separándolos por la cadena sep= dada y luego los imprime.
horas<-function(h){
  DIAS<-c("lunes","martes","miercoles","jueves","viernes","sabado")
  print("Horas durante la semana")
  HORAS<-round(runif(6,min = 8,max = 9),0)
  print("Sueldos por hora")
  SUELDO<-round(runif(6,min = 20,max = 25),2)
  REGISTRO<-data.frame(DIAS,HORAS,SUELDO)
  print(REGISTRO)
  
  cat("TOTAL DE SUELDO POR EL TRABAJO EN LA SEMANA : ",sum(SUELDO))
  
}

total<-horas(h)
## [1] "Horas durante la semana"
## [1] "Sueldos por hora"
##        DIAS HORAS SUELDO
## 1     lunes     8  24.60
## 2    martes     9  20.68
## 3 miercoles     8  23.38
## 4    jueves     9  22.98
## 5   viernes     9  24.06
## 6    sabado     8  22.96
## TOTAL DE SUELDO POR EL TRABAJO EN LA SEMANA :  138.66

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.
Funciones:
La función while(), es una función diseñada para ejecutar algún código hasta que se cumpla una condición. Mientras la condición lógica sea TRUE, el código no dejará de ejecutarse. Este tipo de bucle es muy útil para estudios de simulación.
La función paste(), nos permite concatenar cadenas de texto con R: Interesantes funciones que nos pueden permitir automatizar códigos recursivos o códigos guardados como objetos en R.
pa<-70
pb<- 150
d<- pb - pa
while (d>0){
  pa<- pa + 1
  pb<- pb -1
  d<- pb - pa
}
paste("El punto de encuentro es en el kilómetro:", pa)
## [1] "El punto de encuentro es en el kilómetro: 110"

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..
Funciones:

#####La función for(), también conocido como ciclo for, es una iteración repetitiva (en bucle) de cualquier código, donde en cada iteración se evalúa un mismo código a través de los elementos de un vector o lista. También puedes escribir un bucle for en una sola línea de código sin corchetes.

La función paste(), nos permite concatenar cadenas de texto con R: Interesantes funciones que nos pueden permitir automatizar códigos recursivos o códigos guardados como objetos en R.
p<-  10
t<- 0
for(i in 1:20){
  p<- p*2
  t<- t + p
  paste("EN EL MES", i, "PAGARAS: $", p)
}
paste("EL TOTAL QUE PAGASTE EN 20 MESES ES DE: $", t)
## [1] "EL TOTAL QUE PAGASTE EN 20 MESES ES DE: $ 20971500"

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.
Funciones:
La función for(), también conocido como ciclo for, es una iteración repetitiva (en bucle) de cualquier código, donde en cada iteración se evalúa un mismo código a través de los elementos de un vector o lista. También puedes escribir un bucle for en una sola línea de código sin corchetes.
library("svDialogs")

empleados<- as.numeric(dlgInput(message="CUANTOS TRABAJADORES TIENE?")$res);empleados <-5
gasto_empresa<- 0
for(i in 1:empleados)
{
  horas<-as.numeric(dlgInput(message="CUANTAS HORAS TRABAJO A LA SEMANA?")$res); horas <-3
  gasto_empresa<- gasto_empresa + horas*2.50
  sueldo<- horas*2.50
  print(paste("EL EMPLEADO", i, "GANA SEMANAL: $", sueldo))
}
## [1] "EL EMPLEADO 1 GANA SEMANAL: $ 7.5"
## [1] "EL EMPLEADO 2 GANA SEMANAL: $ 7.5"
## [1] "EL EMPLEADO 3 GANA SEMANAL: $ 7.5"
## [1] "EL EMPLEADO 4 GANA SEMANAL: $ 7.5"
## [1] "EL EMPLEADO 5 GANA SEMANAL: $ 7.5"
print(paste("LA EMPRESA PAGO POR LOS", empleados, "EMPLEADOS", gasto_empresa)) 
## [1] "LA EMPRESA PAGO POR LOS 5 EMPLEADOS 37.5"

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.
Funciones:
La función for(), también conocido como ciclo for, es una iteración repetitiva (en bucle) de cualquier código, donde en cada iteración se evalúa un mismo código a través de los elementos de un vector o lista. También puedes escribir un bucle for en una sola línea de código sin corchetes.
trab<- as.numeric(dlgInput(message="CUANTOS EMPLEADOS TIENE?")$res) ; trab <- 5
pago<- 0
for(i in 1:trab)
{
  dias<- as.numeric(dlgInput(message="CUANTOS DIAS TRABAJO EN LA SEMANA?")$res); dias <- 7
  horas<- as.numeric(dlgInput(message="CUANTOS HORAS TRABAJO EN ESOS DIAS?")$res); horas <-4
  sueldo<- (dias*horas)*2.50
  pago<- pago+ (dias*horas)+ sueldo
  print(paste("EL EMPLEADO", i, "GANA SEMANAL: $", sueldo))
}
## [1] "EL EMPLEADO 1 GANA SEMANAL: $ 70"
## [1] "EL EMPLEADO 2 GANA SEMANAL: $ 70"
## [1] "EL EMPLEADO 3 GANA SEMANAL: $ 70"
## [1] "EL EMPLEADO 4 GANA SEMANAL: $ 70"
## [1] "EL EMPLEADO 5 GANA SEMANAL: $ 70"
print(paste("LA EMPRESA PAGA SEMANALMENTE POR LOS", trab, "EMPLEADOS: $", pago))
## [1] "LA EMPRESA PAGA SEMANALMENTE POR LOS 5 EMPLEADOS: $ 490"

Ejercicio 8.

Hacer un programa que muestre un cronometro, indicando las horas, minutos y segundos.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
El comando while es muy útil para repetir un procedimiento siempre que se cumple una condición.
library("svDialogs")

cronometro<- function(seg)
{
  print(seg)
 while(seg!=0)
  {
    Sys.sleep(1)
    seg<- seg-1
    print(seg)
 }
}

cronometro(5)
## [1] 5
## [1] 4
## [1] 3
## [1] 2
## [1] 1
## [1] 0
# cronometro(seg<-as.numeric(dlgInput(message="INGRESE UN NUMERO:")$res))

Ejercicio 9.

Realizar un ejemplo de menú, donde podemos escoger las distintas opciones hasta que seleccionamos la opción de “Salir”.
Funciones:
El comando dlgInputnos ayuda a crear una caja de entrada simple.
opc1<-dlgInput(message=
                 "***********************************************
                                  MENU DE OPCIONES?
***********************************************
*                                             
*                       1. OPCION 1           
*                       2. OPCION 2           
*                       3. OPCION 3           
*                       4. SALIR              
*                                             
***********************************************

*SELECCIONE UNA OPCION:*")$res

Ejercicio 10.

Mostrar en pantalla los N primero número primos. Se pide por teclado la cantidad de números primos que queremos mostrar.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
El bucle for en R, también conocido como ciclo for, es una iteración repetitiva (en bucle) de cualquier código, donde en cada iteración se evalúa un mismo código a través de los elementos de un vector o lista.
El comando if (si) es usado cuando deseamos que una operación se ejecute únicamente cuando una condición se cumple.
El comando else (de otro modo) es usado para indicarle a R qué hacer en caso de la condición de un if no se cumpla.
PRIMO<- function(num)
{
  primo<-numeric()
  no_primo<-numeric()
  for (i in 1:num)
  {
    if (sum(i/1:i==i%/%1:i)==2)
    {
      no_primo<-c(no_primo,i)
    } else
    {
      primo<-c(primo,i)
    }
  }
  primo
  no_primo
}
PRIMO(5)
## [1] 2 3 5
# PRIMO(num<-as.numeric(dlgInput(message="HASTA QUE NUMERO PRIMO QUIERE?")$res))