Vous êtes sur la page 1sur 7

FACULTAD DE INGENIERA

FUNDAMENTOS DE COMPUTACION Y PROGRAMACION

PEP N2

ASPECTOS GENERALES DE LA PRUEBA

Lea atentamente la prueba y las instrucciones antes de comenzar a desarrollarla.


Queda prohibido hablar con los compaeros(as) durante el desarrollo de la PEP.
La PEP contiene 2 preguntas de desarrollo, con un total de 45 puntos y una exigencia del 60%
Tiene un lmite de tiempo de 90 minutos para responder.
El equipo docente tiene la prohibicin de responder consultas.
El/La estudiante que se sorprenda en actos deshonestos ser calificado con la nota mnima.
Los elementos tecnolgicos deben permanecer apagados y guardados. Queda absolutamente
prohibido el uso todo elemento tecnolgico. Su uso puede significar la nota mnima o sanciones
mayores.
El alumno deber identificarse con su Cdula de Identidad.
Sobre el escritorio slo podr existir lpiz (obligatorio) y goma/lpiz corrector (opcional).
Complete sus datos personales antes de comenzar la evaluacin.
Considere que la evaluacin contempla el cdigo, los comentarios y el seguimiento de las buenas
prcticas de programacin.
Responda cada pregunta, a continuacin de su enunciado, en el espacio que se le entrega para
ello.

NOMBRE RUT SECCIN

1. (30 puntos) Para la carrera de ingeniera forestal en espacios reducidos, una universidad de
nuestro pas requiere calcular el promedio que van acumulando en la carrera sus estudiantes.
Sin embargo, debido a que su sistema informtico es antiguo y rudimentario, este solo entrega
la informacin en forma de dos archivos, cada uno con formato especfico

En primer lugar, est el archivo matricula.txt, correspondiente a un archivo de texto desde


el que se obtiene una nica lista de nmeros, sin abstraccin cuyos elementos representan el
nmero de matrcula de un estudiante y la cantidad de asignaturas que estos han cursado. Por
ejemplo, en la siguiente lista:

[1204, 5, 1205, 2, 1206, 4, 1207, 6]

Se interpreta como que:

El estudiante 1204 tiene calificaciones de 5 asignaturas.


El estudiante 1205 tiene calificaciones de 2 asignaturas.
El estudiante 1206, tiene calificaciones de 4 asignaturas.
El estudiante 1207 tiene calificaciones de 6 asignaturas.

En segundo lugar, est el archivo notas.txt, correspondiente a un archivo de texto, en el


que el sistema va ingresando secuencialmente las calificaciones de cada estudiante, del que
se obtiene una lista de nmeros flotantes, como por ejemplo, la siguiente:

[6.5, 7.0, 6.8, 4.1, 3.8, 1.0, 7.0, 1.6, 7.0, 2.8, 5.5, 2.6, 4.3, 5.8, 3.9,
3.8, 2.9]
25 de junio de 2016

Que se interpreta como que:

Las notas del primer estudiante, son 6.5, 7.0, 6.8, 4.1, 3.8
Las del segundo estudiante son 1.0, 7.0
Las del tercer estudiante son 1.6, 7.0, 2.8, 5.5
Las del cuarto estudiante son 2.6, 4.3, 5.8, 3.9, 3.8, 2.9

A partir de ello, se desea construir un archivo promedio.txt, en el que en cada lnea se entregue
el nmero de matrcula y el promedio de la carrera del estudiante, para las listas anteriores,
el archivo resultante sera:
promedio.txt
1204, 5.64
1025, 4.0
1206, 4.225
1207, 3.883333333333333

Para solucionar el problema, se ha llamado a un ingeniero de la Universidad de Santiago,


quin ha generado para resolver este problema, el siguiente diagrama de abstraccin:

El que puede leerse como:


Las funciones leerMatriculas y leerNotas, reciben como entrada los nombres de
sus respectivos archivos y entregan como salida las listas descritas anteriormente.
La funcin calcularPromedios calcula el promedio de cada estudiante, y los entrega
en una lista de pares [matricula, promedio]
La funcin preparaEscritura, transforma dicha lista de promedios a string para
asegurar que el proceso siguiente realice la escritura.
Finalmente la funcin escribirArchivo, recibe como entrada los datos a escribir y
el nombre del archivo, para construir el archivo de salida y entrega un True, para que
el programa informe cuando el proceso termina exitosamente.
2
25 de junio de 2016

