import math # Importa la libreria math, que permite utilizar operaciones y funciones matematicas

Documentos relacionados
Introducción a Python. Cecilia Manzino

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

Mario A. Castresana Avendaño A41267 Grupo 01

Funciones recursivas

Python. Características Básicas

Universidad de Costa Rica

Funciones como Subprogramas en C++

R/ El programa se ejecuta de la siguiente manera: python lab9.1 (coeficientes del polinomio) (valor incial) Ej: python lab9.

Segundo parcial de Programación 2

Manual rápido para evaluación de series en Python

1. Escriba el siguiente código, compílelo y ejecútelo. Obtiene el resultado esperado? Modifíquelo para que se comporte como debe:

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Informática I (2014-2) Taller Lenguaje C Prof. Sebastián Isaza Departamento de Ingeniería Electrónica Facultad de Ingeniería Universidad de Antioquia

ESTRUCTURAS CONDICIONALES SIMPLES: ESTRUCTURAS CONDICIONALES DOBLES: ESTRUCTURAS CONDICIONALES ANIDADAS:

2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA

FUNDAMENTOS DE PROGRAMACIÓN Asignatura correspondiente al plan de estudios de la carrera de Ingeniería Informática

Introducción a Big Data con Python. Programación en Python. Tipos básicos y colecciones

Elementos de un programa en C

Tutorial de Python orientado a objetos

12 símbolos (13 si se incluye el espacio en blanco)

Tipos de Datos de python (2ª parte):

Ejercicios sobre recursividad

Estructura de datos y Programación

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Para entender la recursividad primero tenemos que entender la recursividad

Cadenas de caracteres

Para el Segundo Parcial

FUNDAMENTOS DE PROGRAMACIÓN TALLER No. 1 Profesor: Alvaro Ospina Sanjuan

GUÍA DE TRABAJO N 1 C# Ing. Néstor Raúl Suarez Perpiñan Página 1 de 13

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

BANCO DE PREGUNTAS. Desde este enlace se puede editar preguntas, organizarlas en categorías, importarlas y exportarlas.

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7

Introducción rápida a la programación (estructurada ) con C++

El programa en JavaScript debe ir encerrado entre la marca script e inicializada la propiedad type con la cadena text/javascript:

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Entrada de datos y salida de resultados.

Recursividad. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Lenguaje C. Estructuración de Datos: Arreglos. Funciones de Entrada y de Salida. Segundo Cuatrimestre 2015

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Tipos de datos y operadores en C++

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

GUIA DE EJERCICIOS N 1 LENGUAJE C# Página 1 de 5. Instructor: Ing. Néstor Raúl Suarez Perpiñan

Nano Taller de Python

El lenguaje C. 1. Identificadores, constantes y variables

Ejercicios Tema 6. Funciones

Funciones y Condicionales Introducción a la Programación

UNADM. Estructura de datos. Guillermo Duran Garcia AL Actividad 2. Identificación de errores en métodos de ordenación

TUTORIAL DE RUBY. Lenguajes de programación Universidad Nacional De Colombia II. Laura P. Cerón M. Camilo A. Dajer P.

Diseño y Análisis de Algoritmos

Base de Datos en Access 2007

GUIA 1: Repaso sobre uso de C#. Funciones, procedimientos y arreglos.

Programación I: Funciones y módulos

UNIDAD 1. Algoritmo se define como un conjunto de instrucciones que la computadora debe seguir para resolver un problema.

Introducción a la programación

Programación (PRG) PRÁCTICA 10. Algoritmos de búsqueda

Fundamentos de Programación

Programación I Recursividad.

Conceptos básicos de Arduino:

Lista de problemas: ciclos y funciones en el lenguaje MATLAB

Cadenas (strings) y Estructuras

Tipos de datos algebraicos

UNIDAD 2 CREAR UNA BASE DE DATOS

Recursividad... un análisis posterior. Aurelio Sanabria Introducción a la programación

Tema 3. Patrones y Definiciones de Funciones

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

