In [4]:
"""
IPython Notebook v4.0 para python 2.7
Librerías adicionales: Ninguna.
Contenido bajo licencia CC-BY 4.0. Código bajo licencia MIT. (c) Sebastian Flores.
"""

# Configuracion para recargar módulos y librerías 
%reload_ext autoreload
%autoreload 2

from IPython.core.display import HTML

HTML(open("style/iwi131.css", "r").read())


Out[4]:






IWI131

Programación de Computadores

Sebastián Flores

http://progra.usm.cl/

https://www.github.com/sebastiandres/iwi131

Clase anterior

  • Diagrama de Flujo:
    • Definiciones
    • Ejemplos.

Clase anterior

Dibuje:

  • Símbolo para procedimiento
  • Símbolo para condicional
  • Símbolo para input
  • Símbolo para definición de variable
  • Símbolo para fin
  • Símbolo para output
  • Símbolo para ejecución
  • Símbolo para inicio

¿Qué aprenderemos?

Ejercicios de Diagrama de flujo

  • Ejemplos de diagrama de flujo.
  • Errores en un diagrama de flujo.
  • Creando un diagrama de flujo.

¿Porqué aprenderemos?

Ejercicios de Diagrama de flujo

  • Ejemplos de diagrama de flujo.
    • Aprenderemos a leer un diagrama de flujo ya existente.
  • Errores en un diagrama de flujo.
    • Aprenderemos errores comunes, para no cometerlos.
  • Creando un diagrama de flujo
    • Aprenderemos a hacer un diagrama de flujo desde cero.

Ejemplos de diagrama de flujo

Conocemos el diagrama de flujo

Debemos determinar que operación se realiza.

Practicando para la actividad

1- Formen parejas.

2- No respondan en voz alta

3- Anoten la respuesta en un papel.

1- Ejemplos de diagrama de flujo

Ejemplo 1.1

  • ¿Cuál es el output generado por el algoritmo, si se ingresa N=1?
    • ¿Y para N=2?
    • ¿Y para N=3?
    • ¿Y para N=4?
  • ¿Que hace el siguiente diagrama de flujo?

1-Ejemplos de diagrama de flujo

Ejemplo 1.1

El algoritmo:

  • Solicita un entero positivo $N$ al usuario
  • Imprime los números pares entre $N$ y $N^2$ (ambos incluidos).

Para N=1, no imprime nada.

Para N=2, imprime los valores 2, 4.

Para N=3, imprime los valores 4, 6, 8.

Para N=4, imprime los valores 4, 6, 8, 10, 12, 14, 16

1-Ejemplos de diagrama de flujo

Ejemplo 1.2

¿Que hace el siguiente diagrama de flujo?

1-Ejemplos de diagrama de flujo

Ejemplo 1.2

El algoritmo:

  • Solicita un número entero positivo al usuario.
  • Realiza un conteo en reversa, imprimiendo cada número.
  • Cuando llega a cero, imprime "despeguen".

Ejemplo:

  • Al ingresar 10, imprime los siguientes valores: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, "despeguen".
  • Al ingresar 0, imprime "despeguen".

Ejemplos de diagrama de flujo

Ejemplo 3

  • ¿Qué sucede si se ingresa el valor 10? ¿Y el valor 25?
  • ¿Que hace el siguiente diagrama de flujo?

Ejemplos de diagrama de flujo

Ejemplo 3

El algoritmo "fizzbuzz":

  • Imprime en pantalla "fizz" si el número es múltiplo de 3
  • Imprime en pantalla "buzz" si el número es múltiplo de 7
  • Imprime en pantalla "fizzbuzz" si el número es múltiplo de 21
  • Imprime en pantalla el número en cualquier otro caso.

Si se ingresa $N=25$ debería generarse el siguiente output:

