Algoritmos en la computación clic - Pensamiento...

download Algoritmos en la computación clic - Pensamiento …pensamientocomputacional.org/Files/algoritmos.pdf · DRAFT Algoritmos Teotihuacan ("Lugar donde los hombres se convierten en dioses")

If you can't read please download the document

Transcript of Algoritmos en la computación clic - Pensamiento...

  • DRAFT

    Algoritmos

    Teotihuacan (Lugar donde los hombres se convierten en dioses) es el nombre que se da a la que fue unade las mayores ciudades prehispanicas de Mesoamerica. El nombre es de origen nahuatl y fue empleadopor los mexicas para identificar a esta ciudad construida por una civilizacion anterior a ellos y que ya seencontraba en ruinas cuando los mexicas la vieron por primera vez. A la fecha se desconoce el nombre que ledaban sus habitantes originales. Los restos de la ciudad se encuentran al noreste del valle de Mexico, en losmunicipios de Teotihuacan y San Martn de las Piramides, aproximadamente a 45 kilometros de distanciadel centro de la Ciudad de Mexico. La zona de monumentos arqueologicos fue declarada Patrimonio de laHumanidad por Unesco en 1987. (http://es.wikipedia.org/wiki/Teotihuacan).

    palabra palabraAutor: Jorge Luis Zapotecatl LopezCorreo electronico: [email protected]: www.pensamientocomputacional.org

    http://es.wikipedia.org/wiki/Teotihuacanwww.pensamientocomputacional.org

  • DRAFT

    2

    D.R. c2014 por Insituto Nacional de Astrofsica, Optica y ElectronicaLuis Enrique Erro 1, Tonantzintla, Puebla, MexicoC.P. 72840Telefono: (222) 247.29.40Contacto: [email protected]

  • DRAFT

    Indice general

    Indice general 3

    1. Algoritmos 51.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Algoritmos en la computacion . . . . . . . . . . . . . . . . . . 71.3. Representacion de algoritmos . . . . . . . . . . . . . . . . . . 8

    1.3.1. Diagramas de flujo . . . . . . . . . . . . . . . . . . . . 91.3.2. Seudocodigo . . . . . . . . . . . . . . . . . . . . . . . . 11

    1.4. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.4.1. Contadores . . . . . . . . . . . . . . . . . . . . . . . . 121.4.2. Acumuladores . . . . . . . . . . . . . . . . . . . . . . . 141.4.3. Banderas . . . . . . . . . . . . . . . . . . . . . . . . . 15

    1.5. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . 151.5.1. Estructura de secuencia . . . . . . . . . . . . . . . . . 151.5.2. Estructura de seleccion . . . . . . . . . . . . . . . . . . 171.5.3. Estructura de repeticion . . . . . . . . . . . . . . . . . 22

    1.6. Apilamiento y Anidamiento . . . . . . . . . . . . . . . . . . . 271.7. Enfoque descendente . . . . . . . . . . . . . . . . . . . . . . . 28

    1.7.1. Nivel 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.7.2. Nivel 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    1.8. Aplicando los Algoritmos . . . . . . . . . . . . . . . . . . . . . 32

    Bibliografa 33

    3

  • DRAFT

    palabra

  • DRAFT

    Captulo 1

    Algoritmos

    Si quieres construir un barco, no empieces por buscar madera, cortar tablaso distribuir el trabajo. Evoca primero en los hombres y mujeres el anhelo delmar libre y ancho-Antoine de Saint-Exupery

    1.1. Introduccion

    Cuando se escucha la palabra algoritmo, las personas frecuentemente con-sideran que es demasiado sofisticada y exclusivamente relacionada con lasciencias. Sin embargo, los algoritmos se encuentran ampliamente relaciona-dos tanto en la vida cotidiana como en el quehacer profesional de cada perso-na. Un algoritmo es simplemente una serie de pasos ordenados que se siguenpara resolver un problema.

    Algunos ejemplos en la vida cotidiana donde se emplean algoritmos fre-cuentemente para resolver problemas son: una persona que utiliza un ins-tructivo para armar un mueble, los trabajadores que ejecutan un conjuntode ordenes por parte de su jefe, los cocineros que utilizan recetas para pre-parar platillos, entre otros. Un ejemplo de algoritmo para preparar un tpicoplatillo mexicano, el mole poblano, se presenta a continuacion (ver Figura1.1).

    5

  • DRAFT

    6 CAPITULO 1. ALGORITMOS

    1. Remojar los chiles en agua caliente.

    2. Moler los chiles, los ajos y el chocolate, hasta formar una pasta.

    3. Frer dicha pasta en manteca caliente, sazonarla con sal y anadir elcaldo suficiente para que tome buen espesor.

    4. Agregar la carne cocida para la que se preparo el mole.

    Figura 1.1: -Kukulkan- El resultado de aplicar el algoritmo anterior es un exquisito mole poblano.El mole poblano es un tpico platillo mexicano que esta compuesto principalmente de una salsa creadaa partir de una gran variedad de ingredientes vertida sobre piezas de guajolote (nombre que se le da enMexico al pavo domestico).

    Un problema en particular frecuentemente puede resolverse de varias ma-neras, por lo tanto, tendra varios algoritmos que puedan solucionarlo. Porejemplo, considere los algoritmos de un cocinero, es decir, las recetas. El molepoblano tiene diferentes recetas para preparase. Si una persona esta tratandode hacer un delicioso mole poblano para su familia, tiene varias recetas quepuede utilizar para lograr su objetivo. Sin embargo, los resultados no seranlos mismos porque algunas recetas pueden llevar mayor tiempo de prepa-racion, pueden usar ingredientes costosos, ingredientes que son difciles deconseguir, tener mucha azucar, o una gran variedad de otras condiciones queafectaran su utilidad. Al igual que en las recetas, los algoritmos que resuelvenun determinado problema tienen diferentes ventajas y desventajas, algunosalgoritmos tardaran mas tiempo en encontrar soluciones, otros algoritmosconsumiran mas memoria, entre otros aspectos.

  • DRAFT

    1.2. ALGORITMOS EN LA COMPUTACION 7

    Para el pensamiento computacional los algoritmos son uno delos topicos principales en el proceso de solucion de problemas. En-tre los objetivos operativos del pensamiento computacional que serelacionan estrechamente con los algoritmos son:

    Formular problemas de manera que permitan usar compu-tadores y otras herramientas para solucionarlos.

    Automatizar soluciones mediante pensamiento algortmico.

    Identificar, analizar e implementar posibles soluciones con elobjeto de encontrar la combinacion de pasos y recursos maseficiente y efectiva.

    1.2. Algoritmos en la computacion

    Los algoritmos son ampliamente utilizados en las ciencias de la compu-tacion y representan las soluciones a nivel conceptual de determinados pro-blemas. La computadora al igual que el ser humano maneja varios lenguajes,los denominados lenguajes de programacion, que permiten indicar que ins-trucciones deben ejecutarse. Cuando un algoritmo es implementado en unlenguaje de programacion se le denomina programay por lo tanto se vuel-ve una solucion aplicada en la vida real.

    Todo el software que utilizamos diariamente como lo son los sistemasoperativos, las aplicaciones ofimaticas, los video juegos, los navegadores, sonprogramas basados en algoritmos que se implementan por medio de lenguajesde programacion (ver figura 1.2). Por lo tanto, los algoritmos estan presentesal utilizar equipos de computo como los son: telefonos moviles, computado-ras, calculadoras, entre otros. Por ejemplo, en un supermercado cuando lacajera aplica el escaner a un producto, la computadora aplica un algoritmode busqueda para encontrar el precio de dicho producto.

    Los conceptos subyacentes de un algoritmo no se ven afectados por lascapacidades de un lenguaje de programacion o las capacidades de una compu-tadora en particular. Como analoga, el resultado de una receta que haya sidoescrita correctamente no debe ser afectada por el cocinero o la cocina.

  • DRAFT

    8 CAPITULO 1. ALGORITMOS

    (a) Video juegos (Mega Man XTM). (b) Animaciones 3D (AvatarTM).

    Figura 1.2: Los video juegos y las animaciones en 3D son ejemplos de algoritmos implementados encomputadoras por medio de lenguajes de programacion

    Figura 1.3: -Paat- GameCoder Studios es un estudio independiente de video juegos mexicano ubicadoen la ciudad colonial de Guanajuato, Mexico. En el 2010 dicho estudio desarrollo el motor GC, un motorgrafico de video juegos 3D. Algunas de las tecnicas de representacion utilizadas en el motor GC fueron in-novadoras y se presentaron en el SIGGRAPH 2011. En el 2011 el estudio desarrollo el video juego Attractiobasado en el motor GC. Para mayor informacion puede consultar el enlace: www.gamecoderstudios.com

    1.3. Representacion de algoritmos

    Los algoritmos se representan de varias formas, incluyendo el lenguajenatural (utilizado para representar el algoritmo del mole poblano en la sec-cion 1.1), seudocodigo, diagramas de flujo y lenguajes de programacion, entreotros. Las descripciones en lenguaje natural son ambiguas y extensas, mien-tras que los seudocodigos y el diagramas de flujo evitan las ambiguedadesdel lenguaje natural. Dichas expresiones son formas mas estructuradas para

    www.gamecoderstudios.com

  • DRAFT

    1.3. REPRESENTACION DE ALGORITMOS 9

    representar algoritmos. Ademas, se mantienen independientes de un lenguajede programacion especfico.

    1.3.1. Diagramas de flujo

    Los diagramas de flujo son la representacion visual de cada paso del al-goritmo por medio de smbolos que representan las operaciones ejecutadassobre los datos. Dicha simbologa ha sido estandarizada por las organizacio-nes ANSI (American National Standars Institute) y la OSI (InternationalStandarization Organization).

    Los diagramas de flujo son usados principalmente para introducir a losestudiantes en el desarrollo de algoritmos por su facilidad de lectura. Sonusados principalmente para representar algoritmos pequenos debido a queabarcan demasiado espacio y su construccion es laboriosa. En la figura 1.4se muestran los smbolos basicos de los diagramas de flujo.

    Figura 1.4: Smbolos basicos de los diagramas de flujo

  • DRAFT

    10 CAPITULO 1. ALGORITMOS

    Por ejemplo, considera el algoritmo representado por medio de un dia-grama de flujo de la figura 1.5 que determina el numero mayor entre A yB. El primer smbolo terminal indica el inicio del algoritmo y la lnea deflujo indica la direccion de la siguiente instruccion a ejecutarse. El smboloimprimir le indica al usuario, por medio de un mensaje, que debe ingresardos valores. El usuario introduce dos numeros de entrada, indicado por elsmbolo de entrada y salida. Posteriormente, aplicando el operador de mayoro igual dentro del smbolo de decision se selecciona el mensaje que imprimeel numero mayor (o igual). El algoritmo termina con el smbolo terminal.

    Figura 1.5: Algoritmo que determina el mayor numero entre A y B .

  • DRAFT

    1.3. REPRESENTACION DE ALGORITMOS 11

    1.3.2. Seudocodigo

    El seudocodigo es una descripcion informal de alto nivel de un algoritmoque utiliza las convenciones de un lenguaje de programacion real. Sin em-bargo, esta disenado para que el algoritmo sea ledo por un humano. Por lotanto, el seudocodigo se complementa, donde sea conveniente, con descrip-ciones detalladas en lenguaje natural, o con notacion matematica compacta.Ademas, omite detalles que no son esenciales para su comprension, tales co-mo especificar el tipo de variables, codigo especfico del sistema y algunasfunciones (subrutinas).

    Para el seudocodigo no existe una sintaxis estandar y por lo general,no obedece a las reglas de sintaxis de ningun lenguaje de programacion enparticular. Dependiendo del disenador, el seudocodigo puede diferir en suestilo, desde acercarse a una descripcion en lenguaje natural (en prosa) porun extremo hasta una imitacion casi exacta de un lenguaje de programacionreal por el otro. El algoritmo 1, representado por medio de un seudocodigo,computa el numero mayor o igual entre A y B.

    Algorithm 1 Numero mayor o igual

    1: imprimir(Introduzca los valores);2: introducir(A, B); . Desde el teclado3: if A B then4: imprimir(A, Es mayor o igual);5: else6: imprimir(B, Es mayor);7: end if

    El seudocodigo presentan las siguientes ventajas con respecto a los dia-gramas de flujo:

    El espacio utilizado en la descripcion del problema es mucho menor.

    Las operaciones complejas son presentadas de forma mas sencilla.

    El seudocodigo es mas sencillo de trasladar a un lenguaje de progra-macion.

    Las reglas de identacion permiten observar claramente los niveles en laestructura del algoritmo.

  • DRAFT

    12 CAPITULO 1. ALGORITMOS

    En las secciones siguientes los algoritmos son explicados principalmen-te utilizando seudocodigo. No obstante, se presentan los diagramas de flujopertinentes en cada seccion.

    1.4. Variables

    Una variable es un smbolo que designa una cantidad susceptible de to-mar distintos valores y que almacena informacion durante la ejecucion deun algoritmo. En los algoritmos, cada disenador utiliza sus respectivas con-venciones. Por ejemplo, la instruccion asignar el valor de la variable x a lavariable ypuede representarse como:

    x yx = yx := y

    Las operaciones usualmente se representan de manera matematica com-pacta.

    volumen r2hhipotenusa

    a2 + b2

    resultado sin(a)En una operacion de asignacion, usualmente se asigna el valor que resulta

    de los calculos ejecutados a la derecha de una expresion a la variable que seencuentra a la izquierda. Por ejemplo, si x = 0 y ejecutando la siguienteoperacion: x = x+ 1. El valor adquirido al ejecutar la instruccion anterior esx = 1.

    En los algoritmos la forma en que algunas variables se utilizan es recu-rrente al servir como auxiliares en la ejecucion de instrucciones. La forma enque algunas variables se utilizan se clasifican en: contadores, acumuladores ybanderas.

    1.4.1. Contadores

    Los contadores son variables que cuentan el numero de eventos eje-cutados dentro de un algoritmo. Un contador incrementa o decrementa sucontenido en un valor constante. El conteo inicia generalmente en 0 o 1. Lasoperaciones necesarias que se llevan a cabo con un contador son:

  • DRAFT

    1.4. VARIABLES 13

    1. Inicializacion. Esta operacion permite asignar el valor inicial de lavariable contador.

    contador = valor inicializacion.

    2. Incremento o decremento. Esta operacion se realiza cada vez queocurre el evento que se desea contar. Usualmente el valor constante esde 1. Sin embargo, se puede asignar otra magnitud en determinadoscasos.

    contador = contador + 1 (incremento)contador = contador 1 (decremento)

    Suponga que un evento ocurre tres veces, el contador adquirira los valorescomo se indica en la siguiente tabla.

    contador = contador+ 11 0 12 1 13 2 1

    Por ejemplo, en el video juego Mario BrosTMse utiliza un contador paraalmacenar el tiempo, las vidas o la cantidad de monedas que ha recolectado(ver figura 1.6).

    Figura 1.6: Contadores en el video juego Mario BrosTM.

  • DRAFT

    14 CAPITULO 1. ALGORITMOS

    1.4.2. Acumuladores

    Los acumuladores incrementan o decrementa su contenido en un valorvariable. La acumulacion inicia generalmente en 0 o 1.

    La operacion basica que se debe realizar con ellos es:

    1. Inicializacion. La inicializacion de un acumulador dependera del tipode operacion que se va a realizar. Usualmente se inicilaliza en 0 o en 1.

    2. Incremento o decremento. Esta operacion se realiza cada vez queocurre el evento que se desea acumular.

    acumulador = acumulador + variable

    Suponga el calculo de la nomina de un empleado, el acumulador adqui-rira los valores como se indica en la siguiente tabla.

    nomina = nomina+ sueldo1200 0 12001700 1200 5003200 1700 1500

    Por ejemplo, en el video juego Street Fighter IITMse utiliza un acumuladorpara variar la cantidad de vida en la barra amarilla superior (ver figura 1.7).

    Figura 1.7: Acumuladores en el video juego Street Fighter IITM.

  • DRAFT

    1.5. ESTRUCTURAS DE CONTROL 15

    1.4.3. Banderas

    Las banderas son variables que adquieren determinados valores con lafinalidad de interrumpir o seleccionar la ejecucion de determinadas instruc-ciones en un algoritmo.

    Por ejemplo, para inidar que se presiono el boton de start en el controlde tu consola favorita o para indicar que el juego a terminado (game over),la bandera adquirira el valor como se indica en la siguiente tabla.

    bandera = falso No se ha presionado el botonbandera = verdadero Se ha presionado el boton

    1.5. Estructuras de control

    Investigaciones realizadas en la decada de los 70 por C. Boh y G. Jaco-pini demostraron que algoritmos estructurados pueden codificarse utilizandosolo tres estructuras de control: la estructura de secuencia, la estructura deseleccion y la estructura de repeticion. Antes de dichas investigaciones, seutilizaba de manera excesiva el uso de la instruccion de transferencia incon-dicional (GOTO), que producia codigo espagueti, que es mucho mas difcilde seguir, mantener y era la causa de muchos errores. Por lo tanto, sur-ge lo que se conoce como programacion estructurada, la cual construyelos algoritmos a partir unicamente de las estructuras de control: secuencia,seleccion y repeticion, las cuales se explican a continuacion.

    1.5.1. Estructura de secuencia

    En un algoritmo, la estructura de secuencia establece que las instruccio-nes escritas en seudocodigo son ejecutadas en orden secuencial de arriba aabajo. Considera el siguiente bloque de instrucciones.

    1: instruccion1;2: instruccion2;3: instruccion3;4: . . .5: instruccionn;

    La instruccion1 se ejecuta primero (renglon numero 1), posteriormentese ejecuta la instruccion2, y de manera sucesiva se ejecutan las demas ins-

  • DRAFT

    16 CAPITULO 1. ALGORITMOS

    trucciones hasta ejecutarse la instruccion n. El algoritmo representado porun diagrama de flujo se muestra en la figura 1.8.

    Figura 1.8: Diagrama de flujo que muestra el funcionamiento de la estructura de secuencia.

    Por ejemplo, considere el algoritmo asistir al trabajoque realiza un em-pleado para levantarse de la cama y asistir al trabajo:

    1: levantarse;2: quitarse la pijama;3: tomar un bano;4: vestirse;5: desayunar;6: tomar el transporte hacia el trabajo;

    El algoritmo anterior consigue que el empleado se presente al trabajo entiempo y forma al realizar acciones de manera sucesiva. Ahora, suponga quelas mismas instrucciones del algoritmo asistir al trabajose ejecutan en unorden ligeramente diferente:

    1: levantarse;2: quitarse la pijama;3: vestirse;

  • DRAFT

    1.5. ESTRUCTURAS DE CONTROL 17

    4: tomar un bano;5: desayunar;6: tomar el transporte hacia el trabajo;

    En este caso, el empleado llegara mojado al trabajo (ver figura 1.9). Elejemplo anterior muestra la importancia de especificar el orden correcto enque se ejecutan las instrucciones para obtener el resultado deseado.

    Figura 1.9: El orden en que las instrucciones son ejecutadas determina el resultado correcto de unalgoritmo, si se cambia el orden de una instruccion el ejecutivo llegara mojado al trabajo.

    1.5.2. Estructura de seleccion

    En un algoritmo, la estructura de seleccion permite decidir que instruccio-nes se deben ejecutar dependiendo de alguna condicion. En la vida real, cadada las personas constantemente tienen que decidir que actividades realizar.Por ejemplo, salir a correr o quedarse en la cama, escoger entre estudiar ojugar, decidir si comer a las 2:00 P.M. o a las 3:00 P.M., entre muchos otrosejemplos (ver figura 1.14).

    En esta seccion se presentan tres variantes de la estructura de seleccion:seleccionar simple, seleccionar doble y seleccionar multiple.

    Seleccionar simple

    La estructura seleccionar simple decide que instrucciones deben ejecutar-se dependiendo del cumplimiento de una condicion, donde la condicion es

  • DRAFT

    18 CAPITULO 1. ALGORITMOS

    Figura 1.10: Las decisiones se toman dependiendo de que actividades se desean realizar. Por ejemplo,una chica decidira la forma de vestirse de acuerdo al tipo de fiesta al que asistira.

    una expresion booleana, es decir, el valor de la condicion es verdadero o falso(1 o 0). Considera el siguiente bloque de instrucciones.

    1: if condicion1 then2: instrucciones1;3: end if

    Si la condicion1 es evaluada como verdadera (especificada en el renglon 1),entonces se ejecutan las instrucciones1 que se encuentran dentro del cuerpode la estructura. Por otro lado, si la condicion es falsa las instrucciones1 den-tro del cuerpo son evitadas. El bloque anterior representado por un diagramade flujo se muestra en 1.11.

    Figura 1.11: Diagrama de flujo que muestra el funcionamiento de la estructura seleccionar simple.

  • DRAFT

    1.5. ESTRUCTURAS DE CONTROL 19

    La estructura seleccionar simple se utiliza cuando:

    El problema requiere ejecutar o evitar determinadas acciones con baseen una condicion.

    Por ejemplo, suponga que una joven, en sus vacaciones, ha decido asistira un curso de natacion unicamente si el horario de las sesiones es mayor alas 7:00 hrs. El bloque de instrucciones mediante la estructura de seleccionsimple se representa a continuacion.

    1: if horario sesion > 7 then2: Asistir al curso de natacion;3: end if

    Seleccionar doble

    La estructura seleccionar doble decide que instrucciones deben ejecutarseentre dos posibles opciones dependiendo del cumplimiento de una condicion.Al igual que en la estructura seleccionar simple, la condicion es una expresionbooleana. Considera el siguiente bloque de instrucciones.

    1: if condicion1 then2: instrucciones1;3: else4: instrucciones2;5: end if

    Si la condicion1 es evaluada como verdadera (especificada en el renglon 1),entonces se ejecutan las instrucciones1 que se encuentran dentro del primerbloque de la estructura. Por otro lado, si la condicion es falsa se ejecutan lasinstrucciones2 que se encuentran dentro del segundo bloque de la estructura.El bloque anterior representado por un diagrama de flujo se muestra en 1.12.La estructura seleccionar doble se utiliza cuando:

    El problema requiere elegir que conjunto de instrucciones ejecutar entredos opciones con base en una condicion.

    Por ejemplo, suponga que un profesor de matematicas califica un examende algebra. Si la calificacion de un estudiante es mayor o igual que 6, entoncesel estudiantes es aprobado. En caso contrario, al profesor no le gusta reprobar

  • DRAFT

    20 CAPITULO 1. ALGORITMOS

    Figura 1.12: Diagrama de flujo que muestra el funcionamiento de la estructura seleccionar doble.

    a sus alumnos, pero no le queda otra opcion que hacerlo. El bloque de instruc-ciones mediante la estructura de seleccion doble se representa a continuacion.

    1: if calificacion 6,0 then2: aprobar a estudiante;3: else4: reprobar a estudiante;5: end if

    Seleccionar multiple

    La estructura de seleccion multiple decide que instrucciones deben eje-cutarse entre varias opciones dependiendo del cumplimiento de determinadacondicion. La estructura de seleccion multiple esta constituida por el apila-miento de estructuras de seleccion simple. Cada serie de condiciones tienenque ser mutuamente excluyentes, si una de ellas se cumple las demas tienenque ser falsas necesariamente. Si ninguna de las condiciones se cumple opcio-nalmente puede agregarse un caso por omision. Considera el siguiente bloquede instrucciones.

    1: if condicion1 then2: instrucciones1;3: else if condicion2 then4: instrucciones2;

  • DRAFT

    1.5. ESTRUCTURAS DE CONTROL 21

    5: . . .6: else if condicionn then7: instruccionesn;8: else9: instruccionesomision;10: end if

    Si la condicion1 es evaluada como verdadera (especificada en el renglon 1),entonces se ejecutan las instrucciones1 que se encuentran dentro del primerbloque de la estructura. En caso contrario, se procede a verificar la condicion2(especificada en el renglon 3), si es evaluada como verdadera, entonces seejecutan las instrucciones2 dentro del segundo bloque de la estructura. Elproceso continua hasta que no quedan mas opciones. Si ninguna condicion escumplida, se ejecuta por omision las instruccionesomision. El bloque anteriorrepresentado por un diagrama de flujo se muestra en 1.12.

    Figura 1.13: Diagrama de flujo que muestra el funcionamiento de la estructura seleccionar multiple.

    La estructura seleccionar multiple se utiliza cuando:

  • DRAFT

    22 CAPITULO 1. ALGORITMOS

    El problema requiere elegir que conjunto de instrucciones ejecutar entremultiples opciones con base en diversas condiciones.

    Imagina que Tukkul desea obsequiarle un regalo a Paat con el que mani-fieste sus sentimientos, pero solo cuenta con $200 pesos. Por lo que seleccio-nara un regalo que tenga un costo igual o menor que 200 pesos. Si ningunregalo cumple con dicha condicion, entonces le escribira un poema :3.

    1: if Orqudeas 200 then2: Comprar Orqudeas;3: else if El placer de descubrir de Feymman 200; then . Paat ama la

    ciencia4: Comprar dicho libro;5: else if El CD Surfing with the Alien 200 then6: Comprar dicho disco;7: . . .8: else9: Escribir un Poema;

    10: end if

    1.5.3. Estructura de repeticion

    En un algoritmo, la estructura de repeticion permite repetir determina-das instrucciones dependiendo de una condicion. En la vida real, cada da laspersonas constantemente tienen que repetir actividades. Por ejemplo, acti-vidades como caminar, escribir, leer, hablar, implican repetir el conjunto deacciones, entre muchos otros ejemplos (ver figura 1.14).

    En esta seccion se presentan tres variantes de la estructura de repeticion:repetir mientras, repetir hasta y repetir para.

    Repetir mientras

    La estructura repetir mientras permite repetir determinadas instruccionesmientras su condicion permanezca verdadera. Considera el siguiente bloquede instrucciones.

    while condicion1 doinstrucciones1;

  • DRAFT

    1.5. ESTRUCTURAS DE CONTROL 23

    Figura 1.14: Hay actividades que son repetidas continuamente. Por ejemplo, cuando tocas las cuerdasde una guitarra.

    end while

    Si la condicion1 es evaluada como verdadera (especificada en el renglon1), entonces se ejecutan las instrucciones1 que se encuentran dentro del cuer-po de la estructura. Posteriormente el proceso anterior se repite, se evalua lacondicion1, si es verdadera se ejecutan las instrucciones1. Finalmente, cuan-do la condicion es falsa la repeticion termina. El bloque anterior representadopor un diagrama de flujo se muestra en 1.15.

    Figura 1.15: Diagrama de flujo que muestra el funcionamiento de la estructura repetir mientras.

    La estructura repetir mientras se utiliza cuando:

    El problema a resolver requiere que la condicion sea evaluada primero.

  • DRAFT

    24 CAPITULO 1. ALGORITMOS

    El numero de ciclos que deben ejecutarse para resolver el problema esdesconocido.

    Por ejemplo, suponga que un bibliotecario guarda en una caja un conjuntode libros. El bibliotecario primero verifica que la caja tenga espacio. El bi-bliotecario no sabe cuantos libros entraran en la caja, por lo tanto, el procesose repetira mientras la caja todava tenga espacio. El bloque de instruccionesmediante la estructura de repetir mientras se representa a continuacion.

    1: while hay espacio = verdadero do2: guardar libro;3: end while

    Repetir hasta

    La estructura repetir hasta permite repetir determinadas instruccioneshasta que su condicion sea falsa. Considera el siguiente bloque de instruccio-nes.

    1: repeat2: instrucciones1;3: until condicion1

    Las instrucciones1 dentro del cuerpo de la estructura son ejecutadas pri-mero, por lo que dichas instrucciones se ejecutan por lo menos una vez.Posteriormente la condicion1 es evaluada (especificada en el renglon 3). Sila condicion1 es verdadera, nuevamente se ejecutan las instrucciones1 den-tro del cuerpo de la estructura y posteriormente se vuelve a verificar lacondicion1. El proceso anterior se repite hasta que la condicion es falsa ypor lo tanto la repeticion termina. El bloque anterior representado por undiagrama de flujo se muestra en 1.15.

    La estructura repetir hasta se utiliza cuando:

    El problema a resolver requiere ejecutar determinadas instruccionesprimero y posteriormente la condicion.

    El numero de ciclos que deben ejecutarse para resolver el problema esdesconocido.

  • DRAFT

    1.5. ESTRUCTURAS DE CONTROL 25

    Figura 1.16: Diagrama de flujo que muestra el funcionamiento de la estructura repetir hasta.

    Por ejemplo, suponga que un jugador debe lanzar dos dados hasta obte-ner como suma un valor mayor que 10. Probablemente en el primer intento loconsiga o hasta despues de n intentos. No obstante, tiene que lanzar los dadospor lo menos una vez para constatar la condicion. El bloque de instruccionesmediante la estructura de repetir hasta se representa a continuacion.

    1: repeat2: suma = valor de los dados lanzados;3: until suma 10

    Repetir para

    La estructura de repetir para permite repetir instrucciones un determina-do numero de veces. Es utilizada cuando se conoce el numero de repeticionesque se deben realizar y cuando se desea iterar por cada uno de los elemen-tos de una estructura de datos. Considere el siguiente bloque de instrucciones.

    1: for inicializacion; condicion1; incremento do2: instrucciones1;3: end for

    La estructura repetir para utiliza un contador para realizar el control delnumero de ciclos que se ejecutaran. La instruccion For (renglon 1) se divide

  • DRAFT

    26 CAPITULO 1. ALGORITMOS

    en tres partes: inicializacion, condicion e incremento. La inicializacion y elincremento corresponden a las operaciones de un contador explicadas en laseccion 1.4. Si la condicion1 es verdadera se ejecutan las instrucciones1 quese encuentran dentro del cuerpo de la estructura. Posteriormente el procesoanterior se repite, se evalua la condicion1, si la condicion1 es verdadera seejecutan las instrucciones1 dentro del cuerpo de la estructura. Finalmente,cuando la condicion1 es falsa la repeticion termina. El bloque de instruccio-nes mediante la estructura de repetir para se representa a continuacion.

    Figura 1.17: Diagrama de flujo que muestra el funcionamiento de la estructura repetir para.

    La estructura repetir para se utiliza cuando:

    El numero de ciclos que deben ejecutarse es conocido.

    Se desea iterar por cada uno de los elementos de una estructura dedatos.

    Por ejemplo, suponga que una ama de casa compra los productos quenecesita a partir de una lista de compras. El numero de veces que se repe-tira la accion de comprar un producto es conocido con anticipacion porqueesta determinado por el numero de elementos presentes en la lista. El bloquede instrucciones mediante la estructura de repetir para se representa a con-tinuacion.

    1: for i = 1; i < numero elementos; i = i+ 1 do2: comprar productoi;3: end for

  • DRAFT

    1.6. APILAMIENTO Y ANIDAMIENTO 27

    1.6. Apilamiento y Anidamiento

    El apilamiento se refiere a colocar una estructura de control despues deotra. El siguiente ejemplo muestra en seudocodigo una estructura de controlseleccionar simple y una estructura de control repetir mientras apilada.

    1: if condicion1 then2: instrucciones1;3: end if4: while condicion2 do5: instrucciones2;6: end while

    El anidamiento se refiere a colocar una estructura de control dentro deotra. Cualquier instruccion puede ser sustituida por una estructura de con-trol. En la misma manera en la que bloques de plastico interconectables sonapilados y anidados para crear diversas estructuras (ver figura 1.18).

    Figura 1.18: Un bloque puede ser anidado en lugar de otros bloques, el bloque magenta fue sustituidopor los tres bloques apilados.

    El siguiente ejemplo muestra en seudocodigo una estructura de controlrepetir mientras anidada dentro de una estructura seleccionar simple.

    1: if condicion1 then2: while condicion2 do3: instrucciones1;4: end while5: end if

  • DRAFT

    28 CAPITULO 1. ALGORITMOS

    Por otro lado, el siguiente ejemplo muestra en seudocodigo una estruc-tura de control seleccionar simple anidada dentro de una estructura repetirmientras.

    1: while condicion2 do2: if condicion1 then3: instrucciones1;4: end if5: end while

    Cuando las estructuras de control son apiladas y anidadas forman algo-ritmos de mayor complejidad. En la misma manera que al apilar y anidarbloques de plastico nos permite crear estructuras mas complejas (ver figura1.19).

    Figura 1.19: Los bloques de plastico interconectables son apilados y anidados para crear diversasestructuras.

    1.7. Enfoque descendente

    Una tecnica denominada enfoque descendente (top-down) es una tecni-ca esencial para el diseno de algoritmos correctamente estructurados. En elenfoque descendente se formula una representacion del algoritmo en un al-

  • DRAFT

    1.7. ENFOQUE DESCENDENTE 29

    to nivel de abstraccion (sin especificar detalles) de lo que el algoritmo deberealizar. Posteriormente, la representacion del algoritmo es especificada enun nivel de abstraccion inferior al dividirse en tareas mas detalladas. Cadatarea del algoritmo es redefinida con mayor detalle hasta que la especificacioncompleta es lo suficientemente concreta para validar el algoritmo.

    Considere el siguiente problema:Desarrolle un programa que calcule el promedio de calificaciones de una

    clase considerando un numero arbitrario de calificaciones

    El algoritmo para el promedio de la clase se desarrollara mediante el en-foque descendente. Como se menciono anteriormente, comenzamos con unarepresentacion en seudocodigo en un alto nivel de abstraccion:

    1: Determinar el promedio de la clase;

    La descripcion anterior es una instruccion individual que contiene la funciongeneral del programa. Sin embargo, contiene muy pocos detalles como paraescribir un programa.

    1.7.1. Nivel 1

    A partir de una descripcion general, usualmente muchos algoritmos sepueden dividir de manera logica en tres fases:

    1. Fase de inicializacion que inicializa las variables del algoritmo.

    2. Fase de procesamiento que introduce los valores de los datos y ajustalas variables del algoritmo de manera adecuada.

    3. Fase de terminacion que calcula y despliega los resultado finales.

    La observacion anterior a menudo es todo lo que necesita para realizar elprimer refinamiento. Comencemos con el proceso de refinamiento dividiendola instruccion general en las tres fases anteriormente comentadas y las lista-mos en el orden que se deben ejecutar. El resultado del primer refinamientoes el siguiente:

    1: Inicializar las variables;2: Introducir las calificaciones de la clase, sumarlas y contarlas;

  • DRAFT

    30 CAPITULO 1. ALGORITMOS

    3: Calcular y despliegar el promedio de la clase;

    El refinamiento anterior utiliza unicamente la estructura de secuencia, esdecir, que las instrucciones deben ejecutarse en orden una despues de la otra.El proceso de refinamiento continua dividiendo las instrucciones en series detareas mas pequenas. Para continuar con el siguiente nivel de refinamientose identifican las variables especificas.

    1.7.2. Nivel 2

    En este ejemplo, necesitamos una variable para recibir el valor de cadacalificacion conforme el usuario la introduce que denominamos calificacion,una variable para almacenar la suma de las calificaciones denominada total,una variable que cuente el numero de calificaciones denominada n y unavariable para almacenar el promedio calculado denominada promedio. Lasinstrucciones en un nivel de abstraccion inferior para la primera instruccionInicializar las variables; son las siguientes:

    1: total = 0;2: n = 0;

    Observe que solo las variables total y n deben inicializarse antes de quepuedan utilizarse. Las variables calificacion y promedio no necesitan inicia-lizarse.

    Las instrucciones en un nivel de abstraccion inferior para la instruccionIntroducir las calificaciones de la clase, sumarlas y contarlas; requiere unaestructura de repeticion que introduzca cada calificacion. No sabemos poradelantado cuantas calificaciones se van a procesar por lo que utilizamos unaestructura de control del tipo repetir mientras. Las instrucciones en un nivelde abstraccion inferior para dicha instruccion son las siguientes:

    introducir(calificacion); . posiblemente la banderawhile calificacion 6= 1 do . bandera

    total = total + calificacion; . Acumuladorn = n+ 1; . Contadorintroducir(calificacion); . posiblemente la bandera

    end while

    El usuario ingresa calificaciones una por una y despues de introducir laultima calificacion, entonces el el usuario introduce un valor bandera (1).

  • DRAFT

    1.7. ENFOQUE DESCENDENTE 31

    El algoritmo evalua el valor de calificacion despues de la introduccion decada valor y termina el ciclo cuando el usuario digita el valor 1.

    Las instrucciones en un nivel de abstraccion inferior para la instruccionCalcular y desplegar el promedio de la clase; son las siguientes:

    1: if n 6= 0 then2: propmedio = total/n;3: else4: No hay calificaciones;5: end if

    Observe que cuando se realiza una division entre una expresion cuyo valorpudiera ser cero, se debe evaluar de manera explicita esta posibilidad y ha-cerse cargo de ella de manera apropiada dentro del algoritmo (por ejemplo,despliegue un mensaje de error), en lugar de permitir que ocurra un errorfatal.

    Un algoritmo en seudocodigo utilizando el enfoque descendente es termi-nado cuando este especificado con suficientes detalles como para convertirloen codigo de un lenguaje de programacion. El algoritmo en seudcodigo 2resuelve un problema general de promedios. Este algoritmo se desarrollo des-pues de solo dos niveles de refinamiento. Para algoritmos mas complejos serequerira mas niveles de refinamiento y subdividirlos en mas tareas.

    Algorithm 2 Calcula Promedio de Calificaciones

    1: total = 0;2: n = 0;3: bandera = 1;4: introducir(calificacion); . posiblemente la bandera5: while calificacion 6= bandera do . bandera6: total = total + calificacion; . Acumulador7: n = n+ 1; . Contador8: introducir(calificacion); . posiblemente la bandera9: end while10: if n 6= 0 then11: promedio = total/n;12: else13: No hay calificaciones;14: end if

  • DRAFT

    32 CAPITULO 1. ALGORITMOS

    1.8. Aplicando los Algoritmos

    Para tomar decisiones racionales, necesitamos usar nuestra com-prension de la logica de la toma de decisiones para rutinariamentehacer preguntas que mejoren la calidad de nuestras decisiones. Me-diante nuestras preguntas, traemos el proceso de toma de decisionesa un nivel de opciones conscientes y deliberadas.

    Para el Pensamiento Computacional los algoritmos son conside-rados un practica clave para poder formular problemas y aplicar so-luciones de manera metodica y ordenada. Ahora que ha adquirido losconceptos basicos sobre algoritmos, piense en la forma que se encuen-tran presentes en su vida cotidiana y en su quehacer profesional. Seacreativo, analice el entorno que lo rodea, las personas, sus actividadeso la naturaleza, e identifique donde se aplica el concepto de secuencia,el concepto de decision o el concepto de repeticion.

    Promueva su pensamiento logico y algortmico desde las actividades quetiene que realizar para preparase y asistir a la escuela o al trabajo, hastapara resolver un problema matematico complejo, o en la toma de decisionesque realiza en su lugar de trabajo. Con el tiempo, usted tendra la habilidadpara resolver complejos problemas a partir de ideas estructuradas.

  • DRAFT

    Bibliografa

    Bribiesca, E., Galaviz, J. y Rajsbaum, S.(2010), Computacion, Enciclopediade conocimientos Fundamentales 5 UNAM Siglo XXI, Mexico: UNAM.

    Deitel, H. M. y Deitel P. J. (1994), Como Programar en C/C++, PrenticeHall.

    Garcia, D., Algoritmos, Beauty and Joy of Computing, Fecha de consulta 25de noviembre 2014 de: bjc.berkeley.edu, University of California, Berkeley.

    Wing, J.M. (2006), Computational thinking, Comm of ACM, 49 (3), (pp.33-35).

    Cormen, T. H., Leiserson C. E., Rivest R. L. y Stein C. (1996), Introductionto Algorithms (2nd edicion), MIT Press and McGraw-Hill.

    33

    bjc.berkeley.edu

    ndice generalAlgoritmosIntroduccinAlgoritmos en la computacinRepresentacin de algoritmosDiagramas de flujoSeudocdigo

    VariablesContadoresAcumuladoresBanderas

    Estructuras de controlEstructura de secuenciaEstructura de seleccinEstructura de repeticin

    Apilamiento y AnidamientoEnfoque descendenteNivel 1Nivel 2

    Aplicando los Algoritmos

    Bibliografa