A pesar del brillante diseo de solucin por parte del ingeniero, la aplicacin no ha podido ser
completada, por lo tanto, se le solicita a usted que, a partir de la abstraccin generada,
construya:
A. (13 puntos) La funcin calcularPromedios,
B. (10 puntos) Las funciones prepararEscritura y escribirArchivo.
C. (7 puntos) El bloque principal del programa

Considere que:
Las funciones leerMatriculas y leerNotas entregan listas que siempre son
correctas, es decir, no hay errores de consistencia entre las listas.
Las listas anteriores representan ejemplos y que el programa debe funcionar para
todos los casos que respondan a las reglas anteriores.
Se autoriz a los programadores a definir otras funciones, siempre y cuando estos no
alteren la abstraccin del programa.

TEM A

# Funcin que calcula los promedios para cada estudiante


# Entrada: Lista de matrculas (lista de enteros)
# Lista de notas (lista de flotantes)
# Salida: Lista de promedios (lista de listas)
def calcularPromedios(listaMatriculas, listaNotas):
# Se crea una lista vaca para almacenar los pares
# matricula, promedio
promedios = []
# Se inicializa un contador para recorrer la lista listaMatriculas
contadorMatriculas = 0
# Se inicializa un contador para recorrer la lista listaNotas
contadorIndice = 0
# Mientras el contadorMatriculas no alcance el largo de listaMatriculas
while contadorMatriculas < len(listaMatriculas):
# Se obtiene el nmero de matricula
matricula = listaMatriculas[contadorMatriculas]
# Se obtiene la cantidad de notas
notas = listaMatriculas[contadorMatriculas + 1]
# Se declara un acumulador para el clculo del promedio
acumulador = 0
# Se declara un contador para contar la cantidad de notas por
# estudiante
contadorNotas = 0
# Mientras el contador de notas no alcance el nmero de notas
while contadorNotas < notas :
# Se aade una nueva nota al acumulador
# considerando el ndice de la listaNotas (contadorIndice)
# y no el contadorNotas
acumulador = acumulador + listaNotas [contadorIndice]
3
25 de junio de 2016

# Se incrementa el contador de notas


contadorNotas = contadorNotas + 1
# Se incrementa el contador del ndice
contadorIndice = contadorIndice + 1
# Se calcula el promedio con el acumulador y el nmero de notas
promedio = acumulador / notas
# Se genera el par matrcula, promedio
par = [matricula, promedio]
# Se agrega el promedio a la lista promedios
promedios.append(par)
# Se aumenta el contador de lista listaMatriculas
# el incremento es en dos para saltar la cantidad de notas
contadorMatriculas = contadorMatriculas + 2
# Una vez que el while termina, se entregan los promedios
return promedios

TEM B

# Funcin que prepara los elementos de una lista de pares numricos


# para la escritura en un archivo de texto
# Entrada: Promedio (Lista de pares numricos)
# Salida: Texto a escribir (string)
def prepararEscritura(promedios):
# Se crea un string vaco para guardar el contenido
datosAEscribir = ""
# Se recorre la lista promedios para escribir
for par in promedios :
# Se genera el string "matricula, promedio\n"
texto = str(par[0]) + ", " + str(par[1]) + "\n"
# Se agrega el dato al string que contiene todos
# los pares
datosAEscribir = datosAEscribir + texto
# Se retorna el string con todos los pares como texto
return datosAEscribir

# Funcin que escribe en un archivo de texto


# Entrada: Nombre del archivo a escribir (string)
# Contenido a escribir (string)
# Salida: Confirmacin de la escritura (Booleano)
def escribirArchivo(contenido, nombreArchivo):
# Se abre el archivo en modo de escritura
archivo = open(nombreArchivo, "w")
# Se escriben los datos deseados
archivo.write(contenido)
# Se cierra el archivo
archivo.close()
# Se retorna un True para informar que el proceso

