Algoritmo
El desarrollo de algoritmos es un tema fundamental en el diseño de programas, el cuál permite crear de manera fácil y rápida sus programas.
La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX.
Definición de algoritmo: Es una secuencia ordenada de pasos que describen el proceso que se debe seguir, para dar solución a un problema específico.
La computadora es una máquina que por sí sola no puede hacer nada, necesita ser programada, es decir, introducirle instrucciones u ordenes que le digan lo que tiene que hacer. Un programa es la solución a un problema inicial, así que todo comienza allí: en el Problema. El proceso de programación es el siguiente: Dado un determinado problema el programador debe idear una solución y expresarla usando un algoritmo (aquí es donde empieza el juego); luego de esto, debe codificarlo en un determinado lenguaje de programación y por último ejecutar el programa en la computadora el cual refleja una solución al problema inicial. Esto es a grandes rasgos lo que hace el programador de computadoras.
“Dado un determinado problema debemos idear una solución y expresarla usando un ALGORITMO!”.
Por ejemplo, las recetas de cocina, los planos de construcción, las instrucciones para armar un juguete, un menú que nos permita seleccionar distintas opciones, etc.
Ejercicio
Elabora un algoritmo que guíe a una persona normal a cambiar un foco fundido en nuestra casa.
Todas las actividades que llevamos a cabo los seres humanos son algoritmos que hemos aprendido a seguir, son secuencias lógicas de pasos. La civilización está basada en el orden de las cosas y de acciones, estas se organizan conforme a secuencias lógicas, a esto se le llama PROGRAMACIÓN
Durante el desarrollo de algoritmos para computadora, es necesario idear los pasos que la máquina debe seguir para realizar una tarea o actividad.
Algunas Preguntas que nos tenemos que hacer
¿Que datos tenemos para trabajar?
¿Cuantos datos hay?
¿Como sabremos que ya están procesados todos los datos?
¿Cuál debe ser el formato de la salida?
¿Cuantas veces debe de repetirse el proceso?
¿qué condiciones de error pueden presentarse?
Ejercicios
Elabora los siguientes algoritmos:
1.Para hacer palomitas de maíz en una cacerola puesta al fuego, usando sal y maíz
2.Que permita cambiar un vidrio roto de una ventana
3.Que permita cambiar una llanta ponchada
Metodología para la solución de problemas por medio de computadora
DEFINICIÓN DEL PROBLEMA
Esta fase está dada por el enunciado del problema, el cual requiere una definición clara y precisa. Es importante que se conozca lo que se desea que realice la computadora; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa.
ANÁLISIS DEL PROBLEMA
Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir: Los datos de entrada. Cual es la información que se desea producir (salida) Los métodos y fórmulas que se necesitan para procesar los datos. Una recomendación muy práctica es el de colocarse en el lugar de la computadora y analizar qué es lo que se necesita que se ordene y en qué secuencia para producir los resultados esperados.
Debemos expresar el algoritmo con un lenguaje de programación adecuado
Ejecución y validación del programa por la computadora
Los algoritmos son independientes tanto del lenguaje de programación en que se expresan como de la computadora que los ejecutan.
En la ciencia de la computación y en la programación, los algoritmos son más importantes que los lenguajes de programación o las computadoras
Prueba de escritorio o Depuración
Se denomina prueba de escritorio a la comprobación que se hace de un algoritmo para saber si está bien hecho. Esta prueba consiste en tomar datos específicos como entrada y seguir la secuencia indicada en el algoritmo hasta obtener un resultado, el análisis de estos resultados indicará si el algoritmo está correcto o si por el contrario hay necesidad de corregirlo o hacerle ajustes.
Características de los algoritmos
Un Algoritmo debe de ser preciso e indicar el orden de realización de cada pasoUn algoritmo debe de estar definido.Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.
Un algoritmo debe de ser finito. Si se sigue un algoritmo, se debe terminar en algún momento, o sea tener un número finito de pasos
Partes de un Algoritmo
Entrada: Ingredientes y utensilios empleados
Desarrollo: Elaboración de la receta de cocina
Salida: Terminación del platillo
Ejemplo
Un cliente realiza un pedido a una fábrica. La fabrica examina en su banco de datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido, en caso contrario, rechazará el pedido. Redacta el pedido correspondiente
Solución:
1.Inicio
2.Leer el pedido
3.Examinar la ficha del cliente
4.Si el cliente es solvente, acepta el pedido, en caso contrario, rechazar el pedido
5.Fin
Solución de problemas por Computadora
El proceso de solución de un problema con una computadora conduce a la escritura de un programa y a su ejecución en la misma
Existen una serie de fases comunes que generalmente deben seguir todos los programadores
Fases de Resolución
1.Análisis del problema
2.Diseño del Algoritmo
3.Codificación
4.Compilación y ejecución
5.Prueba
6.Depuración
7.Mantenimiento
8.Documentación
Análisis
El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente de la empresa o por la persona que se encarga el programa
Diseño
Una vez analizado el problema, procedemos a diseñar una solución que conducirá a un algoritmo que resuelva el problema
Codificación (Implementación)
La solución se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo C, C++, C#, Visual Basic, Java, etc.) y se obtiene un programa
Ejecución, Prueba y Depuración
El programa se ejecuta, se comprueba rigurosamente y se eliminan todos los errores que puedan aparecer
Mantenimiento
El programa se actualiza y modifica, cada vez que sea necesario, de modo que se cumplan todas las necesidades de cambio de los usuarios
Documentación
Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de referencia así como normas para el mantenimiento
Diseño del Algoritmo
En esta etapa dentro del proceso de programación se determinará QUE hace el programa, COMO hace la tarea programada
Método eficaz
El método eficaz de resolver un problema es divide y vencerás
El problema principal se divide en diversos subproblemas y a continuación dividir estos últimos en otros de nivel más bajo hasta que pueda ser implementada una solución en computadora
Módulos
Cada subprograma es resuelto mediante un módulo (subprograma) que tiene un solo punto de entrada y un solo punto de salida
A este tipo de programación se le llama programación modular
Herramientas de Programación
Las dos herramientas más utilizadas comúnmente para diseñas algoritmos son:
Diagramas de flujo
Pseudocódigos
Diagrama de flujo
Es la representación gráfica de un algoritmo
Los símbolos más utilizados son:
Pseudocódigo
Es una herramienta de programación en la que las instrucciones se escriben en palabras similares al inglés o español
Se define como un lenguaje de especificaciones de algoritmos
Ejemplo Pseudocódigo
Calcular el pago neto de un trabajador conociendo el número de horas trabajadas, la tarifa
horaria y la tasa de impuestos
Declarar variables
Solicitar Horas, Tarifa, Tasa
Leer Horas, Tarifa, Tasa
Calcular PagoBruto=Horas * Tarifa
Calcular Impuestos= PagoBruto * Tasa
Calcular PagoNeto= PagoBruto – Impuestos
Imprimir PagoNeto
Codificación
Es la escritura en un lenguaje de programación de la representación del algoritmo desarrollada en etapas precedentes
Para realizar la conversión del algoritmo en programa se deben sustituir las palabras reservadas en español por sus homónimos en ingles, dependiendo del lenguaje de programación utilizado
Ejemplo:
#include <stdio.h>
#include <conio.h>
//El programa imprime “Bienvenido a la programación en C”
main()
{
clrscr ();
printf(“Bienvenido a la programación en C ”);
getch ();
return 0;
}
Documentación Interna
Es aquella que se incluye dentro del código del programa fuente mediante comentarios que ayudan a al comprensión del código
Todas las líneas que empiezan con //
ó /* son comentarios, el programa no los necesita y la computadora los ignora
Compilación y ejecución del programa
Una vez que el algoritmo se ha convertido en un programa fuente, es preciso introducirlo en memoria mediante el teclado y almacenarlo posteriormente en un disco
Esta acción se realiza utilizando un programa editor, posteriormente el programa fuente se convierte en un archivo de programa que se guarda en un disco
Programa Fuente
Debe de ser traducido a lenguaje máquina, este proceso lo realiza el compilador y el sistema operativo
Si tras la compilación se presentan errores en el lenguaje fuente es preciso volver a editar el programa, corregir los errores y compilar de nuevo, obteniéndose el programa objeto
Programa ejecutable
Al tener el programa objeto es necesario que el sistema operativo realice un montaje o enlace (link) y cargue las librerías del programa compilador, con lo que obtendremos un programa ejecutable
Prueba y depuración de un programa
Es el proceso de ejecución de un programa con una amplía variedad de datos de entrada con el objetivo de encontrar errores
Introduciendo valores normales, valores extremos y valores especiales
La depuración es el proceso de encontrar errores del programa y corregir o eliminar dichos errores
Errores
De compilación: Uso incorrecto de las reglas del lenguaje de programación (sintaxis)
Ejecución: La computadora entiende la instrucción pero no la puede ejecutar
Lógicos: El lenguaje entiende la instrucción y arroja resultados pero estos, son incorrectos
Documentación y Mantenimiento
Descripción de los pasos y del proceso de resolución del problema
Diseño descendente (top-down)
Es el proceso mediante el cuál un problema se descompone en una serie de niveles
Se descompone el problema en etapas o estructuras jerárquicas
También se conoce como diseño de arriba-abajo y consiste en establecer una serie de niveles de mayor a menor complejidad (arriba-abajo) que den solución al problema.
Consiste en efectuar una relación entre las etapas de la estructuración de forma que una etapa jerárquica y su inmediato inferior se relacionen mediante entradas y salidas de información.
Este diseño consiste en una serie de descomposiciones sucesivas del problema inicial, que recibe el refinamiento progresivo del repertorio de instrucciones que van a formar parte del programa.
La utilización de la técnica de diseño Top-Down tiene los siguientes objetivos básicos:
Simplificación del problema y de los subprogramas de cada descomposición.
Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes personas.
El programa final queda estructurado en forma de bloque o módulos lo que hace mas sencilla su lectura y mantenimiento.
Diseño Ascendente (Bottom Up)
El diseño ascendente se refiere a la identificación de aquellos procesos que necesitan computarizarse con forme vayan apareciendo, su análisis como sistema y su codificación, o bien, la adquisición de paquetes de software para satisfacer el problema inmediato.
Cuando la programación se realiza internamente y haciendo un enfoque ascendente, es difícil llegar a integrar los subsistemas al grado tal de que el desempeño global, sea fluido.
Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha limite para la integración total del sistema.
En esta fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se ignoran.
Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistema como una entidad global, adolece de ciertas limitaciones por haber tomado un enfoque ascendente.
Uno de ellos es la duplicación de esfuerzos para acceder el software y mas aún al introducir los datos. Otro es, que se introducen al sistema muchos datos carentes de valor. Un tercero y tal vez el mas serio inconveniente delenfoque ascendente, es que los objetivos globales de la organización no fueron considerados y en consecuencia no se satisfacen.
Entonces… La diferencia entre estas dos técnicas de programación se fundamenta en el resultado que presentan frente a un problema dado. Imagine una empresa, la cual se compone de varios departamentos (contabilidad, mercadeo, …), en cada uno de ellos se fueron presentando problemas a los cuales se le dieron una solución basados en un enfoque ascendente (Bottom Up): creando programas que satisfacían sólo el problema que se presentaba.
Cuando la empresa decidió integrar un sistema global para suplir todas las necesidades de todos los departamentos se dio cuenta que cada una de las soluciones presentadas no era compatible la una con la otra, no representaba una globalidad, característica principal de los sistemas.
Como no hubo un previo análisis, diseño de una solución a nivel global en todos sus departamentos, centralización de información, que son características propias de un diseño Descendente (Top Down) y características fundamentales de los sistemas; la empresa no pudo satisfacer su necesidad a nivel global.
La creación de algoritmos es basado sobre la técnica descendente, la cual brinda el diseño ideal para la solución de un problema.