Skip to content

Commit 0c9310b

Browse files
authored
Merge pull request mouredev#1087 from C-BLSKV/main
#3-Javascript
2 parents f9ba582 + 77cb52e commit 0c9310b

File tree

1 file changed

+174
-0
lines changed
  • Roadmap/03 - ESTRUCTURAS DE DATOS/javascript

1 file changed

+174
-0
lines changed
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
//#03 Ejercicio: Estructura de Datos.
2+
// Retos de Programación con MoureDev.
3+
// Creador: César Biliškov.
4+
/*
5+
* EJERCICIO:
6+
* - Muestra ejemplos de creación de todas las estructuras soportadas por defecto en tu lenguaje.
7+
* - Utiliza operaciones de inserción, borrado, actualización y ordenación.
8+
*
9+
* DIFICULTAD EXTRA (opcional):
10+
* Crea una agenda de contactos por terminal.
11+
* - Debes implementar funcionalidades de búsqueda, inserción, actualización y eliminación de contactos.
12+
* - Cada contacto debe tener un nombre y un número de teléfono.
13+
* - El programa solicita en primer lugar cuál es la operación que se quiere realizar, y a continuación
14+
* los datos necesarios para llevarla a cabo.
15+
* - El programa no puede dejar introducir números de teléfono no númericos y con más de 11 dígitos.
16+
* (o el número de dígitos que quieras)
17+
* - También se debe proponer una operación de finalización del programa.
18+
*/
19+
// Desarrollo:
20+
21+
// Ejemplos de estructuras de datos:
22+
23+
let arrayEjemplo = [10, 20, 30, 40, 50];
24+
let objetoEjemplo = { nombre: "César Biliškov", edad: 33, ciudad: "ConCon, Valparaiso" };
25+
let setEjemplo = new Set([60, 70, 80, 90, 100]);
26+
27+
console.log("Array:", arrayEjemplo);
28+
console.log("Objeto:", objetoEjemplo);
29+
console.log("Set:", Array.from(setEjemplo));
30+
31+
arrayEjemplo.push(60);
32+
console.log("Array después de la inserción:", arrayEjemplo);
33+
34+
objetoEjemplo.edad = 33;
35+
console.log("Objeto después de la actualización:", objetoEjemplo);
36+
37+
setEjemplo.add(70);
38+
console.log("Set después de la inserción:", Array.from(setEjemplo));
39+
40+
arrayEjemplo.pop();
41+
console.log("Array después del borrado:", arrayEjemplo);
42+
43+
delete objetoEjemplo.ciudad;
44+
console.log("Objeto después del borrado:", objetoEjemplo);
45+
46+
47+
setEjemplo.delete(60);
48+
console.log("Set después del borrado:", Array.from(setEjemplo));
49+
50+
arrayEjemplo.sort((a, b) => b - a);
51+
console.log("Array después de la ordenación:", arrayEjemplo);
52+
53+
// Dificultad extra de ejercicio:
54+
55+
const readline = require('readline');
56+
57+
const rl = readline.createInterface({
58+
input: process.stdin,
59+
output: process.stdout
60+
});
61+
62+
let agenda = [
63+
{ nombre: "Aquiles Dpic", telefono: "1212121212" },
64+
{ nombre: "María Jose Radic", telefono: "17771117771" },
65+
{ nombre: "Vicente Novak", telefono: "5555544441" }
66+
];
67+
68+
function mostrarContactos() {
69+
console.log("Lista de contactos:");
70+
agenda.forEach((contacto, index) => {
71+
console.log(`${index + 1}. Nombre: ${contacto.nombre}, Teléfono: ${contacto.telefono}`);
72+
});
73+
}
74+
75+
function agregarContacto() {
76+
rl.question("Ingrese el nombre del contacto: ", (nombre) => {
77+
rl.question("Ingrese el número de teléfono: ", (telefono) => {
78+
if (/^\d+$/.test(telefono) && telefono.length <= 11) {
79+
agenda.push({ nombre, telefono });
80+
console.log("Contacto agregado con éxito.");
81+
mostrarContactos();
82+
} else {
83+
console.log("Número de teléfono no válido.");
84+
}
85+
mostrarMenu();
86+
});
87+
});
88+
}
89+
90+
function buscarContacto() {
91+
rl.question("Ingrese el nombre del contacto a buscar: ", (nombre) => {
92+
const contactoEncontrado = agenda.find(contacto => contacto.nombre.toLowerCase() === nombre.toLowerCase());
93+
if (contactoEncontrado) {
94+
console.log(`Contacto encontrado - Nombre: ${contactoEncontrado.nombre}, Teléfono: ${contactoEncontrado.telefono}`);
95+
} else {
96+
console.log("Contacto no encontrado.");
97+
}
98+
mostrarMenu();
99+
});
100+
}
101+
102+
function actualizarContacto() {
103+
rl.question("Ingrese el nombre del contacto a actualizar: ", (nombre) => {
104+
const indiceContacto = agenda.findIndex(contacto => contacto.nombre.toLowerCase() === nombre.toLowerCase());
105+
if (indiceContacto !== -1) {
106+
rl.question("Ingrese el nuevo número de teléfono: ", (nuevoTelefono) => {
107+
if (/^\d+$/.test(nuevoTelefono) && nuevoTelefono.length <= 11) {
108+
agenda[indiceContacto].telefono = nuevoTelefono;
109+
console.log("Contacto actualizado con éxito.");
110+
mostrarContactos();
111+
} else {
112+
console.log("Número de teléfono no válido.");
113+
}
114+
mostrarMenu();
115+
});
116+
} else {
117+
console.log("Contacto no encontrado.");
118+
mostrarMenu();
119+
}
120+
});
121+
}
122+
123+
function eliminarContacto() {
124+
rl.question("Ingrese el nombre del contacto a eliminar: ", (nombre) => {
125+
const indiceContacto = agenda.findIndex(contacto => contacto.nombre.toLowerCase() === nombre.toLowerCase());
126+
if (indiceContacto !== -1) {
127+
agenda.splice(indiceContacto, 1);
128+
console.log("Contacto eliminado con éxito.");
129+
} else {
130+
console.log("Contacto no encontrado.");
131+
}
132+
mostrarMenu();
133+
});
134+
}
135+
136+
function mostrarMenu() {
137+
console.log("\nSeleccione una operación:");
138+
console.log("1. Mostrar contactos");
139+
console.log("2. Agregar contacto");
140+
console.log("3. Buscar contacto");
141+
console.log("4. Actualizar contacto");
142+
console.log("5. Eliminar contacto");
143+
console.log("6. Salir");
144+
145+
rl.question("Ingrese el número de la operación deseada: ", (opcion) => {
146+
switch (opcion) {
147+
case '1':
148+
mostrarContactos();
149+
mostrarMenu();
150+
break;
151+
case '2':
152+
agregarContacto();
153+
break;
154+
case '3':
155+
buscarContacto();
156+
break;
157+
case '4':
158+
actualizarContacto();
159+
break;
160+
case '5':
161+
eliminarContacto();
162+
break;
163+
case '6':
164+
rl.close();
165+
break;
166+
default:
167+
console.log("Opción no válida. Intente nuevamente.");
168+
mostrarMenu();
169+
}
170+
});
171+
}
172+
173+
mostrarMenu();
174+

0 commit comments

Comments
 (0)