Un enfoque para empezar a resolver problemas es la técnica denominada enfoque descendente (top-down), es una técnica esencial para el diseño de algoritmos estructurados. En el enfoque descendente se formula una representación del algoritmo en un alto nivel de abstracción (sin especificar detalles) de lo que el algoritmo debe realizar. Posteriormente, la representación del algoritmo se especifica en un nivel de abstracción inferior al dividirse en tareas más detalladas. Cada tarea del algoritmo se describe con más detalle hasta que la especificación del algoritmo es lo suficientemente concreta.
Considera el siguiente problema: Desarrolla un programa que calcule el promedio de horas de programación que dedican al día un número arbitrario de estudiantes.
Como se mencionó anteriormente, comenzamos con una representación en seudocódigo en un alto nivel de abstracción:
1: Determinar el promedio de las horas de programación
La descripción anterior es una instrucción individual que contiene la función general del programa. Sin embargo, contiene muy pocos detalles para escribir un programa.
Nivel de abstracción 1
A partir de una descripción general, usualmente muchos algoritmos se pueden dividir de manera lógica en tres fases:
El resultado del primer refinamiento es el siguiente:
1: Inicializar las variables
2: Introducir las horas de programación, sumarlas y contarlas ´
3: Calcular y desplegar el promedio de horas
El proceso de refinamiento continua dividiendo las instrucciones en tareas más pequeñas. Para continuar con el siguiente nivel de abstracción se identifican las variables específicas.
Nivel de abstracción 2
En este ejemplo, necesitamos una variable para recibir el valor de cantidad de horas conforme el usuario la introduce que denominamos horas, una variable para almacenar la suma de las horas denominada total, una variable que cuenta el número de horas denominada n y una variable para almacenar el promedio calculado denominada promedio. Las instrucciones en un nivel de abstracción inferior para la primera instrucción Inicializar las variables son las siguientes:
1: total = 0;
2: n = 0;
Observa que solo las variables total y n deben inicializarse antes de utilizarse.
Las variables horas y promedio no necesitan inicializarse.
Las instrucciones en un nivel de abstracción inferior para la instrucción Introducir las horas de programación, sumarlas y contarlas requiere una estructura
de repetición que introduzca cada hora. No sabemos por adelantado cuantas horas se van a procesar, por esta razón, utilizamos una estructura de control del tipo repetir mientras. Las instrucciones en un nivel de abstracción inferior para dicha instrucción son las siguientes:
1: introducir(horas)
2: mientras horas 6= −1 hacer
3: total = total + horas //Acumulador
4: introducir(horas)
5: n = n + 1 //Contador
6: fin mientras
El usuario ingresa las horas una por una y después de introducir la ultima
hora, el usuario introduce un valor no valido (−1). El algoritmo evalúa el valor de horas después introducir cada valor y termina el ciclo cuando el usuario
introduce el valor −1 desde el teclado
Las instrucciones en un nivel de abstracción inferior para la instrucción Calcular y desplegar el promedio de horas son las siguientes:
1: si n 6= 0 entonces
2: promedio = total/n;
3: si no
4: No hay horas;
5: fin si
Observa queen una división el valor del denominador podría ser cero y en consecuencia ocurría un error. Por esta razón, debemos hacernos cargo de este problema de manera apropiada dentro del algoritmo (por ejemplo, se puede desplegar un mensaje deerror), en lugar de permitir que ocurra un error.
El algoritmo está terminado cuando esté especificado con suficientes detalles para codificarlo en un lenguaje de programación. El algoritmo 1 resuelve un
problema general de promedios. Este algoritmo se desarrolló después de sólo dos niveles de refinamiento. Para algoritmos más complejos se requeriránmás niveles de refinamiento y subdividirlos enmás tareas.
Saludos :