3Eva_IT2017_T2 Huracanes en Atlántico Norte

3ra Evaluación I Término 2017-2018. Septiembre 16, 2017 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

TEMA 2 (45 puntos). Para el Atlántico Norte, los meteorólogos registran los parámetros que describen a los huracanes .

La tabla muestra los datos en una matriz M para cada año y nombre asignado al huracan:

El encabezado de la matriz se describe en el diccionario huracanes que contiene el año (clave tipo entero) y los nombres  de huracanes en ese año (texto en tupla).

huracanes = {..., 
             2015:('Ana', ..., 'Kate'),
             2016:('Alex', ..., 'Otto'),
             2017:('Ariene', ..., 'Harvey','Irma', ...), 
             ... }

Los nombres no se repiten y se almacenan en el mismo orden que en la matriz M.

Por la velocidad del viento, los huracanes se categorízan en :

categoria Velocidad del Viento
1 menor a 100 km/h
2 100 a 150 km/h
3 150 a 200 km/h
4 200 a 250 km/h
5 mas de 250 km/h

Desarrolle los siguientes literales:

a) Elabore la función total_marejada(M, cat) que retorna el total de marejadas en metros causadas por los huracanes que tengan categoria cat.

b) Implemente la función indices_año(huracanes, año) que retorna una tupla con los índices de columna donde empieza y termina año en la matriz M.

c) Escriba la función velocidad_superior(M, huracanes, año) que retorna la cantidad de huracanes en año que tienen la Velocidad de Desplazamiento (Vd) superior a la Velocidad de Desplazamiento promedio del año dado como parámetro.

d)  Realice la función ACE(M, huracanes, año) que devuelve la cantidad de energía liberada por todos los huracanes de la temporada año.
Esto se calcula usando:

CantidadEnergia = 10 ^{-4} (VV_{1}^{2} + VV_{2}^{2} \text{+ ... + }VV_{n}^{2} )

Donde VVi es la Velocidad de Viento (en km/h) de cada huracan.

e) Implemente la función lluvia(M, huracanes, nombre_huracan, año) que devuelve la cantidad de lluvia en centímetros (cm) generada por el nombre_huracan en ese año.

Rúbrica: literales a,c y d (11 puntos cada uno), literal b (5 puntos), literal e (7 puntos)

Referencias:
– Irma: ¿cómo y quién decide el nombre de los huracanes?, http://www.bbc.com/mundo/noticias-37591575,
http://www.infobae.com/america/mundo/2017/09/07/por-que-bautizan-a-los-huracanes-con-nombres-de-personas/
– ¿Cómo se clasifican los huracanes en el Atlántico?, https://es.wikipedia.org/wiki/Escala_de_huracanes_de_Saffir-Simpson


Ejemplo:

M = np.array([[20, 30, 19, 15, 18],
              [89,195,120,150,240],
              [65,165,100,110,200],
              [30, 49, 35, 89, 67],
              [ 5, 1.8,  1,  2,  5]])

huracanes = {2016:('Alex', 'Otto'),
             2017:('Ariene', 'Harvey','Irma'),
             }
Se obtiene:
---
categorias:  [1 3 2 2 4]
Marejadas cat[2]:  3.0
indices:  [2, 4]
velocidad superior:  2
Energia liberada:  0.091
lluvia en mm:  89.0

Referencia: Archivo original 3Eva_IT2017.pdf

3Eva_IT2017_T3 Prueba de escritorio – cadenas, listas, índices

3ra Evaluación I Término 2017-2018. Septiembre 16, 2017 /CCPG001

TEMA 3 (10 PUNTOS)
a. [5 puntos] ¿Qué imprime el siguiente código? Justifique su respuesta.

a = 'mensaje'
c = 'abcdefg'

i = len(c)-1
for b  in a:
    print(b*c.index(c[i]))
    i -= 1

b. [5 puntos] ¿Qué imprime el siguiente código? Justifique su respuesta.

L = [5,3,8,2,7]

A = [0]*10
indice = 3
for valor in L:
    if valor < 6:
        indice -= 1
    else:
        indice += 1
    A[indice] = valor

print(set(A))

Referencia: Archivo original 3Eva_IT2017.pdf

3Eva_IT2016_T3 Prueba de escritorio – funciones, listas, caracteres

3ra Evaluación I Término 2016-2017, Septiembre 13, 2016 /CCPG001

