sábado, 28 de enero de 2012

Formulación de Algoritmos

Formulación de Algoritmos

Los conceptos de algoritmo y de programa están relacionados, mas no son iguales y se debe aclarar su diferencia.
Un algoritmo es un conjunto de instrucciones que especifican la secuencia ordenada y lógica de operaciones a realizar para resolver un problema. Un algoritmo es un método que se formula para solucionar un problema.
Un algoritmo debe contar con las ciertas características para que su implementación exitosa. Cada paso debe ser determinado, es decir, no puede ser obra de la casualidad. Los resultados finales no pueden depender de quien sigue el algoritmo. En éste sentido, un algoritmo es como una receta de cocina. Dos cocineros que trabajan cada uno por su lado con una buena receta deberían preparar platillos esencialmente idénticos. Además, el algoritmo debe terminar después de un número finito de pasos. Es decir, debe terminar en algún momento.
Un programa es la secuencia de operaciones especificadas en un determinado lenguaje de programación, cada una de las cuales determina las operaciones que debe realizar el ordenador para resolver un problema. Se trata pues, de una implementación concreta (en un tipo de ordenador y lenguaje de programación concretos) de un algoritmo diseñado con anterioridad.
Solución de problemas

La solución de un problema mediante un ordenador consiste en el proceso que a partir de la descripción de un problema, expresado en lenguaje natural permite desarrollar un programa que resuelva dicho problema.
Este proceso exige los siguientes pasos:
  • Análisis del problema.
  • Diseño o desarrollo de un algoritmo.
  • Transformación del algoritmo en un programa, o codificación.
  • Ejecución y validación del programa.  
En ésta sección se abordan los dos primeros pasos, en secciones posteriores se presentan con detalle la codificación y la validación del programa.

Análisis del problema

Cuando un usuario plantea un problema a resolver mediante un ordenador, por lo general ese usuario tendrá conocimientos más o menos amplios sobre el dominio del problema. Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el programador necesita de la experiencia de quien domina el problema para poderlo entender. Al final, si se quiere llegar a una solución satisfactoria es necesario que:

  1. El problema esté bien definido
  2. Las especificaciones de las entradas y salidas del problema, deben ser descritas en detalle. Por ejemplo, los datos necesarios para resolver el problema, y la información que debe proporcionar la solución del problema.
Descripción del problema

 
Como se describió previamente, un algoritmo consiste en una especificación clara y concisa de los pasos necesarios para resolver un problema, pero para poder diseñar un algoritmo es necesario disponer de una notación. Esta notación de algoritmos permite
  • Describir las operaciones y acciones.
  • Describir los objetos manipulados por el algoritmo, los datos e informaciones.
  • Controlar la realización de las acciones descritas, indicando la forma en que éstas se organizan.
La notación de algoritmos no es en ningún caso un lenguaje de programación. Lo esencial de la notación de algoritmos es que las acciones elegidas sean las necesarias y suficientes para expresar todo algoritmo.

Diseño de Algoritmos

Se han presentado diferentes estructuras lógicas que se pueden emplear en el diseño de algoritmos escritos con la notación de algoritmos conocida como pseudocódigo, aunque existen otras maneras de representar los algoritmos gráficamente como los diagramas de flujo.
El Pseudocódigo

 
Pseudocódigo es una notación de algoritmos textual que a pesar de su formalismo, puede llegar a ser muy parecida al lenguaje natural. Se caracteriza por permitir la declaración de variables, constantes e instrucciones que intervienen en el algoritmo. El pseudocódigo tiene una estructura para su realización
1) Encabezado
a) Nombre
b) Tipos de datos
c) Nombre de las constantes y sus valores
d) Nombre de las variables
2) Cuerpo
a) Inicio
b) Instrucciones
c) Fin
Un ejemplo de algoritmo descrito en pseudocódigo sería:
 
Algoritmo
nombre_del_algoritmo
Constantes
cte0 = 0, cte1 = 1, cte2 = 2
Variables
var0, var1, var2
Inicio
Instrucción 1
Instrucción 2
Instrucción n
Fin
En éste ejemplo se puede ver que aparecen palabras en negrita que también forman parte del conjunto de palabras reservadas que sirven para especificar el nombre del algoritmo, la declaración de constantes y variables, y el inicio y fin de las instrucciones del algoritmo.
Es importante recalcar que el pseudocódigo no es un lenguaje de programación, y tampoco está estandarizado. Esto significa que diferentes autores podrían dar otras estructuras de control, o bien utilizar las mismas con una notación diferente.

