In [ ]:
"""
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())






IWI131

Programación de Computadores

Sebastián Flores

http://progra.usm.cl/

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

Clase anterior

  • Condicionales

Próximamente...

  • 16 Nov: Actividad 2.
  • 20 Nov: Tarea 1.
  • 23 Nov: Certamen 1.

¿Qué practicaremos hoy?

Ejercicios

  • Diagrama de Flujo
  • Ruteo de funciones
  • Funciones y condicionales

¿Porqué aprenderemos eso?

Ejercicios

  • Diagrama de Flujo
  • Ruteo de funciones
  • Funciones y condicionales

Practicar para aprender y dominar el material.

Profesor, ¿cómo puedo aprender?

Profesor, ¿cómo puedo practicar?

Ejercicios

  • 1 - Ruteo
  • 2 - Funciones con if-else

1.1a Ruteo de código simple

Realice el ruteo del siguiente código en python


In [ ]:
def mi_funcion(x,y,z):
    a = x * y * z
    b = x/2 + y/4 + z/8
    c = a + b
    return c

a = 1.0
b = 2.0
a = mi_funcion(a, b, 3.0)
print a
Globales Locales mi_funcion
ab xyzabc

1.1b Ruteo de código simple

Realice el ruteo del siguiente código en python


In [ ]:
def mi_funcion(x,y,z):
    a = x * y * z
    b = x/2 + y/4 + z/8
    c = a + b
    return c

a = 1
b = 2
a = mi_funcion(a, b, 3)
print a
Globales Locales mi_funcion
ab xyzabc

1.2 Ruteo de código complejo

Realice el ruteo del siguiente código en python


In [ ]:
def f(x, y):
    x = int(x)/4 + float(x)/4 + len(y)
    return x
    
def g(a, b):
    if a==b:
        return a
    else:
        return a*b
    
a = "dos"
b = 2
c = f(2.0, g(a,b))
Globales Locales f Locales g
abc xy ab

1.3 Ruteo de código confuso

Realice el ruteo del siguiente código en python


In [ ]:
def f1(a,b):
    return a-b

def f2(b,a):
    c = f1(a,b)
    return c

a = 3
b = 4
f2(a,b)
Globales Locales f1 Locales f2
ab ab bac

2.1 Problema de la Central de Bombeo

2.1 Problema de la Central Hidroelectrica de Bombeo

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 o igual a 60 USD/MWh y el embalse se encuentra a menos del 90% de su capacidad.

Realice un diagrama de flujo y un programa 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”.

2.1 Problema de la Central Hidroelectrica de Bombeo

2.1 Problema de la Central Hidroelectrica de Bombeo

[...] 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 [...] imprima en pantalla la decisión: “GENERAR”, “BOMBEAR” o “NADA”.


In [ ]:
# 
def accion_central(precio, capacidad):
    if precio>60:
        if capacidad>10:
            print "generar"
        else:
            print "nada"
    else:
        if capacidad<90:
            print "bombear"
        else:
            print "nada"
    

p = float(raw_input("Ingrese precio de electricidad en USD:"))
estanque = float(raw_input("Ingrese porcentaje llenado del embalse [0-100]:"))
accion_central(p,estanque)

2.1 Central Hidroelectrica de Bombeo v.1


In [ ]:
# Solución 1
def accion_central(precio, capacidad):
    if precio>60:
        if capacidad>10:
            print "Generar"
        else:
            print "Nada"
    else:
        if capacidad>90:
            print "Nada"
        else:
            print "Bombear"
    return

p = float(raw_input("Ingrese precio de electricidad en USD: "))
estanque = float(raw_input("Ingrese porcentaje llenado del embalse [0-100]: "))
accion_central(p,estanque)

2.1 Central Hidroelectrica de Bombeo v.2


In [ ]:
# Solución 2
def accion_central(precio, capacidad):
    if precio>60 and capacidad>10:
        print "Generar"
    elif precio<=60 and capacidad<=90:
        print "Bombear"
    else:
        print "Nada"
    return

p = float(raw_input("Ingrese precio de electricidad en USD: "))
estanque = float(raw_input("Ingrese porcentaje llenado del embalse [0-100]: "))
accion_central(p,estanque)

2.3 Problema del Año Bisiesto

Un año es bisiesto si es divisible por 4, excepto si es divisible por 100 y no por 400. Escriba la función es_bisiesto(anno) que reciba el año y regrese True si el año provisto es bisiesto o False si no lo es.

es_bisiesto(1988)
True

es_bisiesto(2011)
False

es_bisiesto(1700)
False

es_bisiesto(2400)
True

2.3 Problema del Año Bisiesto

Un año es bisiesto si es divisible por 4, excepto si es divisible por 100 y no por 400.


In [ ]:
# Solucion de los alumnos
def es_bisiesto(anno):
    # FIX ME
    return False

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)

2.3 Problema del Año Bisiesto


In [ ]:
# Solucion 1
def es_bisiesto(anno):
    if anno % 400 == 0:
        bisiesto = True
    elif anno % 100 == 0:
        bisiesto = False
    elif anno % 4 == 0:
        bisiesto = True
    else:
        bisiesto = False
    return bisiesto

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)

In [ ]:
# Solucion 2
def es_bisiesto(anno):
    if ((anno % 4 == 0 and anno % 100 != 0) or anno % 400 == 0):
        bisiesto = True
    else:
        bisiesto = False
    return bisiesto

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)

In [ ]:
# Solucion 3
def es_bisiesto(anno):
    return ((anno % 4 == 0 and anno % 100 != 0) or anno % 400 == 0)

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)