5 EJEMPLOS DE PSEUDICODIGO A DIAGRAMA DE FLUJO.
1. EJERCICIO


Una ONG tiene puntos de reparto de vacunas que se pretende funcionen de la siguiente manera. Cada día, empezar con 1000 vacunas disponibles y a través de un programa que controla las entregas avisar si el inventario baja de 200 unidades. Desarrollar pseudocódigo y diagrama de flujo.
SOLUCIÓN
Pseudocódigo:
1. Inicio [Control de Vacunas aprenderaprogramar.com]
2. Existencias = 1000
3. Mientras Existencias >= 200 Hacer
Mostrar “Introduzca el número de unidades entregadas”
Pedir Entregadas
Existencias = Existencias – Entregadas
Repetir
4. Mostrar “El inventario ha bajado de 200 unidades. Debe comunicarlo”
5. Fin
|


Comentarios: La variable Existencias funciona como un acumulador que parte de un valor inicial y cuyo valor tras un movimiento depende de su contenido precedente.
Diagrama de flujo:
2. EJERCICIO
Un vivero forestal actualiza cada seis meses los precios de la planta que vende en función de los valores oficiales de inflación mensual. Desean desarrollar un programa que proporcione el precio actualizado a partir del precio anterior y los valores de inflación.
SOLUCIÓN
Consideramos que una vez transcurre el mes el nuevo precio es:

El siguiente mes el precio a aplicar ya no es el inicial, sino el precio afectado por la inflación.
Pseudocódigo:
1. Inicio [Actualización Precios de Plantas aprenderaprogramar.com]
2. Mostrar “Introduzca el precio actual”
3. Pedir Actual
4. Nuevo = Actual
5. Desde i = 1 hasta 6 Hacer
Mostrar “Introduzca la inflación del mes”, i
Pedir inf(i)
Nuevo = Nuevo * (1 + inf(i) / 100)
Siguiente
6. Mostrar “El precio nuevo del producto debe ser”, Nuevo
7. Fin
|
Diagrama de flujo:

3. EJERCICIO
Desarrollar el pseudocódigo y diagrama de flujo para un algoritmo que calcule la superficie de un terreno que le corresponde a un heredero después de n generaciones, partiendo de una superficie inicial en la generación cero. Se supone que hay división a partes iguales entre herederos.
SOLUCIÓN
Organización previa de variables:
Variable
|
Descripción - Uso
|
n
|
Almacena el número de generaciones
|
Hgen(1), Hgen(2), ..., Hgen(n)
|
Array de las variables que almacenan el número de herederos
|
Supin
|
Superficie inicial (generación 0)
|
Toca
|
Superficie que toca al heredero actualmente considerado
|
Pseudocódigo y diagrama de flujo:
1. Inicio [Superficie herederos aprenderaprogramar.com]
2. Mostrar “¿Cuál es el número de generaciones?” : Pedir n
3. Mostrar “¿Cuál es la superficie inicial?” : Pedir Supin
4. Toca = Supin
5. Desde i = 1 hasta n Hacer
Mostrar “¿Cuál es el número de herederos de la generación”, i, “?”
Pedir Hgen(i)
Toca = Toca / Hgen(i)
Siguiente
6. Mostrar “Al heredero actual le corresponde una superficie de”, Toca
7. Fin
|

