El proceso de diseño de programas La finalidad de la programación estructurada es producir programas que sean más fáciles de entender que los no estructurados y, por tanto, más fáciles de probar, depurar1, modificarse, etc. Para eso nos valemos de los algoritmos y sus diferentes formas de representación: pseudocódigo, diagramas de flujo y nassi-schneiderman, etc., así como de las estructuras de control: secuenciales, de selección, iterativas, etc. La figura siguiente resume la representación de las estructuras de control analizadas por medio de diagramas de flujo. Los pequeños círculos se utilizan en la figura para indicar un solo punto de entrada y un solo punto de salida de cada estructura. Utilizando de forma correcta estos elementos, podremos elaborar sólo programas estructurados mediante su combinación adecuada. Secuencia Selección Estructura si (una sola selección) V Estructura si no (doble selección) F V F Estructura según sea (múltiple selección) V break F V break F V break F Estructuras de control de secuencia, selección y repetición (continúa en la siguiente página) Las estructuras de control solo pueden ser combinados de dos formas: apilamiento y anidamiento. 1 Depurar. Limpiar, perfeccionar. Repetición Estructura hacer… mientras Estructura mientras Estructura para ó desde V V F F V F Algoritmo para la formación de programas estructurados 1) Empiece con el diagrama de flujo más simple 2) Cualquier acción (incluyendo entrada/salida) puede ser reemplazada por dos acciones en secuencia (regla de apilamiento) 3) Cualquier acción puede ser reemplazada por cualquier estructura de control (regla de anidamiento) 4) Las reglas 2 y 3 pueden ser aplicadas tan frecuentemente como se desee en cualquier orden Inicio acción Diagrama de flujo más simple Fin El pseudocódigo es un lenguaje artificial e informal (mezcla de un lenguaje de programación y el español o inglés o cualquier otro idioma) auxiliar en el desarrollo de algoritmos. No son ejecutados en la computadora, sino más bien, solo ayudan a pensar la solución de un problema que posteriormente será codificado en un lenguaje de programación. Secuencia LEER <valor> ESCRIBIR <valor> variable <valor> Selección Repetición Simple. SI <condición> ENTONCES <acciones> FIN_SI Mientras. MIENTRAS <condición> HACER <acciones> FIN_MIENTRAS Doble. SI <condición> ENTONCES <acciones> SI_NO <acciones> FIN_SI Para. PARA variable DESDE <valor_inicial> HASTA <valor_final> [INCREMENTO <valor_incremento> ó DECREMENTO <valor_decremento>] HACER <acciones> FIN_PARA Selección Múltiple. SEGÚN SEA <expresión> <valor 1> HACER: <acciones 1> <valor 2> HACER: <acciones 2> . . . <valor n> HACER: <acciones n> SI NO, HACER: <acciones n+1> FIN_SEGÚN_SEA Repetición. Hacer … mientras. HACER <acciones> MIENTRAS <condición> FIN_HACER_MIENTRAS Ejemplo. Elaborar un algoritmo que lea un valor entero y calcule su factorial. El factorial de un número se calcula con la siguiente fórmula: n! n (n 1) (n 2) ... 1 y n! = 1 (para n = 0). Por ejemplo, 5! = 5 4 3 2 1, es decir, 20. NOTA: Otra forma de resolver este problema, sería inicializar ‘i’ con el valor de ‘n’ e ir decrementando su valor. También modificar la condición para que solo calcule el factorial cuando el número proporcionado sea mayor a 2. /* Ejemplo del algoritmo: factorial, escrito en lenguaje C*/ int factorial(int n) { int factorial = 1; if (n > 1) { for (int i = 2; i < (n + 1); i++) { factorial = factorial * i; } } return factorial; } Algoritmo. Factorial Elementos: n: entero i: contador factorial: entero 1) 2) 3) 4) 5) 6) 7) 8) 9) Inicio Asignar 1 a ‘factorial’ Asignar 1 a ‘i’ Leer el valor de ‘n’ Si ‘n’ es igual a 0, ir al paso 8, en caso contrario, continuar en el siguiente paso Mientras ‘i’ sea menor o igual a ‘n’, continuar en el siguiente paso, si no, ir al paso 8 Asignar a ‘factorial’ el resultado de multiplicar su valor actual por el valor de ‘i’, regresar al paso anterior Imprimir ‘factorial’ Fin Pseudocódigo. Factorial VAR n, i, factorial: entero FIN_VAR INICIO factorial 1 LEER(n) SI (n > 0) ENTONCES PARA i DESDE 1 HASTA n HACER factorial factorial * i FIN_PARA FIN_SI ESCRIBIR(factorial) FIN Diagrama de flujo. INICIO factorial 1 LEER(n) verdadero n > 0 i 1 falso verdadero i <= n factorial factorial * i i i + 1 falso ESCRIBIR(factorial) FIN Ejercicio. Escribir un algoritmo para determinar si un número entero dado por el usuario es un número primo. primo = verdadero i = 2 hacer si (n mod i == 0) entonces primo = falso i = i + 1 mientras (primo == verdadero && i < n) escribir(primo) Ejercicio. Elaborar un algoritmo que lea dos valores enteros y determine si el segundo de ellos es múltiplo del primero. si (a mod b == 0) entonces escribir(a ”es múltiplo de” b) si no escribir(a ”no es múltiplo de” b)