#-------------------------------------------------------- # Pregunta 1 #-------------------------------------------------------- # usando un ciclo for (anno in 2001:2100){ if ((anno %% 4 == 0 && anno %% 100 != 0) || anno %% 400 == 0){ print(anno) } } # usando vectores logicos { annos <- 2001:2100; annos <- annos[(annos %% 4 == 0 & annos %% 100 != 0) | annos %% 400 == 0] } #-------------------------------------------------------- # Pregunta 2 #-------------------------------------------------------- es_triangulo <- function(a, b, c){ if (c > a + b || b > a + c || a > b + c){ return(0) } else if (a == b && b == c){ return(1) } else if (a == b || b == c || a == c){ return(2) } else{ return(3) } } #-------------------------------------------------------- # Pregunta 3 #-------------------------------------------------------- # tambien se puede implementar usando ciclos correlacion <- function(x, y){ n <- length(x) (n * sum(x * y) - sum(x) * sum(y))/sqrt((n * sum(x^2) - (sum(x))^2) * (n * sum(y^2) - (sum(y))^2)) } #-------------------------------------------------------- # Pregunta 4 #-------------------------------------------------------- # funcion para calcular la distancia entre dos puntos distancia <- function(x1, x2, y1, y2){ sqrt((x2 - x1)^2 + (y2 - y1)^2) } perimetro <- function(x, y){ n <- length(x) p <- 0 for (i in 1:n){ # usando %% para incluir caso borde (vertices 1 y n) p <- p + distancia(x[i], x[(i %% n) + 1], y[i], y[(i %% n) + 1]) } p } perimetro2 <- function(x, y){ n <- length(x) p <- 0 # calcular perimetero para primeros n-1 lados for (i in 1:(n - 1)){ p <- p + distancia(x[i], x[i + 1], y[i], y[i + 1]) } # sumar el ultimo lado p <- p + distancia(x[1], x[n], y[1], y[n]) } #-------------------------------------------------------- # Pregunta 5 #-------------------------------------------------------- # pueden comparar el resultado de su funcion con el valor de exp(1) aprox_euler <- function(epsilon = 0.0001){ # primer termino: 1/0! e <- 1 # segundo termino i <- 1; term_anterior <- 1/factorial(i) e <- e + term_anterior # tercer termino i <- i + 1; term_actual <- 1/factorial(i) e <- e + term_actual while(term_anterior - term_actual >= epsilon){ # termino actual se convierte en el anterior term_anterior <- term_actual # y calculamos el siguiente termino i <- i + 1; term_actual <- 1/factorial(i) e <- e + term_actual } e }