martes, 9 de julio de 2013


INTRODUCCIÓN
En el siguiente trabajo pretendemos presentar una serie de pasos a seguir para la realización de un algoritmo, su análisis y resolución de En el mismo podremos encontrar los conceptos de algoritmo y algunos de sus componentes, análisis y diseño. También veremos los diferentes tipos de formas y tamaños o medidas en que se pueden almacenar y representar los datos y estructuras en un algoritmo o programa. En ese mismo orden encontraremos las diferentes técnicas para diseñarlos como son el método de la fuerza bruta, el voraz, divide y vencerás, programación dinámica, de vuelta atrás, entre otros.
De igual forma podremos ver las definiciones y algunas características, reglas, normas, tipos de algoritmos de búsqueda y ordenación así como sus aplicaciones.
Finalmente veremos los que es la verificación y derivación de programas, donde daremos los conceptos básicos de semántica y sus tipos haciendo mayor énfasis en la semántica axiomática, la recursividad e iteración, los diseños de estos últimos, así como los típicos ciclos utilizados en algoritmos y programas y los paso a tener en cuenta al momento de desarrollar un algoritmo iterativo o recursivo.



PROGRAMA

Un programa es la expresión (transcripción) de un algoritmo en un
Lenguaje de programación, capaz de ser procesado por un ordenador tras
Su compilación y linkado y que controla el funcionamiento de un
Ordenador a la hora de resolver un problema.

ALGORITMO
 +                                                                                                  PROGRAMA
LENGUAJE DE PROGRAMACIÓN

Un programa informático o software es un elemento imprescindible para el normal funcionamiento de una computadora. Puede ser tanto un programa ejecutable como su código fuente, que es escrito por los programadores. Por otra parte, de acuerdo a sus funciones, un programa puede ser catalogado como un software de sistema o un software de aplicación.
En este ámbito tecnológico se puede hablar de multitud de programas que tienen como objetivo el que podamos realizar una tarea concreta de una manera sencilla. Este sería el caso de Word, que es un procesador de textos que nos ayuda a crear y diseñar multitud de documentos textuales, o PowerPoint que nos sirve para desarrollar presentaciones visuales muy atractivas.
También podemos decir que es un conjunto de instrucciones escritas en algún lenguaje de programación. El programa debe ser compilado o interpretado para poder ser ejecutado y así cumplir su objetivo.
LENGUAJES DE PROGRAMACIÓN  DE BAJO Y ALTO NIVEL
LENGUAJES DE BAJO NIVEL

Son lenguajes totalmente dependientes de la máquina, es decir que el programa que se realiza con este tipo de lenguajes no se pueden migrar o utilizar en otras maquinas. 
Al estar prácticamente diseñados a medida del hardware, aprovechan al máximo las características del mismo. 
Dependen de la máquina en particular y difícil de programar. Son más fáciles de codificar que en lenguaje máquina. Dependen de la máquina particular donde se Ejecutan. Son más difíciles de programar que los lenguajes de alto
Nivel.
Dentro de este grupo se encuentran: 
Ø    El  lenguaje maquina: este lenguaje ordena a la máquina las operaciones fundamentales para su funcionamiento. Consiste en la combinación de 0's y 1's para formar las ordenes entendibles por el hardware de la maquina.
Este lenguaje es mucho más rápido que los lenguajes de alto nivel. 
Ø    La desventaja es que son bastantes difíciles de manejar y usar, además de tener códigos fuente enormes donde encontrar un fallo es casi imposible.
Ø    El lenguaje ensamblador es un derivado del lenguaje maquina y esta formado por abreviaturas de letras y números llamadas mnemotécnicos. Con la aparición de este lenguaje se crearon los programas traductores para poder pasar los programas escritos en lenguaje ensamblador a lenguaje máquina. Como ventaja con respecto al código máquina es que los códigos fuentes eran más cortos y los programas creados ocupaban menos memoria. Las desventajas de este lenguaje siguen siendo prácticamente las mismas que las del lenguaje ensamblador, añadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y mantener.
LENGUAJES DE ALTO NIVEL
                                                              
