Programaci´on—Cert. 3 especial., viernes 23 de

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