Codificación aprenderaprogramar.com: CU00178A
INSTRUCCIÓN FINALIZAR
La instrucción Finalizar da pie a que se termine el procesamiento del algoritmo tal y como lo hace la instrucción Fin. Reservaremos Fin como palabra clave a disponer como última instrucción en la escritura de un algoritmo y Finalizar para cualquier terminación del programa que no coincida con el Fin.
Finalizar puede encontrarse en cualquier punto del programa comprendido entre Inicio y Fin, incluido una situación dentro de un bucle, un proceso de decisiones múltiples, etc. Normalmente Finalizar irá después de evaluar una situación que es la desencadenante de la finalización.
Equivalentes a Finalizar son Acabar, Terminar y los ampliamente difundidos términos anglosajones End y Exit.
Ejemplo de uso en un bucle.
Pseudocódigo:
1. Inicio [Finaliza si hay problemas - Ejemplo http://www.aprenderaprogramar.com] 2. Mientras Numero < 100 ó Numero > 200 Hacer Mostrar “Por favor, introduzca un número comprendido entre 100 y 200” Pedir Numero i = i + 1 Si i > 19 Entonces Mostrar “Hay un problema para continuar y el programa se va a cerrar. Motivo: 20 procesos nulos. Consulte el manual del programa” Finalizar FinSi Repetir 3. Mostrar “Gracias por introducir una entrada válida” 4. [Aquí continuaría el programa con diferentes procesos] 5. Fin |
Diagrama de flujo:
Comentarios: Es quizás la fuerte variación de la configuración del diagrama de flujo respecto a los que habitualmente veníamos haciendo, la que nos da una idea mejor de qué puede suponer la modificación directa del flujo de los programas. En este caso, se pide un número acotado en un intervalo y si el valor introducido no es válido se repite la petición. Si tras 20 intentos el valor no es válido se considera que existe un problema y se cierra el programa.
Ejemplo de uso fuera de un bucle.
Consideremos un programa tal como este:
1. Inicio [Proceso de solicitudes aprenderaprogramar.com] 2. Leer Datosolicitudes [Determina número de solicitudes] 3. Si Datosolicitudes > 0 Entonces Instrucción 1 Instrucción 2 Instrucción 3 Instrucción 4 Instrucción 5 Instrucción 6 Instrucción 7 Instrucción 8 Instrucción 9 Instrucción 10 SiNo Mostrar “No hay solicitudes para procesar. Revise el archivo de solicitudes. El programa termina.” FinSi 4. Fin |
Y comparémoslo con este otro:
1. Inicio [Proceso de solicitudes aprenderaprogramar.com] 2. Leer Datosolicitudes [Determina número de solicitudes] 3. Si Datosolicitudes <= 0 Entonces Mostrar “No hay solicitudes para procesar. Revise el archivo de solicitudes. El programa termina.” Finalizar FinSi 4. Instrucción 1 5. Instrucción 2 6. Instrucción 3 7. Instrucción 4 8. Instrucción 5 9. Instrucción 6 10. Instrucción 7 11. Instrucción 8 12. Instrucción 9 13. Instrucción 10 14. Fin |
El diagrama de flujo para el primer caso sería:
Y para el segundo:
Comparando los pseudocódigos, vemos que en el primer caso el núcleo del programa, es decir, las instrucciones 1 a 10, quedan como bloque subordinado dentro de la instrucción Si. Que todo el núcleo de un programa quede “sangrado” no es demasiado deseable. Analizando los diagramas de flujo vemos que en el primer caso hay dos ramas y en el segundo un tronco con un apéndice. Supongamos un programa no con 10 ó 15 instrucciones, sino con 1000 ó 1500 ¿Qué estructura aporta mayor claridad? ¿Cuál es más fácil de leer? ¿Cuál es más fácil de comprender?
No podemos decir “Nunca se dejará un núcleo de programa como bloque subordinado” ni “Nunca se usará un Finalizar para evitar un núcleo de programa subordinado”. Para cada caso particular el programador tendrá que estimar qué es lo mejor para su programa en función de su experiencia y criterio. De cualquier forma y a modo de conclusión:
· Evitar el uso de Finalizar siempre que sea posible.
· Recordar lo expuesto en la introducción a la modificación directa del flujo de programas.
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.