martes, 15 de agosto de 2017

Solución de problemas

¿Qué es solución de problemas?


El Diccionario Larousse define el término método como "el conjunto de operaciones ordenadas con que se pretende obtener un resultado". La metodología es la ciencia que aplica este método. Existen muchos tipos de metodologías, como la metodología de investigación, metodología de enseñanza-aprendizaje, etc., así como la metodología de solución de problemas, que aplicamos constantemente en la vida diaria. Pero en este caso hablaremos específicamente de la solución de problemas que podemos resolver mediante el uso de la computadora.

La resolución de los problemas consta de cinco etapas que garantizan la llegada correcta a la solución: identificación del problema, planteamiento de alternativas de solución, elección de una alternativa, desarrollo de la solución y evaluación de ésta.

 1. Identificación del problema
La identificación del problema es una fase muy importante en la metodología, pues de ella depende el desarrollo anterior en busca de la solución. Un problema bien delimitado es una gran ayuda para que el proceso general avance bien; un problema mal definido provocará desvíos conceptuales que serán difíciles de remediar posteriormente. En esta etapa es fundamental el análisis de la información inicial (entrada) con el fin de distinguir los datos pertinentes de los que no lo son, de manera que se pueda elegir la configuración más conveniente respecto a las soluciones posibles. También deben definirse los datos de salida que garanticen la continuidad del proceso para que sea más fácil eliminar las expectativas negativas.

2. Planteamiento de alternativas de solución
Después de la definición del problema y del análisis de los datos de entrada, el proceso continúa con el análisis de las alternativas de solución. Por lo general, la solución de un problema puede alcanzarse por distintas vías. Es útil tratar de plantear la mayor cantidad de alternativas posibles de solución, pues de esta forma las probabilidades aumentan a favor de encontrar la vía correcta. Se debe destacar que no es conveniente extender demasiado el número de alternativas, pues si el número de éstas es demasiado alto, se presentará una mayor dificultad para elegir la mejor de todas, que es en definitiva el objetivo del proceso.

3. Elección de una alternativa
Después de tener todo el repertorio de alternativas, es necesario pasar a otra etapa: la elección de la mejor entre todas las posibilidades. Esta fase es muy importante porque de la elección realizada depende el avance final hasta la solución. La orientación hacia delante supone la irreversibilidad si la decisión es acertada o una "reversibilidad onerosa", pues si la decisión no es acertada, es necesario retroceder, lo que afecta la "optimidad" del proceso.

Por lo tanto, es necesario que cada alternativa sea bien analizada para que la toma de decisiones sea bien justificada. Deberás elegir la alternativa que sea la más adecuada para la solución del problema, tomando en cuenta las características del problema y las características que deberá tener la solución, así como los elementos, datos o información con la que cuentas.

4. Desarrollo de la solución
Después de decidir cuál es la mejor alternativa de todas, se llega a la etapa de la solución. En esta fase, a partir de los datos relacionados con la alternativa seleccionada, se aplican las operaciones necesarias para solucionar el problema. La selección de los procesos también debe ser determinada en función de la optimidad, es decir, las operaciones deben llegar a la solución por el camino más corto para garantizar la mayor eficiencia en el funcionamiento. Si la alternativa es la óptima, llevará a la solución deseada que fue prevista en la identificación del problema.

5. Evaluación de la solución
Luego de haber desarrollado la solución queda aún una etapa, que es la evaluación. En los procesos industriales a este procedimiento se le llama control de la calidad y consiste en determinar que la solución obtenida es lo que se esperaba conseguir comprobando que el resultado sea correcto. En esta fase se deben "pulir" los procesos ya realizados y tratar de llevarlos a un grado mayor de optimalidad, pues el algoritmo más eficiente en la solución de un problema es el que llega a su objetivo final con la mayor economía de procedimientos que sea posible. A continuación, puedes observar un ejemplo de la aplicación de la metodología a la solución de un problema simple. Es importante saber que los problemas complejos también se resuelven con esta estructura.

 

