Saltar a contenido

Diagramas de flujo

Un diagrama de flujo es la representación gráfica de un algoritmo. Permite visualizar paso a paso la solución a un problema antes de escribir cualquier código. Este tipo de diagramas está definido en la norma ISO 5807-1985 y se compone de símbolos estandarizados.

Variables

Antes de diseñar un diagrama de flujo, es necesario entender qué es una variable.

Definición

Una variable es un lugar en la memoria del computador donde se almacenan datos. Se puede visualizar como una "caja" con un nombre (identificador) y un valor.

Reglas para nombrar variables

  • Debe comenzar con una letra o guión bajo.
  • Puede contener letras, números y guiones bajos.
  • Python diferencia entre mayúsculas y minúsculas: peso, Peso y PESO son variables distintas.
  • No puede coincidir con una palabra reservada del lenguaje.
Correctos Incorrectos
temperatura, peso, nombre_mascota, _velocidadMax 23peso, #nombre, tiempo.12

Tipos de datos

Una variable puede almacenar distintos tipos de datos:

Números sin decimales.

edadEstudiante = 20

Números con decimales (se usa punto, no coma).

temperatura = 38.8

Cadenas de caracteres, siempre entre comillas.

ciudad = "Quillota"
autor  = "Stephen King"

Las comillas NO forman parte del valor almacenado.

Solo dos valores posibles: verdadero o falso.

estudiante = True
astronauta = False

Símbolos

Los diagramas de flujo usan formas geométricas estandarizadas. A continuación se muestra cada símbolo con su representación visual:

flowchart TD
    A([Inicio / Fin])
    B[Proceso\neg: pago = cantidad * precio]
    C{Decisión\neg: x mayor que 0}
    D[/nombre/]
    E@{ shape: doc, label: "Imprimir\neg: \"Hola mundo\"" }
Forma Nombre Descripción
Óvalo Inicio / Fin Marca el comienzo o el final. Todo diagrama tiene uno de cada uno.
Rectángulo Proceso Operación o cálculo. Ejemplo: pago = cantidad * precio
Rombo Decisión Evalúa una condición. Tiene dos salidas: y No.
Paralelogramo Entrada Ingreso de datos por teclado. Se escribe solo el nombre de la variable. Ejemplo: nombre. Si son varias, separar con comas: m, c.
Rectángulo ondulado Imprimir Muestra información en pantalla. Equivale a print() en Python. El contenido siempre va entre comillas.

Líneas de flujo

  • Flecha sólida → indica la dirección de ejecución.
  • Línea segmentada - - → agrega un comentario aclaratorio a un símbolo.

Reglas de diseño

  1. Todo diagrama tiene un único inicio y un único fin.
  2. Los datos de entrada (del usuario) se capturan con el símbolo de entrada y se almacenan en variables.
  3. Los cálculos y asignaciones se representan con el rectángulo de proceso.
  4. Las salidas (mostrar resultados) usan el símbolo de imprimir, con el contenido siempre entre comillas.
  5. Las decisiones usan el rombo, con ramas etiquetadas "Sí" y "No".
  6. El flujo se recorre siempre desde el inicio hasta el fin siguiendo las flechas.

Precedencia de operadores

Cuando una expresión tiene múltiples operadores, el orden de evaluación determina el resultado.

Operadores aritméticos

Prioridad Operador Descripción Ejemplo
1 (mayor) () Paréntesis (2 + 3) * 4 = 20
2 ^ Potencia 2 ^ 3 = 8
3 * / % Multiplicación, división, módulo 6 / 2 * 3 = 9
4 (menor) + - Suma, resta 2 + 3 - 1 = 4

Operadores de comparación

Se evalúan después de los aritméticos y producen un resultado lógico (verdadero o falso).

Operador Significado
== Igual a
!= Distinto de
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que

Operadores lógicos

Se evalúan después de los de comparación y permiten combinar condiciones.

