Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Examen de Informática
1º Ingenierías
23-01-2019
Nombre: Grupo:
1. Escribe un programa que reciba una matriz mat de números reales de nxm, y nos
indique qué columna col tiene más valores por encima del valor medio de la propia
columna. Para ello, implementa las siguientes funciones:
• LeeMatriz: debe leer una matriz mat de nxm de números reales. (0.2 puntos)
• ExtraeColumna: toma la matriz mat y una columna c, y nos devuelva un vector
v con la columna c de la matriz. (0.3 puntos)
• CalculaMedia: nos devuelve la media de los elementos de un vector v. (0.5
puntos)
• CuentaVector: nos dice cuántos valores del vector v son mayores que un
determinado num. (0.5 puntos)
• CuentaMatriz: a partir de una matriz de entrada de mat y utilizando las funciones
anteriores, debe calcular un vector medias de tamaño m (número de columnas de
la matriz de entrada) donde en cada posición j se almacene el valor medio de los
valores de la columna j. También obtendrá otro vector mayores de tamaño m, que
devolverá la función, con el número de elementos que en cada columna sean
mayores que el valor medio correspondiente. (1 puntos)
• IndiceMáximo: dado un vector de entrada de m elementos, debe devolver el
índice que corresponde al mayor de los elementos en el vector. Si hay más de un
valor igual al máximo, devuelve el índice del primero. (0.5 puntos)
El programa principal debe de utilizar las funciones anteriores para: leer una matriz,
obtener la media de sus columnas, contar en cada columna el número de valores que son
mayores que la media de la columna e indicar en qué columna ocurre esto un mayor
número de veces. (0.5 puntos)
Ejemplo: Matriz mat:
1 2 -1 2
2 2 1 2
3 3 0 2
2 3 -2 2
1 2.5 2 2
2 2.5 0 2
Y el vector mayores: 4 2 2 0
def calcula_media(vector):
return sum(vector) / len(vector)
def cuenta_matriz(matriz):
medias = []
mayores = []
for i in range(m):
columna = extrae_columna(matriz, i)
mediaColumna = calcula_media(columna)
medias.append(mediaColumna)
mayores.append(cuenta_vector(columna,
mediaColumna))
return mayores
def indice_maximo(vec):
for i in range(len(vec)):
if vec[i] == max(vec):
return i
n = int(input(‘Número de filas:’)
m = int(input(‘Número de columnas:’)
mat = lee_matriz()
indice = indice_maximo(cuenta_matriz(mat))
print('Columna',indice)
2. Queremos implementar las siguientes funciones:
• LeeMatriz: recibe el número de filas f y columnas c y devuelve una matriz m de
ese tamaño leída por teclado. (0.3 puntos)
• MediaMatriz: recibe una matriz m y devuelve la media aritmética de sus valores.
(0.3 puntos)
• MaxDiferencia: recibe una matriz m y devuelve la mayor diferencia entre todos
sus elementos. (0.5 puntos)
• Compensa: recibe una matriz m y devuelve la matriz modificada de manera que
los elementos mayores que la media, reduzcan su valor un 20% y los menores lo
aumenten un 20%. (0.7 puntos)
• CompensaIterativa: recibe una matriz m, un número real umbral y un número
entero maxIt. Mediante sucesivas llamadas a la función Compensa transformará
la matriz hasta que la mayor diferencia entre dos de sus elementos sea menor que
el umbral dado o se hayan realizado maxIt iteraciones. La función deberá
devolver la matriz resultante, así como el número de iteraciones realizadas. (1
puntos)
• EscribeMatriz: escribe en pantalla una matriz. (0.2 puntos)
Haciendo uso de estas funciones, crearemos un programa que lea una matriz por teclado
(tamaño constante conocido definido en el programa principal) y calcule la matriz
compensada haciendo uso de CompensaIterativa. El umbral (un número real) y el
máximo número de iteraciones (número entero) serán valores que deberá de introducir el
usuario por teclado. Finalmente, se imprimirá la matriz resultante, así como el número de
iteraciones utilizadas para obtener dicha matriz. (0.5 puntos)
def lee_matriz():
print('Vamos a introducir una matriz {}x{}'.format(f, c))
matriz = []
for i in range(f):
fila = input('Introduce los {} elementos de la fila {}:
'.format(c, i)).split()
for j in range(c):
fila[j] = float(fila[j])
matriz.append(fila)
return(matriz)
def media_matriz(m):
suma = 0
cont = 0
for fila in m:
suma += sum(fila)
cont += len(fila)
return suma / cont
def max_diferencia(m):
v = []
for fila in m:
for elem in fila:
v.append(elem)
return max(v) - min(v)
def compensa(m):
media = media_matriz(m)
for i in range(len(m)):
for j in range(len(m[0])):
if m[i][j] < media:
m[i][j] = m[i][j] * 1.2
elif m[i][j] > media:
m[i][j] = m[i][j] * 0.8
return m
def compensa_iterativa(m,u,mxI):
iteraciones = 0
while max_diferencia(m) > u and iteraciones < mxI:
m = compensa(m)
iteraciones += 1
return(m, iteraciones)
def escribe_matriz(m):
for fila in m:
for elem in fila:
print('{:7.2f}'.format(elem), end='')
print()
print()
f=2
c=3
mat = lee_matriz()
umbral = float(input('Introduce el umbral: '))
maxItera = int(input('Introduce el màximo de iteraciones: '))
mRes,numItera = compensa_iterativa(mat, umbral, maxItera)
print('La matriz resultante es: ')
escribe_matriz(mRes)
print('Número de iteraciones:',numItera)
3. Se requiere de una hoja Excel para saber cuánto le va a costar a cada cliente la entrada
al teatro. El precio de la entrada depende de la posición en la que se vaya a sentar dentro
del teatro y la fila que ocupe en dicha posición. Además, los socios del teatro tienen un
descuento del 20% sobre el precio de la entrada.
A partir de los datos de entrada y utilizando funciones de búsqueda, se pide:
______________________________________________________________________
* ClavePrincipal
* Clave Ajena
a) Escribe las posibles claves candidatas de cada una de las tablas. Si hay más de una,
escribe una por línea. (0.3 puntos)
b) Escribe las claves ajenas (externas) que haya en estas tablas. Indica, para cada una, en
qué tabla es clave externa y a qué tabla y atributo (o campo) hace referencia.
(0.2 puntos)
Orden:
Mostrar: X X
O: <11 “ Japón”
c2) Se quiere dar un premio a equipos con una larga y exitosa trayectoria. Por ello,
necesitamos una lista con los equipos que tienen más de 25 años (a fecha 1 de enero de
2019), ordenada de mayor a menor por el número de puestos top 5 que han conseguido
los ciclistas de dicho equipo a lo largo de la historia del mismo (independientemente de
cuándo se hayan cosechado dichos resultados). (0.75 puntos)
Mostrar: X X
< #1/1/1994# <6
Criterios: