Categoría: Evaluaciones

Ejercicios de examen

  • 2Eva_IT2016_T3 Funciones búsqueda y suma

    2da Evaluación I Término 2016-2017. Agosto 30, 2016 /CCPG001

    TEMA 3 (10 PUNTOS)

    a) Implemente una función buscar(listaAnidada, valor) que recibe una lista de listas y retorna verdadero o falso (True o False, 1 o 0) si valor existe en listaAnidada.

    b) Utilice la función buscar del literal a para determinar si un valor existe en una lista anidada y mostrar por pantalla ‘Valor si existe’ o ‘Valor no existe’.

    c) Implemente una función que sume o multiplique valores en una lista anidada.

    - Si se invoca a la función únicamente con la lista como argumento, la función debe retornar la suma de los valores.

    - Si se invoca a la función con un segundo argumento con valor ‘multiplicar’, la función debe retornar la multiplicación de los valores.

    - Para cualquier otro valor para el segundo argumento, la función deberá retornar -1.

    Rúbrica: literal a (2.5 puntos), literal b(2.5 puntos), literal c (5 puntos)

    Referencia: Archivo original 2Eva_IT2016.pdf

  • 2Eva_IT2016_T2 Distancias entre ciudades de Ecuador

    2da Evaluación I Término 2016-2017. Agosto 30, 2016 /CCPG001

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

    TEMA 2. (60 PUNTOS) Las distancias entre ciudades del Ecuador conectadas directamente por una carretera están almacenadas en el archivo ‘Ecuador_Distancias.txt‘ con el siguiente formato:

    Ciudad_de_Partida|Ciudad,Distancia|Ciudad,Distancia|...|Ciudad,Distancia
    
    Por ejemplo:
    Ambato|Azogues,280|Babahoyo,212|Pedernales,318
    Azogues|Pedernales,555|Babahoyo,125
    Pedernales|Ambato,318|Azogues,555
    Babahoyo|Ambato,250
    ...

    Implemente las siguientes funciones:

    a) cargarDatos(nombreArchivo) que recibe el nombre del archivo como string y retorna el diccionario distancias con el siguiente formato:

    distancias = {
     'Ambato':{'Azogues':280,'Babahoyo':212,'Pedernales':318},
     'Azogues':{'Pedernales':555,'Babahoyo':125},
     'Babahoyo':{'Ambato':250} 
     }

    b) ciudadesCercanas(distancias, km) donde distancias es el diccionario generado en el literal a) y km es un valor entero positivo . La función retorna una lista de tuplas con todos los pares de ciudades conectadas directamente por una carretera que estén a una distancia menor o igual que el valor de km.
    La tupla incluye los valores de ‘ciudad1’, ‘ciudad2’, ‘distancia’ que las separa. Por ejemplo:

    >>> ciudadesCercanas(distancias,300) 
    retorna: 
    [('Ambato','Azogues',280), ('Ambato','Babahoyo',212), 
     ('Azogues','Babahoyo',125), ('Babahoyo','Ambato',250)]

    c)  guardarCiudadesCercanas(distancias, listaKms) que recibe el diccionario de distancias y una lista con varias distancias en kilómetros, para generar un archivo con las ciudades separadas a máximo dicha distancia. Por ejemplo:

    >>>guardarCiudadesCercanas(distancias, [300, 100, 250]) 
    genera los siguientes tres archivos: 
    ciudades300.txt, 
    ciudades100.txt, 
    ciudades250.txt.

    El archivo ‘ciudades300.txt’ tendría el siguiente contenido:

    Ambato,Azogues,280
    Ambato,Babahoyo,212
    Azogues,Babahoyo,125
    Babahoyo,Ambato,250

     

  • 2Eva_IT2016_T1 Tendencias en Twitter

    2da Evaluación I Término 2016-2017. Agosto 30, 2016 /CCPG001

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

    Tema 1. (30 PUNTOS) Una tabla denominada tendencias, usada en forma de diccionario, contiene una fecha como clave y un conjunto de etiquetas que representan los tópicos o temas que fueron tendencia en la red social de Twitter.
    Por ejemplo:

    >>> tendencias = {
     '08-22-2016':{'#Rio2016', '#BSC', '#ECU'}, 
     '08-25-2016':{'#GYE', '#BRA'}, 
     '08-27-2016':{'#YoSoyEspol', '#GYE', '#BSC'}
     }

    Implemente las siguientes funciones:

    a) cuentaTopics(tendencias, listaFechas) que recibe el diccionario de tendencias y una lista de fechas en formato tipo texto (mm-dd-aaaa).
    La función retorna un nuevo diccionario con la etiqueta o hashtag(#) como clave y el número de días que la etiqueta fue tendencia en los días de la lista de fechas. Por ejemplo:

    >>> cuentaTopics(tendencias,['08-22-2016', '08-25-2016', '08-27-2016']) 
    
    {'#Rio2106':1, 
     '#GYE':2, 
     '#YoSoyEspol':1, 
     '#BSC':2, 
     '#ECU':1, 
     '#BRA':1}

    b) reportaTrending(tendencias, listaFechas) que recibe los datos del literal anterior y muestre en pantalla:
    b.1) Las etiquetas que fueron tendencia en todos los días en listaFechas
    b.2) Las etiquetas que fueron tendencia en al menos uno de los días en listaFechas

    c) reportaTrending(tendencias, fecha1, fecha2) que recibe el diccionario de tendencias y dos fechas (mm-dd-aaaa), para mostrar por pantalla las etiquetas que fueron tendencia o en fecha1 o en fecha2, pero no en las dos.

  • 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

  • 1Eva_IT2015~T4 Prueba de escritorio, listas

    1ra Evaluación I Término 2015-2016. Julio, 2015 /FIEC

    Tema 4. (10 puntos) Analice el código fuente de los programas que se muestran a continuación. Seleccione la respuesta correcta y justifique brevemente su respuesta.

    1. Determine la salida por pantalla del siguiente código:

    X = 2
    y = 5
    z = x + z
    print("La suma es ,z")
    

    a. Error: La variable z no ha sido definida
    b. La suma es ,z
    c. Error: La variable z no se ha inicializado
    d. La suma es 7

    2. Dado el siguiente segmento de código y las listas A y B, seleccione correctamente la salida por pantalla:

    A = [3, 2, 7, 5] 
    B = [31, 5, 4, 8, 12, 3, -9, 6] 
    C = 0 
    N = 3 
    for i in range(0, 4) :
        B[A[i]] = B[A[i]] + N 
        C += B[A[i]] 
    print(C)
    

    a. 27
    b. 33
    c. 6
    d. Ninguna de las anteriores