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.