Sesión 15: Funciones (1)
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Ejemplos Partes de una función Funciones Introducción a las funciones A continuación…
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Estructuras Básicas de los programas Encabezado Titulo: Autor: Fecha: Descripción: Ingreso de Datos Proceso Informe de resultados
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Se tiene un solo archivo fuente. Todo lo que hace el programa se implementa dentro de la función principal. Sólo hemos declarado "variables locales". Estructuras de los programas vista hasta el momento
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia print(" Ingrese valor: ") x = int(input()) print(" valor: ", x) print(" Ingrese valor: ") y = int(input()) print(" valor: ", y) print(" La suma es: ") z = x+y print(" valor: ", z) Código Repetitivo y engorroso Problemas de esta metodología Repetición de código
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Mejorar el programa de las raices de modo que calcule la raiz cuadrada, la raiz cubica para cualquier valor de x y epsilon. 6 # Ingreso de datos x = float(input("Ingrese el numero: ")) epsilon = float(input("Ingrese el valor de epsilon: ")) # Parte del programa que calcula la raiz cuadrada guesses = 0 low = 0.0 high = max(1.0, x) ans = (high + low)/2.0 while abs(ans**2 - x) >= epsilon: guesses += 1 if ans**2 < x: low = ans else: high = ans ans = (high + low)/2.0 # Despliegue de la raiz cuadrada print() print(ans, 'es aproximadamente la raiz cuadrada de', x ) print('Hubo', guesses, 'intentos')... # Ingreso de datos x = float(input("Ingrese el numero: ")) epsilon = float(input("Ingrese el valor de epsilon: ")) # Parte del programa que calcula la raiz cuadrada guesses = 0 low = 0.0 high = max(1.0, x) ans = (high + low)/2.0 while abs(ans**2 - x) >= epsilon: guesses += 1 if ans**2 < x: low = ans else: high = ans ans = (high + low)/2.0 # Despliegue de la raiz cuadrada print() print(ans, 'es aproximadamente la raiz cuadrada de', x ) print('Hubo', guesses, 'intentos')... Problemas de esta metodología
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia 7... # Parte del programa que calcula la raiz cubica guesses2 = 0 low2 = 0.0 high2 = max(1.0, x) ans2 = (high2 + low2)/2.0 while abs(ans2**3 - x) >= epsilon: guesses2 += 1 if ans2**3 < x: low2 = ans2 else: high2 = ans2 ans2 = (high2 + low2)/2.0 # Despliegue de la raiz cubica print() print(ans2, 'es aproximadamente la raiz cubica de', x ) print('Hubo', guesses2, 'intentos')... # Parte del programa que calcula la raiz cubica guesses2 = 0 low2 = 0.0 high2 = max(1.0, x) ans2 = (high2 + low2)/2.0 while abs(ans2**3 - x) >= epsilon: guesses2 += 1 if ans2**3 < x: low2 = ans2 else: high2 = ans2 ans2 = (high2 + low2)/2.0 # Despliegue de la raiz cubica print() print(ans2, 'es aproximadamente la raiz cubica de', x ) print('Hubo', guesses2, 'intentos') Problemas de esta metodología
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Salida en pantalla y valores finales de las variable del programa anterior. 8 Problemas de esta metodología
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Reutilizar un código ya hecho en otro programa más grande: los nombres de las variables deben ajustarse al nuevo programa copiar el mismo código en todos los lugares donde se necesite si se quiere modificar el código que se copió, será necesario modificar todas las copias 9 Problemas de esta metodología
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Solución al problema: USO DE FUNCIONES Programación repetida. A medida que el problema se hace mas complejo la solución algorítmica tiende a crecer mucho y hacerse mas difícil de entender. Poca reutilización de código. Problemas de esta metodología
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia 2 Al hacer modificaciones es más fácil sobre un módulo en particular que en todo el algoritmo. 3 En cuanto a los resultados, se probarán mucho mejor comprobando si cada módulo da el resultado correcto que si se intenta probar de un golpe todo el programa 1 Al dividir el problema en módulos o partes se comprende más fácilmente Ventajas del uso de funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia MOD 1 MOD 1.1 MOD 1.2 MOD MOD MOD MOD MOD 2 MOD 2.1 MOD 2.2 MOD MOD MOD MOD = = = = = = = Ventajas del uso de funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Ejemplos Partes de una función Funciones Introducción a las funciones Funciones A continuación…
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Conjunto de instrucciones que realizan una acción especifica y que tienen un nombre que las representa. Una función sirve para facilitar la programación, ahorrar espacio, tiempo y para facilitar la portabilidad de los programas. print (“El valor es:”, x) Funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia La forma más razonable de encarar el desarrollo de un programa complicado es aplicar lo que se ha dado en llamar "Programación Top – Down”. Esto implica que, luego de conocer cual es la meta a alcanzar, se subdivide esta en varias tareas. Luego a estas se las vuelve a dividir en otras menores. Y así se continúa hasta llegar a tener un gran conjunto de pequeñas y simples tareas. Luego sólo queda resolver cada una de ellas por separado. Funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia principal() f1() f2() f3() f4() Funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia ______return______return Func1() Func2() Func1() Func2() Func3()----return----Func3()----return______return______return Func3 Func1 Func2 Programa 17 Funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Funciones El uso de funciones permite dividir grandes tareas. Se ahorra programación repetida. Se evita reinventar la rueda gracias a la reutilización de código. Hace que los programas sean más modulares, mas fáciles de leer y mas fáciles de editar.
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Funciones Las funciones permiten agrupar una serie de operaciones de tal manera que se puedan utilizar más tarde sin tener que preocuparnos por cómo están implementadas, simplemente sabiendo lo que harán. El uso de funciones es una práctica común y recomendable ya que permite modularizar nuestro código, simplificando así el desarrollo y la depuración del mismo.
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Programa que recibe el radio de una esfera y calcula el volumen y el área de la superficie de la esfera y los muestra. r = leaRadio (); v= calVolumen (r); a= calArea (r); muestreArVol (a,v); Ejemplo
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Funciones Una función es un segmento de código que ha sido encapsulado con un nombre para ser fácilmente reutilizado en diferentes partes de un programa o en otros programas. 21
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Ejemplos Partes de una función Funciones Introducción a las funciones Partes de una función A continuación…
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Partes de una Función En el momento de crear mi_función debo seguir 2 pasos fundamentales: 1 Definición de la función 2 Llamado a la función
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Definición de una Función def nombre( param_1, param_N ): Palabra reservada que indica que estamos creando una función (definición de una función) def Es el nombre de la función es el nombre que le damos al conjunto de instrucciones que ella representa. nombre Son todos aquellos parámetros que la función necesita para su funcionamiento. Si la función no necesita parámetros se dejan los paréntesis vacios. parametros
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Definición de una Función Definición de una Función: Retomando la función que calcula el máximo de dos números anteriormente mostrada: 25 def nombre de la funcion(lista de parametros formales): cuerpo de la funcion nombre de la función Parametros Cuerpo de la funcion def mini(x, y): if x < y: return x else: return y x y menor mini
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Definición de una Función Una función que calcula el máximo de dos números sería: 26 def mini(x, y): if x < y: return x else: return y Inputs Process Output definición de una función nombre de la función datos de entrada (parámetros formales) dato de salida e interrupción de la función
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia def mi_funcion(i, j): def otra_funcion(): def otra_mas(p) ; def la_ultima_funcion(z, y, x) ; def nombre(lista_Parametros): Ejemplo definición de funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Una vez se ha definido la función, podemos pasar a la fase en el que la funcion ya se puede utilizar. varRetorno = nomb_funcion(variables) Para hacer que las instrucciones contenidas en una función, se ejecuten en determinado momento, no es necesario más que escribir su nombre como una línea de sentencia en el programa. raiz=sqrt(a) print (¨el valor es:¨, val ) 2 Llamado a la función
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia 29 Convencionalmente los nombres de las funciones se escriben en minúscula y siguen las reglas de las variables, se distinguen de las variables porque van seguidas de parentesis. Llamado a la función
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Ejemplos Partes de una función Funciones Introducción a las funciones Ejemplos A continuación…
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Funciones en Python Ejemplo 4 – Recapitulando un poco: Dado el siguiente código: ¿Cuales serán los valores correspondientes a las variables a, b, c, d y e? ¿Cuál será la salida en pantalla del programa? 31 def mini(x,y): if (x<y): menor = x return menor else: menor = y return menor x, y, z = 1, 2, 3 a = mini(1,2) b = mini(x + z,y - 1) c = mini(4,(x+1)*z) d = mini(mini(2,3),4) e = mini(mini(2,3),mini(z+y,3)) for i in range(4): print(mini(i,z)) z-=1 def mini(x,y): if (x<y): menor = x return menor else: menor = y return menor x, y, z = 1, 2, 3 a = mini(1,2) b = mini(x + z,y - 1) c = mini(4,(x+1)*z) d = mini(mini(2,3),4) e = mini(mini(2,3),mini(z+y,3)) for i in range(4): print(mini(i,z)) z-=1 Código online Archivo: example4_clase13.py
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Funciones en Python Ejemplo 5 – Sin funciones: Desarrolle un programa que convierta °C a °F. Recuerde que la expresión de conversión es: °F = (9/5)°C C = float(input("Ingrese los °C: ")) F = (9.0/5)*C + 32 print(C,"°C =",F,"°F") C = float(input("Ingrese los °C: ")) F = (9.0/5)*C + 32 print(C,"°C =",F,"°F") Código online Archivo: example5_clase13.py
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Funciones en Python Ejemplo 6 – Con funciones: Desarrolle un programa que convierta °C a °F. Recuerde que la expresión de conversión es: °F = (9/5)°C Sin embargo, para este caso haga uso de funciones 33 def celcius_to_fahrenheit(c): f = (9.0/5)*c + 32 return f C = float(input("Ingrese los °C: ")) F = celcius_to_fahrenheit(C) print(C,"°C =",F,"°F") def celcius_to_fahrenheit(c): f = (9.0/5)*c + 32 return f C = float(input("Ingrese los °C: ")) F = celcius_to_fahrenheit(C) print(C,"°C =",F,"°F") Código online Archivo: example6_clase13.py
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Using functions 34 Ejemplo 7Ejemplo 7 – Sin funciones: Hacer un programa que solicite la edad y el peso de dos personas y devuelva el menor peso y la menor edad de los ingresados. age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) if age1 < age2: young = age1 else: young = age2 if weight1 < weight2: slim = weight1 else: slim = weight2 print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) if age1 < age2: young = age1 else: young = age2 if weight1 < weight2: slim = weight1 else: slim = weight2 print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') Archivo: example7_clase13.py
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Using functions 35 Ejemplo 7 – Con funciones: Hacer un programa que solicite la edad y el peso de dos personas y devuelva el menor peso y la menor edad de los ingresados.
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Using functions 36 Ejemplo 7 – Con funciones: Parte 1: Definición de la función def mini(x, y): if x<y: menor = x else: menor = y return menor def mini(x, y): if x<y: menor = x else: menor = y return menor x y menor mini
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Using functions 37 Ejemplo 8Ejemplo 8 – Con funciones: Parte 2: Haciendo uso de las funciones creadas def mini(x, y): if x<y: return x else: return y age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) young = mini(age1, age2) slim = mini(weight1, weight2) print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') def mini(x, y): if x<y: return x else: return y age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) young = mini(age1, age2) slim = mini(weight1, weight2) print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') x y menor mini age1 age2 young Archivo: example8_clase13.py
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Using functions - Comparison 38 Sin Funciones Con Funciones
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Using functions - Comparison 39 def mini(x, y): if x<y: return x else: return y age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) young = mini(age1, age2) slim = mini(weight1, weight2) print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') def mini(x, y): if x<y: return x else: return y age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) young = mini(age1, age2) slim = mini(weight1, weight2) print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) if age1 < age2: young = age1 else: young = age2 if weight1 < weight2: slim = weight1 else: slim = weight2 print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) if age1 < age2: young = age1 else: young = age2 if weight1 < weight2: slim = weight1 else: slim = weight2 print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos') definición de la función invocación o llamado de la función parámetros formales argumentos
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad de Antioquia Realice programa que sume dos numeros. Hagalo utlizando una funcion que se llame suma() Ejemplos