Tema 3. (10 puntos)
a) (5 puntos) Considere lo siguiente e indique el resultado al ejecutarlo. Justifique su respuesta.

lista1 = [3,'A',6]
lista2 = ['A']

def funcion (lista1, lista2):
    a = []
    for i in lista1:
        for j in lista2:
            if i != j:
                a.append(str(i) + str(j))
                for x in a[:]:
                    a.append(str(i) + str(j))
    return(a)

print(funcion (lista1, lista2))

b) (5 puntos) Considere lo siguiente e indique el resultado al ejecutarlo. Justifique su respuesta.

def fun(cadena,k):
    L = []
    for elem in set(cadena.split(' ')):
        L.append(elem*k)
    return('#'.join(L))

cadena = 'programar es estupendo estupendo es programar'

print(fun(cadena,2))

Referencia: Archivo original 3Eva_IT2016.pdf

3Eva_IT2016_T2 sensar cultivos con dron

3ra Evaluación I Término 2016-2017, Septiembre 13, 2016 /CCPG001

Tema 2. (50 puntos) Una empresa agrícola ha decidido integrar un dron (avión no tripulado) para monitorear el crecimiento de los cultivos en una de sus plantaciones con dimensión rectangular de MxN .

drone agricola

Referencia: “Drones vuelan para ver el estado de los cultivos”. eluniverso.com. 7 de febrero, 2015.

El dron usado puede de sensar el número de cultivos en una posicion=[i,j] usando una funcion sensarCultivos(posicion) que mueve el dron a la posición dada por una tupla y retorna un valor entero correspondiente al número de cultivos sensados.

Suponga que ésta función ya existe, por lo tanto no necesita ser implementada en el examen.

A partir de la información anterior, implemente las siguientes funciones:

a) generarplantacion(dimension) que recibe una tupla dimension=[M,N] de la plantación y procede a sensar los cultivos utilizando la funcion sensarcultivos(posicion) para cada una de las posiciones. Se obtiene una matriz plantacion con los valores del número de cultivos en cada posicion=[fila,columna].

b) analizarDensidad(plantacion, limite) que calcula una matriz con los grados de crecimiento de la plantación. La función recibe la matriz plantación del literal a y un límite que representa un parametro para determinar la densidad en una posicion. Una posición es considerada con crecimiento ‘BAJO‘ si tiene menos que el límite de cultivos, caso contrario se considera de crecimiento ‘ALTO‘. Al definir la función considere que el valor predeterminado del límite es 4. Ejemplo:

plantacion=[[5,3,2],
            [1,4,8],
            [2,3,1]]

>>analizaDensidad(plantacion)
retorna:
[['ALTO','BAJO','BAJO'],
 ['BAJO','ALTO','ALTO'],
 ['BAJO','BAJO','BAJO']]

c) reporteCrecimento(plantacion,densidad) recibe las matrices de los literales a y b. Suponga que “surco” es equivalente a una fila de la matriz, y “parcela” es equivalente a una columna del surco. La función debe retornar una tupla de tres elementos con la siguiente información:

  • los promedios de los cultivos por surcos
  • las posiciones, relativas a cada surco, de las parcelas que tienen mayor número de cultivos en dicho surco.
  • los promedios de cultivos de las parcelas para los grados de crecimiento ‘ALTO’ Y ‘BAJO’.

Por ejemplo, usando las matrices anteriores:

>>> reporteCrecimiento(plantacion,densidad)
retorna:
([3.33333333, 4.33333333, 2.0], [0, 2, 1], [5.66667, 2.0]

Como referencia un ejemplo de un surco:

surco[0] = [parcela0, parcela1, parcela2]

Referencia: Archivo original 3Eva_IT2016.pdf

3Eva_IT2016_T1 Costo de mensaje

3ra Evaluación I Término 2016-2017, Septiembre 13, 2016 /CCPG001

(Editado para tarea, se manteniene el objetivo de aprendizaje)

Tema 1. mensaje de texto sms(40 puntos) Una empresa de telecomunicaciones determina el costo para enviar un mensaje como el acumulado de los valores de cada palabra diferenciadas por tamaño y tipo:

  • una palabra corta tiene máximo M caracteres,
  • una palabra larga tiene mas de M caracteres,
  • una palabra especial es un verbo en infinitivo, es decir, palabras terminadas en ‘ar‘, ‘er, ‘ir‘ , sin importar su tamaño.

Implemente las siguientes funciones:

a) cargarDatos(nombreArchivo) que recibe el nombre del archivo que en lineas separadas especifica: el tamaño M, el costo de las palabras cortaslargas e infinitivos. La función abrirá el archivo y retorna un diccionario de la forma:

