Lea dos números enteros y muestre su producto
ProdInteger <- function(a,b){
if(is.integer(a) && is.integer(b)){
return(a*b)
}else{
stop("Ingrese número enteros")
}
}
ProdInteger(6,19)
## Error in ProdInteger(6, 19): Ingrese número enteros
ProdInteger(6L,19L)
## [1] 114
Lea dos números y muestre su producto.
Producto <- function(a,b) a*b
Producto(6,19)
## [1] 114
Producto(6L,19L)
## [1] 114
Producto(23.76,0.128)
## [1] 3.04128
Lea el radio de un círculo y muestre su área.
ACirc <- function(radio) pi*(radio^2)
ACirc(10)
## [1] 314.1593
ACirc(34.8)
## [1] 3804.594
Lea el nombre de una persona y responda con un saludo.
saludo <- function(nombre){
if(is.character(nombre)){
cat("Hola",nombre,"\n¿Cómo estás?")
}else{
stop(paste(nombre,"No es un nombre"))
}
}
saludo(1231)
## Error in saludo(1231): 1231 No es un nombre
saludo("Natalia")
## Hola Natalia
## ¿Cómo estás?
Lea un número real y muestre su valor absoluto, sin utilizar estructuras y sin funciones predeterminadas.
ValAbs <- function(x) return(((x)^2)^(1/2))
ValAbs(7.65)
## [1] 7.65
ValAbs(-5.922)
## [1] 5.922
Lea las tres coordenadas de los vértices de un tríangulo y que muestre el área del mismo utilizando la fórmula de Herón. Incluya una función que halle la distancia entre dos puntos dados los vértices.
AHeron <- function(x1,x2,y1,y2,z1,z2){
a <- sqrt((x1-y1)^2+(x2-y2)^2)
b <- sqrt((y1-z1)^2+(y2-z2)^2)
c <- sqrt((x1-z1)^2+(x2-z2)^2)
s <- (a+b+c)/2
area <- sqrt(s*(s-a)*(s-b)*(s-c))
return(area)
}
AHeron(1,5,4,7,6,8)
## [1] 0.5
# Otra forma
AHeron2 <- function(x,y,z){
if(length(x)==2 & length(y)==2 & length(z)==2){
a <- sqrt((x[1]-y[1])^2+(x[2]-y[2])^2)
b <- sqrt((y[1]-z[1])^2+(y[2]-z[2])^2)
c <- sqrt((x[1]-z[1])^2+(x[2]-z[2])^2)
s <- (a+b+c)/2
area <- sqrt(s*(s-a)*(s-b)*(s-c))
return(area)
}else{
stop("Ingrese coordenadas")
}
}
AHeron2(1,5,4,7,6,8)
## Error in AHeron2(1, 5, 4, 7, 6, 8): unused arguments (7, 6, 8)
AHeron2(c(1,5),c(4,7),c(6,8))
## [1] 0.5
Lea un número entero y que muestre un cero (0) si el número es par y un uno (1) sin el número es impar, (Sin utilizar ni la estructura de decisión o la de repetición).
ParImpar <- function(a) return(ifelse(a%%2,1,0))
ParImpar(4576)
## [1] 0
ParImpar(3457)
## [1] 1
Lea un número entero de tres cifras y muestre el mísmo número pero con los dígitos invertidos (sin utilizar el tipo sarta).
InvertNum3 <- function(x){
if(floor(log10(x))==2){
ini <- x
fin <- 0
for(i in 2:0){
fin <- fin+(ini%/%10^i)*10^(2-i)
ini <- ini-(ini%/%10^i)*10^i
}
return(fin)
}else{
stop("Ingrese un número de 3 cifras")
}
}
InvertNum3(9234)
## Error in InvertNum3(9234): Ingrese un número de 3 cifras
InvertNum3(678)
## [1] 876
Lea una matriz y muestre su transpuesta, si utilizar funciones predeterminadas.
transpuesta <- function(A){
if(is.matrix(A)){
B <- matrix(c(A),ncol = nrow(A),nrow = ncol(A),byrow = T)
return(B)
}else{
stop("Ingrese una matriz")
}
}
(A <- matrix(c(3,5,7,8,12,2),ncol=3))
## [,1] [,2] [,3]
## [1,] 3 7 12
## [2,] 5 8 2
transpuesta(A)
## [,1] [,2]
## [1,] 3 5
## [2,] 7 8
## [3,] 12 2
(A <- matrix(c(3,5,7,8,12,2),ncol=2))
## [,1] [,2]
## [1,] 3 8
## [2,] 5 12
## [3,] 7 2
transpuesta(A)
## [,1] [,2] [,3]
## [1,] 3 5 7
## [2,] 8 12 2
Construya una algoritmo que halle la aproximación a la raíz de un número de la siguiente manera: Lea un número al cual se le hallará la raíz, y luego lea un número cualquiera como primera aproximación a la raíz del número (se supone ser positivo mayor de cero). Halle la división del número inicial entre el número aproximado. Luego halle el promedio entre el número aproximado y el número obtenido de la división anterior. Este promedio es de nuevo un valor aproximado a la raíz. Continuar el proceso hasta que la aproximación sea correcta en el orden de las millonésimas y reporte el número de iteraciones. (No utilizar el operador exponente ^ ni la función sqrt()).
raiz <- function(num,aprox,tol=1e-5){
if(aprox>0){
ini <- num/aprox
pro <- mean(c(aprox,ini))
tol2 <- abs(aprox-pro)
while (tol2>=tol) {
aprox <- pro
ini <- num/aprox
pro <- mean(c(aprox,ini))
tol2 <- abs(aprox-pro)
}
}else{
stop("La aproximación debe ser mayor a 0")
}
return(pro)
}
raiz(2,1)
## [1] 1.414214
raiz(6,2)
## [1] 2.44949
raiz(20,3)
## [1] 4.472136
Dado las dimensiones de una matriz (n filas, m columnas), mostrar los índices de la matriz en forma de zig-zag (vertical), comenzando por la posición [1][1].
ZigZag <- function(col,row){
col <- as.integer(col)
row <- as.integer(row)
x <- matrix(seq(1,col*row),ncol = col,nrow = row,byrow = T)
y <- NULL
for(i in 1:row){
if(i%%2 == 1){
for(j in 1:col){
y <- c(y,x[i,j])
}
}else{
for(j in col:1){
y <- c(y,x[i,j])
}
}
}
list(Matriz=x,ZigZag=y)
}
ZigZag(4,5)
## $Matriz
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [4,] 13 14 15 16
## [5,] 17 18 19 20
##
## $ZigZag
## [1] 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13 17 18 19 20
ZigZag(6,6)
## $Matriz
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 2 3 4 5 6
## [2,] 7 8 9 10 11 12
## [3,] 13 14 15 16 17 18
## [4,] 19 20 21 22 23 24
## [5,] 25 26 27 28 29 30
## [6,] 31 32 33 34 35 36
##
## $ZigZag
## [1] 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 16 17 18 24 23 22 21 20 19 25
## [26] 26 27 28 29 30 36 35 34 33 32 31
ZigZag(3,3)
## $Matriz
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
##
## $ZigZag
## [1] 1 2 3 6 5 4 7 8 9
Construya una función que ingrese una posición y muestre su representación en la sucesión de Fibonacci.
fibonacci <- function(x){
fib <- seq(1,as.integer(x))
fib[1] <- 1
fib[2] <- 1
for(i in 3:length(fib)){
fib[i] <- fib[i-1]+fib[i-2]
}
return(fib)
}
fibonacci(4)
## [1] 1 1 2 3
fibonacci(20)
## [1] 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
## [16] 987 1597 2584 4181 6765
Dado un número encuentre su factorial.
NFactorial <- function(x){
f <- 1
if(x<0){
stop("No existe factorial")
}else if(x == 0){
return(f)
}else{
for(i in 1:x){
f <- f*i
}
}
return(f)
}
NFactorial(0)
## [1] 1
NFactorial(5)
## [1] 120
# Otra forma
NFact2 <- function(x) gamma(x+1)
NFact2(0)
## [1] 1
NFact2(5)
## [1] 120
Dado un número encuentre los números primos hasta ese número, puede apoyarse en la Criba de Eratóstenes.
Primos <- function(x){
if(x>1){
n <- seq(2,x)
pri <- 1
for(i in n){
if(any(n==i)){
pri <- c(pri,i)
n <- c(n[(n %% i) !=0],i)
}
}
return(pri)
}else if(x==1){
return(pri)
}else{
stop("El número debe ser mayor que 0")
}
}
Primos(0)
## Error in Primos(0): El número debe ser mayor que 0
Primos(13)
## [1] 1 2 3 5 7 11 13
Primos(567)
## [1] 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59
## [19] 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149
## [37] 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241
## [55] 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353
## [73] 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461
## [91] 463 467 479 487 491 499 503 509 521 523 541 547 557 563