Solución de un problema según Polya


El modelo de Polya provee un marco conceptual para resolver problemas. Éste consiste en cuatro pasos:

Comprender el problema. Resume la información dada y que deseas determinar.

Desarrollar un plan. Expresa la relación entre los datos y la incógnita a través de una ecuación o fórmula. Busca patrones.
LLevar a cabo el plan. Resuelve la ecuación, evalúa la fórmula, identifica el término constante del patrón, según sea el caso.
Revisar. Examina la solución que obtuviste. Pregúntate si la respuesta tiene sentido.



¿Qué es un algoritmo de solución?


Es una secuencia de pasos o procesos lógicamente relacionados entre sí a fin de obtener la solución a un problema planteado.


2.- Es una lista de instrucciones para efectuar paso a paso un proceso.

3.- Conjunto "FINITO" de pasos o instrucciones, seguidas en un orden lógico, los cuales nos llevan a la solución de un problema específico.

4.- Una serie de instrucciones colocadas en cierta secuencia, necesarias para la descripción de las operaciones que llevan a la solución de un problema.

5.- Es un procedimiento completo para resolver un problema específico en un número "FINITO" de pasos.

6.- Es un método para resolver un problema mediante una serie de datos precisos, definidos y finitos.


¿Cómo se comprueba si un algoritmo funciona?





VERIFICACIÓN MENTAL DE ALGORITMOS
La verificación mental consiste en “recorrer” el algoritmo mentalmente. Durante ese recorrido hacemos el seguimiento de:

· El flujo del programa.

· Los valores de las variables.

· Procesos relevantes que hayan tenido lugar como extracción o almacenamiento de datos en dispositivos externos.





Para el caso planteado de doble anidamiento, podemos realizar una verificación mental sin demasiado problema puesto que tenemos tres variables y dos bucles. Sin embargo, para algoritmos complejos nuestra capacidad mental no va a ser suficiente por lo que esta técnica será útil sólo para evaluar procesos sencillos.


VERIFICACIÓN POR SEGUIMIENTO ESCRITO
La verificación por seguimiento escrito vendría a ser plasmar el seguimiento mental que hacemos sobre papel. Tiene la ventaja de que requiere un mínimo empleo de nuestra memoria, ya que de todo va quedando registro escrito, así como de evitarnos el tener que empezar desde el principio si nos perdemos, ya que siempre podemos volver a empezar desde el último punto escrito del que estamos seguros.

Para el caso planteado el seguimiento escrito vendría a reflejar lo siguiente:

Entrada a bucle controlado por i, que tomará valores de 1 a 5.

i vale 1.

Entra a bucle controlado por j, que tomará valores de 1 a 5.

j vale 1.A vale i * j = 1 * 1 = 1. Se muestra A. j progresa a 2.

A vale i * j = 1 * 2. Se muestra 2. j progresa a 3.

A vale i * j = 1 * 3 = 3. Se muestra 3. j progresa a 4.

A vale i * j = 1 * 4 = 4. Se muestra 4. j progresa a 5.

A vale i * j = 1 * 5 = 5. Se muestra 5. j progresa a 6 y supera el valor preestablecido, por lo que se sale del bucle.

i progresa a 2. Entrada a bucle controlado por j, que tomará valores de 1 a 5. j vale 1. A vale i * j = 2 * 1 = 2. Se muestra 2. j progresa a 2.

A vale i * j = 2 * 2 = 4. Se muestra 4. j progresa a 3.

A vale i * j = 2 * 3 = 6. Se muestra 6. j progresa a 4.

A vale i * j = 2 * 4 = 8. Se muestra 8. j progresa a 5.

A vale i * j = 2 * 5 = 10. Se muestra 10. j progresa a 6 y supera el valor preestablecido, por lo que se sale del bucle. i progresa a 3. Entrada a bucle controlado por j, que tomará valores de 1 a 5. j vale 1.

