Laboratorio 8. Funciones y recursión / Diccionarios

Anuncio
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 8
I CICLO 2012
Nota: 100
Laboratorio 8. Funciones y recursión / Diccionarios
Estudiante: José David Vargas Quirós
Carné: B16945
1. Se modificó el programa creado anteriormente para resolver ecuaciones cuadráticas con soluciones reales
o complejas que recibe los coeficientes mediante la consola de forma no interactiva. Ahora el calculo del
discriminante y de los valores de x1 y x2 se hace mediante dos funciones. Dicho programa está en el archivo
adjunto imaginariosArgvFuncs.py. El nuevo código es el siguiente:
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t math
i m p o r t sys
# S i l a c a n t i d a d de argumentos no es c o r r e c t a se muestra un e r r o r
i f l e n ( sys . argv ) ! = 4 :
p r i n t "Número de argumentos i n c o r r e c t o "
p r i n t " Uso : %s a b c " % ( sys . argv [ 0 ] )
sys . e x i t ( 1 )
#Se
a =
b =
c =
o b t i e n e n l o s c o e f i c i e n t e s d e l v e c t o r sys . argv
f l o a t ( sys . argv [ 1 ] )
f l o a t ( sys . argv [ 2 ] )
f l o a t ( sys . argv [ 3 ] )
# S i a es cero l a e c u a c i ón no es cuadr á t i c a y se muestra un e r r o r
i f a == 0 :
p r i n t " La e c u a c i ón no es cuadr á t i c a "
sys . e x i t ( 1 )
#La f u n c i ón d i s c r i m i n a n t e ( a , b , c ) r e c i b e l o s c o e f i c i e n t e s y a p a r t i r de e l l o s
calcula el discriminante y lo retorna
def d i s c r i m i n a n t e ( a , b , c ) :
d i s c = f l o a t ( b * b−4* a * c )
return disc
#La f u n c i ón s o l s ( a , b , c ) r e c i b e l o s c o e f i c i e n t e s y u t i l i z a a l a f u n c i ón
d i s c r i m i n a n t e ( a , b , c ) para o b t e n e r e l d i s c r i m i n a n t e . Luego c a l c u l a l a s
s o l u c i o n e s y r e t o r n a l a cadena que i n d i c a l a s o l u c i ón .
def sols ( a , b , c ) :
disc = discriminante (a , b , c )
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 8
I CICLO 2012
# S i e l d i s c r i m i n a n t e es menor que 0 se c a l c u l a n l a s s o l u c i o n e s complejas
i f disc < 0:
a1 = (−b ) / ( 2 * a )
b1 = f l o a t ( ( math . s q r t (− d i s c ) ) / ( 2 * a ) )
s o l = " Las s o l u c i o n e s complejas son : \ n %.2 f + %.2 f i \ n %.2 f − %.2 f i " % ( a1 , b1
, a1 , b1 )
# S i e l d i s c r i m i n a n t e es 0 se c a l c u l a l a ú n i c a s o l u c i ón
e l i f d i s c == 0 :
s o l = f l o a t (−b / 2 * a )
s o l = " La s o l u c i o n es %.2 f " % ( s o l )
#Si e l d i s c r i m i n a n t e
else :
s o l 1 = f l o a t (( −b +
s o l 2 = f l o a t (( −b −
s o l = " La s o l u c i ón
return sol
es mayor que 0 se c a l c u l a n l a s 2 s o l u c i o n e s
math . s q r t ( d i s c ) ) / ( 2 * a ) )
math . s q r t ( d i s c ) ) / ( 2 * a ) )
1 es %.2 f \ nLa s o l u c i ón 2 es %.2 f " % ( sol1 , s o l 2 )
#Se imprime l a cadena con l a s o l u c i ón
p r i n t sols (a , b , c )
2. Se creó un programa capaz de calcular el enésimo término de la sucesión de Fibonacci mediante recursión.
El código del archivo adjunto fibonnacci.py es el siguiente:
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t math
i m p o r t sys
# S i l a c a n t i d a d de argumentos no es c o r r e c t a se muestra un e r r o r
i f l e n ( sys . argv ) ! = 2 :
p r i n t "Número de argumentos i n c o r r e c t o "
p r i n t " Uso : %s n " % ( sys . argv [ 0 ] )
sys . e x i t ( 1 )
# E l ú n i c o v a l o r que se r e c i b e es l a p o s i c i ón d e l t é rmino en l a s e r i e
n = i n t ( sys . argv [ 1 ] )
#La f u n c i ón f i b ( n ) u t i l i z a r e c u r s i ón para c a l c u l a r e l v a l o r d e l enésimo t é rmino
def f i b ( n ) :
#La r e c u r s i ón se d e t i e n e cuando n es 1 o 0
i f ( n == 0 ) o r ( n == 1 ) :
return 1
#La f u n c i ón se l l a m a a s í misma m i e n t r a s n sea mayor a 1
else :
r e t u r n f i b ( n−1)+ f i b ( n−2)
#Se imprime e l r e s u l t a d o
print fib (n)
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 8
I CICLO 2012
3. Se creó un programa que permite administrar información básica sobre estudiantes. Dentro de un diccionario
se almacena el carné y el nombre de cada estudiante y es posible añadir estudiantes, ver todos los estudiantes en orden o buscar alguno en específico por número de carné. El programa no utiliza archivos por
lo que una vez cerrado se pierden los datos. Además el programa maneja los errores básicos. El código
utilizado con los comentarios de explicación es el siguiente (archivo diccionario.py):
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t math
i m p o r t sys
#Se crea un d i c c i o n a r i o vac í o
diccionario = {}
# Este c i c l o i n f i n i t o p e r m i t e que é l programa s i g a desplegando e l menú
i n d e f i n i d a m e n t e cade vez que se r e a l i z a una a c c i ón .
while 1:
#Lo p r i m e r o que se hace es m o s t r a r e l menú .
menu = " " "
||||||||||||
| | | MENU | | |
||||||||||||
\ n 1 . Agregar e s t u d i a n t e
\ n 2 . Buscar e s t u d i a n t e
\ n 3. L i s t a r estudiantes
\ n 4. S a l i r
"""
p r i n t menu
#Se s o l i c i t a a l u s u a r i o una o p c i ón d e l menú
o p t = i n t ( r a w _ i n p u t ( " D i g i t e una o p c i ón : " ) )
#La f u n c i ón i n s e r t a r ( ) s o l i c i t a un carn é y nombre a l u s u a r i o y l o e s c r i b e en
el diccionario
def i n s e r t a r ( ) :
carne = " "
nombre = " "
w h i l e carne == " " :
carne = r a w _ i n p u t ( " I n s e r t e e l carn é : " )
w h i l e nombre == " " :
nombre = r a w _ i n p u t ( " I n s e r t e e l nombre : " )
#La cadena con e l nombre i n t r o d u c i d o por e l u s u a r i o se separa y se pone
cada p a l a b r a ( nombre y a p e l l i d o s ) en mayú s c u l a . Luego l a cadena se une
nuevamente .
l i s t a = nombre . s p l i t ( ’ ’ )
cont = 0
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 8
I CICLO 2012
while cont < len ( l i s t a ) :
l i s t a [ cont ] = l i s t a [ cont ] . c a p i t a l i z e ( )
c o n t += 1
nombre = " " . j o i n ( l i s t a )
d i c c i o n a r i o [ carne ] = nombre
#La f u n c i ón v e r s o l i c i t a un carn é a l u s u a r i o y muestra e l nombre d e l
e s t u d i a n t e con ese carn é . S i no hay un e s t u d i a n t e con e l carn é s o l i c i t a d o
se muestra un e r r o r .
def ver ( ) :
carne = r a w _ i n p u t ( " I n s e r t e e l carn é : " )
i f carne i n d i c c i o n a r i o :
p r i n t " %s => %s " % ( carne , d i c c i o n a r i o [ carne ] )
else :
p r i n t "No hay un e s t u d i a n t e con ese carn é . "
#La f u n c i ón l i s t a r ordena e l d i c c i o n a r i o por carn é e imprime todos l o s
e s t u d i a n t e s en p a n t a l l a . S i e l d i c c i o n a r i o e s t á vac í o se imprime un e r r o r
.
def l i s t a r ( ) :
i f l e n ( d i c c i o n a r i o ) == 0 :
p r i n t "No hay e s t u d i a n t e s almacenados . "
else :
keys = d i c c i o n a r i o . keys ( )
keys . s o r t ( )
cont = 0;
w h i l e c o n t < l e n ( keys ) :
p r i n t " %s => %s " % ( keys [ c o n t ] , d i c c i o n a r i o [ keys [ c o n t ] ] )
c o n t += 1
# Esta s e r i e i f / e l s e i n v o c a l a f u n c i ón c o r r e c t a de acuerdo a l a a c c i ón que
e l i g i ó el usuario
i f o p t == 1 :
insertar ()
e l i f o p t == 2 :
ver ( )
e l i f o p t == 3 :
listar ()
e l i f o p t == 4 :
sys . e x i t ( 1 )
else :
p r i n t " La o p c i ón no e x i s t e . Debe d i g i t a r una o p c i ón d e l menú e n t r e 1 y 4 . "
Descargar