3Eva_IIT2017_T1 Mantenimiento vehículos

3ra Evaluación II Término 2017-2018. Febrero 23, 2018 /CCPG001

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

Tema 1. (40 puntos)  CuidaVehículo.com requiere una aplicación para gestionar el mantenimento vehículos clasificados por tipo: ‘preventivos‘ y ‘correctivos‘ .

Dispone de la tabla de mantenimientos recomendados por tipo para cada parte del vehículo. La tabla contiene los parámetros que considera el número de días y recorrido en Kilómetros desde el último mantenimiento.

El historial registra la placa del vehículo, el cliente, parte, tiempo y recorrido desde el último mantenimiento.

Las tablas son siempre usadas como parámetros de ingreso en las funciones y se almacenan en diccionarios con la estructura mostrada:

dictMantenimiento = {
    'preventivo': [('llantas',  60,  4500),
                   ('bujias',   45,  3000)],
    'correctivo': [('llantas',  90,  6000),
                   ('zapatas', 120, 10000)]
    }

dictHistorial = {
    'GEC-2411': {
        'propietario': 'Eduardo Cueva',
        'registro': [('llantas',  12, 32500),
                     ('zapatas', 180, 500)]
        },
    'GAA-0321': {
        'propietario': 'Andrea Martinez',
        'registro': [('bujias',   40, 500),
                     ('zapatas', 120, 100)]
        }
    }

a) Elabore una función mantenimientos(strPlaca, dictHistorial, dictMantenimiento) que dada una placa de vehículo, realiza una lista de las partes con el tipo de mantenimiento recomendado: ‘preventivo‘, ‘correctivo‘ o ‘ninguno‘.

Solo un tipo de mantenimiento se realiza para cada parte del vehículo, considerando siempre el parámetro de recorrido en Kilómetros. En el caso que una parte supera el parámetro para ambos tipos de mantenimiento, se da prioridad al mantenimiento ‘correctivo‘.

El resultado es una lista de tuplas con las partes y tipo de mantenimiento.

b) Escriba una función semaforo(strPlaca, dictHistorial, dictMantenimiento) que establece un código de colores para cada tipo de mantenimiento: , amarillo: ‘preventivo‘ , rojo: ‘correctivo‘ y verde: ‘ninguno‘.

El resultado es un diccionario que tiene como clave el color y como datos una lista con las partes correspondientes a cada tipo de mantenimiento.

c) Realice una función recomendar(strparte, strtipoMantenimiento, dictHistorial, dictMantenimiento) que entrega una lista de placas de vehículos que requieren el tipo de mantenimiento para una parte dada.

Rúbrica: literal a (15 puntos), literal b (15 puntos), literal c (10 puntos)

Referencia: Archivo original 3Eva_IIT2017.pdf

3Eva_IIT2017_T3 Prueba de escritorio

3ra Evaluación II Término 2017-2018. Febrero 23, 2018 /CCPG001

Tema 3. (10 puntos)

a) Considere las siguente instrucciones en python. Justifique su respuesta de la salida en pantalla.

a = 'ABACDEF'
b = [4,2,1,3,2,2,3]
d = ''
for i in a:
    if i not in d:
        d += i*b[ list(a).index(i)]
    else:
        d = d.replace(i,'')
print(d)

b)  indique la salida por pantalla de las siguientes instrucciones en python. Justifique su respuesta

a = [1,3,5,6,8]
b = []
for i in range(len(a)):
    b.append(i)
    b.insert(i,len(b))
print(b)

Referencia: Archivo original 3Eva_IIT2017.pdf

3Eva_IT2017_T1 Archivos de notas por semestre

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

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

TEMA 1 (45 puntos). Considere que tiene varios archivos cuyos nombres tienen el formato
notas-año-término.csv
y su contenido en cada linea es:

matrícula,materia,nota_parcial,nota_final,nota_mejoramiento,AP/RP

Ejemplos de los archivos:

notas-2015-I.csv

201521342,Fundamentos de Programación,80,95,99,AP
201321454,Economía,12,21,33,RP
201321454,Fundamentos de Programación,45,76,89,AP
…

notas-2013-II.csv

200901456,Física I,80,91,73,AP
201321454,Química,45,57,73,AP
201121372,Economía,73,82,83,AP
201321454,Fundamentos de Programación,11,9,9,RP
 …

Desarrolle los siguientes literales:

a) Elabore la función academico(narchivos) recibe los nombres de los archivos de notas (tupla) para cada semestre y retorna un diccionario de notas con la estructura mostrada.

narchivos = (notas-2013-II.csv, notas-2015-I.csv)

notas =
{201321454: {'2013-II': [('Química', 45, 57, 73, 'AP'),
                         ('Fundamentos de Programación', 
                            11,9,9, 'RP')],
             '2015-I': [('Economía', 12, 21, 33, 'RP'),
                        ('Fundamentos de Programación', 
                            45,76,89, 'AP')],
             ...},
 200901456: {'2013-II': [('Física I', 80, 91, 73, 'AP'),
                         ...],
             ...},
 ...}

b) Implemente la función semestres(notas, matricula) que recibe las notas (diccionario) y un número de matrícula  de un estudiante para entregar todos los semestres en que ha tomado materias (tupla) .

c) Realice la función nota_academico(notas, matricula, materia) que recibe las notas (en diccionario), una matrícula y el nombre de una materia y determina la nota total para esa materia.

La nota total se calcula como el promedio de las dos notas más altas entre parcial, final y mejoramiento. Si el estudiante aún no ha tomado la materia, se presenta como nota cero (0). Si el estudiante en más de una ocasión ha tomado la materia se obtiene la nota con el promedio más alto.

d)  Elabore la función mas_aprobados(notas, semestre) que devuelve el nombre de la materia con mayor cantidad de estudiantes aprobados (estado AP) en el semestre indicado.

Rúbrica: Literal a (10 puntos + 5 puntos de bono) b (5 puntos), c y d (15 puntos)


Ejemplo:

narchivos=('notas-2015-I.csv',
           'notas-2013-II.csv')
matricula = 201321454
materia = 'Fundamentos de Programación'
semestre = '2015-I'
Se obtiene:
--- para 201321454: 
semestres que estudió: ('2015-I', '2013-II')
notas final para Fundamentos de Programación: 82.5
--- En el semestre 2015-I: 
la materia con alto indice de aprobación es: Fundamentos de Programación

Referencia: Archivo original 3Eva_IT2017.pdf

3Eva_IT2017_T2 Huracanes en Atlantico 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 escritorio

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_IIT2016_T3 Prueba de escritorio

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

TEMA 3 (10 Puntos)

1. 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)

1. 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

3Eva_IT2016_T3 Prueba de escritorio

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 .

ccpg001_drones

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