A vale i * j = 3 * 1 = 3. Se muestra 3. j progresa a 2.

A vale i * j = 3 * 2 = 6. Se muestra 6. j progresa a 3.

A vale i * j = 3 * 3 = 9. Se muestra 9. j progresa a 4.

A vale i * j = 3 * 4 = 12. Se muestra 12. j progresa a 5.

A vale i * j = 3 * 5 = 15. Se muestra 15. j progresa a 6 y supera el valor preestablecido, por lo que se sale del bucle. i progresa a 4. Entrada a bucle controlado por j, que tomará valores de 1 a 5. j vale 1.

A vale i * j = 4 * 1 = 4. Se muestra 4. j progresa a 2.

A vale i * j = 4 * 2 = 8. Se muestra 8. j progresa a 3.

A vale i * j = 4 * 3 = 12. Se muestra 12. j progresa a 4.

A vale i * j = 4 * 4 = 16. Se muestra 16. j progresa a 5. A vale i * j = 4 * 5 = 20. Se muestra 20. j progresa a 6 y supera el valor preestablecido, por lo que se sale del bucle. i progresa a 5. Entrada a bucle controlado por j, que tomará valores de 1 a 5. j vale 1.

A vale i * j = 5 * 1 = 5. Se muestra 5. j progresa a 2.

A vale i * j = 5 * 2 = 10. Se muestra 10. j progresa a 3.

A vale i * j = 5 * 3 = 15. Se muestra 15. j progresa a 4.

A vale i * j = 5 * 4 = = 20. Se muestra 20. j progresa a 5.

A vale i * j = 5 * 5 = 25. Se muestra 25. j progresa a 6 y supera el valor preestablecido, por lo que se sale del bucle. i progresa a 6 y supera el valor preestablecido, por lo que se sale del bucle.



El lenguaje que se emplea en este seguimiento escrito es libre y puede “soslayar” algunos pasos que se consideren no relevantes. Puede emplearse un lenguaje abreviado que evite la repetición de texto. Por ejemplo:

(-->)Bucle 01 i ->1a 5. i = 1. (-->)Bucle 02 j ->1a 5. j = 1. A = 1. j = 2. A = 2. j = 3. A = 3. j = 4. A = 4. j = 5. A = 5. j = 6. Fin bucle 02 (<--)i = 2. (-->)Bucle 03. j ->1a 5. j = 1. A = 2. j = 2. A = 4. j = 3. A = 6. j = 4. A = 8. j = 5. A = 10. j = 6. Fin bucle 03 (<--)i = 3. (-->)Bucle 04. j ->1a 5. j = 1. A = 3. j = 2. A = 6. j = 3. A = 9. j = 4. A = 12. j = 5. A = 15. j = 6. Fin bucle 04 (<--). i = 4. (-->)Bucle 05 j ->1a 5. j = 1. A = 4. j = 2. A = 8. j = 3. A = 12. j = 4. A = 16. j = 5. A = 20. j = 6. Fin bucle 05 (<--)i = 5. (-->)Bucle 06 j ->1a 5. j = 1. A = 5. j = 2. A = 10. j = 3. A = 15. j = 4. A = 20. j = 5. A = 25. j = 6. Fin bucle 06 (<--)Fin bucle 01 (<--)



Abreviando o no esta técnica resulta repetitiva, de lectura no demasiado agradable y un tanto tediosa. Su uso se limita por tanto a alguna aplicación de fines didácticos o a procesos poco largos en los que mentalmente “nos enrollamos” y decidimos escribir un pequeño seguimiento para verificar que se cumple lo esperado.


Ejemplos



Resultado de imagen para algoritmos graciosos

Resultado de imagen para algoritmos graciosos



Resultado de imagen para algoritmos graciosos

Algoritmo para hallar el área de un triangulo rectángulo