nombreArchivo='costos.txt'
10
0.2
0.5
0.3

>>> cargarDatos('costos.txt')
retorna:
{'M':10, 'corta':0.2, 'larga':0.5, 'infinitivo':0.3}

b) calcularCostos(datos, nombreArchivo) es una función que determina el costo total de un mensaje guardado en un archivo.
La variable datos corresponde al diccionario de datos generado en el literal a) y un nombre de archivo con el texto de varias lineas correspondiente al mensaje guardado. Las palabras de cada línea se encuentran separadas por espacios y un punto ‘.’ al final del mensaje como único signo de puntuación presente. El punto ‘.’ no deberá ser considerado para determinar el costo de esa última palabra.

c) cambiarMensaje(datos, nombreArchivo1, nombreArchivo2) es una función que baja el costo del mensaje al modificarlo mediante:

  • el recorte de las palabras largas a M-1 caracteres y  colocando ‘#‘ al final.
  • el reemplazo el punto final ‘.’ con la palabra especial ‘END’.

La función recibe el diccionario de datos generado en el literal a) y dos nombres de archivos: nombreArchivo1 que contiene el mensaje y nombreArchivo2 que es el el archivo que se crea (guarda) con el mensaje modificado.

Referencia: Archivo original 3Eva_IT2016.pdf

3Eva_IIT2016_T3 Prueba de escritorio, arreglos

3ra Evaluación II Término 2016-2017, Marzo 7, 2017 /CCPG001

TEMA 3 (10 Puntos)

a. Dado el programa descrito a continuación, indique la salida y justifique su respuesta:

import numpy as np

L = [10,12,11,4,8]
M = [4,2,1,2,7]

matriz = np.array([],int)
A = np.append(matriz,L[2:4])
B = np.append(A,M[1:3]).reshape((2,2))
C = (A * B)//2

print(C)

b. Dado el programa descrito a continuación, indique la salida y justifique su respuesta:

L = 'lala'

while len(L) < 20:
    L = L*5

print(L)

Referencia: Archivo original 3raEvaIIT2016.pdf

3Eva_IIT2016_T2 Juntas receptoras de voto

3ra Evaluación II Término 2016-2017, Marzo 7, 2017 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

TEMA 2. (45 Puntos) Para el control de las elecciones presidenciales de un país, Ud. tiene dos matrices con los votos de hombres y mujeres para cada uno de los candidatos:

JRV_H (juntas receptoras del voto, hombres)
JRV_M (juntas receptoras del voto, mujeres)

Las filas representan las juntas receptoras del voto y las columnas representan los candidatos. El número en la celda representa el número de votos para un candidato en una JRV:

También tiene una tupla con los nombres de los candidatos:

candidatos = (‘candidato1’, ‘candidato2’, … ‘candidatoN’)

Suponga que estas matrices son creadas por una función ya existente y retornadas al inicio de su programa principal. Por ejemplo:

JRV_H = creaMatrizHombres()
JRV_M = creaMatrizMujeres()

Nota: NO necesita implementar estas funciones o crear las matrices; esto ya ha sido hecho por usted.

Se le pide lo siguiente:

  1. Crear una función contarVotos(JRV_H, JRV_M) que recibe ambas matrices y devuelve una tupla con los votos totales para cada candidato.
  2. Crear la función segundaVuelta(JRV_H, JRV_M) que recibe ambas matrices y devuelve el valor booleano 'True' si hay segunda vuelta, 'False' si no.
    No hay segunda vuelta si el primer candidato tiene al menos el 40% de los votos registrados en las matrices, y al menos 10 puntos porcentuales de diferencia con el segundo.
  3. Crear la función estadística(JRV_H, JRV_M, candidatos, nombre) que recibe ambas matrices, la tupla con los nombres de los candidatos, el nombre de un candidato y devuelve para ese candidato:
    – una tupla con el porcentaje de votos del total global de votos,
    – porcentaje de votos de hombres del total de votos para ese candidato y
    – porcentaje de votos de mujeres del total de votos para ese candidato.
  4. Crear un programa principal que utilizando las matrices JRV_H, JRV_M y las tres funciones anteriores muestre lo siguiente:
