Sei sulla pagina 1di 4

Fundamentos de

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]

Técnicas de diseño de algoritmos

La creación de algoritmos, como todo proceso de resolución de problemas, es una actividad


eminentemente creativa[1], sin embargo la investigación en el campo ha identificado diversas
técnicas comunes que facilitan la resolución de problemas. Entre las más comunes se
encuentran las siguientes:[4]

Algoritmos voraces: Los algoritmos voraces toman decisiones basándose en la información


disponible en el momento y sin considerar sus consecuencias posteriores.

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.

Programación dinámica: El método de programación dinámica permite el diseño de


algoritmos que inician calculando las soluciones a un conjunto de casos básicos que luego van
combinando hasta encontrar la solución al problema principal.

Representación visual de un problema modelado como un grado.

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]

Una vez que el algoritmo se ha especificado adecuadamente, es necesario convertirlo en un


programa mediante un lenguaje de programación para que las computadoras puedan
entenderlo y ejecutarlo.

Estructura general de un programa.

CONCEPTO DE PROGRAMA

Un programa de computadora es un conjunto de instrucciones (órdenes dadas a la máquina)


que producirán la ejecución de una determinada tarea. En esencia, un programa es un medio
para conseguir un fin.

El proceso de programación es, por consiguiente, un proceso de solución de problemas y el


desarrollo de un programa requiere las siguientes fases:

1.- Definición y análisis del problema;

2.- Diseño de algoritmos:

Diagrama de flujo,

Diagrama N-S,

Pseudocódigo;

3.- Codificación del programa;

4.-Depuración y verificación del programa;

5.- Documentación;

6.- Mantenimiento.

PARTES PRINCIPALES DE UN PROGRAMA

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.

INSTRUCCIONES Y TIPOS DE INSTRUCCIONES.

El proceso de codificación del programa consiste en definir las acciones o instrucciones que
resolverán el problema.

Las acciones o instrucciones se deben escribir y posteriormente almacenar en memoria en el


mismo orden en que han de ejecutarse, es decir, en secuencia.

TIPOS DE INSTRUCCIONES

Las instrucciones disponibles en un lenguaje de programación dependen del tipo de lenguaje.


Por ello, en este apartado estudiaremos las instrucciones (acciones) básicas que se pueden
implementar de modo general en un algoritmo y que esencialmente soportan todos los
lenguajes. Las instrucciones básicas son independientes del lenguaje.

La clasificación más usual, desde el punto de vista anterior, es:

1.- instrucciones de inicio/fin.

2.- instrucciones de asignación.

3.- instrucciones de lectura.

4.- instrucciones de escritura.

5.- instrucciones de bifurcación.

Potrebbero piacerti anche