Skip to content

Commit b5c03ca

Browse files
committed
#[03] - [R]
#[03] - [R]
1 parent 7281f39 commit b5c03ca

File tree

1 file changed

+323
-0
lines changed

1 file changed

+323
-0
lines changed
Lines changed: 323 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,323 @@
1+
#
2+
# EJERCICIO:
3+
# - Muestra ejemplos de creación de todas las estructuras soportadas por defecto en tu lenguaje.
4+
# - Utiliza operaciones de inserción, borrado, actualización y ordenación.
5+
#
6+
7+
### Estructuras de datos
8+
9+
## Vector
10+
11+
# Creacion
12+
13+
vector_de_numeros <- c(1:10)
14+
15+
vector_de_numeros
16+
17+
# Insercion
18+
19+
vector_de_numeros <- c(vector_de_numeros, 11:20)
20+
21+
vector_de_numeros
22+
23+
# Borrado
24+
25+
vector_de_numeros <- vector_de_numeros[-(5:15)]
26+
27+
vector_de_numeros
28+
29+
# Actualizacion
30+
31+
vector_de_numeros <- vector_de_numeros * 5
32+
33+
vector_de_numeros
34+
35+
# Ordenacion
36+
37+
vector_de_numeros <- sort(vector_de_numeros, decreasing = TRUE)
38+
39+
vector_de_numeros
40+
41+
## Lista
42+
43+
# Creacion
44+
45+
lista <- list(
46+
string = "hola",
47+
enteros = 1:10,
48+
booleano = TRUE,
49+
lista_pequeña = list("chao", 11:20, FALSE)
50+
)
51+
52+
lista
53+
54+
# Insercion
55+
56+
lista <- list(lista, complejo = 5i)
57+
58+
lista
59+
60+
# Borrado
61+
62+
lista <- lista[-1]
63+
64+
lista
65+
66+
# Actualizacion
67+
68+
lista$booleano <- TRUE
69+
70+
lista
71+
72+
# Ordenacion
73+
74+
lista <- lista[order(unlist(lista), decreasing = TRUE)]
75+
76+
lista
77+
78+
## Data frame
79+
80+
# Creacion
81+
82+
data_frame <- data.frame(
83+
"Materias" = c(
84+
"Matematica",
85+
"Estadistica",
86+
"Computacion"
87+
),
88+
"Notas" = sample(1:20,
89+
size = 3,
90+
replace = TRUE
91+
)
92+
)
93+
data_frame
94+
95+
# Insercion
96+
97+
data_frame <- cbind(data_frame, "Semestre" = "I")
98+
99+
data_frame
100+
101+
# Borrado
102+
103+
data_frame <- data_frame[1:2]
104+
105+
data_frame
106+
107+
# Actualizacion
108+
109+
data_frame$Notas <- data_frame$Notas / 2
110+
111+
data_frame
112+
113+
# Ordenacion
114+
115+
data_frame <- sort_by(
116+
x = data_frame,
117+
y = data_frame$Notas
118+
)
119+
120+
data_frame
121+
122+
## Matrix
123+
124+
# Creacion
125+
126+
matrix <- matrix(c(1:9),
127+
nrow = 3,
128+
ncol = 3
129+
)
130+
matrix
131+
132+
# Insercion
133+
134+
matrix <- cbind(matrix, c(10:12))
135+
136+
matrix
137+
138+
# Borrado
139+
140+
matrix <- matrix[1:3, 2:3]
141+
142+
matrix
143+
144+
# Actualizacion
145+
146+
matrix <- matrix^2
147+
148+
matrix
149+
150+
# Ordenacion
151+
152+
matrix <- sort(x = matrix)
153+
154+
matrix
155+
156+
## Factor
157+
158+
# Creacion
159+
160+
factor <- factor(c(
161+
"Carro",
162+
"Moto"
163+
))
164+
165+
factor
166+
167+
# Insercion
168+
169+
factor <- factor(c(as.character(factor), "Barco"))
170+
171+
factor
172+
173+
# Borrado
174+
175+
factor <- factor[-2]
176+
177+
factor <- droplevels(factor)
178+
179+
factor
180+
181+
# Actualizacion
182+
183+
factor <- factor(paste0(as.character(factor), " azul"))
184+
185+
factor
186+
levels(factor)
187+
188+
# Ordenacion
189+
190+
factor <- factor(factor, levels = sort(levels(factor), decreasing = TRUE))
191+
192+
factor
193+
194+
195+
# DIFICULTAD EXTRA (opcional):
196+
# Crea una agenda de contactos por terminal.
197+
# - Debes implementar funcionalidades de búsqueda, inserción, actualización y eliminación de contactos.
198+
# - Cada contacto debe tener un nombre y un número de teléfono.
199+
# - El programa solicita en primer lugar cuál es la operación que se quiere realizar, y a continuación
200+
# los datos necesarios para llevarla a cabo.
201+
# - El programa no puede dejar introducir números de teléfono no númericos y con más de 11 dígitos.
202+
# (o el número de dígitos que quieras)
203+
# - También se debe proponer una operación de finalización del programa.
204+
#
205+
206+
# Crear un data frame para la agenda
207+
208+
## Para crear la agenda, me apoyé en otras funciones:
209+
## La primera genera nombres aleatorios usados en EEUU (paquete "babynames").
210+
## La segunda genera numeros de teléfono falsos con un formato similar al usado en Venezuela.
211+
## La tercera se usa para validar que los números de teléfono sean numericos y que su longitud sea de 11.
212+
213+
library(babynames)
214+
library(tidyverse)
215+
216+
generar_tlf <- function(x) {
217+
numero <- c()
218+
219+
for (i in 1:x) {
220+
digitos <- sprintf("%07d", sample(0000000:9999999, size = 1))
221+
numero <- c(numero, paste0("0422", digitos))
222+
}
223+
numero
224+
}
225+
226+
construir_agenda <- function(x = 10) {
227+
228+
agenda <<-data.frame(
229+
"Nombre" = sample(c(unique(babynames::babynames$name)), size = x),
230+
"Telefono" = sample(c(generar_tlf(x)))
231+
)
232+
}
233+
234+
validar_telefono <- function(telefono) {
235+
return(grepl("^[0-9]{11}$", telefono))
236+
}
237+
238+
239+
construir_agenda()
240+
241+
revisar_agenda <- function() {
242+
repeat {
243+
cat("Selecciona una operación: 1) Buscar 2) Insertar 3) Actualizar 4) Eliminar 5) Salir\n")
244+
opcion <- readLines(con = stdin(), n = 1)
245+
246+
if (opcion == "1") {
247+
cat("Ingresa el nombre de la persona: (ej: Daniel, sin comillas)\n")
248+
249+
buscar_nombre <- readLines(con = stdin(), n = 1)
250+
251+
while (!(buscar_nombre %in% agenda$Nombre)) {
252+
cat("Ese nombre no está en la agenda, por favor, intenta nuevamente:")
253+
buscar_nombre <- readLines(con = stdin(), n = 1)
254+
}
255+
256+
print(agenda %>% filter(Nombre == buscar_nombre))
257+
258+
cat("\nRegresarás al menú principal.\n\n")
259+
260+
} else if (opcion == "2") {
261+
cat("Ingresa el nombre de la persona que quieres agregar: (ej: Daniel, sin comillas)\n")
262+
263+
agregar_nombre <- readLines(con = stdin(), n = 1)
264+
265+
cat("Ingresa el número de teléfono: (ej: 04221234567)\n")
266+
267+
agregar_numero <- readLines(con = stdin(), n = 1)
268+
269+
while (validar_telefono(agregar_numero) == FALSE) {
270+
cat("Ese teléfono no es válido, por favor, intenta nuevamente:")
271+
agregar_numero <- readLines(con = stdin(), n = 1)
272+
}
273+
274+
agenda <<- rbind(agenda, c(agregar_nombre, agregar_numero))
275+
276+
cat("\nEl número de", agregar_nombre, "fue agregado con éxito. Regresarás al menú principal.\n\n")
277+
278+
} else if (opcion == "3") {
279+
cat("Ingresa el nombre de la persona que quieres actualizar: (ej: Daniel, sin comillas)\n")
280+
281+
actualizar_nombre <- readLines(con = stdin(), n = 1)
282+
283+
while (!(actualizar_nombre %in% agenda$Nombre)) {
284+
cat("Ese nombre no está en la agenda, por favor, intenta nuevamente:")
285+
actualizar_nombre <- readLines(con = stdin(), n = 1)
286+
}
287+
288+
cat("Ingresa el nuevo número de teléfono: (ej: 04221234567)\n")
289+
290+
actualizar_numero <- readLines(con = stdin(), n = 1)
291+
292+
while (validar_telefono(actualizar_numero) == FALSE) {
293+
cat("Ese teléfono no es válido, por favor, intenta nuevamente:")
294+
actualizar_numero <- readLines(con = stdin(), n = 1)
295+
}
296+
297+
agenda <<- agenda %>% mutate(Telefono = if_else(Nombre == actualizar_nombre,
298+
actualizar_numero,
299+
Telefono
300+
))
301+
302+
cat("\nEl número de", actualizar_nombre, "fue actualizado con éxito. Regresarás al menú principal.\n\n")
303+
304+
} else if (opcion == "4") {
305+
cat("Ingresa el nombre de la persona que quieres eliminar: (ej: Daniel, sin comillas)\n")
306+
307+
eliminar_nombre <- readLines(con = stdin(), n = 1)
308+
309+
while (!(eliminar_nombre %in% agenda$Nombre)) {
310+
cat("Ese nombre no está en la agenda, por favor, intenta nuevamente:")
311+
eliminar_nombre <- readLines(con = stdin(), n = 1)
312+
}
313+
314+
agenda <<- agenda %>% filter(Nombre != eliminar_nombre)
315+
316+
cat("\nEl número de", eliminar_nombre, "fue eliminado con éxito. Regresarás al menú principal.\n\n")
317+
}
318+
if (opcion == "5") break
319+
# Implementa el resto de opciones aquí
320+
}
321+
}
322+
323+
revisar_agenda()

0 commit comments

Comments
 (0)