También se pueden incluir comentarios dentro del algoritmo para hacer anotaciones o aclaraciones sobre un bloque de instrucciones. Los comentarios se marcan con diferentes símbolos como las llaves ({comentario}), las barras (//comentario), las barras con asterisco (/*comentario*/) etc.
 

Codificación de un Algoritmo

Acciones elementales
Las acciones elementales son aquellas que el ordenador es capaz de realizar y que son de tres tipos
a) Asignación: acciones donde una variable toma un valor numérico, el resultado de una operación aritmética o lógica, o el valor de otra variable. Por ejemplo, la instrucción “remplace el valor de la variable x por el valor de la variable y” puede representarse como: , . También puede utilizar una flecha como símbolo de asignación, por ejemplo, ó , donde el valor numérico o la operación está en la cola, y la variable en la punta de la flecha.
b) Aritméticas – lógicas: operaciones que a partir de unos datos realizan un cálculo aritmético (suma +, resta -, multiplicación ×, división ÷, etc.) que devuelve un valor numérico, o un cálculo lógico (mayor que >, menor que <, igual que =, etc.) que devuelve un valor lógico (verdadero o falso). Las operaciones aritméticas se representan de forma usual, por ejemplo,

y = 2 + x


c) Entrada – salida: acciones que permiten capturar datos para su posterior tratamiento (entrada) y guardar los resultados de dicho tratamiento (salida).
Estructuras de Control
1. Estructura secuencial
Cuando en un algoritmo se deben ejecutar varias acciones sucesivamente, éstas se describen una detrás de otra según el orden en que deban ejecutarse.
Instrucción 1
Instrucción 2
Instrucción n
2. Estructura condicional
Cuando en un algoritmo se quiere indicar que ciertas instrucciones sólo se deben ejecutar bajo cierta condición se indica del siguiente modo:
Si Condición entonces
Instrucciones
Fin Si
La condición es una operación lógica. Las instrucciones son ejecutadas sólo si la condición es verdadera.
3. Estructura de selección
En ocasiones, se deben ejecutar unas instrucciones u otras dependiendo de la ocurrencia de una condición. Esta especificación se realiza del siguiente modo:
Si Condición entonces
Instrucciones 1
Sino
Instrucciones 2
Fin Si
Dependiendo de si la condición es verdadera o falsa, se ejecutarán las instrucciones 1 o las instrucciones 2 respectivamente.
4. Estructura selectiva múltiple
También es posible que a la hora de especificar la ejecución de una acción haya que escoger ésta entre varias dependiendo del valor de uno varias condiciones o indicadores
Si Condición 1 entonces
Instrucciones 1
Sino Si Condición 2 entonces
Instrucciones 2
Sino Si Condición 3 entonces
Instrucciones 3
Sino
Instrucciones 4
Fin Si

 
En éste caso hay una serie de condiciones que tienen que ser mutuamente excluyentes, es decir, si una de ellas se cumple las demás tienen que ser falsas necesariamente, hay una caso Sino que será cierto cuando las demás condiciones sean falsas.
5. Estructura iterativa “Mientras”
Las estructuras iterativas o bucles representan la ejecución de instrucciones en más de una vez. El bucle se repite mientras la condición sea cierta, si al llegar por primera vez al bucle “mientras” la condición es falsa nunca se ejecutan las instrucciones internas.
Mientras Condiciones hacer
Instrucciones
Fin Mientras
Dentro del bloque de instrucciones debe existir una acción que en algún momento haga la condición falsa para terminar las iteraciones, ya que si la condición permanece como verdadera, se ejecutarán las instrucciones infinitamente y el bucle nunca terminaría.
6. Estructura iterativa “Para”
Este bucle se emplea cuando se desea iterar un número conocido de veces, empleando como índice una variable que se incrementa. El valor del índice también puede disminuir su valor con cada iteración.
Para j = 0 hasta n hacer
Instrucciones
j = j +1
Fin Para

 
En éste caso las instrucciones se repetirán n veces y j será una variable que tomará todos los valores entre 0 y n en cada una de las iteraciones.

Busca