GUIA DE EJERCICIOS Nº 02 Estructuras Selectivas

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

D L M M J V S

Cadenas de caracteres. 1. Definición 2. Funciones para manejo de cadenas

Curso de Java Introducción a la Programación I

Preliminares. Tipos de variables y Expresiones

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Trabajo Práctico N 9 Recursividad

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Tema 2. Tipos predefinidos

Introducción al sistema Wolfram Mathematica

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Tipos de datos y clases de tipos

Hoja de ejercicios del Tema 3

PROGRAMACIÓN EN PYTHON 2. Clara Higuera Laboratorio Integrado de Biofísica y Bioinformática Nov-2015

Ingeniería en Desarrollo de software Cuatrimestre 07. Asignatura: Programación.NET 1. Clave:

PROGRAMACIÓN ESTRUCTURADA

funciones printf scanf

SQL SERVER Para ingresar a la ventana de administración del SQL Server, proceda a realizar los siguientes pasos:

Solución: (0,25 por cada pregunta)

Recursividad. Introducción a la programación

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información 1º año

Tema: Estructuras de Selección en C#.

Tema 0 Introducción. Curso de Python Avanzado. Juan Pedro Boĺıvar Puente. Instituto de Astrofísica de Andalucía. Mayo de 2011

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Tema 7: Recursividad

Manual de turbo pascal

26 de Octubre del 2013

Programación en java. Estructuras algorítmicas

Transcripción:

UNIVERSIDAD DE COSTA RICA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 I CICLO 2012 LABORATORIO 8 FUNCIONES Y RECURSIÓN DICCIONARIOS CHRISTIAN CHAVES BEJARANO A81740 1. Modifique el programa para solucionar ecuaciones cuadráticas implementado en los laboratorios 7 y 8 para que utilice funciones. Implemente una función que calcule el discriminante y otra que encuentre y retorne los valores de x 1 y x 2 Mediante el siguiente código desarrollado en lenguaje de Python se soluciona el problema propuesto, en un primer código se propone la solución mediante el ingreso de valores con raw.input() en una segunda propuesta se utiliza la variable sys.argv esto con la finalidad de abarcar los dos tipos de métodos para el ingreso de valores vistos en los laboratorios pasados. A diferencia de los laboratorios anteriores se sustituye las soluciones mediante funciones implementadas a lo largo todo el código por una funcion declarada con deb función() que es llamada cuando es necesita sin necesidad de ingresar de nuevo todo el código que involucra dicha función: Mediante raw input #!/ usr / bin / python # Declara la direccion absoluta del ejecutor de python # -*- coding : utf -8 -*- # Permite agregar tildes y otros simbolos import math # Importa la libreria math, que permite utilizar operaciones y funciones matematicas # Se definen las funcione a utilizar # Se define el metodo que calcula el discriminante def discriminante (a, b, c): discriminante =b*b -(4* a* c) return discriminante # Se define el metodo que calcula la funcion cuadratica def cuadratica (a, b, discriminante ): if discriminante < 0: # Si el discriminante es menor a cero se implementa para raices complejas print " Las raices son complejas " real =( -b /(2* a)) imaginario = math. sqrt ( -1* discriminante ) /(2* a) print " Solucion 1 es x1: \ n %.1f + %.1f j" % ( real, imaginario ) print " Solucion 2 es x2: \ n %.1f - %.1f j" % ( real, imaginario ) print " Las raices son reales " # De otra manera las soluciones seran unicamente reales solucion1 = (-b+ math. sqrt ( discriminante )) /(2* a) solucion2 = (-b- math. sqrt ( discriminante )) /(2* a) 1