Este tipo de lenguajes de programación son independientes de la máquina, lo podemos usar en cualquier computador con muy pocas modificaciones o sin ellas, son muy similares al lenguaje humano, pero precisan de un programa interprete o compilador que traduzca este lenguaje de programación de alto nivel a uno de bajo nivel como el lenguaje de máquina que la computadora pueda entender. Los lenguajes de programación de alto nivel son más fáciles de aprender porque se usan palabras o comandos del lenguaje natural, como por ejemplo del inglés. Este es el caso del BASIC, el lenguaje de programación más conocido. Existen muchos lenguajes de programación de alto nivel con sus diferentes versiones. Por esta razón es difícil su tipificación, pero una clasificación muy extendida desde el punto de vista de trabajar de los programas y la filosofía de su creación es la siguiente:
Ø    Lenguajes de programación imperativos: entre ellos tenemos el Cobol, Pascal, C y Ada.
Ø    Lenguajes de programación declarativos: el Lisp y el Prolog.
Ø Lenguajes de programación orientados a objetos: el Smalltalk y el C++.
Ø    Lenguajes de programación orientados al problema: son aquellos lenguajes específicos para gestión.
Ø    Lenguajes de programación naturales: son los nuevos lenguajes que pretender aproximar el diseño y la construcción de programas al lenguaje de las personas. Otra clasificación de los lenguajes de programación de alto nivel, es teniendo en cuenta el desarrollo de las computadoras según sus diferentes generaciones:
Ø    Lenguajes de programación de primera generación: el lenguaje máquina y el ensamblador.
Ø    Lenguajes de programación de segunda generación: los primeros lenguajes de programación de alto nivel imperativo (FROTRAN, COBOL).
Ø    Lenguajes de programación de tercera generación: son lenguajes de programación de alto nivel imperativo pero mucho más utilizados y vigentes en la actualidad (ALGOL 8, PL/I, PASCAL, MODULA).
Ø    Lenguajes de programación de cuarta generación: usados en aplicaciones de gestión y manejo de bases de dados (NATURAL, SQL).
Ø    Lenguajes de programación de quinta generación: creados para la inteligencia artificial y para el procesamiento de lenguajes naturales (LISP, PROLOG).
PASOS PARA  LA RESOLUCIÓN DE UN PROBLEMA EN LA PROGRAMACIÓN MEDIANTE EL USO DE ALGORITMO

Ø  IDENTIFICAR EL PROBLEMA: esta primera fase hay que reconocer y delimitar el problema, es decir, identificarlo. En este momento es preciso establecer cuales son las entradas (condiciones) y las salidas (requerimientos) del problema, de manera que resulta de gran importancia comprender que es lo que en realidad se nos esta solicitando
Ø   PROPONER OPCIONES DE SOLUCIÓN: en este paso se trata de enseñar las soluciones posibles, Aquí es factible aprovechar la curiosidad, ya que podemos echar a volar la imaginación y nuestra creatividad. No te limites planteándote preguntas, en este paso es indispensable elegir la mejor opción
Ø  DISEÑO DEL ALGORITMO: Aquí definiremos la serie de pasos que han de seguirse para resolver el problema
Ø  DESARROLLO DE LA SOLUCIÓN: en esta parte se pone en marcha el algoritmo y se prueba si los pasos funcionan e incluso plantear nuevamente la interrogación inicial, en caso de ser factible deben probarse diferentes entradas a fin de lograr que el proceso sea optimo
Ø  COMPROBAR LOS RESULTADOS: en esta etapa se prueba si la acción o el producto obtenido es lo que se esperaba.

CARACTERÍSTICAS  DE LOS ALGORITMO

Ø  Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
Ø  Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.
Ø  Un algoritmo debe ser finito. el algoritmo se debe terminar en algún momento; o sea, debe tener un número finito de pasos. 
Ø  Un algoritmo debe ser legibles: El texto que lo describe debe ser claro, tal que permita entenderlo y leerlo fácilmente.

TÉCNICAS PARA EL DESARROLLO DE UN ALGORITMO
Existen varias técnicas de diseño de algoritmos que permiten desarrollar la solución al problema planteado, algunas de ellas son:
Ø  Algoritmos voraces (greedy): seleccionan los elementos más prometedores del conjunto de candidatos hasta encontrar una solución. En la mayoría de los casos la solución no es óptima.
Ø  Algoritmos paralelos: permiten la división de un problema en sub problemas de forma que se puedan ejecutar de forma simultánea en varios procesadores.
Ø  Algoritmos probabilísticos: algunos de los pasos de este tipo de algoritmos están en función de valores pseudo aleatorios
Ø  Algoritmos determinanticos: El comportamiento del algoritmo es lineal: cada paso del algoritmo tiene únicamente un paso sucesor y otro asesor.
Ø  Algoritmos no determinanticos: El comportamiento del algoritmo tiene forma de árbol y a cada paso del algoritmo puede bifurcarse a cualquier número de pasos inmediatamente posteriores, además todas las ramas se ejecutan simultáneamente.
Ø  Divide y vencerás: dividen el problema en subconjuntos disjuntos obteniendo una solución de cada uno de ellos para después unirlas, logrando así la solución al problema completo.
Ø  Meta heurísticas: encuentran soluciones aproximadas (no óptimas) a problemas basándose en un conocimiento anterior (a veces llamado experiencia) de los mismos.
Ø  Programación dinámica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial.
Ø  Ramificación y acotación: se basa en la construcción de las soluciones al problema mediante un árbol implícito que se recorre de forma controlada encontrando las mejores soluciones.
Ø  Vuelta Atrás (Backtracking): se construye el espacio de soluciones del problema en un árbol que se examina completamente, almacenando las soluciones menos costosas.



CONCLUSIÓN


En este trabajo se ha expuesto el desarrollo completo de un algoritmo.

Enfocándonos en  el desarrollo del mismo siendo este libre de aplicar  los pasos que considere necesarios. Desarrollándolo  en mayor o menor medida de la forma mas detallada posible a fin de solucionar el problema por medio de procesos y procedimientos para llevar a cabo la actividad determinada, con el que ofrecemos un novedoso y mejorado método de solución contemplado muy poco en otras actividades.