Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
programación/Algoritmos
El mundo moderno está lleno de aparatos electrónicos que desempeñan todo tipo de tareas
para facilitarnos la vida diaria. Actividades tan diversas como escribir textos, realizar
presupuestos y nóminas, intercambiar correos,[1] comerciar bienes y servicios, asignar
recursos a procesos de manufactura, analizar la estructura del genoma humano o buscar
información sobre un tema de interés dependen en gran medida de los computadores.[2]
Si bien los dispositivos que se usan para cada una de esas tareas pueden verse muy diferentes
a primera vista, fundamentalmente se componen del mismo conjunto de elementos básicos:
dispositivos de entrada, dispositivos de salida, dispositivos de almacenamiento secundario,
una unidad de memoria para almacenar datos temporalmente, una unidad aritmético/lógica
que puede ejecutar un conjunto relativamente limitado de instrucciones y una unidad central
de procesamiento para coordinar la operación de las otras secciones.[3] La diferencia
fundamental entre ellas es el orden en que ejecutan esas instrucciones para resolver el
problema que se les presenta o realizar la tarea deseada.[1] Si la computadora carece de algo
que le indique la secuencia apropiada de instrucciones para resolver el problema, sería una
máquina vacía, incapaz de realizar ninguna actividad de utilidad.[1] Esa secuencia de
instrucciones se llama algoritmo[1] e informalmente se puede entender como un
procedimiento que recibe una entrada y la transforma para producir un valor o conjunto de
valores de salida.[2]
Formalmente se define un algoritmo como «un método de resolver un problema con una serie
de pasos precisa, definida y finita».[1] La precisión nos dice que un algoritmo debe especificar
la secuencia exacta en la que se deben ejecutar los pasos. La definición requiere que si la
secuencia de pasos se aplica sobre el mismo conjunto de datos múltiples veces se obtenga el
mismo resultado en todas las ocasiones. Finalmente, el carácter finito de los algoritmos
significa que deben terminar después de un número determinado de pasos.[1]
Los algoritmos pueden ser correctos o incorrectos. Un algoritmo es correcto si para cada
posible entrada que recibe, termina con la salida correcta, es decir, un algoritmo correcto
resuelve un determinado problema. Por otro lado, un algoritmo incorrecto puede que nunca
termine o que termine, pero que proporcione una salida incorrecta como solución al
problema.[2]
Al igual que existen múltiples formas de resolver los problemas que enfrentamos en la vida
diaria, existen múltiples algoritmos para resolver un mismo problema con un computador. La
rapidez con la que la máquina pueda resolver el problema así como la cantidad de espacio de
almacenamiento que ocupe para hacerlo dependen en gran medida de la naturaleza del
algoritmo seleccionado para hacerlo. Debido a eso, el diseño y selección del algoritmo
adecuado para resolver un problema de la forma más eficiente posible es una de las tareas
principales de todo programador de computadores.
Tipos de algoritmos
La ejecución de un algoritmo por parte de una máquina es posible porque estos no requieren
ninguna decisión subjetiva ni el uso de la intuición o de la creatividad. Sin embargo, eso no
significa necesariamente que los pasos que ejecuta un algoritmo se puedan determinar con
precisión de antemano o que siempre den una respuesta exacta y sin errores. Los algoritmos
probabilistas realizan elecciones aleatorias en determinados momentos de su ejecución. Los
algoritmos aproximados dan una solución a un problema dentro de un margen de error que
puede ser establecido de antemano. Los algoritmos heurísticos son algoritmos que dan una
solución aproximada a un problema donde no podemos controlar la magnitud del error. Lo
importante al considerar estos tipos de algoritmos es que en ningún caso implican la ejecución
de instrucciones o la toma de decisiones de forma arbitraria. Los mecanismos siempre están
determinados de antemano, lo que varían son los resultados de ejecutarlos, por ejemplo al
usar un generador de números pseudoaleatorios.[4]
Divide y conquista: Los algoritmos que usan la técnica de división y conquista descomponen el
problema en varios subproblemas más pequeños y fáciles de resolver y luego se aplican a si
mismos a esos subproblemas hasta llegar a un caso básico y fácil de resolver. Luego retroceden
integrando las soluciones parciales para luego dar el resultado esperado.
Recorridos sobre grafos: Los algoritmos de este tipo expresan un problema como un conjunto
de elementos interconectados entre sí y buscan la solución recorriendo la estructura
resultante, llamada grafo.
Representación de algoritmos
Los algoritmos son procedimientos conceptuales y no tienen una representación tangible por
sí mismos. Para poder comunicarlos a otras personas o a las máquinas y para poder
documentarlos para referencia posterior es necesario expresarlos de alguna manera. Esta
representación debe ser clara y sin ambigüedades.[5]
Existen muchas técnicas para representar los algoritmos y comunicarlos a otras personas. Sin
embargo las más comunes son el pseudocódigo y los diagramas de flujo. El pseudocódigo es
una versión sumamente restringida del lenguaje natural que permite expresar los pasos de los
algoritmos sin sufrir de las ambigüedades presentes en los textos que usamos para
comunicarnos diariamente. Las computadoras no entienden directamente el pseudocódigo ya
que no incluye todos los detalles que necesitan pero los seres humanos son capaces de
traducirlo al lenguaje de las computadoras con relativa facilidad. Los diagramas de flujo son un
conjunto de elementos gráficos que representan los diferentes pasos del algoritmo y un
conjunto de líneas con dirección que los conectan y que indican el orden de ejecución.[1]
CONCEPTO DE PROGRAMA
Diagrama de flujo,
Diagrama N-S,
Pseudocódigo;
5.- Documentación;
6.- Mantenimiento.
Las partes principales de un programa están relacionadas con sus dos bloques ya
mencionados. Dentro del bloque de instrucciones podemos diferenciar tres partes
fundamentales.
Entrada de Datos: La constituyen todas las instrucciones que toman los datos de entrada
desde un dispositivo externo y los almacena en la memoria principal para que puedan ser
procesados.
Proceso o algoritmo: Está formado por las instrucciones que modifican los objetos a partir de
su estado inicial (datos de entrada) hasta el estado final (resultados) dejando los objetos que lo
contiene disponibles en la memoria principal.
Salida de resultados: Conjunto de instrucciones que toman los datos finales (resultado) de la
memoria principal y los envían a los dispositivos externos.
El proceso de codificación del programa consiste en definir las acciones o instrucciones que
resolverán el problema.
TIPOS DE INSTRUCCIONES