Skip to content

Commit 960b98b

Browse files
authored
Merge branch 'mouredev:main' into main
2 parents 8d760a2 + a60b3c5 commit 960b98b

File tree

8 files changed

+1405
-338
lines changed

8 files changed

+1405
-338
lines changed

Roadmap/03 - ESTRUCTURAS DE DATOS/c/04khaos.c

Lines changed: 543 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// cadenas de texto
2+
// metodos de cadenas de texto
3+
4+
let str = "Banana";
5+
let my_name = "Andrés";
6+
console.log(my_name);
7+
8+
// Acceso a caracteres específicos
9+
10+
console.log(my_name.charAt(0)); // "A"
11+
console.log(my_name.charAt(100)); // "" si está fuera de rango devuelve una cadena vacía
12+
13+
console.log(my_name.at(0), my_name.at(1), my_name.at(2)); // ["A", "n", "d"]
14+
console.log(my_name.at(200)); // undefined ... si está fuera de rango devuelve undefined
15+
console.log(my_name.at(-1)); // s ... acepta valores negativos. En indices negativos se representa -1 como la ultima letra o posicion de la cadena
16+
17+
// subcadenas
18+
19+
console.log(my_name.substring()) // Andrés .substring(inicio, fin) Si no se especifica el fin devuelve toda la cadena
20+
console.log(my_name.substring(1, 4)) // "ndr"
21+
22+
console.log(my_name.slice(-5, -1)); // "ndré" .slice(inicio, fin) Funciona parecido a substring, pero acepta valores negativos.
23+
console.log(my_name.slice(500)); // ""
24+
console.log(my_name.slice(0)); // "Andrés"
25+
26+
// longitud
27+
28+
console.log(my_name.length); // 6
29+
30+
// búsqueda
31+
32+
console.log(str.match(/a/g)); // busca de manera global por la cadena y separa en un array todas las coindidencias ["a","a","a"]
33+
console.log(str.match(/[an]/g)); // para buscar más de una letra usar [] ["a", "n", "a", "n", "a"]
34+
35+
console.log(my_name.search("A")); // 0 devuelve la posición de la primera coincidencia
36+
console.log(my_name.search("z")); // -1 si no encuentra la letra devuelve -1
37+
38+
console.log(my_name.indexOf("A")); // 0 devuelve la posición de la primera coincidencia
39+
console.log(my_name.indexOf("z")); // -1 si no encuentra la letra devuelve -1
40+
41+
// concatenación
42+
43+
console.log(my_name + ' ' + str); // "Andrés Banana" con operador +
44+
45+
console.log(my_name.concat(' ', str)); // "Andrés Banana" .concat(str1, str2, ...)
46+
47+
console.log(`José ${my_name} ${str} con backticks`); // "José Andrés Banana" con el metodo de los backstick. Se pueden concatenar variables y variables directamente en la cadena de texto
48+
49+
// repetición
50+
51+
console.log(my_name.repeat(3)); // "AndrésAndrésAndrés" .repeat(n) repite la cadena n veces
52+
53+
// recorrido
54+
55+
console.log(my_name.endsWith("s")); // true ...verifica si la cadena termina con el caracter especificado
56+
console.log(my_name.startsWith("A")); // true ...verifica si la cadena comienza con el caracter especificado
57+
console.log(my_name.includes("n")); // true ...verifica si la cadena contiene el caracter especificado
58+
59+
// conversion a mayusculas y minusculas
60+
61+
console.log(my_name.toUpperCase()); // "ANDRÉS" convierte la cadena de texto a mayúsculas
62+
console.log(my_name.toLowerCase()); // "andrés" convierte la cadena de texto en minúsculas
63+
64+
// reemplazo
65+
66+
console.log(my_name.replace("A", "a")); // "andrés" reemplaza la primera coincidencia
67+
console.log(my_name.replace(/A/g, "a")); // "andrés" reemplaza todas las coincidencias
68+
69+
let str2 = "Hola, Hola mundo, Hola a todos";
70+
console.log(str2.replaceAll("Hola", "Chao")); //
71+
72+
// división
73+
74+
console.log(my_name.split("")); // ["A", "n", "d", "r", "é", "s"] Divide la cadena de texto en un array de caracteres equivalente a la cadena original
75+
76+
// interpolación
77+
78+
console.log(`
79+
Hola! Mi nombre es ${my_name}
80+
Y esto es un ejemplo de interpolación de cadenas de texto`);
81+
82+
// DIFICULTAD EXTRA:
83+
84+
let word1 = "Zorra";
85+
let word2 = "Arroz";
86+
let word3 = "Background";
87+
let word4 = "Mary";
88+
let word5 = "Army";
89+
90+
function isPalindrom() { // palabras que se leen igual de izquierda a derecha que de derecha a izquierda
91+
let _word1 = word1.toLowerCase().split("").reverse().join("");
92+
let _word2 = word2.toLowerCase();
93+
94+
return _word1 === _word2 ? true : false;
95+
96+
}
97+
98+
function isAnagram() { // palabras que tienen las mismas letras pero en diferente orden
99+
let _word4 = word4.toLowerCase().split("").sort().join("");
100+
return _word4 === word5.toLowerCase().split("").sort().join("") ? true : false;
101+
}
102+
103+
function isIsogram() { // palabras que o frases que no tienen letras repetidas
104+
105+
let _word3 = word3.toLowerCase().split("").sort().join("");
106+
let _word3Set = new Set(_word3);
107+
108+
return _word3.length === _word3Set.size ? true : false;
109+
}
110+
111+
console.log(`Las palabras ${word1} y ${word2} son Palíndromos? : ${isPalindrom()}`);
112+
113+
console.log(`Las palabras ${word4} y ${word5} son Anagramas? : ${isAnagram()}`);
114+
115+
console.log(`La palabra ${word3} es un Isograma? : ${isIsogram()}`);
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
"""
2+
* EJERCICIO:
3+
* - Muestra ejemplos de asignación de variables "por valor" y "por referencia", según
4+
* su tipo de dato.
5+
* - Muestra ejemplos de funciones con variables que se les pasan "por valor" y
6+
* "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas.
7+
* (Entender estos conceptos es algo esencial en la gran mayoría de lenguajes)
8+
*
9+
* DIFICULTAD EXTRA (opcional):
10+
* Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente.
11+
* - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia.
12+
* Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno
13+
* se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las
14+
* variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas.
15+
* Comprueba también que se ha conservado el valor original en las primeras.
16+
*/
17+
"""
18+
19+
# Asignación de variables "por valor"
20+
suma = 1 + 40
21+
multiplicacion = 20 * 17
22+
23+
# Asignación de variables "por referencia".
24+
25+
def descuentoAplicado(precio):
26+
return precio - (precio * 10 / 100)
27+
28+
precio = 100
29+
30+
precio_total = descuentoAplicado(precio)
31+
32+
print(precio_total)
33+
34+
# Asignación de variables según tipo de dato.
35+
36+
cadena = "Esto es una cadena"
37+
num = 20
38+
flotante = 43.0
39+
booleano = False
40+
41+
# Funciones con variables que se les pasan "por valor" y "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas.
42+
43+
def porValor(num):
44+
num * 2
45+
46+
num = porValor(num)
47+
print(num)
48+
49+
listado = ['Rojo', 'Verde', 'Amarillo', 'Blanco', 'Negro']
50+
51+
# Por referencia
52+
def porReferencia(listado):
53+
listado.append('Naranja')
54+
55+
porReferencia(listado)
56+
print(listado)
57+
58+
# ///////////////////////////////////// DIFICULTAD EXTRA (opcional) /////////////////////////////////////
59+
60+
param1 = "Primer parametro"
61+
param2 = "Segundo parametro"
62+
63+
param_ref1 = ['arroz', 'manzana', 'pollo']
64+
param_ref2 = ['destornillador', 'taladro', 'martillo']
65+
66+
def programa1(valor1, valor2):
67+
valor_cambio = valor2
68+
valor2 = valor1
69+
valor1 = valor_cambio
70+
71+
return valor1, valor2
72+
73+
def programa2(ref1, ref2):
74+
ref_cambio = ref2
75+
ref2 = ref1
76+
ref1 = ref_cambio
77+
78+
return ref1, ref2
79+
80+
81+
resultado1 = programa1(param1, param2)
82+
resultado2 = programa2(param_ref1, param_ref2)
83+
84+
print(f"Sin cambio: \nParametro 1 = {param1} \nParametro 2 = {param2}")
85+
print(f"Con cambio: \nParametro 1 = {resultado1[0]} \nParametro 2 = {resultado1[1]}\n")
86+
87+
print(f"Sin cambio: \nParametro 1 = {param_ref1} \nParametro 2 = {param_ref2}")
88+
print(f"Con cambio: \nParametro 1 = {resultado2[0]} \nParametro 2 = {resultado2[1]}")
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""
2+
* EJERCICIO:
3+
* Entiende el concepto de recursividad creando una función recursiva que imprima
4+
* números del 100 al 0.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Utiliza el concepto de recursividad para:
8+
* - Calcular el factorial de un número concreto (la función recibe ese número).
9+
* - Calcular el valor de un elemento concreto (según su posición) en la
10+
* sucesión de Fibonacci (la función recibe la posición).
11+
"""
12+
13+
# Función recursiva
14+
15+
def recurFuncion(num):
16+
17+
if num == 0:
18+
return num
19+
else:
20+
print(num)
21+
return recurFuncion(num - 1)
22+
23+
print(recurFuncion(100))
24+
25+
26+
# ///////////////////////////////////////////////// DIFICULTAD EXTRA /////////////////////////////////////////////////
27+
28+
# Factorial
29+
def factorial(num):
30+
31+
if num == 1:
32+
return num
33+
else:
34+
return num * factorial(num - 1)
35+
36+
print(factorial(5))
37+
38+
39+
# Posición Fibonacci
40+
41+
def fibonacci(posicion):
42+
43+
if posicion == 0:
44+
return 0
45+
46+
elif posicion == 1:
47+
return 1
48+
49+
else:
50+
return fibonacci(posicion - 1) + fibonacci(posicion - 2)
51+
52+
print(fibonacci(10))
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
"""
2+
* Implementa los mecanismos de introducción y recuperación de elementos propios de las
3+
* pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
4+
* o lista (dependiendo de las posibilidades de tu lenguaje).
5+
"""
6+
7+
# Pila/Stack (LIFO)
8+
9+
stack = []
10+
11+
def push_stack(element):
12+
stack.append(element)
13+
14+
def pull_stack():
15+
return stack.pop()
16+
17+
print(stack)
18+
push_stack(1)
19+
print(stack)
20+
push_stack(2)
21+
print(stack)
22+
print(f" Elemento sacado: {pull_stack()}")
23+
print(stack)
24+
push_stack(3)
25+
print(stack)
26+
push_stack(4)
27+
print(stack)
28+
print(f" Elemento sacado: {pull_stack()}")
29+
print(stack)
30+
31+
32+
# Cola/Queue (FIFO)
33+
34+
queue = []
35+
36+
def push_queue(element):
37+
queue.append(element)
38+
39+
def pull_queue():
40+
return queue.pop(0)
41+
42+
43+
print("----------------------------")
44+
print(queue)
45+
push_queue(1)
46+
print(queue)
47+
push_queue(2)
48+
print(queue)
49+
print(f" Elemento sacado: {pull_queue()}")
50+
print(queue)
51+
push_queue(3)
52+
print(queue)
53+
push_queue(4)
54+
print(queue)
55+
print(f" Elemento sacado: {pull_queue()}")
56+
print(queue)
57+
58+
59+
"""
60+
* DIFICULTAD EXTRA (opcional):
61+
* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
62+
* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
63+
* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
64+
* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
65+
* el nombre de una nueva web.
66+
* - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
67+
* impresora compartida que recibe documentos y los imprime cuando así se le indica.
68+
* La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
69+
* interpretan como nombres de documentos.
70+
"""
71+
72+
def web_browser():
73+
74+
back = [] #Pila: almacena la web actual en la parte más alta y las de atras acontinuación
75+
forward = [] #Pila: Almacena las paginas a las que avanzar cuando vamos atras.
76+
salir = False
77+
78+
while not salir:
79+
action = input("Introduce una web o una accion (adelante/atras/salir): ")
80+
81+
if action == "salir":
82+
salir = True
83+
84+
elif action == "adelante":
85+
if len(forward) > 0: # Si hay paginas para avanzar(si hay elementos en forward)
86+
web = forward.pop() # Sacamos de forward y lo pasamos a back.
87+
back.append(web)
88+
print(f"Pagina actual: {back[-1]}") #Pagina actual el pico de la pila
89+
else:
90+
print(f"No hay mas paginas adelante")
91+
92+
elif action == "atras":
93+
if len(back) > 1: # Si hay mas de una web en back podremos usar atras.
94+
web = back.pop() # Sacamos de back y pasamos el elemtno a forward, ya que son los elementos que podremos avanzar.
95+
forward.append(web) #
96+
print(f"Pagina actual: {back[-1]}") #Siempre se imprime el pico de back
97+
else:
98+
print("No hay más paginas atras")
99+
100+
else:
101+
back.append(action) # Para añadir una nueva web se añade en back
102+
print(f"Pagina actual: {back[-1]}")
103+
forward.clear() # En el caso de añadir una nueva web se descartan las que estaban
104+
# preparadas para ir adelante (pila forward)
105+
# Asi lo hace chrome.
106+
107+
web_browser()
108+
109+
def printer():
110+
111+
printer_queue =[]
112+
salir = False
113+
while not salir:
114+
115+
action = input("Introduce nombre de documento, o una acción(imprimir, salir): ")
116+
117+
if action == "salir":
118+
salir = True
119+
120+
elif action == "imprimir":
121+
if len(printer_queue) > 0:
122+
document = printer_queue.pop(0)
123+
print(f"Imprimiendo... {document}")
124+
print(printer_queue)
125+
else:
126+
print("Cola de impresion vacía")
127+
128+
else:
129+
printer_queue.append(action)
130+
print(printer_queue)
131+
132+
printer()

0 commit comments

Comments
 (0)