Introducción a la Informática Los Algoritmos Algoritmo Antes de que una computadora pueda realizar una tarea, hay que proporcionarle un algoritmo que le diga de forma precisa qué hacer; en consecuencia, el estudio de los algoritmos es la piedra angular de las Ciencias de la computación. ¿Qué es un algoritmo? Es un conjunto de pasos lógicos ordenados, secuencialmente y finita, escritos de tal forma que permiten visualizar la solución de un problema determinado en un momento específico. Algoritmos: Nombre El nombre en latín de algoritmo proviene de la traducción que realizó Fibonacci, de la obra del matemático árabe Al'Khwarizmi llamada , Algoritmi de Numero Indorum. Algoritmos: Es un conjunto de pasos lógicos ordenados, secuencialmente y finita, escritos de tal forma que permiten visualizar la solución de un problema determinado en un momento específico. Características de los algoritmos • Preciso/Definido Los pasos a seguir en el algoritmo deben ser definidos claramente. Debe ser preciso e indicar el orden de realización de cada paso. • Determinación Dado un conjunto de datos idénticos de entrada, siempre debe arrojar los mismos resultados, cada vez que se ejecute. • Ser finito Si se sigue un algoritmo, debe terminar en algún momento; o sea debe tener un número finito de pasos. • Efectivo Todas las operaciones a ser realizadas en el algoritmo deben ser lo suficientemente básicas de modo que puedan en principio ser llevadas a cabo en forma exacta y en un período de tiempo finito por una persona usando papel y lápiz. Partes que describen un algoritmo • Datos de Entrada Un algoritmo tiene entradas, es decir cantidades que le son dadas antes de que el algoritmo comience, o dinámicamente mientras el algoritmo corre. • Procesamiento de Datos Aquí incluye operaciones aritmético-lógicas, selectivas y repetitivas; cuyo objetivo es obtener la solución del problema. • Salida de Resultados Permite comunicar al exterior el resultado. Puede tener una o más salidas, es decir cantidades que tienen una relación única respecto a las entrantes. Diferencia entre algoritmo y programa Los algoritmos no son directamente interpretados por la computadora y deben ser traducidos a un lenguaje de programación concreto. ALGORITMO: Estructura Datos Procesos Corresponden a los datos requeridos para realizar el algoritmo (datos de entrada) y los datos que son generados (datos de salida) Conforma el grupo de instrucciones que realizan las operaciones con los datos. Estructuras de Control Determinan la organización de las instrucciones que deben ser realizadas. ALGORITMO: Elementos Es necesario identificar que datos se necesitan ingresar, cuales sirven de forma auxiliar y cuales se van a generar. Las instrucciones que se van a realizar deben estar bien estructuradas y tener un orden lógico, con el fin de evitar inconsistencias en el resultado. Definición de variables y constantes Entrada Proceso Estructuras de control Salida Cuerpo del algoritmo ALGORITMO: Elementos DATOS: Información con la cual trabaja la computadora. Se refiere a los elementos que se utilizan en los algoritmos para realizar alguna operación sobre estos. TIPOS DE DATOS: Corresponde al tipo de valor que puede almacenarse en un espacio de memoria definido y a la cantidad de espacio que requiere para almacenar un valor. • Se clasifican atendiendo a: Propiedades Operaciones que se pueden realizar • Datos Simples: Numérico (Real o entero) Carácter (Letras, símbolos, números) Lógico (Verdadero o Falso) • Datos compuestos Formados por agrupaciones de otros datos (arreglos, registros, archivos, apuntadores) ALGORITMO: Elementos CONSTANTE: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Ejemplo: pi = 3.1416 • VARIABLE: Corresponde a un espacio de memoria que almacena un dato que dentro del programa en ejecución cambia o varía su contenido (valor). El valor de una variable puede cambiar a lo largo del algoritmo Todas las variables son de un determinado tipo y sólo pueden tomar valores de ese tipo. Se clasifican por: Contenido USO • Numéricas De trabajo • Lógicas Contadores • Alfanuméricas (String) Acumuladores Ejemplo: area = pi * radio ^ 2 Las variables son : el radio, el area y la constate es pi ALGORITMO: ¿Quiénes pueden hacer un algoritmo? Toda persona, implícitamente y diariamente diseña y realiza algoritmos, para dar solución a situaciones cotidianas de forma natural. Sin embargo el programador, diseña el algoritmo consciente de que al realizar cada paso obtendrá la solución de un problema específico. Algoritmos simples Existen algoritmos para la conversión de representaciones numéricas de un formato a otro, para la detección y corrección de errores en los datos, para la compresión y descompresión de archivos de datos, para el control de la multiprogramación en un entorno multitarea, etc. Podemos idear un algoritmo para un determinado proceso, así como también hacerlo en diferentes formas. Por ejemplo: Cómo podríamos encontrar el promedio de un conjunto de números?. Una posible solución sería: 1.- Sumar los números dados. 2.- Contar dichos números. 3.- Dividir el resultado obtenido en el punto 1 entre el resultado obtenido en el punto 2. ALGORITMO: Ejemplo Diseñar un algoritmo para cambiar una llanta a un coche. Inicio. 2. Traer gato. 3. Levantar el coche con el gato. 4. Aflojar tornillos de las llantas. 5. Sacar los tornillos de las llantas. 6. Quitar la llanta. 7. Poner la llanta de repuesto. 8. Poner los tornillos. 9. Apretar los tornillos. 10. Bajar el gato. 11. Fin 1. Hacer un algoritmo para calcular el promedio de calificaciones de un estudiante. Los datos disponibles son: nombre y las 4 calificaciones de los exámenes. El algoritmo deberá imprimir el mensaje de “Aprobado” si el promedio fue >=7, de lo contrario el mensaje deberá ser “Reprobado”. 1.- inicio 2.- pedir nombre (N) 3.-Pedir calificaciones( c1,c2,c3,c4) 4.- sacar promedio prom=(c1+c2+c3+c4)/4 5.- si el promedio es >=7 entonces mostrar como resultados “aprobado” si el promedio es menor a 7 mostrar como resultado “reprobado. 6.- fin Representación de algoritmos Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. La descripción de un algoritmo usualmente se hace en tres niveles: 1.Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 2.Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución. 3.Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones. También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos. Los algoritmos pueden ser creados de dos formas: 1)Pseudocódigo.- Es un conjunto pequeño y claro de instrucciones; en secuencia, que permite llevar a cabo una tarea. 2)Diagrama de flujo.- Es la representación de la secuencia, a través de símbolos, de la tarea que se va a realizar. Un ejemplo de algoritmo es el que realizamos para lavarnos las manos: Inicio Abrir el grifo de agua. Mojarse las manos. Aplicarse jabón. Enjuagarse las manos. Cerrar el grifo de agua. Secarse la manos con papel. Exponer las manos a corriente de aire caliente.< fin Diagrama de flujo de datos ALGORITMO: Requisitos Debe Definirse del problema Los algoritmos se crean para resolver problemas. Es importante que junto al algoritmo, describamos claramente el problema que éste nos permite resolver. Debe estar dentro de contexto No debemos omitir el contexto de nuestros algoritmos. Es necesario establecer lo que se necesita y dónde se debe comenzar. Debe resolver el problema Debe evitar la ambigüedad Seguir los pasos del algoritmo debe llevarnos a la resolución del problema. Siempre que sea posible seguiremos personalmente los pasos de nuestro algoritmo para comprobar que son efectivamente correctos y conducen efectivamente a la solución esperada. Si se requiere hallar la velocidad de un automóvil, es necesario, definir si la distancia debe ser en metros, kilómetros, etc y el tiempo estará dado en segundos u horas, ya que la velocidad puede representarse en Km/h ó mts/seg. ALGORITMO: Técnicas de Diseño Es una técnica de diseño descendente donde se realiza un refinamiento sucesivo, que permite darle una organización a las instrucciones, en forma de módulos o bloques. Top Down Divide y vencerás Está técnica permite dividir el problema en pequeñas partes, a las cuales se les da solución por separado, luego se integran las soluciones para resolver el problema principal. PSEUDOCÓDIGO:Cómo se Hace? 1 Cada instrucción que se va a realizar debe comenzar por un verbo, ejemplo: Muestre, Haga, Lea, etc. 2 Se debe mantener una identación o sangría sobre el margen izquierdo para identificar fácilmente el comienzo y final de las estructuras 3 La representación de las estructuras son similares u homónimas de los lenguajes de programación, ejemplo: inicio, fin, mientras que, repita_hasta, si_entonces_sino, etc. PSEUDOCÓDIGO: Cómo se Hace? Inicio : Denota el punto de inicio del algoritmo. Leer : Denota la acción de introducir datos o variables desde un dispositivo estándar de entrada. Imprimir : Representa la acción de enviar datos desde variables a un dispositivo estándar de salida. Calcular : Denota la realización de cualquier operación aritmética que genere valores para ser almacenados en una variable. Fin: Denota el punto de finalización del algoritmo. DIAGRAMA DE FLUJO: Simbología ALGORITMO: Fases de Diseño Definición del problema Análisis del problema Selección de la mejor alternativa Diagramación Prueba de escritorio ALGORITMO: Definición del Problema Está dada por el enunciado del problema, el cuál debe ser claro y completo Es importante que conozcamos exactamente que se desea. Mientras qué esto no se comprenda, no tiene caso pasar a la siguiente etapa. ALGORITMO: Análisis del Problema ALGORITMO: Selección de Alternativa Analizado el problema. Posiblemente tengamos varias formas de resolverlo. Solución..3 Solución..1 Solución..2 Solución .4 Lo importante es determinar cuál es la mejor alternativa. La que produce los resultados Esperados menor tiempo y al menor costo. en el Se debe tener en cuenta el principio de que las cosas siempre se podrán hacer de una mejor forma. ALGORITMO: Diagramación Una vez que sabemos cómo resolver el Problema. Dibujar gráficamente la lógica de la alternativa seleccionada Plasmar la solución mediante el Pseudocódigo ALGORITMO: Prueba de Escritorio Esta prueba consiste en: Dar diferentes datos de entrada al programa seguir la secuencia indicada hasta obtener los resultados ALGORITMO: Prueba de Escritorio Se utiliza para corroborar que el algoritmo plasmado en cualquier herramienta presenta la solución al problema inicial Al realizar lo anterior se puede comprobar si el algoritmo es correcto o si hay necesidad de hacer ajustes (volver al paso anterior) Es Recomendable Dar diferentes datos de entrada y considerar todos los posibles casos, aún los de excepción o no esperados, para asegurar que el programa no produzca errores en ejecución cuando se presenten estos casos. Eficiencia de un algoritmo Aunque las máquinas actuales son capaces de ejecutar millones de instrucciones por segundo, la eficiencia continúa siendo una de las preocupaciones principales en el diseño de algoritmos. A menudo la elección entre un algoritmo eficiente y otro ineficiente puede marcar la diferencia entre una solución práctica a un problema y otra completamente inútil. EJERCICIO EJEMPLO: Una ONG tiene puntos de reparto de vacunas que se pretende funcionen de la siguiente manera. Cada día, empezar con 1000 vacunas disponibles y a través de un programa que controla las entregas avisar si el inventario baja de 200 unidades. Desarrollar pseudocódigo. 1. Inicio [Control de Vacunas] 2. Existencias = 1000 3. Mientras Existencias >= 200 Hacer Mostrar “Introduzca el número de unidades entregadas” Pedir Entregadas Existencias = Existencias – Entregadas Repetir 4. Mostrar “El inventario ha bajado de 200 unidades. Debe comunicarlo” 5. Fin Comentarios: La variable Existencias funciona como un acumulador que parte de un valor inicial y cuyo valor tras un movimiento depende de su contenido precedente. Tarea 1) Define que es un algoritmo. 2) Cita y explica las características que debe tener un algoritmo 3) ¿Cómo se representan los algoritmos? 4) Resuelve los siguientes ejercicios de algoritmo: • Escribe un algoritmo para obtener el área de un triángulo, tomando en cuenta que el área: (base * altura)/2. • Elaborar un algoritmo el cual calcule e imprima el sueldo de un empleado, teniendo como datos de entrada: nombre, horas trabajadas y cuota por hora. • Hacer un algoritmo que convierta un número dado de segundos en minutos y que imprima el resultado. • Elaborar un algoritmo que lea 20 números y que determine e imprima el promedio de la suma de dichos números. 5) Investiga cuáles son los pasos para resolver el cubo de Rubik por capas Bibliografía J. Glenn Brookshear. (2012). Introducción a la Computación. (11ª Ed.). PEARSON EDUCACIÓN, S. A., Madrid. ISBN eBook: 9788478291380