<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 <header class="w3-container w3-teal">
<img src="images/utfsm.png" alt="" align="left"/>
<img src="images/inf.png" alt="" align="right"/>
</header>
<br/><br/><br/><br/><br/>
IWI131
Programación de Computadores
Sebastián Flores
http
Step1:  <table border="1">
<tr>
<th align="center" colspan="3" width="150">Globales</th> 
<th colspan="6" width="400">Locales mi_funcion</th>
</tr>
<tr>
<td>a</td><td>b</td><td></td>
<td>x</td><td>y</td><td>z</td><td>a</td><td>b</td><td>c</td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
</table>
1.1b Ruteo de código simple
Realice el ruteo del siguiente código en python
Step2:  <table border="1">
<tr>
<th align="center" colspan="3" width="150">Globales</th> 
<th colspan="6" width="400">Locales mi_funcion</th>
</tr>
<tr>
<td>a</td><td>b</td><td></td>
<td>x</td><td>y</td><td>z</td><td>a</td><td>b</td><td>c</td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
</table>
1.2 Ruteo de código complejo
Realice el ruteo del siguiente código en python
Step3:  <table border="1">
<tr>
<th align="center" colspan="3" width="300">Globales</th> 
<th colspan="2" width="200">Locales f</th>
<th colspan="2" width="200">Locales g</th>
</tr>
<tr>
<td>a</td><td>b</td><td>c</td>
<td>x</td><td>y</td>
<td>a</td><td>b</td>
</tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
</table>
1.3 Ruteo de código confuso
Realice el ruteo del siguiente código en python
Step4:  <table border="1">
<tr>
<th align="center" colspan="2" width="200">Globales</th> 
<th colspan="2" width="200">Locales f1</th>
<th colspan="3" width="300">Locales f2</th>
</tr>
<tr>
<td>a</td><td>b</td>
<td>a</td><td>b</td>
<td>b</td><td>a</td><td>c</td>
</tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
</table>
2.1 Problema de la Central de Bombeo
<img src="images/central-de-bombeo.jpg" width="900" alt="" align="middle"/>
2.1 Problema de la Central Hidroelectrica de Bombeo
Una central hidroeléctica de bombeo tiene 2 modos
Step5:  2.1 Central Hidroelectrica de Bombeo v.1
Step6:  2.1 Central Hidroelectrica de Bombeo v.2
Step7:  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.
Step8:  2.3 Problema del Año Bisiesto
<ASSISTANT_TASK:>
Python Code:
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
Explanation: <header class="w3-container w3-teal">
<img src="images/utfsm.png" alt="" align="left"/>
<img src="images/inf.png" alt="" align="right"/>
</header>
<br/><br/><br/><br/><br/>
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?
http://progra.usm.cl/Archivos/certamenes/Libro_prograRB.pdf: Libro de programación.
http://pythonya.appspot.com/: Contenido y posibilidad de practicar en línea.
Profesor, ¿cómo puedo practicar?
Instale python y practique con los ejercicios de la clase.
http://progra.usm.cl/apunte/ejercicios/: Guía de ejercicios.
http://progra.usm.cl/certamenes_antiguos.html: Certámenes antiguos.
Ejercicios
1 - Ruteo
2 - Funciones con if-else
1.1a Ruteo de código simple
Realice el ruteo del siguiente código en python
End of explanation
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
Explanation: <table border="1">
<tr>
<th align="center" colspan="3" width="150">Globales</th> 
<th colspan="6" width="400">Locales mi_funcion</th>
</tr>
<tr>
<td>a</td><td>b</td><td></td>
<td>x</td><td>y</td><td>z</td><td>a</td><td>b</td><td>c</td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
</table>
1.1b Ruteo de código simple
Realice el ruteo del siguiente código en python
End of explanation
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))
Explanation: <table border="1">
<tr>
<th align="center" colspan="3" width="150">Globales</th> 
<th colspan="6" width="400">Locales mi_funcion</th>
</tr>
<tr>
<td>a</td><td>b</td><td></td>
<td>x</td><td>y</td><td>z</td><td>a</td><td>b</td><td>c</td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td height="30"></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
</table>
1.2 Ruteo de código complejo
Realice el ruteo del siguiente código en python
End of explanation
def f1(a,b):
    return a-b
def f2(b,a):
    c = f1(a,b)
    return c
a = 3
b = 4
f2(a,b)
Explanation: <table border="1">
<tr>
<th align="center" colspan="3" width="300">Globales</th> 
<th colspan="2" width="200">Locales f</th>
<th colspan="2" width="200">Locales g</th>
</tr>
<tr>
<td>a</td><td>b</td><td>c</td>
<td>x</td><td>y</td>
<td>a</td><td>b</td>
</tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
</table>
1.3 Ruteo de código confuso
Realice el ruteo del siguiente código en python
End of explanation
# 
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)
Explanation: <table border="1">
<tr>
<th align="center" colspan="2" width="200">Globales</th> 
<th colspan="2" width="200">Locales f1</th>
<th colspan="3" width="300">Locales f2</th>
</tr>
<tr>
<td>a</td><td>b</td>
<td>a</td><td>b</td>
<td>b</td><td>a</td><td>c</td>
</tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
<tr> <td height="30"></td><td></td><td></td><td></td><td></td><td></td><td></td> </tr>
</table>
2.1 Problema de la Central de Bombeo
<img src="images/central-de-bombeo.jpg" width="900" alt="" align="middle"/>
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
<img src="images/centralbombeo.png" width="600" alt="" align="middle"/>
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”.
End of explanation
# 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)
Explanation: 2.1 Central Hidroelectrica de Bombeo v.1
End of explanation
# 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)
Explanation: 2.1 Central Hidroelectrica de Bombeo v.2
End of explanation
# Solucion de los alumnos
def es_bisiesto(anno):
    # FIX ME
    return False
year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)
Explanation: 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.
End of explanation
# 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)
# 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)
# 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)
Explanation: 2.3 Problema del Año Bisiesto
End of explanation
<END_TASK>