Cuando un usuario plantea a un programador un problema que resolver
mediante su ordenador, por lo general ese usuario tendr conocimientos ms o menos amplios sobre el dominio del problema, pero no es habitual que tenga conocimientos de informtica. Por ejemplo, un contable que necesita un programa para llevar la contabilidad de una empresa ser un experto en contabilidad (dominio del problema), pero no tiene por qu ser experto en programacin. Del mismo modo, el informtico que va a resolver un determinado problema puede ser un experto programador, pero en principio no tiene por qu conocer el dominio del problema; siguiendo el ejemplo anterior, el informtico que hace un programa no tiene por qu ser un experto en contabilidad. Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el programador necesita de la experiencia del experto del dominio para entender el problema. Al final, si se quiere llegar a una solucin satisfactoria es necesario que: El problema est bien definido con el mximo detalle Las especificaciones de las entradas y salidas del problema, deben ser descritas tambin en detalle: o Qu datos son necesarios para resolver el problema? o Qu informacin debe proporcionar la resolucin del problema
Representacin de algoritmos: grfica y pseudocdigo.
1 Descripcin Narrada Este algoritmo es caracterizado porque sigue un proceso de ejecucin comn y lgico, describiendo textualmente paso a paso cada una de las actividades a realizar dentro de una actividad determinada. Ejemplo 1 Algoritmo para asistir a clases: 1. Levantarse 2. Baarse 3. Vestirse 4. Desayunar 5. Cepillarse los dientes 6. Salir de casa 7. Tomar el autobs 8. Llegar al ITCA 9. Buscar el aula 10. Ubicarse en un asiento 2.Descripcin en Pseudocdigo Pseudo = falso. El pseudo cdigo no es realmente un cdigo sino una imitacin y una versin abreviada de instrucciones reales para las computadoras. Es una tcnica para diseo de programas que permite definir las estructuras de datos, las operaciones que se aplicarn a los datos y la lgica que tendr el programa de computadora para solucionar un determinado problema. Utiliza un pseudolenguaje muy parecido a nuestro idioma, pero que respeta las directrices y los elementos de los lenguajes de programacin. Se concibi para superar las dos principales desventajas de los flujogramas: lento de crear y difcil de modificar sin un nuevo redibujo.
2.2 Representacin de algoritmos: grfica y pseudocdigo. Las herramientas de programacin utilizadas como lenguajes algortmicos son: Pseudocdigo: es un lenguaje algortmico, muy parecido al espaol pero ms conciso que permite la redaccin rpida del algoritmo. Diagramas de flujo: ha sido la herramienta de programacin por excelencia, y an hoy sigue siendo muy utilizada. Es fcil de disear pues el flujo lgico del algoritmo se muestra en un diagrama en lugar de palabras.
Pseudocdigo
Es un lenguaje de pseudoprogramacin, muy parecido a un lenguaje de programacin. El pseudocdigo es muy fcil de utilizar, ya que es muy similar al espaol. Algunas palabras utilizadas en el pseudocdigo: Inicio Fin Leer Escribir Asignar (x y+z) Ejemplo Programa Calculo rea Rectngulo 1. Inicio 2. Leer; base, altura
3. rea base x altura 4. Escribir; base, altura, rea 5. Fin Para desarrolar un pseudocodigo se necesita saber los tipos de datos que se deben tener : entero: Subconjunto finito de los nmeros enteros, cuyo rango depender del lenguaje en el que posteriormente codifiquemos el algoritmo y del ordenador. El rango depende de cuantos bits utilice para codificar el numero, normalmente 2 byes.Para numeros positivos, con 16 se pueden almacenar 216 real: Subconjunto de los nmeros reales limitado no slo en cuanto al tamao, sino tambin en cuanto a la precisin Lgico: Conjunto formado por los valores Cierto y Falso. 1 y 0. Carcter: Conjunto finito y ordenado de los caracteres que el Ordenador Diagramas
Un diagrama de flujo utiliza smbolos estndar en el que cada paso del algoritmo se visualiza dentro del smbolo y en el orden en que estos pasos se ejecutan, se indica conectndolos con flechas llamadas lneas de flujo, ya que indican el flujo lgico del algoritmo. El diagrama de flujo es la representacin grfica del algoritmo o proceso. Se utiliza en disciplinas como la programacin, la economa, los procesos industriales y la psicologa cognitiva. Estos diagramas utilizan smbolos con significados bien definidos que representan los pasos del algoritmo, y representan el flujo de ejecucin mediante flechas que conectan los puntos de inicio y de fin de proceso.
DISEO DE ALGORITMOS APLICADOS A PROBLEMAS.
Para llegar a la realizacin de un programa es necesario el diseo previo de algoritmo, de modo que sin algoritmo no puede existir un programa. Los algoritmos son independientes tanto del lenguaje de programacin en que se expresan como de la computadora que lo ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje diferente de programacin y ejecutarse en una computadora distinta; sin embargo, el algoritmo ser siempre el mismo.
Dada la importancia del algoritmo en la ciencia de la computacin, un aspecto muy importante ser el diseo de algoritmos. El diseo de la mayora de los algoritmos requiere creatividad conocimientos profundos de la tcnica de la programacin. Tcnicas de diseo de algoritmos Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del conjunto de candidatos hasta encontrar una solucin. En la mayora de los casos la solucin no es ptima. Algoritmos paralelos: permiten la divisin de un problema en subproblemas de forma que se puedan ejecutar de forma simultnea en varios procesadores. Algoritmos probabilsticos: algunos de los pasos de este tipo de algoritmos estn en funcin de valores pseudoaleatorios. Algoritmos determinsticos: el comportamiento del algoritmo es lineal: cada paso del algoritmo tiene nicamente un paso sucesor y otro antecesor. Algoritmos no determinsticos: el comportamiento del algoritmo tiene forma de rbol y a cada paso del algoritmo puede bifurcarse a cualquier nmero de pasos inmediatamente posteriores, adems todas las ramas se ejecutan simultneamente. Divide y vencers: dividen el problema en subconjuntos disjuntos obteniendo una solucin de cada uno de ellos para despus unirlas, logrando as la solucin al problema completo. Metaheursticas: encuentran soluciones aproximadas (no ptimas) a problemas basndose en un conocimiento anterior (a veces llamado experiencia) de los mismos. Programacin dinmica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial. Ramificacin y acotacin: se basa en la construccin de las soluciones al problema mediante un rbol implcito que se recorre de forma controlada encontrando las mejores soluciones. Vuelta atrs (backtracking): se construye el espacio de soluciones del problema en un rbol que se examina completamente, almacenando las soluciones menos costosas.
2.3 Diseo de algoritmos aplicados a problemas Los algoritmos son independientes tanto del lenguaje de programacin en que se expresan como de la computadora que lo ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje diferente de programacin y ejecutarse en unacomputadora distinta; sin embargo, el algoritmo ser siempre el mismo.
Dada la importancia del algoritmo en la ciencia de la computacin, un aspecto muy importante ser el diseo de algoritmos. El diseo de la mayora de los algoritmos requiere creatividad y conocimientos profundos de la tcnica de la programacin. Tcnicas de diseo de algoritmos
Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del conjunto de candidatos hasta encontrar una solucin. En la mayora de los casos la solucin no es ptima. Algoritmos paralelos: permiten la divisin de un problema en sub problemas de forma que se puedan ejecutar de forma simultnea en varios procesadores. Algoritmos probabilsticos: algunos de los pasos de este tipo de algoritmos estn en funcin de valores pseudoaleatorios. Algoritmos no determinanticos: el comportamiento del algoritmo tiene forma de rbol y a cada paso del algoritmo puede bifurcarse a cualquier nmero de pasos inmediatamente posteriores, adems todas las ramas se ejecutan simultneamente. Divide y vencers: dividen el problema en subconjuntos disjuntos obteniendo una solucin de cada uno de ellos para despus unirlas, logrando as la solucin al problema completo. Programacin dinmica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial. Ramificacin y acotacin: se basa en la construccin de las soluciones al problema mediante un rbol implcito que se recorre de forma controlada encontrando las mejores soluciones. Vuelta atrs (backtracking): se construye el espacio de soluciones del problema en un rbol que se examina completamente, almacenando las soluciones menos costosas.
Caractersticas de algoritmo La resolucin de un problema exige el diseo de un algoritmo que resuelva el problema, como lo muestra la siguiente figura:
Pasos para la resolucin de un problema 1.- Diseo del algoritmo que describe la secuencia ordenada de pasos sin ambigedades- que conducen a la solucin de un problema dado.(Anlisis del problema y desarrollo del algoritmo). 2.- Expresar el algoritmo como un programa en un lenguaje adecuado. (Fase de codificacin). 3.- Ejecucin y validacin del programa por la computadora.
Caractersticas de los algoritmos Un algoritmo debe: ser preciso e indicar el orden de realizacin de cada paso. estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. ser finito. Si se sigue un algoritmo, se debe terminar en algn momento; o sea, debe tener un nmero finito de pasos. Existen dos herramientas utilizadas conceptualmente para disear algoritmos: los diagramas de flujo y el pseudocdigo.
Diseo algortmico de las funciones
En este se explica detalladamente lo que realiza el algoritmo para resolver el problema planteado. en un diseo de algoritmo que sea complejo puede subdividirse en subprogramas para el estudio o la revisin de los pasos que lleven a la solucin y sea menos el ndice de errores que tenga al momento de la prueba, y a este diseo se le conoce como diseo modular pues es sencillo revisar cada proceso ya antes dividido para su rpida especificacin y prueba. un algoritmo cuenta con un inicio y sus subprogramas llamado tambin diseo modular.