1) Solicitar datos: base (b) y altura (h).
2) Hacer operaciones correspondientes: A = (a*b)/2
3) Sacar resultados.





¿Qué es un pseudocódigo?



El pseudocódigo (o falso lenguaje) es comúnmente utilizado por los programadores para omitir secciones de código o para dar una explicación del paradigma que tomó el mismo programador para hacer sus códigos, esto quiere decir que el pseudocódigo no es programable sino facilita la programación.

El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se utilizará para la codificación del mismo

El pseudocódigo utiliza para representar las acciones sucesivas palabras reservadas en inglés (similares a sus homónimos en los lenguajes de programación), tales como star,begin, end, stop, if-then-else, while, repeat-until….etc
Es un lenguaje de especificación de algoritmos. El uso de tal lenguaje hace el paso de codificación final (esto es, la traducción a un lenguaje de programación) relativamente fácil.

El pseudocódigo nació como un lenguaje similar al inglés y era un medio representar básicamente las estructuras de control de programación estructurada. Se considera un primer borrador, dado que el pseudocódigo tiene que traducirse posteriormente a un lenguaje de programación. Cabe señalar que el pseudocódigo no puede ser ejecutado por una computadora.

Según Analía Lanzillotta: "Considerado como un lenguaje falso, el pseudocódigo es un lenguaje intermedio entre nuestro lenguaje y el de programación, debido a que quien lo utiliza se guía por una serie de normas pero sin llegar a usar una estructura tan rígida como la del lenguaje de programación.

El objetivo al que apunta es que quien lo pone en práctica se centre más en la solución del algoritmo o el diseño de un software que en el programa que utiliza para crearlo. Y esto es posible porque es más fácil de manipular ya que no tiene que tener en mente el lenguaje en sí y además, más fácil de codificar. 

Por ejemplo, si alguien tiene que hacer un software con un fin determinado, utiliza un pseudocódigo propio en donde confluyen frases del lenguaje coloquial y algunas palabras de programación, y una vez que se logra concretar el software, se puede pasar al escalón siguiente que es el de la transformación al lenguaje de programación formal que se vaya a utilizar.

De esta manera, al ser un lenguaje intermedio, no tiene una composición estandarizada por lo que no todos los programadores utilizan la misma sintaxis con exactitud. Pero a la vez, como es una herramienta que está un paso previo al lenguaje formal de programación, es fácil de transformar al que será ejecutado en la computadora.


¿Qué es PSeInt?

Es un interprete de pseudocódigo. Con esta aplicación el estudiante de programación puede crear algoritmos usando el lenguaje español de una forma fácil y sencilla y luego ver el resultado del algoritmo en una ventana de DOS, igual que si lo hiciera en un lenguaje de programación como C o Pascal, por decir un par de ellos.
PSeInt nos proporciona un editor de texto con realzado de sintaxis igual que cualquier IDE (entorno de desarrollo integrado) y ayudas a la escritura en tiempo real. Nos proporciona verificación de sintaxis en tiempo real, esto es, si escribimos una sentencia incorrecta o nos falta algo, el propio programa nos lo avisa señalándolo en el editor de código mediante un subrayado rojo.

Además también incluye herramientas de explicación y comprobación de los algoritmos que escribamos. Tiene una opción para ejecutar el algoritmo paso a paso y ver si realmente hace lo que se supone tiene que hacer. Comprobar el valor de las variables y las expresiones que escribamos en tiempo de ejecución del algoritmo y un sistema de ejecución explicado sentencia a sentencia , en el que podemos ver linea a linea lo que hace cada instrucción que hemos escrito.
El programa no solo permite escribir el algoritmo en pseudocódigo, sino que también nos deja hacerlo en diagramas de flujos de datos, y añade una opción para cambiar el dfd a diagrama n-s. Pintar el dfd es muy fácil, en una ventana tenemos un panel donde elegir las estructuras que queramos usar (bucles, elecciones, etc), lecturas por consola, instrucciones etc.
Una vez terminado podemos guardarlo como un archivo de imagen, a la vez que el propio dfd se inserta en el editor de código como un algoritmo en pseudocódigo. 




