Tabla de Contenidos

01 - Algoritmos y Pensamiento Computacional

Antes de escribir código en cualquier lenguaje de programación, lo más importante es aprender a pensar como un programador. Programar consiste principalmente en analizar un problema, descomponerlo en partes más pequeñas y diseñar una secuencia lógica de pasos para resolverlo.

1. ¿Qué es un algoritmo?

Un algoritmo es un conjunto finito, ordenado e inequívoco de instrucciones que, al seguirse paso a paso, resuelve un problema o realiza una tarea determinada.

El modelo Entrada - Proceso - Salida (IPO)

Cualquier algoritmo trabaja con tres elementos básicos:

Características fundamentales

Para que una secuencia de pasos sea un algoritmo válido, debe ser:

Algoritmo vs. Programa: Un algoritmo es la idea o lógica para resolver un problema (puede escribirse en papel, en español o dibujarse). Un programa es la traducción de ese algoritmo a un lenguaje de programación concreto (como Java) para que lo ejecute un ordenador.

2. Diagramas de Flujo con PlantUML

Un diagrama de flujo es la representación gráfica de un algoritmo mediante símbolos geométricos conectados por flechas que indican el orden de ejecución.

En el curso utilizaremos la sintaxis de los diagramas de actividades de PlantUML para generar estos diagramas mediante texto.

Simbología básica en PlantUML

Elemento Sintaxis PlantUML Descripción
Inicio start Punto de partida del algoritmo
Fin stop (o end) Punto final del algoritmo
Acción / Paso :Hacer algo; Cualquier instrucción (pedir datos, calcular, mostrar resultados…)
Decisión if (…) then (…) else (…) endif Bifurcación según una condición

Ejemplo básico

Código / Instrucciones Diagrama de Flujo
start
:Leer número de horas trabajadas;
:Calcular Sueldo = Horas * 15;
:Mostrar Sueldo;
stop
Leer número de horas trabajadasCalcular Sueldo = Horas * 15Mostrar Sueldo

3. Las 3 Estructuras fundamentales de Control

Cualquier algoritmo, por complejo que sea, se construye combinando únicamente tres estructuras lógicas fundamentales:

A. Estructura Secuencial

Las instrucciones se ejecutan de forma lineal, una detrás de otra, en el orden en que están escritas.

Código / Instrucciones Diagrama de Flujo
start
:Ingresar Base;
:Ingresar Altura;
:Area = (Base * Altura) / 2;
:Mostrar Area;
stop
Ingresar BaseIngresar AlturaArea = (Base * Altura) / 2Mostrar Area

B. Estructura Condicional (Selección)

Permite tomar decisiones: el flujo se divide en dos caminos dependiendo de si se cumple o no una condición lógica (Verdadero / Falso).

Condicional Doble (Si / Sino)

Código / Instrucciones Diagrama de Flujo
start
:Leer Edad;
if (¿Edad >= 18?) then (Sí)
:Mostrar “Acceso concedido”;
else (No)
:Mostrar “Acceso denegado”;
endif
stop
Leer Edad¿Edad >= 18?NoMostrar "Acceso concedido"Mostrar "Acceso denegado"

Condicional Simple (Si sin Sino)

Código / Instrucciones Diagrama de Flujo
start
:Leer Precio;
if (¿Tiene cupón de descuento?) then (Sí)
:Precio = Precio * 0.90;
endif
:Mostrar Precio final;
stop
Leer PrecioPrecio = Precio * 0.90¿Tiene cupón de descuento?Mostrar Precio final

C. Estructura Iterativa (Bucles o Repeticiones)

Permite repetir un conjunto de instrucciones mientras se cumpla una condición determinada.

Bucle Mientras (While)

Evalúa la condición antes de ejecutar el bloque de instrucciones.

Código / Instrucciones Diagrama de Flujo
start
:contador = 1;
while (¿contador ⇐ 5?) is (Sí)
:Mostrar contador;
:contador = contador + 1;
endwhile (No)
stop
contador = 1Mostrar contadorcontador = contador + 1¿contador <= 5?No

Bucle Hacer ... Mientras (Do-While / Repeat-Until)

Evalúa la condición después de ejecutar el bloque de instrucciones (se ejecuta al menos una vez).

Código / Instrucciones Diagrama de Flujo
start
repeat
:Leer número;
repeat while (¿número < 0?) is (Sí)
stop
Leer número¿número < 0?

Bucle Para / Desde (For)

Se utiliza habitualmente cuando se conoce de antemano el número exacto de iteraciones.

Código / Instrucciones Diagrama de Flujo
start
:i = 1;
while (¿i ⇐ 10?) is (Sí)
:Mostrar i;
:i = i + 1;
endwhile (No)
stop
i = 1Mostrar ii = i + 1¿i <= 10?No

4. Pseudocódigo

El pseudocódigo es una forma de expresar un algoritmo utilizando un lenguaje natural estructurado (en español) que imita la lógica de la programación real sin preocuparnos por la sintaxis estricta de un lenguaje como Java.

Sirve como paso intermedio entre el diagrama de flujo y el código fuente.

Palabras reservadas comunes

Ejemplos Integrados

A continuación se presentan dos problemas clásicos resueltos en Diagrama de Flujo (PlantUML) y Pseudocódigo:

Ejemplo 1: Determinar si un número es Par o Impar

Diagrama de Flujo (PlantUML)

Leer numero¿numero % 2 == 0?NoMostrar "El número es PAR font:bold"Mostrar "El número es IMPAR font:bold"

Pseudocódigo

Algoritmo ComprobarParImpar
    Escribir "Introduce un número entero:"
    Leer numero
    
    Si numero % 2 == 0 Entonces
        Escribir "El número es PAR"
    Sino
        Escribir "El número es IMPAR"
    FinSi
