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,PesoyPESOson 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:
Cadenas de caracteres, siempre entre comillas.
Las comillas NO forman parte del valor almacenado.
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: Sí 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¶
- Todo diagrama tiene un único inicio y un único fin.
- Los datos de entrada (del usuario) se capturan con el símbolo de entrada y se almacenan en variables.
- Los cálculos y asignaciones se representan con el rectángulo de proceso.
- Las salidas (mostrar resultados) usan el símbolo de imprimir, con el contenido siempre entre comillas.
- Las decisiones usan el rombo, con ramas etiquetadas "Sí" y "No".
- 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 → not → and → or
Ejercicios¶
Expresiones sin variables¶
Evalúa cada expresión paso a paso e indica el resultado final.
3 + 4 * 2 > 10 and 15 % 4 == 3not (5 * 2 == 10) or 2 ** 3 < 9(8 + 2) / 5 * 3 > 4 and not 6 % 2 == 0
Ver soluciones
1. 3 + 4 * 2 > 10 and 15 % 4 == 3
→ 4 * 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 < 9
→ 5 * 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 == 0
→ 8 + 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.
N ** 3 + 10 * N < 50 and N % 2 == 0not (N * 5 > 12) or N ** 2 == 415 + 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 = 2
→ 2 ** 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 = 2
→ 2 * 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 = 2
→ 15 + 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 = 3
→ 4 > 3 = Verdadero
→ 3 > 0 = Verdadero
→ Verdadero Y Verdadero = Verdadero
5. NO (edad >= 18) O edad = 17, con edad = 17
→ 17 >= 18 = Falso (comparación)
→ NO Falso = Verdadero (negación)
→ 17 = 17 = Verdadero
→ Verdadero 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¶
- 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).
- 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.
- Diseña el diagrama de flujo de un algoritmo que solicite un número entero y muestre si es par o impar.
-
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% -
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.