Definición de algoritmo
Un algoritmo se puede definir como una secuencia de instrucciones que representan un modelo de solución para determinado tipo de problemas. O bien como un conjunto de instrucciones que realizadas en orden conducen a obtener la solución de un problema
Para realizar un programa es conveniente el diseño o definición previa del algoritmo. El diseño de algoritmos requiere creatividad y conocimientos profundos de la técnica de la programacion. Luis Joyanes, programador experto y autor de muchos libros acerca de lógica y programacion nos dice "en la ciencia de la computación y en la programacion, los algoritmos son mas importantes que los lenguajes de programacion o las computadoras. Un lenguaje de programacion es solo un medio para expresar un algoritmo y una computadora es solo un procesador para ejecutarlo".
Los algoritmos son independientes de los lenguajes de programacion. En cada problema el algoritmo puede escribirse y luego ejecutarse en un lenguaje diferente de programacion. El algoritmo es la infraestructura de cualquier solución, escrita luego en cualquier lenguaje de programacion
Características de los algoritmos
- Preciso. Definirse de manera rigurosa, sin dar lugares a ambiguedades.
- Definido. Si se sigue un algoritmo dos veces, se obtendrá el mismo resultado
- Finito. Debe terminar en algun momento
- Puede tener cero o mas elementos de entrada
- Debe producir un resultado. Los datos de salida seran los resultados de efectuar las instrucciones
Se concluye que un algoritmo debe ser suficiente para resolver el problema. entre dos algoritmos que lleven a un mismo objetivo, siempre sera preferible el mas corto (se debera analizar la optimiacion de tiempos y / o recursos)
Etapas para la solucion de un problema por medio del computador
- Analisis del problema, definicion y delimitacion (macroalgoritmo). Considerar los datos de entrada, el proceso que debe realizar el computador y los datos de salida
- Diseño y desarrollo del algoritmo (se utiliza pseudocodigo, escritura natural del algoritmo, diagramas de flujo, etc)
- Prueba de escritorio. Seguimiento manual de los pasos descritos en el algoritmo. Se hace con valores bajos y tiene como fin detectar errores.
- Codificacion. Seleccion de un lenguaje de programacion y digitacion del pseudocodigo haciendo uso de la sintaxis y estructura gramatical del lenguaje seleccionado
- Compilacion o interpretacion del programa. El software elegido convierte las instrucciones escritas en el lenguaje a las comprendidas por el computador
- Ejecucion. El programa es ejecutado por la maquina para llegar a los resultados esperados
- Depuracion (debug). Operacion de detectar, localizar y eliminar errores de mal funcionamiento del programa
- Evaluacion de resultados. Obtenidos los resultados se los evalua para verificar si son correctos. (Un programa puede arrojar resultados incorrectos aun cuando su ejecucion no muestre errores)
Algoritmos cualitativos y algoritmos cuantitativos
Un algoritmo es cualitativo cuando en sus pasos o instrucciones no estan involucrados calculos numericos. Las instrucciones para armar un aeromodelo, para desarrollar una actividad fisica o encontrar un tesoro, son ejemplos de algoritmos cualitativos.
Trate de diseñar el algoritmo para estos casos
- Tomar mate
- Utilizar una guia telefonica
- Cocinar siguiendo una receta
- Cambiar una llanta de automovil
- Buscar una palabra en el diccionario
Los algoritmos cuantitativos involucran calculos numericos
Ejemplos :
- Solucion de un factorial
- Solucion de una ecuacion de segundo grado
- Encontrar el minimo comun multiplicador
Tecnicas de representacion
Para la representacion de un algoritmo, antes de ser convertido a lenguaje de programacion, se utilizan metodos de representacion escrita, grafica o matematica. Los metodos mas conocidos son:
- Diagramacion libre (Diagramas de flujo)
- Diagramas Nassi-Shneiderman
- Pseudocodigo
- Lenguaje natural (español, ingles, etc)
- Formulas matematicas
El lenguaje natural puede no ser suficientemente preciso, permitiendo ambiguedades, obteniendo una descripcion no del todo satisfactoria. Las formulas, propias del lenguaje matematico, son un buen sistema de representacion, pero no suelen ser faciles de convertir en programas. Por lo tanto, trataremos en este curso los tres primeros modelos
Diagramas de flujo
Es quizas la forma de representacion mas antigua. Algunos autores suelen llamarlos tambien como diagramas de logica o flujogramas.
Un diagrama de flujo utiliza cajas estandar tales como las que se muestran en las figuras 1, 2 y 3:
Los driagramas de flujo son esquemas que representan graficamente un algoritmo por medio de los pasos de un proeso, que se realizan para entender mejor al mismo y son utillizados en programacion, economia y procesos industriales. Utilizan una serie de simbolos con significados especiales.
Un diagrama de flujo u organigrama es una representacion diagramatico que ilustra la secuencia de las operaciones que se realizan para conseguir la solucion de un problema y son usados normalmente para seguir la secuencia logica de las acciones en el diseño de problemas de computadoras y se dibujan generalmente antes de comenzar a programar el codigo frente a la computadora y una que se dibuja el diagrama de flujo, llega a hacer facil escribir el programa en cualquier idioma de alto nivel
Diagramas Nassi-Schneiderman o Chapin
Tambien conocidos como Diagramas de Chapin, corresponden a uno de los tipos de diagramacion estructurada. Las acciones se escriben en rectangulos o cajas sucesivas. Se pueden escribir diferentes acciones en una caja. La simbologia utilizada es como vemos en las figuras siguientes
Pseudocodigo
Es la tecnica que permite expresar la solucion de un problema mediante un algoritmo escrito en palabras normales de un idioma (por ejemplo, el español), utilizando palabras imperativas. Es comun encontrar en pseudocodigo palabras como : Inicie, lea, imprima, sume, divida, calcule, finalice. No hay un lexico obligado para el pseudocodigo, pero con el uso frecuente se han establecido algunos estandares. Este es un ejemplo de un programa escritoen pseudocodigo:
Un programa ejecutado en Pseudocodigo puede ser facilmente convertido en un programa, si esque esta bien elaborado. Por ejemplo supongamos que la nota para aprobar un examen es de 60. El enunciado del pseudocodigo seria:
Si calificacion >=60 entonces
Mostrar "aprobado"
FinSi
Tecnicas de diagramacion
En nuestra asignatura, por su facilidad y adecuada representacion de los problemas a resolver, utilizaremos para representar los algoritmos, a la tecnica de diagramas de flujo
A su vez, para un mejor ordenamiento en la realizacion de esos diagramas, se han elaborado tecnicas de diseños de los mismos
Nosotros utilizaremos las denominadas top-down y estructurada
La primera de ellas, la top-down, persigue la descomposicion de un problema en partes, tomando en primer lugar la dimension total, para luego ir identificando sus partes componentes e ir tratandolas en forma particular y con mayor grado de detalle cada vez, hasta llegar a una expresion final de resolucion simple, trivial o ya conocida
La diagramacion estructurada no indica la forma en que se puedan utilizar y vincular los simbolos graficos entre si
De esta manera se distinguen las siguientes estructuras elementales, que luego al combinarse entre si, dan lugar al diagrama total
Estructuras
Secuencia
Decision simple
Decision multiple
Repeticion con condicion inicial
Repeticion con condicion final
Esta compuesto por operaciones
Metodos y variables
- Entre las operaciones se conocen las matematicas: +, -, /, *.
- Los metodos son las funciones disponibles: Mostrar en pantalla
- Las variables pueden ser diversos de tipos: 1, V y F, "a", [1 2 3 4 5] ó [a b c d e], "aaaa", Null
Representaciones de un algoritmo
Todo algoritmo puede ser representado por:
Lenguaje natural: Los algoritmos de este tipo son similares a las recetas de cocina (para preparar comidas, bebidas, etc) o a los manuales de instruccion para manejo de una maquina o un equipo (lavadora o el microondas).
En la vida cotidiana, implicitamente seguimos ciertas actividades rutinarias (algoritmos) en el desarrolo de nuestras acctividades
Lenguaje de programacion: Es un lenguaje que puede ser utilizador para controlar el comportamiento de una maquina, particularmente una computadora. Consiste en un conjunto de reglas sintacticas y semanticas que definen su estructura y el significado de sus elementos, respectivamente. Aunque muchas veces se usa lenguaje de programacion y lenguaje informatico como si fuesen sinonimos,no tiene porque ser asi, ya que los lenguajes informaticos engloban a los lenguajes de programacion y a otro mas, como, por ejemplo, el HTML