FinAlgoritmo

Ejemplo 2: Validar un PIN de acceso (Bucle con intentos)

Diagrama de Flujo (PlantUML)

intentos = 0claveCorrecta = 1234Leer claveIntroducida]:intentos = intentos + 1¿claveIntroducida != claveCorrecta Y intentos < 3?No¿claveIntroducida == claveCorrecta?NoMostrar "Bienvenido al sistema">Mostrar "Cuenta bloqueada por seguridad">

Pseudocódigo

Algoritmo ValidarPIN
    intentos <- 0
    claveCorrecta <- 1234
    
    Mientras claveIntroducida != claveCorrecta Y intentos < 3 Hacer
        Escribir "Introduce tu PIN de 4 dígitos:"
        Leer claveIntroducida
        intentos <- intentos + 1
    FinMientras
    
    Si claveIntroducida == claveCorrecta Entonces
        Escribir "Bienvenido al sistema"
    Sino
        Escribir "Cuenta bloqueada por seguridad"
    FinSi
FinAlgoritmo

Ejercicios

Para resolver esta serie de ejercicios utilizaremos el entorno de desarrollo IntelliJ IDEA:

  1. Creación del proyecto: Abre IntelliJ IDEA y crea un nuevo proyecto base llamado daw-prog. Este proyecto único nos servirá para estructurar todos los ejercicios y pruebas del curso.
  1. Organización por carpetas: Dentro del proyecto, crea una carpeta/directorio dedicada a este tema (por ejemplo, 01_Introduccion_PlantUML).
  1. Archivos de diagramas: Para cada ejercicio, crea un archivo individual con la extensión .puml (por ejemplo, ejercicio01.puml). Instala la extensión plantuml4idea en IntelliJ para ver la vista previa del diagrama en tiempo real a la derecha de tu código.
  1. Uso de Inteligencia Artificial (GitHub Copilot): Como alternativa, podéis apoyaros en herramientas de IA integradas como GitHub Copilot para pedirle a la IA que genere el código PlantUML a partir de alguno de los enunciados o que convierta algún diagrama a código ejecutable para comprobar si vuestra lógica es correcta.

Ejercicio 1

Pide al usuario una temperatura en grados Celsius (°C). Conviértela a Fahrenheit (°F) utilizando la fórmula: $°F = (°C \times 9/5) + 32$. Si la temperatura en Celsius es menor o igual a 0 °C, muestra además un mensaje de advertencia: “Alerta: Temperatura bajo cero”. Finalmente, muestra la temperatura convertida.


Ejercicio 2

Pide el número de horas trabajadas en el mes y el precio por hora. Calcula el salario bruto. Si el salario bruto supera los 1000 €, se le aplica un 15% de IRPF; en caso contrario, un 10%. Muestra por pantalla el salario bruto, la retención aplicada y el salario neto final.


Ejercicio 3

Solicita una nota numérica de 0 a 10 (asume que el valor introducido es válido). El algoritmo debe mostrar la calificación correspondiente según la siguiente escala: * Menor que 5: “Insuficiente” * Entre 5 y 6.99: “Aprobado” * Entre 7 y 8.99: “Notable” * 9 o más: “Sobresaliente”


Ejercicio 4

Pide al usuario que introduzca un año positivo. El programa debe determinar si el año es bisiesto o no. Recuerda la regla: un año es bisiesto si es divisible por 4, excepto los años múltiplos de 100, a no ser que también sean divisibles por 400. Muestra “Es Bisiesto” o “No es Bisiesto”.


Ejercicio 5

Una tienda aplica un 10% de descuento si la compra supera los 100 €. Además, los gastos de envío son gratuitos si el importe tras aplicar el descuento es mayor o igual a 80 €; de lo contrario, el envío cuesta 5 €. Pide el importe total inicial de la compra y muestra el desglose final: descuento aplicado, coste de envío y total a pagar.


Ejercicio 6

Pide al usuario 3 notas numéricas. Si alguna de las notas introducidas es menor que 0 o mayor que 10, el programa debe mostrar inmediatamente un mensaje de error (“Nota no válida”) y detenerse. Si todas las notas son válidas, calcula y muestra la nota media.


Ejercicio 7

Diseña un sistema que pida una contraseña al usuario (la contraseña correcta es “1234”). El usuario tiene un máximo de 3 intentos. En cada intento fallido, el programa debe indicar cuántos intentos le quedan. Si acierta, muestra “Acceso concedido” y termina. Si agota los 3 intentos sin acertar, muestra “Cuenta bloqueada”.


Ejercicio 8

Pide al usuario un número $N$ positivo. Mediante un bucle, recorre todos los números enteros desde 1 hasta $N$. Para cada número, debe mostrar en pantalla el valor actual y si es “Par” o “Impar”.


Ejercicio 9

El programa debe pedir números enteros al usuario uno a uno de forma indefinida hasta que introduzca el número 0 (que actúa como condición de salida). Al finalizar, el programa debe mostrar: 1. La suma total de todos los números introducidos. 2. Cuántos números introdujo el usuario en total (sin contar el 0).


Ejercicio 10

Simula un cajero que inicia con un saldo de 500 €. El usuario verá un menú interactivo continuo para realizar operaciones introduciendo un número: * 1: Consultar saldo. * 2: Ingresar dinero (pide la cantidad e incrementa el saldo). * 3: Retirar dinero (pide la cantidad; solo descuenta si hay saldo suficiente, si no, muestra “Error: Saldo insuficiente”). * 0: Salir del cajero.

El menú debe repetirse indefinidamente hasta que el usuario elija la opción 0.