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, listas

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