Prioridad Operador Descripción
1 (mayor) not Niega la condición
2 and Verdadero solo si ambas condiciones son verdaderas
3 (menor) or Verdadero si al menos una condición es verdadera

Orden general

()^* /+ - → comparación → notandor

Ejercicios

Expresiones sin variables

Evalúa cada expresión paso a paso e indica el resultado final.

  1. 3 + 4 * 2 > 10 and 15 % 4 == 3
  2. not (5 * 2 == 10) or 2 ** 3 < 9
  3. (8 + 2) / 5 * 3 > 4 and not 6 % 2 == 0
Ver soluciones

1. 3 + 4 * 2 > 10 and 15 % 4 == 34 * 2 = 8 (multiplicación) → 15 % 4 = 3 (módulo) → 3 + 8 = 11 (suma) → 11 > 10 = True (comparación) → 3 == 3 = True (comparación) → True and True = True

2. not (5 * 2 == 10) or 2 ** 3 < 95 * 2 = 10 (paréntesis + multiplicación) → 2 ** 3 = 8 (potencia) → 10 == 10 = True (comparación) → 8 < 9 = True (comparación) → not True = False (negación) → False or True = True

3. (8 + 2) / 5 * 3 > 4 and not 6 % 2 == 08 + 2 = 10 (paréntesis) → 6 % 2 = 0 (módulo) → 10 / 5 = 2.0 (división) → 2.0 * 3 = 6.0 (multiplicación) → 0 == 0 = True (comparación) → 6.0 > 4 = True (comparación) → not True = False (negación) → True and False = False

Expresiones con variables

Reemplaza el valor de cada variable y evalúa la expresión paso a paso. Considera: N = 2.

  1. N ** 3 + 10 * N < 50 and N % 2 == 0
  2. not (N * 5 > 12) or N ** 2 == 4
  3. 15 + 59 * 75 / 9 < 2 ** 3 ** 2 and (15 + 59) * 75 % N == 1
Ver soluciones

1. N ** 3 + 10 * N < 50 and N % 2 == 0, con N = 22 ** 3 = 8 (potencia) → 10 * 2 = 20 (multiplicación) → 2 % 2 = 0 (módulo) → 8 + 20 = 28 (suma) → 28 < 50 = True (comparación) → 0 == 0 = True (comparación) → True and True = True

2. not (N * 5 > 12) or N ** 2 == 4, con N = 22 * 5 = 10 (paréntesis + multiplicación) → 2 ** 2 = 4 (potencia) → 10 > 12 = False (comparación) → 4 == 4 = True (comparación) → not False = True (negación) → True or True = True

3. 15 + 59 * 75 / 9 < 2 ** 3 ** 2 and (15 + 59) * 75 % N == 1, con N = 215 + 59 = 74 (paréntesis) → 3 ** 2 = 9 (potencia, de derecha a izquierda) → 2 ** 9 = 512 (potencia) → 59 * 75 = 4425 (multiplicación) → 74 * 75 = 5550 (multiplicación) → 4425 / 9 = 491.6... (división) → 5550 % 2 = 0 (módulo) → 15 + 491.6... = 506.6... (suma) → 506.6... < 512 = True (comparación) → 0 == 1 = False (comparación) → True and False = False

4. N > M Y M > 0, con N = 4, M = 34 > 3 = Verdadero3 > 0 = VerdaderoVerdadero Y Verdadero = Verdadero

5. NO (edad >= 18) O edad = 17, con edad = 1717 >= 18 = Falso (comparación) → NO Falso = Verdadero (negación) → 17 = 17 = VerdaderoVerdadero O Verdadero = Verdadero


Estructuras de control

Estructura secuencial

Las instrucciones se ejecutan una tras otra, en orden.

flowchart TD
    A([INICIO]) --> B@{ shape: doc, label: "\"Ingrese base y altura\"" }
    B --> C[/base y altura/]
    C --> D["area = base * altura / 2"]
    D --> E@{ shape: doc, label: "\"El área es:\", area" }
    E --> F([FIN])