Comentarios: Nótese cómo es habitual darle valores a los contadores o acumuladores antes de entrar en los bucles. El diagrama de flujo es abreviado.
Otra cuestión interesante es cómo el número de iteraciones del bucle es variable en función del valor de n, que es un dato externo al programa. Podríamos decir que n es una variable controladora del bucle (y del programa).
4. EJERCICIO
Se extraen datos de un archivo en “paquetes” de 100 unidades. Si el número de datos extraídos con valor superior a 600 y menor de 700 es mayor de 100, mostrar el mensaje “Se cumple lo previsto”, indicando el número de datos que se extrajeron cumpliendo frente al total extraído. En caso contrario, continuar extrayendo paquetes de datos (se consideran ilimitados). Plantearlo en pseudocódigo y diagrama de flujo.
Nota: Considerar que los datos se encuentran en un array Dato(1), Dato(2), Dato(...)
SOLUCIÓN
Pseudocódigo:
1. Inicio [Extracción de datos p100 aprenderaprogramar.com]
2. n = 1
3. Mientras Esperado = Falso Hacer
3.1 Desde i = n hasta n + 99 Hacer
Leer Dato(i)
Si Dato(i) > 600 y Dato(i) < 700 Entonces
j = j + 1
FinSi
Siguiente
3.2 Si j > 100 Entonces
Esperado = Verdadero
FinSi
3.3 Si Esperado = Verdadero Entonces
Mostrar “Se cumple lo previsto habiendo extraído”, j, “datos de un total de”, n + 99, “datos”
SiNo
Mostrar “Extracción de un nuevo paquete”
n = n + 100
FinSi
Repetir
4. Fin
|
Comentarios: La variable booleana Esperado funciona como interruptor para el control del bucle principal así como para una toma de decisión a través de Si ... Entonces. Si bien su uso no es ineludible, usar expresiones como Esperado = Verdadero siempre será más claro y menos engorroso que el uso de relaciones algebraicas más o menos complejas.
En este algoritmo prescindiríamos del interruptor de la siguiente manera:
Modificamos la línea 3 a: Mientras j <= 100 Hacer
· Modificamos la línea 3.2 a:
Si j > 100 Entoces
Mostrar “Se cumple lo previsto habiendo extraído”, j, “datos de un total de”, n + 99, “datos”
SiNo
Mostrar “Extracción de un nuevo paquete”
n = n + 100
FinSi
|
· Eliminamos la línea 3.3
Esta opción es igual de válida que la anterior, pero más difícil de seguir e interpretar.
Diagrama de flujo:

5. EJERCICIO
En un complejo industrial se desea incentivar a los encargados de turnos de producción. A cada encargado le corresponde un turno. Hay 18 turnos, y por cada uno de ellos 40 operarios. Para evaluar a los encargados se ha hecho una encuesta entre los trabajadores. Se les ha pedido que evalúen a su encargado de 0 a 10 siendo el 5 el aprobado. Los resultados están almacenados en un array tipo Nota(turno, operario) donde turno indica el número de turno y operario el número de operario dentro del turno.
Desarrollar el pseudocódigo y diagrama de flujo para un algoritmo que determine en qué turnos todos los operarios del mismo han aprobado al encargado.
SOLUCIÓN
Organización de variables:
Variable
|
Descripción - Uso
|
i, j
|
Uso como contadores
|
Nota(i,j)
|
Array de variables que almacenan la puntuación otorgada al encargado por el operario nº j del turno nº i
|
Haysuspensos
|
Interruptor que vale verdadero si algún operario del turno suspende al encargado y falso en caso contrario
|
Pseudocódigo:
1. Inicio [Evaluación de encargados aprenderaprogramar.com]
2. Desde i = 1 hasta 18 Hacer
2.1 Desde j = 1 hasta 40 Hacer
Leer Nota(i,j)
Si Nota(i,j) < 5 Entonces
Haysuspensos = Verdadero
FinSi
Siguiente
2.2 Si Haysuspensos = Falso Entonces
Mostrar “Todos los operarios del turno”, i, “han aprobado al encargado”
FinSi
2.3 Haysuspensos = Falso
Siguiente
3. Fin
|
Comentarios: Nótese cómo el uso de un interruptor simplifica una evaluación de múltiples condicionantes.
La evaluación propuesta es equivalente a:
Si Nota(i,j) < 5 ó Nota(i,j+1) < 5 ó Nota(i,j+2) < 5 ó ... ó Nota(i,40) < 5 Entonces
Haysuspensos = Verdadero
FinSi
|
Obviamente con los recursos que conocemos ya no tiene sentido pensar en este tipo de enumeración de condiciones.
Otro aspecto interesante es que cuando se han extraído las conclusiones derivadas del estado del interruptor y se va a empezar un nuevo ciclo, hay que “apagar” el interruptor. En caso contrario nos enfrentamos a conclusiones erróneas, de las que se pueden derivar los ya consabidos malfuncionamientos, errores, bloqueos, etc. Por tanto, precaución frente a este tipo de olvidos pues es también de los habituales. En un programa largo y complejo, puede hacerse difícil dar con el interruptor que está fallando.

| Ilustración: Utilizamos una instrucción Desde ... Siguiente cuando el número de iteraciones es definido. A su vez un interruptor nos sirve para obtener información de lo que ha ocurrido durante el proceso de datos. |
Diagrama de flujo aprenderaprogramar.com:

