Metodología para la Solución de Problemas Algorítmicos (MAPS) Metodología para la Solución de Problemas Algorítmicos (MAPS) A continuación se describen las etapas de la Metodología para la Resolución de Problemas Algorítmicos propuesta por Tucker et al., denominada por sus siglas en ingles "MAPS". Son siete las etapas, que a continuación se describen: Etapa 1: El Dialogo Comprender el problema. Leer el enunciado del problema y hacer preguntas sobre las características de las entradas y las salidas. Consiste en la identificación de las entradas, las salidas y sus respectivas limitaciones, para un problema determinado, como fruto de un proceso de análisis, en el cual se le sugiere al estudiante aplicar un enfoque sistémico para realizar una correcta delimitación del problema. Etapa 2: Las Especificaciones Comprendido el paso anterior se procede a definir las especificaciones a partir de las entradas y salidas identificadas en la etapa anterior. Este proceso tiene como fin predecir las pre y post condiciones expresadas como predicados, que en un futuro permitirán evaluar la consistencia del algoritmo ya sea utilizándolas como estados iniciales, intermedios o finales. El estudiante debe tener conocimiento previos de lógica matemática para lograr especificaciones claras de las pre y post condiciones. Escribir pre y postcondiciones que sean completas y consistentes. Es decir, asegurarse de que las precondiciones cubren todas las posibles entradas, que las postcondiciones definen la salida para todas las posibles entradas, y que tanto las precondiciones como las postcondiciones son interna y mutuamente consistente. Etapa 3: La División Esta etapa consiste en la elaboración del algoritmo, diseño del mismo, fundamentada en las técnicas y herramientas que se expusieron anteriormente. Realizar subdivisiones del proceso en una colección de pasos diferentes. Repetir este proceso para cada paso hasta que la subdivisión no tenga sentido. Identificar las relaciones de control entre los distintos pasos. Es decir ¿Qué paso debe preceder a cuál ?, ¿Qué pasos son parte de otro mas complejo?, ¿Qué pasos deben repetirse dentro de un bucle?, y así sucesivamente. Etapa 4: Definición de Abstracciones En esta etapa se determinan cuáles de los pasos que se han utilizado, recolectándolos y adaptarlos en una solo rutina para ser utilizada en la situación presente. Se debe identificar rutinas que se puede reutilizar en el programa, ya sea que existan o que necesite desarrollar él Fuente: http://czsistemas.net63.net/index.php?page=algoritmo6 Adaptado por: Ing. Zamantha González Metodología para la Solución de Problemas Algorítmicos (MAPS) mismo, esto le permitirá realizar sus programas mas fácilmente y de tal forma que su mantenimiento y comprensión sea mas fácil. En muchos casos, esta tarea implica la construcción de nuevas rutinas a partir de otras, o incluso construir una nueva para una utilización mas especializada. Etapa 5: Codificación Se trata de trasladar el algoritmo a un lenguaje de programación, crear el programa fuente con base en la sintaxis propuesta por el lenguaje de programación escogido, compilarlo y por ultimo depurarlo. Etapa 6: Prueba y Verificación Se realizan las pruebas y verificaciones del programa con miras a que este sea: un programa correcto, robusto y amigable. La prueba se realiza para el conjunto de entradas que permita explorar todo el rango de valores permitidos por las precondiciones, para cada ejecución, comprobar que las salidas satisfacen las poscondiciones. Etapa 7: Presentación Se debe crea la documentación necesaria, esta debe ser tanto interna (expresada en líneas de texto dentro del programa) como externa (creando un documento anexo que exponga los aspectos clave del programa para su mantenimiento posterior), de forma tal, que su mantenimiento sea fácil. Se debe identificar el programa, el autor la fecha, una explicación de cada rutina utilizada, no hay límite en cuanto a comentarios, de tal manera que faciliten la modificación programa. Ahora bien, el desarrollo de estas etapas involucra dos conceptos fundamentales como son: Análisis, que consiste en definir las partes en función de un comportamiento, o sea, de algo general y desconocido obtener algo específico y conocido. Es ir del todo a las partes. Es responder a preguntas que involucran ¿Qué?, consiste en indagar. Por ejemplo: ¿Qué debe entrar al problema?, ¿Qué resultados deben salir del problema? y ¿Qué procesos debe ejecutar el problema para convertir las entradas en salidas? Síntesis, que consiste en definir un comportamiento a partir de una serie de partes, es ir de las partes al todo, de algo conocido a lo desconocido, consiste en crear. Es responder a preguntas sobre ¿Cómo?. Por ejemplo: ¿Cómo se debe desarrollar este proceso para lograr convertir las entradas en salidas? Fuente: http://czsistemas.net63.net/index.php?page=algoritmo6 Adaptado por: Ing. Zamantha González Metodología para la Solución de Problemas Algorítmicos (MAPS) Ejemplo. Metodología para la Solución de Problemas algorítmicos Ya estamos en capacidad de dar solución a un problema utilizando una metodología, es este caso aplicaremos la metodología MAPS desde el principio al fin. El Dialogo Deseamos calcular el promedio de las notas de los estudiantes de un curso de Introducción a la programación. El promedio se va a realizar para cada estudiante individualmente. Los datos de entrada serán introducidos por el teclado, hasta que se desee finalizar la introducción de los datos utilizando un valor específico para tal fin. Después de haber introducido los valores por el teclado se procede a calcular el promedio de la nota para el estudiante. Terminado este proceso se presenta el promedio de la nota por la pantalla, permitiendo elegir para ingresar otros datos de entrada para otro estudiante o permitir salir del sistema. Las notas de los estudiantes estarán comprendidas entre 1 y 20 puntos, la cantidad de estudiantes no está limitada, se podrán calcular todos los promedios de notas que se deseen realizar o hasta salir del sistema. Tenemos como datos de entrada: las calificaciones de los estudiantes. Datos de salida: el promedio de las calificaciones. Las Especificaciones: Si denotamos por Nota1 la primera calificación, Nota2 la segunda y así sucesivamente. A continuación se presenta una descripción precisa del problema, en forma de precondiciones y poscondiciones: {pre: entrada = (Nota1, Nota2, ..., Nota n) ^ n>0 ^ i = nai = {post: entrada = (PM1, PM2, …, PMn) ^ n>0 ^ i = n salida = Sum i = ain Llamamos a Sum la suma de las calificaciones, n el número de las calificaciones y PM el promedia de las calificaciones. Por lo tanto Sum, n y PM son variable del problema. La forma de presentar la precondición y poscondición es el lenguaje de la lógica de predicados. Cuando se utiliza la lógica de predicados de esta forma, se dice que realizamos aciertos acerca de los estados inicial y final del proceso. En el ejemplo no se deja duda sobre la exclusión del caso en que existan cero entradas en el problema. Por lo tanto la solución algorítmica de este problema no tiene que ocuparse de este caso. Fuente: http://czsistemas.net63.net/index.php?page=algoritmo6 Adaptado por: Ing. Zamantha González Metodología para la Solución de Problemas Algorítmicos (MAPS) El haber escrito entrada = Vacío en la poscondición significa que, al final del proceso, la entrada estará vacía. Es decir que todas las entradas habrán sido leídas por el proceso, pero no pueden ser leídas de nuevo. Es decir que un valor no puede ser obtenido de nuevo después de haberse obtenido una vez, y los valores individuales de entrada se obtienen exactamente en el orden en que se introducen por el teclado. La Partición Los pasos de este problema son evidentes, si nos ponemos a pensar en el dialogo y las especificaciones, podemos definir los siguientes pasos : paso 1 : Obtener la lista de calificaciones paso 2 : calcular n = número de notas de la lista paso 3 : calcular Sum = la suma de las calificaciones de la lista paso 4 : Calcular prom = Promedio de las notas = Sum / n paso 5 : Presentar el promedio prom La forma de presentar el algoritmo es la siguiente: Fuente: http://czsistemas.net63.net/index.php?page=algoritmo6 Adaptado por: Ing. Zamantha González Metodología para la Solución de Problemas Algorítmicos (MAPS) Definición de abstracciones En esta parte vamos a definir las rutinas. Una rutina es una parte de un algoritmo que puede reutilizarse en otros contextos de resolución de problemas algorítmicos. Un algoritmo o parte de él, que parcialmente puede ser reutilizado recibe el nombre de rutina. Algunas rutinas son comunes y están incluidas en los lenguajes de programación, para utilizarlas en los programas. Consideremos la abstracción: Promediodelistas, una rutina que realiza el cálculo del promedio de los valores de una lista de notas. El procedimiento para definir una rutina es le siguiente. nombrar la abstracción, asignarle un nombre que identifique claramente el algoritmo que representa. Redefinir precondiciones y poscondiciones del problema, de tal manera que la solución pueda implementarse como una rutina. Implementar la abstracción como un procedimiento o función. Comprobación de la integridad de la abstracción: Antes de utilizar una rutina, debemos asegurarnos de que hemos realizado correctamente el proceso de abstracción. como mínimo, esto requiere reestructurar el programa original del que hemos partido para realizar la abstracción, y comprobar que el programa sigue satisfaciendo las especificaciones originales con la abstracción realizada. El algoritmo de nuestro ejemplo quedaría implementado de la siguiente forma: Fuente: http://czsistemas.net63.net/index.php?page=algoritmo6 Adaptado por: Ing. Zamantha González Metodología para la Solución de Problemas Algorítmicos (MAPS) Definición de la rutina Codificación. En pocas palabras la codificación es la traslación de la solución del algoritmo a un programa, junto con su documentación. En la solución de un problema algorítmico parte del código se obtiene durante las etapas de Partición y Abstracción. Prueba y Verificación. El Objetivo es garantizar lo mas posible que la solución diseñada es correcta y completa en todos sus extremos. Es decir comprobar que para todas la precondiciones se producirá un resultado consistente con las poscondiciones. Presentación. La presentación de un solución completa de un problema, debe incluir, además del propio texto del programa, los elementos siguientes: Una introducción escrita en castellano, identificando los autores, y que describa el problema, la solución y de un aspecto importante. Un ejemplo de entradas y las respectivas salidas obtenidas, en una o varias ejecuciones del programa. Un resumen de los resultados de verificación y/o prueba del programa, en los casos que sea adecuada. En pocas palabras, la presentación de la solución a un problema debe hacerse de forma que un lector interesado sea capaz de comprenderla. Fuente: http://czsistemas.net63.net/index.php?page=algoritmo6 Adaptado por: Ing. Zamantha González