Estructura IF-THEN

Ejecuta un bloque solo si la condición es verdadera. Si es falsa, lo omite.

flowchart TD
    A([INICIO]) --> B{condición}
    B -->|Sí| C[instrucciones]
    B -->|No| D
    C --> D([continúa])

Estructura IF-THEN-ELSE

Ejecuta un bloque distinto dependiendo de si la condición es verdadera o falsa.

flowchart TD
    A([INICIO]) --> B{condición}
    B -->|Sí| C[instrucciones A]
    B -->|No| D[instrucciones B]
    C --> E([continúa])
    D --> E

Ejemplos resueltos

Ejemplo 1: Pago de entradas

CineUniverse necesita calcular el pago total según la cantidad de entradas vendidas. Existen dos categorías: menores de 18 años ($2.000) y mayores de 18 años ($5.000).

Entrada: cantidad de entradas de cada categoría. Salida: pago total.

Ver solución
flowchart TD
    A([INICIO]) --> B@{ shape: doc, label: "\"Ingrese cantidad de menores de edad\"" }
    B --> C[/cant_me/]
    C --> D@{ shape: doc, label: "\"Ingrese cantidad de mayores de edad\"" }
    D --> E[/cant_ma/]
    E --> F["pago_me = cant_me * 2000"]
    F --> G["pago_ma = cant_ma * 5000"]
    G --> H["pago = pago_me + pago_ma"]
    H --> I@{ shape: doc, label: "\"El pago total es:\", pago" }
    I --> J([FIN])

Ejemplo 2: Descuento en librería

LibroFest aplica descuentos según el tipo de cliente. Todos los libros valen $5.000.

Tipo de cliente Descuento
Estudiante 15%
Docente 20%
Miembro del club 25%
Ver solución
flowchart TD
    A([INICIO]) --> B@{ shape: doc, label: "\"Ingrese tipo de cliente\"" }
    B --> C[/tipo_cliente/]
    C --> B2@{ shape: doc, label: "\"Ingrese cantidad de libros\"" }
    B2 --> C2[/cant_libros/]
    C2 --> D{"tipo_cliente == estudiante"}
    D -->|Sí| E["descuento = 0.15"]
    D -->|No| F{"tipo_cliente == docente"}
    F -->|Sí| G["descuento = 0.20"]
    F -->|No| H{"tipo_cliente == club"}
    H -->|Sí| I["descuento = 0.25"]
    H -->|No| J["descuento = 0"]
    E --> K["precio_final = cant_libros * 5000 * (1 - descuento)"]
    G --> K
    I --> K
    J --> K
    K --> L@{ shape: doc, label: "\"El precio final es:\", precio_final" }
    L --> M([FIN])

Ejercicios

  1. Diseña el diagrama de flujo de un algoritmo que solicite la cantidad de pasos caminados y calcule la distancia en kilómetros (1 paso = 80 cm).
  2. Diseña el diagrama de flujo de un algoritmo que solicite hora y minuto de entrada y salida de un estacionamiento y calcule el costo a $15 por minuto.
  3. Diseña el diagrama de flujo de un algoritmo que solicite un número entero y muestre si es par o impar.
  4. Diseña el diagrama de flujo de un algoritmo que solicite la renta anual de una persona y muestre el impuesto correspondiente según los tramos:

    Renta Impuesto
    Menos de $500.000 5%
    $500.000 – $1.000.000 15%
    $1.000.000 – $1.500.000 20%
    $1.500.000 – $2.500.000 30%
    Más de $2.500.000 45%
  5. Diseña el diagrama de flujo de un algoritmo que solicite un año e indique si es bisiesto. Un año es bisiesto si es múltiplo de 4, excepto los múltiplos de 100, que solo son bisiestos si también son múltiplos de 400.