Elecciones Presidenciales
Candidato: Perico De Los Palotes
% votos totales: 41%
% votos hombres: 55%
% votos mujeres: 45%
Candidato: Juan Pueblo
% votos totales: 30%
% votos hombres: 48%
% votos mujeres: 52%
Candidato: Juanita Pueblo
% votos totales: 15%
% votos hombres: 30%
% votos mujeres: 70%
…
SI/NO hay segunda vuelta (dependiendo de si hay o no segunda vuelta)

Ejemplo de matriz para pruebas

# Ingreso
JRV_H = np.array([
    [15,145,230,45],
    [18,187,89,67],
    [109,12,28,18],
    [231,76,67,137],
    ])

JRV_M = np.array([
    [100,240,19,45],
    [50,38,242,67],
    [178,12,164,5],
    [123,23,38,333]
    ])
candidatos = ['Perico','Juan','Juanita','Ana']

Referencia: Archivo original 3raEvaIIT2016.pdf

3Eva_IIT2016_T1 Facturar llamadas telefónicas

3ra Evaluación II Término 2016-2017, Marzo 7, 2017 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

TEMA 1. (45 Puntos)  La información de los clientes de una compañía telefónica ubicada en Guayaquil se encuentra  en el archivo llamado clientes.csv.

El archivo está estructurado de la siguiente manera:

Cédula,NúmeroTeléfono,Sector,MinutosLlamadaNacional|MinutosLlamadaInternacional,Estado

Por ejemplo: clientes.csv

1278112648,04-443288,Norte,12|30,Activo
1278112648,04-383056,Sur,50|15,Activo
1302511926,04-325363,Este,90|12,Activo
1174253723,04-430419,Oeste,30|30,Cortado
2061722895,04-356539,Norte,17|40,Cortado
1729478396,04-437289,Centro,4|2,Activo
1174253723,04-324426,Norte,0|9,Cortado
1174253723,04-283497,Norte,15|27,Activo

Para procesar la información se requiere:

1. Crear una función llamada obtenerClientes(nombreArchivo) la cual recibe como parámetro el nombre del archivo con los clientes de la empresa, y devuelve un diccionario con la siguiente estructura:

{
'1174253723': 
{'04-324426':{'sector':'Norte','nac':0,'estado':'Cortado','inter':9},
'04-430419':{'sector':'Oeste','nac':30,'estado':'Cortado','inter':30}
'04-283497':{'sector':'Norte','nac':15,'estado':'Activo','inter':27}},
'1302511926': 
{'04-325363':{'sector':'Este','nac':90,'estado':'Activo','inter':12}},
'1278112648':
{'04-443288':{'sector':'Norte','nac':12,'estado':'Activo','inter':30},
'04-383056':{'sector':'Sur','nac':50,'estado':'Activo','inter':15}},
'1729478396':
{'04-437289'{'sector':'Centro','nac':4,'estado':'Activo','inter':2}},
'2061722895':
{'04-356539':{'sector':'Norte','nac':17,'estado':'Cortado','inter':40}}
}

2. Crear una función llamada generarFactura(dclientes) la cual recibe como parámetro el diccionario de clientes generado en el literal anterior, y genera un archivo por cada cliente, cuyo nombre es la cédula del cliente, y el contenido corresponde a los valores a pagar por cada cliente. La estructura del archivo es la siguiente:

Archivo 1278112648.txt
Empresa Telefonica de Guayaquil
Cliente :1278112648
Detalle Deuda:
04-443288 nac:0.36 inter:1.5 total:1.86
04-383056 nac:1.5 inter:0.75 total:2.25
Total a Pagar:4.11

Para calcular los valores a pagar considere las siguientes
tarifas:
Tarifa Nacional: 0.03 el minuto
Tarifa internacional:
● Menos de 60 min: 0.05 el minuto
● Entre 60 y 90 min: 0.04 el minuto
● Más de 90 min: 0.03 el minuto

3. Crear una función llamada estadisticaSector(dclientes,sector) que recibe como parámetro el diccionario de clientes generado en el literal 1 y el sector, y devuelve un diccionario con el promedio de minutos de llamadas nacionales e internacionales que han realizado los números telefónicos del sector en estado ‘Activo’.

Por ejemplo:
>>> estadisticaSector(dclientes,”Norte”)

Respuesta:
{'Nacionales': 13.50, 'Internacionales': 28.50}

Referencia: Archivo original 3raEvaIIT2016.pdf