¿Para que sirve PSeInt?



   PSeInt está pensado para asistir a los estudiantes que se inician en la construcción de programas o algoritmos computacionales. El pseudocódigo se suele utilizar como primer contacto para introducir conceptos básicos como el uso de estructuras de control, expresiones, variables, etc, sin tener que lidiar con las particularidades de la sintaxis de un lenguaje real. Este software pretende facilitarle al principiante la tarea de escribir algoritmos en este pseudolenguaje presentando un conjunto de ayudas y asistencias, y brindarle ademas algunas herramientas adicionales que le ayuden a encontrar errores y comprender la lógica de los algoritmos.

Caracteristicas y Funcionalidades de PSeInt:


Puede encontrar en este enlace un resúmen rápido y gráfico de las principales funcionalidades.

  • Presenta herramientas de edición para escribir algoritmos en pseudocodigo en español
    • Autocompletado
    • Ayudas Emergentes
    • Plantillas de Comandos
    • Coloreado de Sintaxis
    • Resaltado de bloques lógicos
    • Indentado Inteligente
    • Listados de funciones, operadores y variables
  • Permite generar y editar el diagrama de flujo del algoritmo
    • Puede trabajar con diagramas clásicos y de Nassi-Shneiderman
  • Permite la edición simultánea de múltiples algoritmos
  • El pseudo-lenguaje utilizado es configurable
    • Ofrece perfiles de configuración predefinidos para numerosas instituciones
  • Puede interpretar (ejecutar) los algoritmos escritos
    • Puede modificar el algoritmo y ver los cambios en la ejecución inmediatamente (sin reingresar los datos)
    • Permite modificar uno o más datos selectos de una ejecución ya finalizada para observar cómo varían los resultados
    • Permite deshacer una ejecución para reiniciarla o repetirla desde un punto arbitrario
    • Permite ejecutar el algoritmo paso a paso controlando la velocidad e inspeccionando variables y expresiones
    • Puede confeccionar automáticamente una tabla de prueba de escritorio
    • Ofrece un modo especial en el que describe las acciones realizadas en cada paso
  • Determina y marca claramente los errores
    • Señala errores de sintaxis en tiempo real (mientras escribe)
    • Señala claramente errores en tiempo de ejecucion
    • Ofrece descripciones detalladas de cada error, con sus causas y soluciones más frecuentes.
  • Permite convertir el algoritmo de pseudocodigo a código numerosos lenguajes de programación
    • C, C++, C#, Java, JavaScript, MatLab, Pascal, PHP, Python 2, Python 3, QBasic Visual Basic
  • Ofrece un sistema de ayuda integrado acerca del pseudocódigo y el uso del programa
    • Incluye un conjunto de ejemplos de diferentes niveles de dificultad
  • Es multiplataforma (probado en Microsoft Windows, GNU/Linux y Mac OS X)
  • Es totalmente libre y gratuito (licencia GPLv2)

Ejemplo de pseudocódigo en PSeInt



Resultado de imagen para ejemplo de pseudocodigo en pseint


Resultado de imagen para ejemplo de pseudocodigo en pseint


Referencias

http://aprendizajealgoritmos.blogspot.mx/2011/02/metodologia-de-solucion-de-problemas_16.html

informaticafrida.blogspot.com/2009/03/algoritmo.html

http://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=277:como-comprobar-algoritmos-verificacion-mental-y-verificacion-prueba-por-seguimiento-escrito-cu00230a&catid=36:curso-qbases-de-la-programacion-nivel-iiq&Itemid=60

https://g36c.wordpress.com/2011/08/15/algoritmo-para-calcular-areas/


http://pseint.sourceforge.net/features.php



https://aritlocovrblog.wordpress.com/2014/09/01/pseint-conceptos-y-caracteristicas/