Ingeniero en Informática


Algoritmos


ALGORITMOS: Introducción

p@ul

'Algoritmos'



  • Etapas en la Resolución de Problemas por Computador

  • La resolución de problemas utilizando como herramienta una computadora no se resume únicamente en la escritura de un programa, sino que se trata de una tarea más compleja. El proceso abarca todos los aspectos que van desde interpretar las necesidades del usuario hasta verificar que la respuesta brindada es correcta. Las etapas son las siguientes:

    Análisis del problema:

    En esta etapa, se analiza el problema en su contexto del mundo real. Deben obtenerse los requerimientos del usuario. El resultado de este análisis es un modelo preciso del ambiente del problema y del objetivo a resolver. Dos componentes importantes de este modelo son los datos a utilizar y las transformaciones de los mismos que llevan al objetivo.

    Diseño de una solución:

    La resolución de un problema suele ser una tarea muy compleja para ser analizada como un todo. Este aspecto puede facilitarse mediante la identificación de las partes (subproblemas) que componen el problema y la manera en que se relacionan. Cada uno de estos subproblemas debe tener un objetivo específico, es decir, debe resolver una parte del problema original. La unión de todos los subproblemas es lo que permitirá obtener la solución buscada.

    Especificación de algoritmos:

    Cada uno de los subproblemas que componen la solución deben ser especificados a través de un algoritmo. Esta etapa busca obtener la secuencia de pasos a seguir para resolver el problema. La elección del algoritmo adecuado es fundamental para garantizar la eficiencia de la solución.

    Escritura de programas:

    Un algoritmo es una especificación simbólica que debe convertirse en un programa real sobre un lenguaje de programación concreto. A su vez, un programa escrito en un lenguaje de programación determinado (ej: Pascal, Ada, etc) es traducido automáticamente al lenguaje de máquina de la computadora que lo va a ejecutar. Esta traducción, denominada compilación, permite detectar y corregir los errores sintácticos que se cometan en la escritura del programa.

    Verificación:

    Una vez que se tiene un programa escrito en un lenguaje real se debe verificar que su ejecución produce al resultado deseado, utilizando datos representativos del problema real. Sería deseable poder afirmar que el programa es correcto, más allá de los datos particulares de una ejecución. Sin embargo, en los casos reales es muy difícil realizar una verificación exhaustiva de todas las posibles condiciones de ejecución de un sistema de software. La facilidad de verificación y la depuración de errores de funcionamiento del programa conducen a una mejor calidad del sistema y es un objetivo central de la Ingeniería de Software.

    Los programas deben estar escritos en un lenguaje comprensible por la máquina, ya sea:

    • Lenguaje máquina

    • Código comprensible por un intérprete/compilador (que traduce el programa a la máquina).

    Lenguaje máquina: Para obtener el código que comprende la máquina (ceros y unos) es necesario someter al código fuente, código comprensible por el ser humano, a un proceso de traducción:

    1. Compilar: Realizar Análisis Léxico, Sintáctico y Semántico, Conversión a código objeto.

    2. Enlazado (linkado): Unir el código objeto a las librerías y datos necesarios para que el sistema operativo sepa ejecutar el programa y convertirlo en un ejecutable.

    Ejemplo de lenguajes habitualmente compilables: Pascal, C, C++, Ada.

    Código interpretable: El código comprensible por el ser humano es convertido en tiempo de ejecución (equivalente a una traducción simultánea) a código comprensible por la máquina.

    Se diferencia del código compilado en que:

    • Es más lento (necesita traducirse en cada ejecución).

    • Es más fácil de mantener (modificar, corregir errores), ya que siempre es comprensible por el ser humano.

    • Es más flexible ya que los lenguajes interpretados permiten mayores abstracciones que los lenguajes compilados.

    • Es portable a cualquier plataforma que posea un intérprete. El programa compilado solo funciona en la plataforma para la que fue compilado.

    Ejemplo de lenguaje habitualmente interpretado: Perl, VBS, Basic, Javascript, PHP.

    Existen soluciones intermedias al código compilado o interpretado. Ejemplo: Java, posee bytecodes que es código compilado intermedio que requiere ser interpretado parcialmente.

  • Conceptos Básicos de Algoritmos

  • ¿Qué es un algoritmo?

      • La palabra algoritmo deriva del nombre de un matemático árabe del siglo IX, llamado Al-Khuwarizmi, quien estaba interesado en resolver ciertos problemas de aritmética y describió varios métodos para resolverlos. Estos métodos fueron presentados como una lista de instrucciones específicas (como una receta de cocina) y su nombre se utiliza para referirse a dichos métodos.

      • Un algoritmo es, en forma intuitiva, una receta, un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo. Ese algo generalmente es la solución de un problema de algún tipo. Se espera que un algoritmo tenga varias propiedades. La primera es que un algoritmo no debe ser ambiguo, o sea, que si se trabaja dentro de cierto marco o contexto, cada instrucción del algoritmo debe significar sólo una cosa.

      • Una posible definición de algoritmo es un conjunto de reglas que permiten obtener un resultado determinado a partir de ciertas reglas definidas. Otra definición sería, algoritmo es una secuencia finita de instrucciones, cada una de las cuales tiene un significado preciso y puede ejecutarse con una cantidad finita de esfuerzo en un tiempo finito. Ha de tener las siguientes características: legible, correcto, modular, eficiente, estructurado, no ambiguo y a ser posible se ha de desarrollar en el menor tiempo posible.

      • Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce hacia un lenguaje de programación concreto) un algoritmo. Puede haber programas que no se ajusten a un algoritmo (pueden no terminar nunca), en cuyo caso se denomina procedimiento a tal programa. Los programas suelen subdividirse en partes menores (módulos), de modo que la complejidad algorítmica de cada una de las partes es menor que la del programa completo, lo cual ayuda al desarrollo del programa.

      • Una definición informal (no se considera aquí una definición formal, aunque existe): conjunto finito de reglas que dan una secuencia de operaciones para resolver todos los problemas de un tipo dado. De forma más sencilla, podemos decir que un algoritmo es un conjunto de pasos que nos permite obtener un dato. Además debe cumplir estas condiciones:

     Finitud: El algoritmo debe acabar tras un número finito de pasos. Es más, es casi fundamental que sea en un número razonable de pasos.

    Definibilidad: El algoritmo debe definirse de forma precisa para cada paso, es decir, hay que evitar toda ambigüedad al definir cada paso. Puesto que el lenguaje humano es impreciso, los algoritmos se expresan mediante un lenguaje formal, ya sea matemático o de programación para un computador.

    Entrada: El algoritmo tendrá cero o más entradas, es decir, cantidades dadas antes de empezar el algoritmo. Estas cantidades pertenecen además a conjuntos especificados de objetos. Por ejemplo, pueden ser cadenas de caracteres, enteros, naturales, fraccionarios, etc. Se trata siempre de cantidades representativas del mundo real expresadas de tal forma que sean aptas para su interpretación por el computador.

    Salida: El algoritmo tiene una o más salidas, en relación con las entradas.

    Efectividad: Se entiende por esto que una persona sea capaz de realizar el algoritmo de modo exacto y sin ayuda de una máquina en un lapso de tiempo finito.

    A menudo los algoritmos requieren una organización bastante compleja de los datos, y es por tanto necesario un estudio previo de las estructuras de datos fundamentales. Dichas estructuras pueden implementarse de diferentes maneras, y es más, existen algoritmos para implementar dichas estructuras. El uso de estructuras de datos adecuadas pueden hacer trivial el diseño de un algoritmo, o un algoritmo muy complejo puede usar estructuras de datos muy simples.

    Aplicaciones de los Algoritmos:

    A primera vista, se puede pensar que el conocimiento de estos algoritmos y estructuras de datos no tienen una aplicación práctica inmediata. Sin embargo, su conocimiento y correcta aplicación sirven para producir programas mejores, en el sentido de que aprovechan mejor la memoria del sistema, son más rápidos, eficientes, robustos y tolerantes a fallos.

    Las aplicaciones de estos algoritmos en algunos casos son inmediatas; por ejemplo, hallar el trayecto más corto entre dos estaciones es algo que interesa a muchos viajeros del metro y se pueden obtener aproximaciones bastante buenas del mundo real utilizando algunos de los algoritmos que obtienen distancias mínimas. Otros algoritmos sirven para procesar cadenas, lo cual sirve de base para analizadores léxicos o algoritmos criptográficos, por ejemplo.

    Además, tener conocimientos adecuados de algoritmia y estructuras de datos facilita el poder pasar de un lenguaje de programación a otro con mucha mayor facilidad: puesto que ya se tiene la base, sólo hace falta superar las dificultades técnicas particulares de cada lenguaje.

    Diseñar un algoritmo para cambiar una llanta a un coche.


  • Inicio.

  • Traer gato.

  • Levantar el coche con el gato.

  • Aflojar tornillos de las llantas.

  • Sacar los tornillos de las llantas.

  • Quitar la llanta.


  • Poner la llanta de repuesto.

  • Poner los tornillos.

  • Apretar los tornillos.

  • Bajar el gato.

  • Fin


  • Diagramas de Flujos de Datos

    • Es la representación gráfica de los pasos que deben seguirse para resolver un problema.

    • El traducir una descripción narrada a diagrama de flujo agrega claridad y precisión a la descripción de una tarea.

    • Además, al elaborar el diagrama de flujo, se descubren situaciones que no habían sido consideradas.

    • En la elaboración de éstos, la simbología juega un papel muy importante, ya que debe estar adecuada a ciertos estándares, con el fin de que sea entendida por cualquier persona dedicada al campo de computación.

    • Cada una de las figuras representa una etapa en la solución del problema; dentro de ellas se anotan indicaciones. Las líneas señalan el flujo de la información.

    • En la actualidad se emplean poco, pero resultan muy útiles cuando se comienza en el estudio de la programación.

    • El problema con los diagramas de flujo es que a medida que crece la complejidad de las proposiciones, también crece el detalle con el que hay que dibujarlas.

    • Esto llegaba a convertirlos en figuras fraccionadas (pues de otro modo no cabrían en la hoja), y difíciles de seguir y entender.

    • El equivalente simbólico de la flecha se llama goto (ir a) y está, en términos generales, excluido de la programación moderna debido a su poder “desestructurante” y caótico sobre los programas (aunque si se usa con cuidado puede llegar a ser de alguna utilidad).

    • Los símbolos utilizados han sido normalizados por el Instituto Norteamericano de Normalización (ANSI) y los más frecuentes utilizados son:

    Reglas básicas para la construcción de Diagramas de Flujo:

    • Todo diagrama debe tener un inicio y fin.

    • Las líneas de conexión o de flujo deben ser siempre rectas, si es posible verticales y horizontales nunca cruzadas o inclinadas; para conseguir lo anterior es necesario apoyarse en conectores.

    • Las líneas que enlazan los símbolos entre sí deben estar todas conectadas.

    • Se deben dibujar todos los símbolos de modo que se pueda seguir el proceso visualmente de arriba hacia abajo (diseño top-down) y de izquierda a derecha.

    • Realizar un gráfico claro y equilibrado.

    • Evitar la terminología de un lenguaje de programación o máquina.

    • Utilizar comentarios al margen (si es necesario) para que éste sea entendible por cualquier persona que lo consulte.

    • A cada bloque o símbolo se accede por arriba y/o por la izquierda y se sale por abajo y/o por la derecha.

    • Si el diagrama abarca más de una hoja es conveniente enumerarlo e identificar de donde viene y a donde se dirige.

    Estructuras de Control en Diagramas de Flujo:

    Estructuras Repetitivas en Diagramas de Flujo:

    Ejercicio 1: Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio de la hora de trabajo y considerando unos descuentos fijos al salario bruto en concepto de impuestos (20 por 100).

    Ejercicio 2: Realizar un diagrama de flujo que permita mostrar en pantalla un mensaje de mayoría o minoría de edad según sea el caso para un nombre específico.

    4. Pseudocódigo

    • Los algoritmos se deben describir en un lenguaje que se parezca más al lenguaje utilizado para escribir programas de computador.

    • Es decir, un lenguaje de pseudoprogramación, una imitación del código de las computadoras al cual se le conoce como pseudocódigo.

    • El pseudocódigo se concibió para superar las dos principales desventajas del diagrama de flujo:

    • Es lento de crear.

    • Es difícil de modificar sin un nuevo redibujo.

    • Por otra parte el pseudocódigo es más fácil de utilizar ya que es similar al español o inglés, catalán, alemán o francés, dependiendo del caso.

    • Al contrario que los lenguajes de programación de alto nivel, como Pascal o Basic, no existe un conjunto de reglas que definan con precisión lo que es y lo que no es pseudocódigo.

    • Varía de un programador a otro y de que tan próxima sea la descripción al lenguaje de programación.

    • El pseudocódigo es una mezcla de lenguaje natural y símbolos, términos y otras características comúnmente utilizadas en uno o más lenguajes de alto nivel.

    • Típicamente se encuentran las características en diferentes pseudocódigos que se pueden encontrar en libros de texto de programación.

    • El pseudocódigo requiere de ciertos símbolos privilegiados que ya tienen significado preciso y establecido de antemano.

    • A tales indicadores del pseudocódigo se les conoce como “palabras clave”.

    • Es necesario que exista una palabra clave para la selección y otra para la iteración condicional, así como para las instrucciones adicionales y otras estructuras de control.

    • Por ejemplo: La palabra “escribe” es una palabra clave que ya tiene significado predefinido, a diferencia de la palabra ALFA, que es una variable libre.

    • Se pretenderá uniformizar el pseudocódigo utilizando la siguiente simbología:

    • El algoritmo comienza con la palabra Inicio y termina con la palabra Fin. Entre estas palabras, es escribe una instrucción (acción) por línea o se separan con un punto y coma.

    • La línea encerrada entre llaves ( {…} ) se denomina comentario (es una información al lector del programa y no realiza ninguna instrucción ejecutable, sólo tiene efectos de documentación interna del programa.

    • La asignación se llevará a cabo mediante el signo . Ejemplo: A 10, a la variable A se le asigna el valor de 10.

    • Por lo tanto, el Pseudocódigo a utilizar incluirá:

      • Nombre del Programa.

      • Sección de Declaraciones (Variables y Constantes)

      • Algoritmo.

    Ejemplo: Elaborar un programa que calcule la sumatoria de 2 números.

    5. Ejercicios

    Se desea obtener una Tabla con las depreciaciones acumuladas y los valores reales de cada año de un automóvil comprado en $ 1,800 en el año 1992, durante los seis años siguientes; asumiendo un valor de recuperación de $ 120. Realizar el análisis del problema, conociendo la fórmula de la depreciación anual constante D para cada año de vida útil.

    Ejercicios Propuestos:

  • Calcular el área de un triángulo.

  • Calcular el precio de un artículo tras aplicarle un 18% de IGV.

  • Intercambiar el contenido de dos variables.

  • Resolver una ecuación de segundo grado, teniendo en cuenta todas las posibles alternativas.

  • Se pide determinar el mayor de tres números ingresados por el usuario. Considere que pueden ser iguales.

  • Se pide determinar el menor de tres números ingresados por el usuario. Considere que pueden ser iguales.

  • Calcular el exponencial de un número (ab), considerando todos los casos posibles:

    • Ingreso de números negativos.

    • Ingreso de valores igual a 0 (a=0, b=0).

  • Calcule e imprima los primeros N números primos. Considere que N es ingresado por el

  • usuario.

  • Calcule el factorial de un número ingresado por el usuario.

  • Trabajo Encargado:

    • Enumerar las diferencias entre un lenguaje compilado y un lenguaje interpretado.

    • Clasificar entre lenguaje compilado y lenguaje interpretado (emplear Internet para buscar información en caso de ser necesario). Justifica tu respuesta.

      • Pascal

      • C

      • ADA

      • COBOL

      • Python

      • BASH

      • Basic

      • Java

    • Diseñar un diagrama de flujo para “El desarrollo de un programa”.

    • Escribir el pseudocódigo y el diagrama de flujo para resolver los siguientes problemas:

      • Un video club necesita un programa para gestionar los alquileres. El programa consta de diferentes módulos y se nos ha encargado diseñar el referente a la introducción de nuevos clientes.

      • En un proceso industrial es necesario un sistema tolerante a fallos. El proceso consiste en llenar botellas de un refresco mediante el uso de un robot que emplea una pipeta. Es posible que el robot falle y la pipeta no se introduzca adecuadamente, con lo que hay que repetir la operación de introducir la pipeta. En determinados casos la pipeta se rompe y hay que detener el proceso y llamar al servicio técnico.

      • Un cliente desea un sistema de mensajería para sus empleados en las distintas sedes alrededor del mundo. En el momento que un empleado recibe un mensaje, éste es almacenado hasta que el destinatario consulta su buzón. En determinados casos el mensaje es urgente y debe enviarse un mensaje SMS al móvil del empleado. A veces un mensaje se extravía (el nombre del destinatario no coincide con ninguno almacenado en la base de datos), en esos casos es necesario enviar el mensaje de vuelta al remitente. Describir el proceso a seguir para tratar los mensajes.

      • Describir el proceso a seguir para descargar una película empleando edonkey. Tener en cuenta que no disponemos del programa (pero sí de conexión a internet), que es posible que la película no esté disponible en el primer servidor al que conectamos e incluso que la película no esté disponible en ningún servidor (se advierte del problema y el proceso falla).




    Descargar
    Enviado por:El remitente no desea revelar su nombre
    Idioma: castellano
    País: Perú

    Te va a interesar