Categoría: Evaluaciones

Ejercicios de examen

  • 2Eva_IT2018_T2 Pago nomina mensual

    2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

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

    Tema 2. (50 puntos) Una compañía, con miles de empleados y varias sucursales en el país, paga sus salarios por hora clasificadas como:

    - horas regulares (HR),
    - horas fuera de horario normal (HER),
    - fines de semana (HFDS) y
    - feriados (HF).

    El registro de asistencia de los empleados contiene: dia, mes, año, cantidad de horas trabajadas, entre otros mostrados en el archivo ejemplo.

    El archivo inicia con líneas del valor en dólares por hora, los factores de pago por tipo, una linea de encabezado y el detalle de las horas trabajadas por empleado. Por ejemplo:

    VH,10,Valor Hora en ésta compañía
    HR,1,Factor Horas Regulares
    HER,1.21,Factor Horas Extras en dias Regulares (lunes-viernes)
    HFDS,1.37,Factor Horas en Fin De Semana (Sabado o domingo)
    HF,1.39,Factor Horas en Feriado
    Fecha,dia,feriado,ID,nombre,sucursal,ciudad,horas-trabajadas
    ...
    10-Agosto-2018,5,Si,FG848801,Fabricio Granados,River Mall,Cuenca,1
    10-Agosto-2018,5,Si,GH907603,Segunda Vez Zambrano,River Mall,Cuenca,1
    09-Agosto-2018,4,No,FG848801,Fabricio Granados,River Mall,Cuenca,9
    ...
    

    Las horas extras en días regulares se calculan después de la 8va hora de trabajo.

    Si el empleado trabajó en un dia feriado, que también es fin de semana, el factor aplicado es el más alto, es decir feriado.

    Desarrolle las funciones descritas a continuación y un programa para calcular los valores a pagar para cada empleado.

    a) calcularHoras(linea). Recibe una línea del archivo y determina el número de horas trabajadas para cada categoría. El resultado es una tupla con el identificador del empleado, ciudad y horas trabajadas regulares, extras, fines de semana y feriado.

    >>> linea = "09-Agosto-2018,4,No,FG848801,Fabricio Granados, River Mall, Cuenca,9"
    >>> calcularHoras(linea)
    ('FG848801','Cuenca',8,1,0,0)

    b) leerData(nomA). Recibe el nombre del archivo de nómina (nomA) correspondiente a un mes de un año y retorna una tupla de tres elementos: (totales, mes, año).   Totales es un diccionario con la suma en dólares de HR, HER, HFDS y HF trabajados por cada empleado con la siguiente estructura:

    totales = {'Cuenca':
                {'FG848801': {'HR': 530.0, 'HER': 36.30,
                              'HFDS': 0.0, 'HF': 13.89},
                 'GH907603': {'HR': 425.0, 'HER': 48.30,
                              'HFDS': 13.70, 'HF': 13.90}
                 ...
                 }
              'Quito' :
                {...},
              ...
              }
    

    c) generaReporte(nomA). Recibe el nombre del archivo de nómina (nomA) correspondiente a un mes de un año y genera un nuevo archivo reporte para cada ciudad.
    Cada archivo reporte tiene como nombre "ciudadMes-Año.txt" y contiene: cabecera y la siguiente información por cada empleado:

    idEmpleado, total$HorasRegulares, total$HorasExtras(HER+HFDS+HF)

    Rúbrica: literal a (12 puntos), literal b (25 puntos), literal c (13 puntos)

    Referencia: Archivo original 2daEvaI_Term2018.pdf

  • 2Eva_IT2018_T3 Prueba de Escritorio - cadenas, indexación, diccionarios

    2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

    Tema 3. (10 puntos) Indique la salida por pantalla del siguiente código. Justifique su respuesta.

    import numpy as np
    
    letters = np.array(['A', 'Z', 'P', 'B',
                        'E', 'R', 'O', 'M',
                        'B', 'A', 'C', 'D',
                        'Q', 'O'])
    indexes = np.array([54, 23, 60, 13, 29,
                        65, 31, 23, 30, 99,
                        19, 89, 10, 56])
    n1 = letters[indexes>=30]
    
    res= {}
    for x in n1:
        res[x] = res.get(x,0)+1
    
    print(res)
    

    Referencia: Archivo original 2daEvaI_Term2018.pdf

  • 2Eva_IT2018_T1 Niveles seguridad por ciudad

    2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

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

    http://www.ecu911.gob.ec/wp-content/uploads/2017/06/1-37.jpeg
    Sistema ECU911

    Tema 1. (40 puntos) Para analizar los niveles de seguridad en el país, se registran los incidentes por ciudad y tipo delito en un archivo.

    incidentes
    robo vehículo asalto Escandalo vía pública ...
    Quito 540 4523 24 ...
    Guayaquil 605 6345 5 ...
    Cuenca 123 676 133 ...
    Machala 67 1234 412 ...
    ... ... .... .... ...

    Dispone de un modulo "ecu911" con la función cargarDatos(nombrearchivo) que lee el archivo y entrega un diccionario con la las veces que se ha reportado cada tipo de delito para cada ciudad del país en  el siguiente formato:

    diccionario = {
        'Guayaquil':{'robo vehiculo':605, 'asalto':6345, ...},
        'Cuenca':   {'robo vehiculo':123, 'asalto': 676, ...},
        ...
        }
    

    Para  crear el diccionario debe importar el módulo.

    Se requiere implementar lo siguiente:

    a.  Una función tablatitulos(diccionario) que recibe el diccionario descrito y retorna una coleccion:

    titulos = (ciudad, tipodelito)

    ciudad contiene las ciudades del archivo, y tipodelito contiene los tipos considerados en el diccionario, ambos sin duplicados.

    b. La función crearMatriz(diccionario) que usando la información del diccionario crea una matriz con el número de incidentes por ciudad y tipo de delito. La matriz es un arreglo de numpy, semejante al ejemplo:

    >>> matriz
    array([[ 530, 4523,  24, ...],
           [ 605, 6345,   5, ...],
           [ 123,  676, 133,...],
           [  67, 1234, 412, ...],
           ... 
            ])
    

    c. Una función ciudadesMenosSeguras(matriz, titulos, untipo, poblacion) que retorna los nombres de las tres ciudades que tienen el mayor indice per capita de para untipo de delito.

    \text{indice per capita} = \frac{\text{numero de incidentes reportados}}{\text{poblacion de la ciudad}}

    La función recibe la matriz , titulos de los literales anteriores, un tipo de delito  y  la población de cada ciudad del país en un vector, arreglo Numpy.

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

    Referencia: Archivo original 2daEvaI_Term2018.pdf

  • 1Eva_IT2018_T3 Prueba de escritorio, arreglos

    1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001

    Tema 3. (10 puntos) ¿Qué imprime el siguiente código? Justifique su respuesta

    import numpy as np
    arr = np.array([8,3,7,1,5,2,6,4])
    d = 'vwxyz'
    p = ''
    
    for a in range(arr[arr<5].size):
        p += d[a]*a
    
    print(p)
    

    Referencia: Archivo original 1raEvaI_Term2018.pdf

  • 1Eva_IT2018_T2 Desempeño de jugadores mundial futbol

    1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001

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

    Tema 2. (50 puntos) Dispone de una tabla con el desempeño histórico (estadística) de los jugadores equipos (país) que participan en el Mundial de Futbol:

    Los jugadores se encuentran ordenados por equipos siguiendo el orden del listado de países siguiente:

    paises = ['Portugal', 'Brasil', … , 'Argentina']

    Dispone de otra tabla con los equipos (país) y jugadores, conformada como una lista que contiene como elementos otras listas (lista de listas):

    pais_jugadores = [prtgl, 
                      brsl,
                       …, 
                      argntn]

    Cada elemento de la tabla pais_jugadores  contiene los nombres de los jugadores registrados en cada equipo:

     prtgl = ['Cristiano Ronaldo', …]
      brsl = ['Neymar Jr.', … ]
       …
    argntn = [ …, 'Lionel Messi']

    con los datos disponibles en las tablas y usando instruciones de Python, se requiere:

    a. Determinar el país con el promedio de goles más alto.

    \text{promedio de goles} =\frac{\text{goles anotados del país}}{\text{numero de jugadores del país}}

    b. Contar cuántos jugadores españoles tienen una efectividad mayor que la efectividad promedio de España.

    \text{efectividad} = \frac{\text{goles anotados}}{\text{Tiros directo al arco}}

    c. Mostrar la lista con los nombres de los jugadores que tienen más del 76% de posesión del balón .

    d. Mostrar el jugador con mayor porcentaje de pases acertados, indicando nombre y país al que pertenece.

    e. Calcular el promedio mundial por cada una de las características.
    ( “Goles anotados", "...", "% posesión del balón", "% de pases acertados", "Tiros directos al arco" ).

    f. Determine si cada una las características para el jugador "Lionel Messi" están por encima del correspondiente promedio mundial. Muestre el mensaje de respuesta correspondiente:

    “Lionel Messi está/no está por encima del promedio mundial”

    Sugerencia: Separe el trabajo de ubicar los jugadores de la tabla, del procesamiento de los datos de desempeño.
    Para ubicar los jugadores realice una tabla siguiendo las siguientes instrucciones:

    1. A partir de los datos pais_jugadores y las listas de jugadores, bosqueje la tabla que se forma como referencia.

    2. Unifique en un vector jugadores a todos los de cada país.

    3. Realice una tabla en cuyas filas ubique cada pais  con el índice [desde, hasta, cuantos] que indica las posiciones desde/hasta dónde se cuentan los jugadores para cada pais, además de la cantidad de jugadores.

    Ésta última tabla permitirá ubicar a los jugadores por países.

    Para probar los algoritmos, puede usar los datos de las tablas simplificadas para prueba:

    desempeno = np.array([[ 32, 24, 45],
                          [ 90, 84, 91],
                          [ 54, 60, 78],
                          [187,239,112]])
    paises = ['Portugal', 'Brasil', 'Argentina']
    prtgl =  ['Cristiano Ronaldo']
    brsl =   ['Neymar Jr.' ]
    argntn = ['Lionel Messi']
    
    pais_jugadores = [prtgl, brsl, argntn]
    

    Referencia: Archivo original 1raEvaI_Term2018.pdf

  • 1Eva_IT2018_T1 Busca especie con ADN

    1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001

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

    Tema 1. (40 PUNTOS) La compañía ACME S.A. está desarrollando un nuevo método para detectar especies en base a su ADN

    Para representar una especie por su ADN se utiliza una secuencia S compuesta únicamente de las letras A, C, G y T.

    La inversa de una secuencia S se determina con los símbolos en orden inverso a lo presentado. Ejemplo:

    >>> inversa('GATACA') = 'ACATAG'

    Se tienen como datos:

    • Un listado L de secuencias S y
    • Una cadena de referencia R que identifica de forma única a la especie buscada. R no tiene letras repetidas.

    Implemente un programa que muestre todas las secuencias S que pertenecen a la especie buscada y los índices en la inversa de donde aparece la cadena de referencia R .

    Para realizar esta tarea, por cada secuencia S en listado L :

    1. Forme la cadena inversa de la secuencia S

    2. La secuencia S pertenece a la especie buscada si:

    a) la cadena de referencia R aparece exactamente dos veces en la segunda mitad de inversa y
    b) al menos 4 veces en total.

    3. Si S pertenece a la especie buscada, muestre la secuencia S y los índices.

    Ejemplo:

    L = ['ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC', 
         'ATTAGCCGCTATCGA', 
         '…']
    R = 'CG'
    
    SALIDA para Secuencia L[0]:
    Secuencia: ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC
    Inversa:   CGCGATACGTATTGGCCAAATTTATCGTTCGTTTA
    Índices:   [0, 2, 7, 25, 29]
    
    SALIDA para Secuencia L[1]:
    Secuencia: ...
    Índices:   ...

    Referencia: Archivo original 1raEvaI_Term2018.pdf

  • 3Eva_IIT2017_T2 Biblioteca videojuegos

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

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

    Tema 2. (50 puntos) Suponga que tiene el archivo "videojuegos.csv"con información sobre todo el contenido de su biblioteca de videojuegos.

    El archivo tiene la siguiente estructura:

    videojuegos.csv
    Nombre, Año, Consola, Calificación, Tags (separados por ;)
    The Legend of Zelda,86,Famicon Disk System,3.5,RPG;Link;Zelda;Hyrile;Triforce
    Double Dragon,87,Arcade,3.7,Beat-em up; Billy;Jimmy;Puñete
    The Legend of Zelda,88,NES,4.3,RPG;Link;Zelda;Hyrule;Triforce
    ...
    Halo 5:Guardians,15,Xbox One,4,FPS;Master Chief;Cortana;Covenant
    

    Note que un juego aparecerá listado en el archivo una vez por cada consola en la que fué lanzado.
    La categoría del juego se especifica siempre en el primer Tag. Por ejemplo, Double Dragon pertenece a la categoriía Beat-'em up.

    Desarrolle lo siguiente:

    a) La función juegosConsolas(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, una categoría y número de cuatro dígitos representando una década de años. La función retoma una tupla con 2 elementos. El primer elemento es la lista con los valores únicos  de todos lo juegos de esa década para esa categoría. El segundo elemento es la lista con valores únicos de todas las consolas que tienen juegos para esa década y categoría.

    Por ejemplo, para llamar a juegosConsolas('videojuegos.csv','RPG',1980) retorna:

    (['The legend of Zelda',  'Phantasy Star', ...], ['NES', 'Famicon Disk System', ...])

    b) La función crearMatriz(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, el nombre de una categoría de videojuegos y un número de cuatro dígitos representando una década de años. La función deberá leer el archivo y retornar una matriz donde las filas representan los juegos de categoria para la decada , las columnas representan las consolas que tienen juegos de categoria para la decada y las celdas son las calificaciones de cada juego para cada consola. Si un juego no existe para una consola, su calificación deberá ser cero (0).

    c) La función mejoresJuegos(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, el nombre de una categoría de videojuegos y un número de cuatro dígitos representando una década de años. La función deberá generar el archivo “Mejores.txt” con los cinco mejores juegos de la decada para la categoria , ordenados de mayor a menor por su calificación promedio. Para calcular el promedio de un juego, considere únicamente las consolas en las que fue lanzado (no considere los valores cero). El archivo tendrá la siguiente estructura:

    NombreNombre,Promedio_calificación

    d) La función colecciones(nomArchivo, palabras) que recibe el nombre del archivo con la información de los videojuegos y una lista de palabras. La función deberá retornar otra lista de valores únicos con los nombres de todos los juegos que sus Tags contengan todos los términos de la lista palabras .

    Rúbrica: literal a (15 puntos), literal b (17 puntos), literal c (18 puntos), literal d Bono (5 puntos)

    Referencia: Archivo original 3Eva_IIT2017.pdf

  • 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

  • 2Eva_IIT2017_T1 Citas San Valentín

    2da Evaluación II Término 2017-2018. Febrero 14, 2018 /CCPG001

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

    Tema 1. (35 puntos) Para un servicios de citas "san valentín" , se pretende presentar parejas para el día del "amor y la amistad". Los datos de las personas se almacenan en una estructura de datos tipo diccionario: dicPersonas.

    Para conocer la compatibilidad entre dos personas, se utilizan sus características y el índice de Tanimoto  que es un valor entre [0, 1] determinado como:

    Tanimoto(P_1,P_2) = \frac{|caracteristicasP_1 \cap caracteristicasP_2|}{|caracteristicasP_1 \cup caracteristicasP_2|}

    El emparejamiento resulta verdadero cuando: el valor del índice de Tanimoto es superior o igual al nivel de aceptación y la pareja no han tenido citas previas (sin importar su tipo: exitosa o fallida).

    dicPersonas = {
        'p1021': {'nombre': 'Carlos S.',
                  'caracteristicas': {'alegre',
                                      'fumador',
                                      'hacker',
                                      'deportista'},
                  'citas': {'fallidas': ['P1902',
                                         'P2893',
                                         'P2310'],
                            'exitosas': ['P4025',
                                         'P1001']}
                  },
        'p1001': {'nombre': 'Andrea V.',
                  'caracteristicas': {'farrero',
                                      'programador',
                                      'fabuloso',
                                      'deportista'},
                  'citas': {'fallidas': ['P1802'],
                            'exitosas': ['P1021',
                                         'P1002']}
                  }
        }
    

    a) Realice una función hayEmparejamiento(codigoP1, codigoP2, dicpersonas, aceptacion) para encontrar los valores del índice de Tanimoto y emparejamiento.

    La función recibe el código de dos personas, el diccionario de personas (dicpersonas) y el nivel de aceptación mínimo [0,1]  para entregar los resultados en una tupla.

    b) Desarrolle la función imprimirResultados(codigoPersona, dicPersonas, aceptacionMinimo, aceptacionMaximo) que genera un un archivo codigoPersona.txt, con el reporte de compatibilidad de la codigoPersona con las de género opuesto en el diccionario.

    Cada línea del archivo tiene el formato siguiente:

    codigo$Nombre$Caracteristica1,caracteristica2, ... $indiceTanimoto$textoCompatibilidad\n

    Donde textoCompatibilidad es 'aceptar' si el índice de Tanimoto está entre los niveles de aceptación mínimo y máximo, sino tiene la palabra 'rechazar'.

    c) Elabore la  función compatibles(codigoPersona, dicPersonas, aceptacion) que a partir de un codigoPersona y considerando el nivel de aceptación, genera un reporte de emparejamiento en la forma del diccionario "respuesta" .

    El diccionario "respuesta" contiene el nombre, caraterísticas, índice de Tanamoto y cantidad de citas fallidas.
    El parámetro de aceptación tiene valor por defecto de 0.43,

    Ejemplo:
    respuesta = {
        'p1001': {'nombre': 'Andrea V.',
                  'caracteristicas': {'deportista',
                                      'programador',
                                      'fabuloso',
                                      'farrero'},
                  'indice': 0.14,
                  'fallidas': 1
                  }
        }
    

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

    Referencia: Archivo original 2Eva_IIT2017.pdf