Programación—Cert. 3 especial., viernes 23 de marzo de 2012 (80 mins) Nombre: 1. PAUTA Rol: [25 %] Indique que es lo que imprimen los siguientes programas. a = array([[ 4, 15, 14], [ 9, 6, 7], [ 5, 10, 11], ]) print array([13,6,11])==diag(a) b = arange(1,4) c = array(b.reshape((3,1))) b[2]= c[2][0] print b [ False True True ] Si escribe array también está correcto [ 1 2 3 ] Si escribe array también está correcto 1 z = ones(5) >= 1 z[0:3:2] = False print z a = (12 * ones(12)).reshape(3,4) print a.size [False True False True True] Si escribe array también esta correcto. 1 12 1 1 b = array([[3],[4],[5]]) c = ones(3) print sum(b[2][0] + c) a = ones(12).reshape(12,1)*12 print sum(a.shape) 13 18.0 (18 también es correcto) 1 1 Indique en el recuadro de la derecha qué es lo que retorna el siguiente segmento de código: a = open('arch.txt', 'w') n = 'pro:70-mat:30-fis:80' z = n.split('-') acum = 0 Indicar qué es lo que se escribe en el archivo. for i in range(len(z)): na = z[i].split(':') acum += int(na[1]) if na > 60: if int(na[1]) > 60 a.write(na[0] + ': A\n') else: a.write(na[0] + ': R\n') a.write(str(acum/len(z)) + '\n') a.close() pro: A mat: R fis: A 60 Si escribe lo que aparece arriba con comillas, 2 puntos. TOTAL: 9 Puntos 3 Programación—Cert. 3 especial., viernes 23 de marzo de 2012 (80 mins) PAUTA Nombre: 2. Rol: [35 %] El registro de los gastos comunes entre enero y marzo del 2012 del edificio Jardines de Pitonia se encuentra registrado en el archivo detalle.txt cuyo formato es el siguiente: numero depto:nombre propietario:montos mensuales de enero a marzo 401:Juan Godoy:40000P-20000P-30000P 402:Jose Fuentes:40000P-20000-30000P 501:Josefina Perez:40000-20000P-30000 502:Ena Solis:40000P-20000P-30000 601:Diana Leiva:50000-20000-30000 602:Moises Calvo:40000P-20000P-30000P Cuando el propietario de un departamento paga los gastos comunes se agrega la letra P al final del monto del mes correspondiente (indicando que ya fue pagado). Por ejemplo, en el departamento 402: en enero el monto fue de 40.000 (ya pagado), en febrero 20.000 (no pagado) y marzo 30.000 (ya pagado). a) Implemente la función morosos(detalle) que reciba como parámetro el nombre del archivo con el detalle y retorne una lista con los propietarios que tienen al menos 2 meses impagos. >>> morosos('detalle.txt') ['Josefina Perez', 'Diana Leiva'] b) Implemente la función monto_pagado(detalle, d) que reciba como parámetro el nombre del archivo con el detalle y un número de departamento. La función debe retornar el monto total que el propietario del departamento d ha pagado hasta el momento. >>> monto_pagado('detalle.txt', 502) 60000 def morosos(detalle): def monto_pagado(detalle, d): archivo = open(detalle) archivo = open(detalle) lista = [] suma = 0 for linea in archivo: for linea in archivo: l = linea.strip().split(':') l = linea.strip().split(':') nombre = l[1] if int(l[0]) == d: m = l[2].split('-') nombre = l[1] c = 0 montos = l[2].split('-') for i in m: for i in montos: if 'P' not in i: if i[-1] == 'P': c += 1 suma = suma + int(i[:-1]) Para cada función: if c >= 2: return suma 2: definición lista.append(nombre) 6: correcta implementación return lista 1: retorno correcto TOTAL: 18 puntos Programación—Cert. 3 especial., viernes 23 de marzo de 2012 (80 mins) Nombre: 3. PAUTA Rol: [40 %] El rating televisivo del mes de Enero del canal de televisión de Pitónia se mantiene en un arreglo rating de tamaño 31 ⇥ 24. En cada hora del dı́a se registran los puntos de rating del programa que está siendo emitido. Los puntos de rating van de 0 a 100 y corresponde a una referencia de la cantidad de televidentes que ven un programa de televisión. Por ejemplo si se desea saber cual fue el rating del dı́a 4 de Enero a las 17 horas, se escribirı́a: >>> print rating[3, 17] a) Entre los dı́as 15 y 16 de Enero se transmitieron las olimpiadas de Pitónia. El horario de transmisión fue entre las 10 am y las 17 hrs. Implemente la función olimpiadas(rating, dia_inicio, dia_fin, hora_inicio, hora_fin) que retorne un arreglo con el promedio de los puntos de rating por hora durante los dı́as que se transmitieron las olimpiadas. b) Implemente la función mayores_diferencias(rating, dia) que reciba como parámetro el arreglo de rating y un dia (como entero). La función debe calcular las diferencias de puntos de rating que existen entre cada hora con la anterior en un dia especı́fico. La función debe retornar una tupla con dos valores: la mayor diferencia y la segunda mayor diferencia de puntos de rating encontrada. c) Los grandes auspiciadores sólo invierten en un spot publicitario si durante un rango de horas, algún punto de rating es mayor o igual a una cierta cantidad de puntos de rating. Implemente la función auspiciadores(rating, dia, hora_inicio, hora_fin, umbral) que retorne True si en un dia, entre hora_inicio y hora_fin hay al menos un punto de rating mayor o igual al umbral. De lo contrario, retorna False. d) El programa de televisión mundos repelentes se transmite todos los dı́as en horario nocturno de las 21:00 a 23:59 hrs. El programa ha tenido un excelente rating durante el mes y para los auspiciadores es vital conocer los puntos obtenidos. Implemente la función informe(rating, dia1, dia2) que retorne el promedio de puntos de rating que se obtuvieron entre el dia1 y dia2 en los horarios que fue transmitido el programa. 1 3 1 def olimpiadas(rating, dia_inicio, dia_fin, hora_inicio, hora_fin): suma = zeros(hora_fin - hora_inicio) for i in range(dia_inicio, dia_fin+1): suma += rating[i-1,hora_inicio:hora_fin+1] return suma / len(suma) def mayores_diferencias(rating, dia): 1 6 1 dia = dia - 1 d = rating[dia] dif = abs(dia[1:] - dia[:-1]) max1 = 0 for i in range(len(dif)): if dif[i] >= max1: def auspiciadores(rating, dia, hora_inicio, 1 hora_fin, umbral): r_diario = rating[d,hora_inicio:hora_fin+1] 6 for r in r_diario: 1 if r > umbral: return True return False 1 4 1 def informe(rating, dia1, dia2): r_diario = rating[dia1-1:dia2-1, 21:] return sum(r_diario)/r_diario.size max1 = dif[i] pos1 = i dif[pos1] = -1 max2 = max(dif) return max1, max2 TOTAL: 27 puntos