1, 2, fizz, 4, 5, fizz, buzz, 8, fizz, 10, 11, fizz, 13, buzz, fizz, 16, 17, fizz, 19, 20, fizzbuzz, 22, 23, fizz, 25

Errores en diagrama de flujo

¿Qué error hay en el siguiente diagrama de flujo?

2-Errores en diagrama de flujo

Ejemplo 2.1

¿Qué error hay en el siguiente diagrama de flujo?

Enunciado

El algoritmo:

  • Solicita un entero positivo $N$ al usuario
  • Imprime los números pares entre $N$ y $N^2$
Diagrama de Flujo

2-Errores en diagrama de flujo

Ejemplo 2.1 - Errores:

  • Algoritmo no imprime "n" sino "N".
  • Algoritmo no termina, porque los nùmeros pares no son actualizados.

Ejemplo, al ingresar N=3, imprime la lista: 3, 3, 3, 3, ...

2-Errores en diagrama de flujo

Ejemplo 2.2

¿Qué error hay en el siguiente diagrama de flujo?

Enunciado

El algoritmo:

  • Solicita 2 números enteros positivos al usuario
  • Imprime todos los números enteros que se encuentran entre ambos números, ambos números incluídos.
Diagrama de Flujo

2-Errores en diagrama de flujo

Ejemplo 2.2 - Errores:

  • Algoritmo no realiza lo solicitado si valores no se entregan en orden correcto (N<M).
  • Algoritmo no imprime el último número.
  • Texto "no" extra y sin sentido.
  • Para arreglar basta cambiar:
    • n = min(N,M)
    • n < max(N,M)

3.Creando un diagrama de flujo

Se conoce el enunciado y hay que diseñar el diagrama de flujo

3- Creando diagramas de flujo

Ejemplo 3.1

Realice el diagrama de flujo de un proceso en el cual se solicite al usuario la cantidad de números a ingresar, luego permita ingresar esos números y luego calcule el menor de todos los números. Se debe ingresar al menos un número.

Ejemplos de inputs y su correspondiente output:

  • Input: 3, 10, 100, 5
    • Output correcto: 5
  • Input: 5, 1, 2, 3, 4, 5
    • Output correcto: 1
  • Input: 10, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0
    • Output correcto: 0

3- Creando diagramas de flujo

Ejemplo 3.1

¿Entendimos el problema?

Inputs y outputs

  • Inputs: $N$, $a_1$, $a_2$, ..., $a_N$, con $N\geq1$.
  • Output: el mínimo de los números $a_1$, $a_2$, ..., $a_N$

¿Cómo lo resolvemos?

  • Leer $N$
  • Leer el primer número $a_1$. Fijamos el mínimo $a_{min}$ con el valor de $a_1$.
  • Leer todos los números sucesivos, y actualizar el mínimo si se lee un valor más pequeño.

Observación: es crucial la inicialización de $a_{min}$, sino el algoritmo no funcionaría.

3- Creando diagramas de flujo

Ejemplo 3.1

Realice el diagrama de flujo de un proceso en el cual se solicite al usuario la cantidad de números a ingresar, luego permita ingresar esos números y luego calcule el menor de todos los números. Se debe ingresar al menos un número.

3- Creando diagramas de flujo

Ejemplo 3.2

Realice el diagrama de flujo de un algoritmo que realice lo siguiente:

  • Lea $N$ la cantidad de números a ingresar
  • Lea cada uno de los N valores reales
  • Calcule el promedio aritmético de todos los valores y el promedio geométrico de sólo los valores no negativos.
  • Imprima el promedio aritmético y el promedio geométrico previamente calculados.

Asuma que al menos uno de los números reales entregados es un número positivo.

Ejemplo de inputs y su correspondiente output:

  • Input: 1, 1
    • Ouput: 1, 1
  • Input: 2, 1, -1
    • Output: 0, 1
  • Input: 4, -1, 1, 2, 4
    • Output: 1.5, 2

3- Creando diagramas de flujo

