solucion dic 2012

Anuncio
Introducción a la Computación
Examen de diciembre de 2012 con solución
Ejercicio 1:
i Escribir una función tabla que reciba un natural e imprima en pantalla la tabla de productos
(en la fila i columna j debe aparecer i ∗ j). Ejemplo tabla(4) imprime
1
2
3
4
2 3 4
4 6 8
6 9 12
8 12 16
Solución:
def tabla(n):
for i in range (1,n+1):
for j in range (1, n+1):
print i*j,
print "\n",
ii Escribir una función ordenada que reciba una lista de números devuelva True en caso de
que la lista esté ordenada en forma creciente.
Solución (posibilidad recursiva):
def ordenada(l):
if len(l)<=1:
return True
else:
return l[0]<=l[1] and ordenada(l[1:])
Solución (posibilidad iterativa):
def ordenada(l):
ord=True
i=0
while i<len(l)-1 and ord:
if l[i]>l[i+1]:
ord=False
i=i+1
return ord
iii Implementar una función iterativa negativo que reciba una lista de números y devuelva el
primer número negativo que aparece en la lista. Si no hay números negativos debe devolverse 0.
Solución:
def negativo(l):
res = 0
noNeg=True
i=0
while i<len(l) and noNeg:
if l[i]<0:
res=l[i]
noNeg=False
i=i+1
return res
iv Hacer la función anterior recursivamente.
Solución:
def negativo(l):
if l==[]:
return 0
else:
if l[0]<0:
return l[0]
else:
return negativo(l[1:])
Ejercicio 2:
i Escribir en Python un programa que solicite números al usuario hasta que éste ingrese el
valor 0. Luego mostrar en pantalla la suma, el promedio, el máximo y el mı́nimo.
Solución:
print "ingrese números seguidos por la tecla enter, finaliza con 0"
num = input()
suma = num
i=1
maxi = num
mini = num
while num!=0:
num = input()
if num!=0:
suma = suma + num
if num > maxi:
maxi = num
if num < mini:
mini = num
i = i+1
print "sum %d, prom %d, max %d, min %d:" %(suma, suma/i, maxi, mini)
ii Modificar el programa anterior para que termine de solicitar números cuando se ingrese el
primer número repetido.
Solución:
print "ingrese números, finaliza ingresando repetidos"
num = input()
lista=[num]
suma = num
i=1
maxi = num
mini = num
num = input()
while num not in lista:
lista.append(num)
suma = suma + num
if num > maxi:
maxi = num
if num < mini:
mini = num
i = i+1
num = input()
print "sum %d, prom %d, max %d, min %d:" %(suma, suma/i, maxi, mini)
Ejercicio 3: Para representar matrices cuadradas n × n se utiliza un diccionario que bajo la clave
"dim" tiene la dimensión n, bajo la clave (i,j) tiene la entrada de la matriz que se encuentra
en la fila i y columna j (donde i y j son números entre 1 y n).
i Indicar cómo se crea en Python, usando el criterio indicado, la matriz
1 2
3 4
!
Solución:
matriz = {(1,1):1, (1,2):2, (2,1):3, (2,2):4, "dim":2}
ii Implementar una función suma que reciba dos diccionarios que representan matrices y devuelvan el diccionario que representa la matriz suma (puede asumir que las matrices a
sumar tienen la misma dimensión).
Solución:
def suma(mat1, mat2):
matsuma={}
for i mat1.keys():
matsuma[i]=mat1[i]+mat2[i]
matsuma["dim"]=mat1["dim"]
return matsuma
iii Implementar una función quitar que reciba una matriz M (representada por un diccionario)
y un par de naturales i, j y devuelva el diccionario correspondiente a la matriz que resulta
de quitar la fila i y la columna j de la matriz original. (puede asumir que i y j son valores
correctos para la matriz M)
Solución
def quitar(M, i,j):
res = dict(M)
for k in range(1,M["dim"]+1):
res.pop((i,k))
res.pop((k,j))
res[dim]=res[dim]-1
return res
iv Usando la parte anterior implementar una función recursiva determinante que calcule el
determinante de una matriz utilizando el desarrollo por una fila. Recuerde que:
• el determinante de una matriz 1 × 1 es la única entrada de ésta.
• el determinante de cualquier otra matriz n × n puede calcularse (desarrollando por la
primera fila) como
n
X
(−1)1+j a1j determinante(M1j )
j=1
donde a1j es la entrada de la matriz M que se encuentra en la fila 1, columna j y M1j
es el resultado de quitar a la matriz original la primera fila y la j-ésima columna.
Solución
def determinante(M):
if M["dim"]==0:
return 0
elif M["dim"]==1:
return M[(1,1)]
else:
det = 0
for j in range(1,M["dim"]+1):
det=det+(-1)**(1+j)*M[(1,j)*determinante(quitar(M,1,j))
return det
Descargar