Generación de Algoritmos
La resolución de problemas mediante el uso de computadoras requiere del diseño de algoritmos. Un algoritmo es una secuencia de Acciones que la computadora debe llevar a cabo a fin de resolver un problema.
Pasos a seguir para el diseño de un algoritmo
- Descomposisción del problema en subproblemas más simples.
- Combinando las estructuras algorítmicas básicas resolver cada subproblema.
- Ensamblar las soluciones de cada subproblema.
Muchas veces ocurre que después del paso 1 se reconoce que ciertos subproblemas ya han sido resueltos con anterioridad. En estos casos podemos reutilizar el algoritmo que ya tenemos. Esta es una de las grandes ventajas de la programación estructurada y por la cual el paso 1 es fundamental. De hecho muchas veces conviene resolver un subproblema en forma más general que la que realmente se requiere previendo que pueda ser de utilización en otros casos.
Estructuras algorítmicas básicas
Es posible demostrar que cualquier problema puede reducirse, utilizando sólo las siguientes estructuras algorítmicas: Estructura secuencial, Estructura condicional y Estructura repetitiva ( o lazo repetitivo).Estructura Secuencial
Acción 1 -> Acción 2 -> Acción 3 -> ...
La solución del problema consiste en la solución de subproblemas parciales, en forma consecutiva. Es decir que la acción k no se inicia hasta haber terminado la acción k-1. En muchos casos, para realizar la acción k necesitaremos el resultado de la acción k-1. En nuestra notación en pseudocódigo, indicaremos las acciones secuenciales separadas por ";":
Acción 1; Acción 2; Acción 3; Acción 4;
Las acciones propiamente dichas van desde operaciones de entrada/salida (como ingresar números por teclado o imprimir un número por pantalla), operaciones matemáticas o de manejo de caracteres, otras estructuras algorítmicas y hasta otros algoritmos ya resueltos (llamado procedimientos, funciones o subrutinas en los distintos lenguajes). Por ejemplo: supongamos que queremos dividir dos números a y b...
Ingresar número a; Ingresar número b; Dividir a y b; Imprimir el resultado;
Estructura Condicional
En este caso la solución del problema conduce a que, según se cumpla cierta condición o no, se ejecute una u otra de dos acciones diferentes.
Ejemplo: mismo problema anterior, pero sólo cuando b es distinto de 0.Si Condición Entonces Acción1 Sino Acción2 FinSi
Ingresar número a; Ingresar número b; Si b es igual a 0 Imprimir mensaje de error; Sino Dividir a y b; Imprimir el resultado; FinSi
Estructura Repetitiva
En este caso, la solución del problema consiste en la repetición de una acción más sencilla mientras se cumpla cierta condición. Resulta evidente que para que esta sucesión de acciones termine, la acción misma debe modificar por lo menos una de las variables que intervienen en la condición. Cada vez que se ejecuta la acción la llamaremos iteración.
Mientras Condición Hacer Acción FinMientras
Como se observa en el diagrama de bloques, la evaluación de la condición se realiza antes de ejecutar cada una de las iteraciones; es decir que si la condición no se cumple la primera vez que llegamos a este lazo, la acción no se ejecutará nunca. Ejemplo: calcular el factorial de un número n.
Ingresar número n; Inicializar factorial en 1; Mientras n sea mayor que 1 multiplicar factorial por n; guardar resultado en factorial; disminuir n en 1; FinMientras Imprimir factorial;
Notar que hasta este momento no hemos hecho mención de ningún lenguaje en particular. Esto se debe a que el planteo de algoritmos es un paso previo a la escritura del código del programa. Por supuesto que los distintos lenguajes brindan otras estructuras algorítmicas además de las básicas que pueden facilitarnos la vida a la hora de plantear la solución más apropiada.