Ejemplo 3.2

¿Entendimos el problema?

Inputs y outputs:

  • Inputs: $N$, $a_1$, $a_2$, ..., $a_N$, con $N\geq1$ y $a_j$ número real.
  • Output: Promedio aritmético de todos los números y promedio geométrico de sólo los números no negativos.

¿Cómo lo resolvemos?

  • Leer $N$
  • Inicializar el promedio aritmetico $a_{arit}=0$
  • Inicializar el promedio geometrico $a_{geo}=1$.
  • Inicializar el número de números en promedio geometrico $n_{geo}=0$.
  • Leer cada número $a_j$, para $j$ entre $1$ y $N$.
    • Siempre sumar $a_j$ a $a_{arit}$
    • Multiplicar $a_{geo}$ únicamente cuando $a_j \geq 0$
  • Dividir $a_{arit}$ por $N$.
  • Sacar la raiz $n-geo$-ésima a $a_{geo}$.
  • Imprimir los valores en pantalla.

Observación: la inicialización de $a_{arit}$ y $a_{geo}$, sino el algoritmo no funcionaría.

3- Creando diagramas de flujo

Ejemplo 3.2

Realice el diagrama de flujo de un algoritmo que realice lo siguiente:

  • Lea $N$ la cantidad de números a ingresar
  • Lea cada uno de los N valores reales
  • Calcule el promedio aritmético de todos los valores y el promedio geométrico de sólo los valores no negativos.
  • Imprima el promedio aritmético y el promedio geométrico previamente calculados.

Asuma que al menos uno de los números reales entregados es un número positivo.

3- Creando diagramas de flujo

Ejemplo 3.3

Parque Eólico Canela

3- Creando diagramas de flujo

Ejemplo 3.3

Un generador eólico convierte la energía cinética del viento en energía eléctrica, lo cual se puede modelar en la siguiente fórmula: $$ W = k \ \rho \ r^2 \ v^3 $$ donde $W$ es la potencia (energía por unidad de tiempo), $k$ es una constante adimensional para cada generador (que tomaremos como 0.8), $\rho$ es la densidad del aire (que tomaremos como $1.2$ $kg/m^3$), $r$ es el radio de las aspas y $v$ es la velocidad del viento.

Sin embargo, el generador se pone en funcionamiento únicamente para velocidades mayores a 3 metros por segundo. Por razones de seguridad, el generador se detiene para velocidades mayores a 25 $m/s^2$.

Realice el diagrama de flujo que solicite el radio en metros y velocidad del viento en kilómetros por hora, y entregue la potencia generada en $Watts$ (esto es $kg \cdot m /s$).

3- Creando diagramas de flujo

Ejemplo 3.3

3- Creando diagramas de flujo

Ejemplo 3.4

3- Creando diagramas de flujo

Ejemplo 3.4

Una central hidroeléctica de bombeo tiene 2 modos: puede vaciar el estanque para generar electricidad, o bien, puede bombear el agua y llenar el estanque. La decisión de generar electricidad o llenar el estanque depende del precio de la electricidad y de la capacidad del estanque. Para un estanque determinado, se genera electricidad cuando el precio de electricidad es mayor a 60 USD/MWh y si el embalse se encuentra a más del 10% de su capacidad. Se consumirá electricidad y se bombeará agua al embalse cuando el precio de electricidad sea menor a 60 USD/MWh y el embalse se encuentra a menos del 90% de su capacidad.

Realice un diagrama de flujo que solicite el precio actual de la electricidad y el porcentaje de llenado del estanque, e imprima en pantalla la decisión: “GENERAR”, “BOMBEAR” o “NADA”.

3- Creando diagramas de flujo

Ejemplo 3.4

4. Bonus

Diagrama de Flujo de "cultura pop":

Algoritmo de la amistad, Dr. Sheldon Cooper, The Big Bang Theory (S02E13).