📘 CodingMarble Learn

Programación avanzada y sus aplicaciones

Programar a nivel avanzado es elegir la estructura de datos adecuada (array, lista enlazada, pila, cola), escribir y probar código en un IDE, hacer gráficos y animaciones, usar funciones de hoja de cálculo y guardar los datos con seguridad en una base de datos relacional que se consulta con SQL.

🎬 Historia paso a paso

  1. Un array tiene un número fijo de casillas, aquí seis. El tamaño se decide al principio. Si se llena, no puedes añadir más.
  2. Una lista enlazada crece cuando hace falta. Cada nodo guarda un valor y un enlace al nodo siguiente. El último apunta a nada (null). Pulsa Añadir.
  3. Una pila funciona como un montón de platos. Pones encima (push) y quitas de arriba (pop). Lo último que entra es lo primero que sale.
  4. Una cola funciona como la fila de las entradas. Te pones al final y sales por delante. Lo primero que entra es lo primero que sale.
  5. Una base de datos guarda los datos en tablas. Dos tablas se unen con una clave, el id. Una consulta SQL elige solo las filas que quieres, aquí las notas de 50 o más.
  6. Te toca a ti. Elige lista, pila o cola y pulsa los botones para añadir y quitar elementos.

Consejo: arrastra la escena 3D para girarla. Usa dos dedos para hacer zoom.

🤔 Dudas comunes, resueltas

¿Por qué no puedo añadir un séptimo elemento al array?

El tamaño de un array se fija al crearlo. En el paso 0 las seis casillas son todo el array. Para una colección que crece usa una lista.

¿Dónde guarda el orden la lista enlazada?

En los enlaces. Cada nodo conoce solo al siguiente, así que se avanza siguiendo las flechas. Mira el paso 1.

¿Por qué el pop me da el último elemento que añadí?

Una pila tiene un solo extremo abierto, la cima. El elemento más nuevo está arriba, así que es el primero en salir. Mira el paso 2.

¿En qué se diferencia una cola de una pila?

En una cola añades por detrás y quitas por delante, así que sale primero el más antiguo. Pulsa los botones del paso 3.

¿Por qué usar dos tablas y no una?

Para guardar cada dato una sola vez. Los nombres viven en una tabla y las notas en otra, unidas por el id. Así, para corregir un nombre basta cambiarlo en un solo sitio. Mira el paso 4.

¿Qué estructura debo usar?

Si necesitas tamaño fijo y acceso rápido por índice: array. Colección que crece: lista. Deshacer y retroceder: pila. Fila de espera: cola. Prueba cada una en el paso 5.

Estructuras de datos: array, lista enlazada, pila y cola

Una estructura de datos es una forma de organizar los datos para que un programa los use rápido y con facilidad.

Las bibliotecas ya traen estas herramientas. En Python una list sirve como pila (append, pop) y collections.deque sirve como cola rápida. Si ya existe en una biblioteca, úsala; no la vuelvas a escribir.

stack = []
stack.append(5); stack.append(8)
stack.pop()      # gives 8
from collections import deque
q = deque([4, 9]); q.append(2)
q.popleft()      # gives 4

Usar un IDE: escribir, ejecutar y probar

Un IDE (entorno de desarrollo integrado) reúne en un solo lugar un editor, un botón de ejecutar, un depurador y otras herramientas. Colorea tu código, sugiere nombres y muestra los errores mientras escribes.

Visualización y animación en 2D y 3D

Las imágenes nos ayudan a ver patrones. Los programas pueden dibujar gráficos (de barras, de líneas, de dispersión), dibujos en 2D y escenas en 3D. Una animación es el mismo dibujo repetido una y otra vez con un pequeño cambio cada vez (unas 30 a 60 veces por segundo). Una forma sencilla: guarda una variable como x, súmale un poco en cada cuadro y vuelve a dibujar. El 3D de esta página se hace igual, con una biblioteca 3D.

Funciones avanzadas de hoja de cálculo

Las hojas de cálculo pueden hacer trabajo de programa con funciones:

Bases de datos relacionales y SQL

Una base de datos relacional guarda los datos en tablas de filas y columnas. Cada tabla tiene una clave primaria, una columna cuyos valores no se repiten (el id). Otra tabla usa ese valor como clave foránea para enlazar con la primera. Un buen diseño guarda cada dato una sola vez, así no hay datos repetidos.

