# PROGRAMA: "Paridad de un número"
<- 3
x if (x %% 2 == 0) {
cat(x, "es par")
else {
} cat(x, "es impar")
}
3 es impar
# PROGRAMA: "Paridad de un número"
<- 3
x if (x %% 2 == 0) {
cat(x, "es par")
else {
} cat(x, "es impar")
}
3 es impar
En el código anterior, realizamos una asignación explícita de un valor en la variable (x <- 3
). Esto nos permite hacer un uso más interactivo del código, que puede ser útil para probar si anda o cuando vamos corriendo por partes para detectar posibles errores.
Otra opción se muestra en el siguiente ejemplo. En lugar de asignarle un valor a x
como parte del script, indicamos que cuando el código sea ejecutado, el usuario deberá ingresar un valor con el teclado. Para esto empleamos la función scan()
. Su argumento n = 1
significa que el usuario sólo deberá ingresar un número, el cual será asignado a la variable x
. Teniendo un archivo de código con el programa como se muestra a continuación, podemos ejecutarlo de forma completa mediante el botón Source
de RStudio. Al llegar a la evaluación de scan()
, deberemos ingresar el valor que deseemos en la consola y dar Enter para que la ejecución continúe.
# PROGRAMA: "Paridad de un número"
cat("Ingrese un número entero: ")
<- scan(n = 1)
x if (x %% 2 == 0) {
cat(x, "es par")
else {
} cat(x, "es impar")
}
# PROGRAMA: "Mayor de tres números"
<- 5
x <- 5
y <- 7
z if (x >= y && x >= z) {
cat("El mayor es", x)
else if (y >= z) {
} cat("El mayor es", y)
else {
} cat("El mayor es", z)
}
El mayor es 7
Observación: se llega a la segunda evaluación lógica cuando y
es mayor a x
, o cuando z
es mayor que x
, o cuando ambos son mayores a x
, por lo tanto sólo es necesario saber cuál de ellos es el mayor.
# PROGRAMA: "Determinar salario"
# Valores fijados
<- 4000
valor_hora <- 2000
valor_adicional_noche <- 1000
valor_adicional_domingo
# Valores para un cálculo particular
<- 8
horas <- "MAR"
dia <- "T"
turno
# Cálculo para el pago de ese día a ese empleado
<- horas * valor_hora
salario if (turno == "N") {
<- salario + horas * valor_adicional_noche
salario
}if (turno == "DOM") {
<- salario + horas * valor_adicional_domingo
salario
}cat("El salario que se debe abonar es", salario)
El salario que se debe abonar es 32000
# PROGRAMA: "Convertir temperatura"
<- 20
temp <- "C a F"
modo if (modo == "C a F") {
<- temp * 9 / 5 + 32
temp_nuevo cat(temp, "ºC equivale a", temp_nuevo, "ºF")
else {
} <- (temp - 32) * 5 / 9
temp_nuevo cat(temp, "ºF equivale a", temp_nuevo, "ºC")
}
20 ºC equivale a 68 ºF
a.
# PROGRAMA: "Suma de los n primeros números naturales"
<- 10
n <- 0
suma for (i in 1:n) {
<- suma + i
suma
}cat("La suma de los primeros", n, "números naturales es", suma)
La suma de los primeros 10 números naturales es 55
b.
# PROGRAMA: "Suma de los cuadrados de los n primeros números naturales" -----
<- 10
n <- 0
suma for (i in 1:n) {
<- suma + i^2
suma
}cat("La suma de los primeros", n, "números naturales al cuadrado es", suma)
La suma de los primeros 10 números naturales al cuadrado es 385
c.
Sabemos el número de iteraciones, n
, por eso usamos for
. Por ejemplo, para n = 4
, los primeros impares son:
1 = 2 * 1 - 1
3 = 2 * 2 - 1
5 = 2 * 3 - 1
7 = 2 * 4 - 1
De forma general, los primeros 4 impares son 2 * i - 1
, con i = 1, 2, 3, 4
.
# PROGRAMA: "Producto de los n primeros números naturales impares" ----------
<- 10
n <- 1
producto for (i in 1:n) {
<- producto * (2 * i - 1)
producto
}cat("El producto de los primeros", n, "números naturales impares es", producto)
El producto de los primeros 10 números naturales impares es 654729075
Otra forma:
# PROGRAMA: "Producto de los n primeros números naturales impares" ----------
<- 10
n <- 1
producto for (i in seq(1, 2 * n - 1, 2)) {
<- producto * i
producto
}cat("El producto de los primeros", n, "números naturales impares es", producto)
El producto de los primeros 10 números naturales impares es 654729075
La función seq
crea un vector con una secuencia numérica. El formato con el que está utilizada aquí es seq(valor_inicial, valor_final, intervalo)
, por lo que creará un vector con los números impares (dado que el intervalo es 2, y comienza con un número impar) empezando desde 1
hasta 2 * n - 1
.
d.
# PROGRAMA: "Suma de los cubos de los n primeros números naturales pares"
<- 5
n <- 0
suma for (i in 1:n) {
<- suma + (2 * i)^3
suma
}cat("La suma de los cubos de los primeros", n, "números naturales pares es", suma)
La suma de los cubos de los primeros 5 números naturales pares es 1800
Utilizando estructura de control “PARA”
# PROGRAMA: "Calcular el factorial de n"
<- 0
n <- 1
factorial for (i in 1:n) {
<- factorial * i
factorial
}cat("El factorial de", n, "es", factorial)
El factorial de 0 es 0
Utilizando estructura de control “MIENTRAS QUE”
# PROGRAMA: "Calcular el factorial de n"
<- 0
n <- 1
factorial <- 0
i while(i < n) {
<- i + 1
i <- factorial * i
factorial
}cat("El factorial de", n, "es", factorial)
El factorial de 0 es 1
IMPORTANTE. Notar que la primera opción no arroja de forma correcta el factorial de 0, que por definición es igual a 1. Se podría agregar alguna estructura condicional para esta situación. La segunda opción, en cambio, funciona también para n <- 0
.
# PROGRAMA: "Secuencia de Fibonacci"
<- 0
termino1 <- 1
termino2 while (termino1 < 10000) {
print(termino1)
<- termino1 + termino2
termino3 <- termino2
termino1 <- termino3
termino2 }
[1] 0
[1] 1
[1] 1
[1] 2
[1] 3
[1] 5
[1] 8
[1] 13
[1] 21
[1] 34
[1] 55
[1] 89
[1] 144
[1] 233
[1] 377
[1] 610
[1] 987
[1] 1597
[1] 2584
[1] 4181
[1] 6765
Observar que:
while
se detiene cuando la combinación es mayor a 800.# PROGRAMA: "Lista de posibles combinaciones"
<- 100
combinacion
while (combinacion <= 800) {
if (combinacion %% 11 == 0 && combinacion %% 8 != 0) {
print(combinacion)
}<- combinacion + 1
combinacion }
[1] 110
[1] 121
[1] 132
[1] 143
[1] 154
[1] 165
[1] 187
[1] 198
[1] 209
[1] 220
[1] 231
[1] 242
[1] 253
[1] 275
[1] 286
[1] 297
[1] 308
[1] 319
[1] 330
[1] 341
[1] 363
[1] 374
[1] 385
[1] 396
[1] 407
[1] 418
[1] 429
[1] 451
[1] 462
[1] 473
[1] 484
[1] 495
[1] 506
[1] 517
[1] 539
[1] 550
[1] 561
[1] 572
[1] 583
[1] 594
[1] 605
[1] 627
[1] 638
[1] 649
[1] 660
[1] 671
[1] 682
[1] 693
[1] 715
[1] 726
[1] 737
[1] 748
[1] 759
[1] 770
[1] 781
Al final del primer año, la población será igual a:
\[ p0 + p0 \times \frac{tasa}{100} + inmigrantes = 1000 + 1000 * 0.02 + 50 = 1070 \]
Al final del 2º año, la población será:
\[ p0 + p0 \times \frac{tasa}{100} + inmigrantes = 1070 + 1070 * 0.02 + 50 = 1141.4 \cong 1141 \] Recordar que el número de habitantes es un entero, por lo cual tomamos la parte entera.
Al final del tercer año:
\[ p0 + p0 \times \frac{tasa}{100} + inmigrantes = 1141 + 1141 * 0.02 + 50 = 1213.82 \cong 1213 \]
Se necesitarán 3 años.
Haciendo la solución para el problema de forma más general:
# Parámetros a definir
<- 1000
p0 <- 1200
p_objetivo <- 2 # La expresamos en porcentaje
tasa <- 50
inmigrantes
# Programa
<- 0
año <- p0
poblacion while (poblacion < p_objetivo) {
# Aplicamos la fórmula y nos quedamos con la parte entera del resultado
<- floor(poblacion + poblacion * tasa / 100 + inmigrantes)
poblacion # Contamos un año más
<- año + 1
año
}cat(
" Con una población inicial de", p0,
"habitantes, una tasa de crecimiento anual del\n",
"% y", inmigrantes, "nuevos habitantes anuales, se necesitarán",
tasa, "años para alcanzar\n una población de", p_objetivo,
año, "habitantes. Luego del año", año, "el pueblo contará con una\n población de",
"habitantes."
poblacion, )
Con una población inicial de 1000 habitantes, una tasa de crecimiento anual del
2 % y 50 nuevos habitantes anuales, se necesitarán 3 años para alcanzar
una población de 1200 habitantes. Luego del año 3 el pueblo contará con una
población de 1213 habitantes.
# Parámetros a definir
<- 10000
p0 <- 50000
p_objetivo <- 3 # La expresamos en porcentaje
tasa <- 100
inmigrantes
# Programa
<- 0
año <- p0
poblacion while (poblacion < p_objetivo) {
# Aplicamos la fórmula y nos quedamos con la parte entera del resultado
<- floor(poblacion + poblacion * tasa / 100 + inmigrantes)
poblacion # Contamos un año más
<- año + 1
año
}cat(
" Con una población inicial de", p0,
"habitantes, una tasa de crecimiento anual del\n",
"% y", inmigrantes, "nuevos habitantes anuales, se necesitarán",
tasa, "años para alcanzar\n una población de", p_objetivo,
año, "habitantes. Luego del año", año, "el pueblo contará con una\n población de",
"habitantes."
poblacion, )
Con una población inicial de 10000 habitantes, una tasa de crecimiento anual del
3 % y 100 nuevos habitantes anuales, se necesitarán 47 años para alcanzar
una población de 50000 habitantes. Luego del año 47 el pueblo contará con una
población de 50116 habitantes.