¿Qué es un programa?
Un algoritmo es un plan paso a paso para resolver un problema. Un programa es ese plan escrito en un lenguaje que el ordenador entiende, como Python, Scratch, Java o C. El ordenador hace exactamente lo que dice el programa, ni más ni menos.
La mayoría de los programas siguen el esquema entrada → proceso → salida: reciben datos, trabajan con ellos y dan un resultado. Antes de programar conviene planificar con pseudocódigo (pasos en lenguaje normal) o con un diagrama de flujo.
Secuencia significa que las instrucciones se ejecutan en orden, de arriba abajo. Si cambias el orden, puede cambiar el resultado.
Variables y tipos de datos
Una variable es un lugar con nombre donde se guarda un valor. score = 0 es una asignación: mete el 0 en la caja llamada score. score = score + 5 lee el valor antiguo, le suma 5 y guarda el valor nuevo.
Tipos de datos más comunes:
- Entero: números sin decimales, por ejemplo 42
- Real / float: números con decimales, por ejemplo 3.5
- Cadena (string): texto, por ejemplo "Asha"
- Booleano: True o False (verdadero o falso)
Una constante es un valor que no cambia mientras el programa se ejecuta, como el número de días de la semana. Los buenos nombres (total_marks, no x) hacen que el código sea fácil de leer.
Selección e iteración
Selección (if / else)
El programa comprueba una condición que es verdadera o falsa, y ejecuta una sola rama.
if marks >= 33:
print("Pass")
else:
print("Try again")Las condiciones usan operadores de comparación (==, !=, <, >, <=, >=) y operadores lógicos (and, or, not).
Iteración (bucles)
- Controlado por contador (for): se repite un número fijo de veces.
for i in range(1, 5):se ejecuta con i = 1, 2, 3, 4. - Controlado por condición (while): se repite mientras la condición sea True. Dentro debe cambiar algo; si no, se repite para siempre.
Funciones y diseño modular
Una función (también llamada subprograma, procedimiento o método) es un bloque de código con nombre. La defines una vez y la llamas cada vez que la necesitas.
def area(length, width):
return length * width
print(area(4, 3)) # 12- Los parámetros (length, width) son las entradas de la función; los valores que se envían (4, 3) son los argumentos.
- return devuelve un resultado.
- Una variable creada dentro de una función es local: no se ve desde fuera.
El diseño modular consiste en dividir un problema grande en partes pequeñas (descomposición), y escribir y probar cada parte como su propia función. Ventajas: menos código repetido, pruebas más fáciles, trabajo en equipo, y un solo arreglo actualiza todos los usos.
Pruebas, depuración y mantenimiento del código
Hay tres tipos de errores:
- Error de sintaxis: rompe las reglas del lenguaje (falta unos dos puntos o un paréntesis). El programa no se ejecuta.
- Error de ejecución: ocurre mientras el programa corre, por ejemplo al dividir entre cero.
- Error lógico: el programa funciona pero da una respuesta incorrecta, por ejemplo un bucle que se repite una vez de menos (error por uno).
Las pruebas usan datos normales, datos límite (justo en el borde, como exactamente 33 puntos) y datos no válidos (como -5 puntos). Una tabla de seguimiento anota el valor de cada variable línea por línea, para encontrar dónde algo sale mal.
El código mantenible tiene nombres con sentido, comentarios que explican el porqué, sangría coherente, funciones pequeñas y ningún bloque copiado y pegado. Además, los programadores usan control de versiones para guardar el historial de cambios.
Prueba tú: el robot sin ordenador
Pide a un amigo que haga de robot. Escribe las instrucciones en papel usando solo: step, turn left, turn right, repeat n e if wall: turn. Guíalo desde la puerta hasta una silla. ¿El robot hizo exactamente lo que escribiste? Corrige los errores e inténtalo otra vez. Después abre el juego libre en 3D y predice dónde se detiene el robot antes de pulsar nada.
Fórmulas y definiciones clave
- Tres bloques básicos: Secuencia, Selección (if/else), Iteración (for/while)
- Asignación: variable = expresión (primero se calcula el lado derecho)
- for i in range(a, b) se repite b − a veces (a, a+1, …, b−1)
- Función: def nombre(parámetros): … return resultado
Ejemplos resueltos
1. x = 4, luego x = x * 2, luego x = x - 3. ¿Cuánto vale x?
Línea por línea: x = 4 → x = 8 → x = 5. Entonces x = 5.
2. ¿Qué imprime esto? for i in range(1, 4): print(i * 10)
i toma los valores 1, 2, 3, así que imprime 10, 20, 30.
3. age = 15. ¿Qué imprime esto? if age >= 18: print("Adult") else: print("Minor")
15 >= 18 es False, así que se ejecuta la rama else: Minor.
4. Escribe una función que devuelva el mayor de dos números.
def bigger(a, b): if a > b: return a else: return b
5. Sigue el programa: total = 0; for n in range(1, 4): total = total + n. ¿Cuánto vale total al final?
n = 1 → total 1; n = 2 → total 3; n = 3 → total 6. Al final total = 6.
6. Un programa debe imprimir los números del 1 al 5 pero usa for i in range(1, 5). ¿Qué tipo de error es y cómo se arregla?
Es un error lógico (error por uno); solo imprime del 1 al 4. Solución: range(1, 6).
Errores comunes
- Leer = como el "igual" de las matemáticas. En código, = significa "guarda el lado derecho en el lado izquierdo". Para comparar se usa ==.
- Olvidar que range(1, 5) se detiene antes del 5.
- Escribir un bucle while cuya condición nunca pasa a False, así que se repite para siempre.
- Copiar el mismo bloque de código muchas veces en vez de escribir una sola función.