SQL es el lenguaje para hacer preguntas y cambiar datos:

SELECT name, score FROM students
JOIN marks ON students.id = marks.id
WHERE score >= 50 ORDER BY score DESC;

INSERT INTO marks (id, score) VALUES (5, 67);
UPDATE marks SET score = 55 WHERE id = 2;
DELETE FROM marks WHERE id = 5;

Integridad significa que los datos se mantienen correctos: las claves no se repiten, una clave foránea debe coincidir con una fila real y los valores deben tener el tipo correcto. Seguridad significa contraseñas para los usuarios, dar a cada usuario solo los permisos que necesita, hacer copias de seguridad y nunca armar el SQL pegando el texto del usuario dentro de la consulta (usa parámetros), lo que evita la inyección SQL.

Contribuir a recursos abiertos

Muchas herramientas y bibliotecas son de código abierto: cualquiera puede leerlas, usarlas y mejorarlas bajo una licencia. Puedes ayudar corrigiendo un error, mejorando una guía, traduciendo una página o añadiendo un ejemplo. Lee siempre la licencia, da el crédito y escribe mensajes claros y amables cuando propongas un cambio.

Pruébalo

En el paso 5 del 3D, haz push de 3 elementos en una pila y luego haz pop de todos. Anota el orden. Haz lo mismo con una cola. Después predice primero y comprueba después: si añades 4, 9 y 2 y quitas un elemento, ¿qué valor queda al frente de la cola y cuál en la cima de la pila?

Fórmulas y definiciones clave

Ejemplos resueltos

1. Los elementos 5, 8 y 2 se meten en una pila en ese orden. Luego se hace pop dos veces. ¿Qué queda arriba ahora?

Pila tras los push: 5, 8, 2 (el 2 arriba). El pop quita el 2 y luego el 8. Queda: 5. La cima = 5.

2. Los elementos 4, 9 y 2 entran en una cola en ese orden. Se hace un dequeue. ¿Qué elemento está ahora al frente?

Sale el primero que entró, así que se quita el 4. El frente es 9.

3. Tabla de notas: ids del 1 al 4 con notas 72, 45, 88, 51. ¿Cuántas filas devuelve WHERE score >= 50?

72, 88 y 51 son 50 o más. Son 3 filas.

4. Las celdas B2:B5 contienen 72, 45, 88, 51. ¿Cuánto da =SUMIF(B2:B5,">=50")?

Suma solo 72, 88 y 51: 72 + 88 + 51 = 211.

5. ¿Por qué usar una pila para revisar paréntesis como ( [ ] ) en una expresión?

Se hace push de cada paréntesis que abre. Cuando llega uno que cierra, se hace pop y se comprueba que coincida. El último que se abrió debe cerrarse primero (LIFO), y eso es justo lo que da una pila. Si al final la pila está vacía, los paréntesis coinciden.

Errores comunes

Test de práctica

1. ¿Qué estructura es LIFO?
2. ¿Qué estructura crece un nodo a la vez con enlaces?
3. En SQL, ¿qué cláusula elige las filas que cumplen una regla?
4. Una columna con un valor único en cada fila es una:
5. ¿Qué hace un punto de interrupción (breakpoint) del depurador?

Práctica: responde tú mismo

Escribe o elige tu respuesta y pulsa Comprobar. Usa la pista si te atascas; la solución completa aparece después de responder.

Preguntas frecuentes

¿Cuál es la diferencia entre un array y una lista enlazada?

Un array tiene tamaño fijo y permite saltar a cualquier elemento por su índice. Una lista enlazada puede crecer y encogerse, pero hay que seguir los enlaces uno por uno para llegar a un elemento.

¿Qué son la clave primaria y la clave foránea?

La clave primaria es una columna que da a cada fila un valor único, como un número de lista. La clave foránea es una columna de otra tabla que guarda ese valor para unir las dos tablas.

¿Por qué es peligrosa la inyección SQL y cómo se evita?

Si pegas el texto del usuario directamente en un comando SQL, un usuario astuto puede añadir sus propios comandos y leer o borrar datos. Usa consultas parametrizadas para que el texto se trate siempre solo como dato.

Aprende antes

Aprende después