print " Solucion 1 es x1:" print solucion1 print " Solucion 2 es x2:" print solucion2 print " Este programa calcula una ecuacion ax2 + bx +c =0 con a distinto de 0" # Breve explicacion del objetivo del presente programa a = raw_ input (" Ingrese el digito a: ") b = raw_ input (" Ingrese el digito b: ") c = raw_ input (" Ingrese el digito c: ") # Se declaran las variables para que sean introducidas por el usuario de forma interactiva if(a. isalpha ()): elif (b. isalpha ()): elif (c. isalpha ()): print " Espere " # Este if and else permite indicar que las variables a,b, c deben ser numeros, si son numeros continua sino indica que debe ser ingresado un numero a= float (a) b= float (b) c= float (c) # Convierte los strings ingresados por el usuario en numeros con decimales float discriminante = discriminante (a, b, c)# Se llama la funcion discriminante print " El discriminante es:" print discriminante # Determina el discrimante y lo imprime... cuadratica (a, b, discriminante ) # Determina la funcion cuadratica e imprime La ejecución del mismo se puede observar en la terminal mediante el comando python nombredelarchivo.py, donde el usuario ingresa los valores deseados a como se le indica en la terminal: Mediante sys argv #!/ usr / bin / python # -*- coding : latin -1 -*- # Permite agregar tildes y otros simbolos import sys # Importa la libreria sys, que permite el uso de variables argv import math # Importa la libreria math, que permite utilizar operaciones y funciones matematicas # Se definen las funcione a utilizar 2

Figura 1: Ecuación cuadrática mediante funciones y raw input # Se define el metodo que calcula el discriminante def discriminante (a, b, c): discriminante =b*b -(4* a* c) return discriminante # Se define el metodo que calcula la funcion cuadratica def cuadratica (a, b, discriminante ): if discriminante < 0: # Si el discriminante es menor a cero se implementa para raices complejas print " Las raices son complejas " real =( -b /(2* a)) imaginario = math. sqrt ( -1* discriminante ) /(2* a) # Se utiliza el metodo discriminante dentro de la funcion cuadratica print " Solucion 1 es x1: \ n %.1f + %.1f j" % ( real, imaginario ) print " Solucion 2 es x2: \ n %.1f - %.1f j" % ( real, imaginario ) print " Las raices son reales " # De otra manera las soluciones seran unicamente reales solucion1 = (-b+ math. sqrt ( discriminante )) /(2* a) #Se utiliza el metodo discriminante dentro de la funcion cuadratica solucion2 = (-b- math. sqrt ( discriminante )) /(2* a) print " Solucion 1 es x1:" print solucion1 print " Solucion 2 es x2:" print solucion2 print " Este programa calcula una ecuacion ax2 + bx +c =0 con a distinto de 0" # Breve explicacion del objetivo del presente programa a= sys. argv [1] b= sys. argv [2] c= sys. argv [3] # Utiliza la variable argv para direccionar los valores ingresados por el 3

usuario while len ( sys. argv )!=4: print " Cantidad de valores incorrectos " print " Uso : %s A B C" %sys. argv [0] sys. exit (1) # Este while obliga al programa a utilizar solo tres valores, sino indica que hay error if(a. isalpha ()): elif (b. isalpha ()): elif (c. isalpha ()): print " Espere " # Este if and else permite indicar que las variables a,b, c deben ser numeros, si son numeros continua sino indica que debe ser ingresado un numero a= float ( sys. argv [1]) b= float ( sys. argv [2]) c= float ( sys. argv [3]) # Convierte los strings ingresados por el usuario en numeros con decimales float discriminante = discriminante (a, b, c)# Se llama la funcion discriminante print " El discriminante es:" print discriminante # Determina el discrimante y lo imprime... cuadratica (a, b, discriminante ) # Determina la funcion cuadratica e imprime La ejecución del mismo se puede observar en la terminal mediante el comando python nombredelarchivo.py a b c, donde los terminos a b c representan las constantes de la función cuadrática deseados por el usuario, los siguientes gráficos muestran la ejecución del programa: Figura 2: Ecuación cuadrática mediante funciones y sys.argv 2. Escriba un programa que encuentre el n-esimo término de la sucesión de Fibonacci: 4