4
25 de junio de 2016

# termin exitosamente
return True

TEM C

# BLOQUE PRINCIPAL

# ENTRADA
# Se lee el archivo "matriculas.txt"
matriculas = leerMatriculas("matriculas.txt")
# Se lee el archivo "notas.txt"
notas = leerNotas("notas.txt")

# PROCESAMIENTO
# Se calculan los promedios de los estudiantes
promedios = calcularPromedios(matriculas, notas)
# Se genera el string para la escritura
contenidoArchivo = prepararEscritura(promedio)

# SALIDA
# Se escribe el archivo "promedio.txt"
exito = escribirArchivo(contenidoArchivo,"promedio.txt")
# Se informa al usuario que el proceso ha terminado exitosamente
if exito :
print "El archivo ha sido escrito exitosamente"

2. (15 puntos) En cada libre, la energa mecnica de un cuerpo se compone de dos elementos:
La energa cintica: que es la energa que posee un cuerpo debido a su movimiento
La energa potencial gravitatoria: que corresponde al potencial que tiene un cuerpo
de caer con una determinada energa debido a la fuerza de gravedad de la tierra.

Como la energa no se crea ni se destruye, slo se transforma, sabemos adems que:

= + =

Adems sabemos que la energa cintica se puede calcular con la siguiente frmula:

()2
=
2

Y que la energa potencial gravitatoria se calcula mediante la frmula:

Si consideramos un objeto que se suelta en = 0 desde una altura de 30000 metros, y que
tiene una masa de 3 kilogramos, y con una aceleracin de gravedad de 9,7938 y no
considerando la fuerza de roce. Se requiere que construya un programa en Python, utilizando

5
25 de junio de 2016

Numpy y Matplotlib que genere el grfico de energa cintica (en color rojo) y energa potencial
(en color azul), en funcin de la altura del cuerpo. Considere adems que:

Cuando el objeto est en su punto ms alto (como no ha sido soltado) se cumple que:

= =
= 0

Cuando el objeto llega al piso (es decir cuando = 0) se cumple que:

()2
= =
2
= 0

Recuerde que todos los grficos deben ir correctamente etiquetados y titulados.

# BLOQUE DE DEFINICIONES

# IMPORTACIN DE MDULOS
import numpy
import matplotlib.pyplot as graficador

# DEFINICIN DE CONSTANTES
# se declara la altura inicial
ALTURA_INICIAL = 30000
# Se declara la aceleracin de gravedad
GRAVEDAD = 9.7938
# Se declara la masa del objeto
MASA_DEL_OBJETO = 3

# BLOQUE PRINCIPAL

# ENTRADA
# NO EXISTEN ENTRADAS

# PROCESAMIENTO
# Se genera un vector de altura para todo el recorrido
vectorAltura = numpy.arange(30000, -1, -1 )
# Se calcula la energa total (que es igual a la energa potencial
# gravitatoria al inicio del recorrido)
energiaTotal = MASA_DEL_OBJETO * ALTURA_INICIAL * GRAVEDAD
# Se calcula la energa potencial gravitatoria para todo el recorrido
vectorEnergiaPotencial = MASA_DEL_OBJETO * vectorAltura * GRAVEDAD
# Se calcula la energa cinctica por balance de energa
vectorEnergiaCinetica = energiaTotal - vectorEnergiaPotencial

# SALIDA
# se genera la recta de energa potencial en funcin de la altura

6
25 de junio de 2016

graficoPotencial = graficador.plot(vectorAltura, vectorEnergiaPotencial)


# se genera la recta de energa cintica en funcin de la altura
graficoCinetica = graficador.plot(vectorAltura, vectorEnergiaCinetica)
# Se le da color a la recta de energa potencial
graficador.setp(graficoPotencial, "color", "b")
# Se le da color a la recta de energa cintica
graficador.setp(graficoCinetica, "color", "r")
# Se etiqueta el eje X
graficador.xlabel("Altura (m)")
# Se etiqueta el eje Y
graficador.ylabel("Energia (j)")
# Se le aade un ttulo al grfico
graficador.title("Energia en funcin de altura")
# Se muestra el grfico por pantalla
graficador.show()