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.
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:
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.
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.