F ib(n) = { 1 si n = {0, 1} F ib(n 1) + F ib(n 2) si n > 1. El presente programa ha sido desarrollado de forma recursiva para el calculo del n-esimo término de la sucesión de Fibonacci, el siguiente código muestra la solución propuesta: #!/ usr / bin / python # -*- coding : latin -1 -*- # Permite agregar tildes y otros simbolos import sys # Importa la libreria sys, que permite el uso de variables argv import math # Importa la libreria math, que permite utilizar operaciones y funciones matematicas print " Este programa encuentra el n- esimo termino de la sucesion Fibonacci " # Breve explicacion del objetivo del presente programa # Funcion Fibonacci mediante recursion a utilizar def Fib (n): if n ==0: # En algunos documentos se indica que si n es igual a cero, el fibonacci es cero sin embargo se especifica otra cosa en el enunciado return 1 elif n ==1: return 1 return Fib (n -1) + Fib (n -2) sys. argv. remove ( parte2. py ) # Dado que la lista incluye el nombre del archivo en la posicion cero este debe ser removido n= sys. argv [0] # Se redefine el termino n en la posicion n if ( n. isalpha ()):# Para solucionar el error si se ingresa una letra en lugar de un entero sys. exit (1) elif len ( sys. argv )!=1: # Solo se debe ingresar un n por lo tanto se corrije el error que involucre que se ingresen mas valores print " Solo se puede calcular para un n- esimo termino " sys. exit (1) # El elif permite indicar el error de que se trate de ordenar menos de dos valores lo cual no tendria sentido # Se calcula el fibonacci de manera recursiva y se imprime n= int (n) Fib = Fib (n) print Fib 5

Este código muestra la utilización de la función sys.argv() mediante el cual se ingresa el valor n deseado para el cálculo de la sucesión de Fibonacci, la siguiente ilustración muestra la funcionabilidad del mismo: Figura 3: Programa que calcula el n-esimo termino de Fibonacci 3. Escriba un programa para administrar información de estudiantes de la Universidad de Costa Rica. El programa almacenará dentro de un diccionario el carné (llave) y el nombre (valor) de los estudiantes y le permitirá a los usuarios listar todos los estudiantes u obtener el nombre de un usuario específico. El programa debe proporcionar al usuario un menú con 3 opciones: a) Introducir la información de un estudiante: Solicita al usuario los datos de un estudiante (nombre y carné) y los almacena en el diccionario. El nombre del estudiante debe almacenarse con la primera letra del nombre y los apellidos en mayúscula y las demás en minúscula, sin importar como lo haya introducido el usuario. b) Ver la información de un estudiante: Solicita al usuario un carné e imprime el nombre asociado o bien un error si el carné no está en el diccionario. c) Listar todos los estudiantes: Imprime el carné y el nombre de todos los estudiantes, ordenado por carné. Cada una de las operaciones del programa debe implementarse en una función independiente. El programa debe tener control de errores básico (deben imprimirse mensajes de error claros si la cantidad de argumentos es incorrecta, si el diccionario está vacío, si no se puede encontrar un carné, etc. Mediante el siguiente código, se propone la solucion al problema descrito, en este caso el manejo de funciones y de diccionariios es de gran importancia de hecho es la base a la solución del problema. Inicialmente se describen cada una de las funciones a agregar estas son: agregar un estudiante, ver si existe un estudiante y por último listar todos los estudiantes incluidos. #!/ usr / bin / python # -*- coding : utf -8 -*- # # Declara la direccion absoluta del ejecutor de python y el descodificador agregar tildes y otros simbolos import sys # Importa la libreria sys, que permite el uso de variables argv 6

import math # Importa la libreria math, que permite utilizar operaciones y funciones matematicas print " Este programa permite administrar informacion de estudiantes de la Universidad de Costa Rica " # Breve explicacion del objetivo del presente programa # Se definen las funciones a utilizar # Se define el metodo para agregar un nuevo estudiante def estudiante ( administrador ): # Se solicita ingresar el carne del nuevo estudiante carne = raw_ input (" Ingrese el carne del estudiante a incluir : ") if len ( carne )!=6: # Se trabaja con 6 digitos el carne porque este es el utilizado por la universidad print "\ nel carne debe ser de seis digitos \ n" # Se solicita que se ingrese el nombre del estudiante nombreestudiante = raw_ input (" Ingrese el nombre del estudiante : ") # Se separa el nombre en partes para analizar cuantos nombres posee nombre = nombreestudiante. split (" ") if len ( nombre ) ==4: # Si posee dos nombres se analiza de la siguiente manera nombre1, nombre2, apellido1, apellido2 = nombreestudiante. split (" ") # Para poner la primera letra en mayuscula y las demas en minuscula nombre1 = nombre1. capitalize () nombre2 = nombre2. capitalize () apellido1 = apellido1. capitalize () apellido2 = apellido2. capitalize () carne = carne. capitalize () nombre = ( nombre1, nombre2, apellido1, apellido2 ) nombreestudiante =. join ( nombre ) # Se une de nuevo el nombre administrador [ carne ]= nombreestudiante # Asignamos cada carne con el nombre respectivo print "\ nse ha incluido el estudiante \ n" # Se imprime indicacion de que se ha incluido el estudiante # Si el estudiante solo posee un nombre se trabaja de la siguiente manera elif len ( nombre ) ==3: nombre1, apellido1, apellido2 = nombreestudiante. split (" ") # Para poner la primera letra en mayuscula y las demas en minuscula nombre1 = nombre1. capitalize () apellido1 = apellido1. capitalize () apellido2 = apellido2. capitalize () carne = carne. capitalize () nombre = ( nombre1, apellido1, apellido2 ) nombreestudiante =. join ( nombre ) administrador [ carne ]= nombreestudiante print "\ nse ha incluido el estudiante \ n" # Indica error si no se ha ingresado el nombre completo print " Debe ingresar el nombre completo del estudiante con un maximo de dos nombres " 7

# Definimos metodo para buscar si existe un estudiante con cierto carne def verestudiante ( administrador ): # Se solicita al usuario que ingrese el carne carnesolicitado = raw_ input (" Ingrese el carne a buscar : ") # Esto es por si el carne es ingresado de la siguiente manera a81740 con la primera letra en minuscula if carnesolicitado. capitalize () in administrador : # Si se encuentra el estudiante se imprime el nombre print "\ ncarne : %s \ nestudiante : %s\ n" %( carnesolicitado, administrador [ carnesolicitado ]) # De lo contrario se indica el error print "\ nel estudiante no se ha encontrado \ n" # Metodo para imprimir la lista de estudiantes def listarnombres ( administrador ): # Si la cantidad de carnes es igual a cero entonces se indica el error if len ( administrador ) ==0: print "\ nno se han agregado estudiantes \ n" # De lo contrario se imprime cada uno de los pares carne nombre en forma ordenada por carnes i=0 while i < len ( administrador. items ()): ordenado = sorted ( administrador. items ()) print ordenado [ i] i +=1 # Se crea el diccionario vacio inicialmente administrador ={} # Para evitar que el programa abandone a= True while a: # Se pregunta al usuario que desea realizar print " Que desea realizar? \ n 1) Ingresar un estudiante nuevo \ n 2) Buscar un estudiante \ n 3) Ver todos los estudiantes \ n" # Se ingresa la opcion opcion = raw_ input (" Escoja un numero y presione enter : ") if opcion. isalpha (): print "\ ndebe ingresar un numero \ n" elif opcion =="1": estudiante ( administrador ) elif opcion =="2": verestudiante ( administrador ) elif opcion =="3": listarnombres ( administrador ) a= False La ejecución del mismo se puede observar en la terminal mediante el comando python nombredelarchivo.py, 8

en este caso se trabaja con la a y d para mostrar la ejecución de ambas formas de ordenamiento: Figura 4: Administrador de estudiantes 9