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

  1. Descomposisción del problema en subproblemas más simples.
  2. Combinando las estructuras algorítmicas básicas resolver cada subproblema.
  3. 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.

 

Si Condición Entonces
  Acción1
Sino
  Acción2
FinSi

Ejemplo: mismo problema anterior, pero sólo cuando b es distinto de 0.

	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.