Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Así, por ejemplo, la siguiente matriz de dimensión 5x5 tiene 4 elementos no nulos
m = [[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0],
[-1, 0, 0, 0, 0],
[1, 2, 0, 0, 0],
[0, 0, 0, 0, 0]]
d = [[1, 0, 2],
[-1, 2, 0],
[1, 3, 0],
[2, 3, 1]]
dispersa_a_normal: función que hace justo lo contrario que la función anterior. Esta vez
la función debe recibir, además de la matriz d, el número de filas N y de columnas M de
la matriz en formato habitual que se desea construir. (1 punto)
Ejemplo:
Entrada: Salida:
d = [[1, 0, 2], m = [[0, 0, 1, 0, 0],
[-1, 2, 0], [0, 0, 0, 0, 0],
[1, 3, 0], [-1, 0, 0, 0, 0],
[2, 3, 1]] [1, 2, 0, 0, 0],
N = 5 [0, 0, 0, 0, 0]]
M = 5
densidad: recibe como parámetro de entrada una matriz m en formato habitual y devuelve
la proporción de elementos no nulos respecto al número de elementos originales de la
matriz. Así, por ejemplo, si la matriz original era de 5x5 y contiene únicamente 5
elementos no nulos, entonces la proporción es de 0.2. (0.5 puntos)
es_nulo: recibe como parámetro de entrada una matriz d en formato COO, un número de
fila f y un número de columna c. La función devolverá True si el elemento f, c de la
matriz original en formato habitual es nulo (igual a cero). En caso contrario devolverá
False. (0.5 puntos)
Ejemplo:
Entrada: Salida:
d = [[1, 0, 2], False
[-1, 2, 0],
[1, 3, 0],
[2, 3, 1]]
f = 2
c = 0
imprime_matriz: recibe como parámetro de entrada una matriz m, un parámetro esCoo
de tipo booleano y dos parámetros N y M que representan la dimensión original de la
matriz. Si esCoo es True, entonces se asume que m está en formato COO y hay que
transformarla a su formato habitual antes de imprimirla. Si, por el contrario, esCoo es
False, se asume que la matriz está en formato habitual. A continuación, la función
imprimirá la matriz en formato habitual. (0.25 puntos)
Programa principal: escribe un programa principal que pida al usuario un número de
filas N y un número de columnas M. A continuación, deberá leer números del usuario
que los irá guardando en una matriz m de dimensión NxM. El programa deberá pedir a
continuación un número de fila f y un número de columna c y deberá mostrar si dicho
elemento es nulo o no. Para ello, se debe transformar la matriz a formato COO y utilizar
la función es_nulo. Por último, se mostrará la matriz utilizando la función
imprime_matriz. Si la densidad de la matriz es menor o igual de 0.2, se llamará a
imprime_matriz con la matriz en formato COO. En caso contrario se llamará a la función
con la matriz en su formato habitual (0.75 puntos)
Ejemplo:
Introduce número de filas: 5
Introduce número de filas: 5
0 1 0 0 0
0 0 0 4 0
0 0 0 0 0
1 0 0 0 1
0 0 0 0 0
Introduce un número de fila: 3
Introduce un número de columna: 1
El elemento 3,1 es nulo
0 1 0 0 0
0 0 0 4 0
0 0 0 0 0
1 0 0 0 1
0 0 0 0 0
def LeeMatriz(n,m):
matrix=[]
for i in range(n):
lista=[]
for j in range(m):
lista.append(int(input()))
matrix.append(lista)
return matrix
def normal_a_dispersa(matrix):
matrixcoo=[]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j]!=0:
lista=[matrix[i][j],i,j]
matrixcoo.append(lista)
return matrixcoo
def es_nulo(matrix,fila,columna):
nulo=True
for i in range(len(matrix)):
if matrix[i][1]==fila and matrix[i][2]==columna:
nulo=False
if nulo:
print('el elemento',fila,',',columna,' es nulo')
else:
print('el elemento',fila,',',columna,' no es nulo')
def dispersa_a_normal(d,N,M):
matrix=[]
for i in range(N):
fila=[0]*M
matrix.append(fila)
for j in range(len(d)):
matrix[d[j][1]][d[j][2]]=d[j][0]
return matrix
def densidad(matrix):
count=0
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j]!=0:
count=count+1
proporcion=count/(len(matrix)*len(matrix[0]))
return proporcion
palabra = 'llamo'
Nota: El elemento (1,6) de la matriz de caracteres es 'e' y su valor en la asociada es 2, las veces que
'e' aparece en la matriz de caracteres m
def lee_frase():
frase=input('Introduce una frase: ')
frase=frase.split()
return frase
def longitud_maxima(l):
maxima=-1
for palabra in l:
if len(palabra)>maxima:
maxima=len(palabra)
return máxima
def construye_matriz(n,m,b):
matrix=[]
if b:
lista=[0]*m
for i in range(n):
matrix.append(lista)
else:
lista=['-']*m
for i in range(n):
matrix.append(lista)
return matrix
def introduce_palabra(matrix,fila,palabra):
matrix2=[]
for elemento in matrix:
matrix2.append(elemento[:])
for j in range(len(palabra)):
matrix2[fila][-1-j]=palabra[-1-j]
return matrix2
def cuenta_letra(matrix,letra):
count=0
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j]==letra:
count=count+1
return count
def crea_asociada(matrix):
esNum=True
matrix_num=construye_matriz(len(matrix),len(matrix[0]),esNum)
matrix2=[]
for elemento in matrix_num:
matrix2.append(elemento[:])
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j]!='-':
num=cuenta_letra(matrix,matrix[i][j])
matrix2[i][j]=num
return matrix2
def imprime_matriz(matrix):
for fila in matrix:
for elemento in fila:
print('{:3}'.format(elemento), end = '')
print()
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)
CONCESIONARIOS: Id_Concesionario
Nombre_Concesionario
Teléfono
VENDEDORES DNI
Nº Licencia
Teléfono
VENTAS: Matrícula
CLIENTES: DNI
Teléfono
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.3
puntos)
VENDEDORES tiene como clave externa Concesionario que
hace referencia a Id_Concesionario de la tabla CONCESIONARIOS
VENTAS tiene dos claves externas: Vendedor que hace
referencia a DNI de la tabla VENDEDORES y DNI_Cliente que hace
referencia a DNI de la tabla CLIENTES
Ni CONCESIONARIOS ni CLIENTES tienen claves externas
Indica las claves principales elegidas en cada tabla y las relaciones entre tablas.
c1) Queremos obtener un listado con los nombres y apellidos de los clientes que han comprado
un OPEL usado en concesionarios de Barcelona. También queremos que salgan en dicho
listado los nombres y apellidos de los clientes que han comprado un BMW con una cilindrada
de 1800 cc o superior. Ordenaremos el listado por cilindrada, de menos a mayor, que también
mostraremos. (0.5 puntos)
c2) Queremos saber cuántos coches de 2000 cc ha vendido cada vendedor a personas nacidas
antes de 1990 así como el total facturado por cada vendedor con dichas ventas.
(0.7 puntos)