Download Sin título de diapositiva
Document related concepts
Transcript
Problema Escribir un programa que muestre la siguiente tabla de raíces cuadradas 2 Nº 3 Nº ... 30 Nº Algoritmo 1. inicializar variable n con valor 2 2. repetir hasta que n > 30: escribir n y n sumar 1 a n alternativamente 1.inicializar variable n con valor 2 2. repetir mientras n 30: escribir n y n sumar 1 a n Programa import math #inicializar variable n con valor 2 n=2 #repetir mientras n<=30 while n<=30: #escribir n y n print n,math.sqrt(n) #sumar 1 a n n=n+1 Nota. n=n+1#inst de asignación: variable=expresión; 1º evalúa (calcula) expresión. Ej: calcula n+1 (1ªvez 2+1=3, 2ªvez 3+1=4,…) 2º guarda resultado en variable. Ej. en variable n (1ªvez 3, 2ªvez 4,…) Instrucción while Sintaxis while condición: instrucciones Semántica Mientras condición se cumpla (sea True) ejecutar instrucción(es) graficamente: condición True instrucciones False Ejecución del programa 1º 2º 3º 4º 5º 6º 7º instrucción n=2 while n<=30: print n,… n=n+1 while n<=30: print n,… n=n+1 efecto n: 2 True 2 1.4 n: 3 True 3 1.7 n: 4 … 85º 86º 87º 88º 89º 90º instrucción efecto n=n+1 while n<=30: print n,… n=n+1 while n<=30: n: 30 True 30 5.4 n: 31 False fin ¿Qué sucede si la condición es falsa la primera vez? Ejemplo: maximo=input(“nº máximo?”) n = 2 while n<=maximo: print n,math.sqrt(n) n=n+1 Si maximo<2, las instrucciones no se repiten nunca. Nota. Esta propiedad permite diseñar ciclos que eventualmente no se repiten nunca. Problema. Función que sume números enteros entre x e y Ejs de Uso: suma(3,5) entrega 3+4+5=12, suma(3,3) entrega 3 suma(3,2) entrega 0 #suma(x,y): entrega x + (x+1) + (x+2) + … + y def suma(x,y): s=0 n=x while n<=y: s=s+n n=n+1 return s ¿Qué sucede si la condición es siempre verdadera? Ejemplo: print"Nº raiz" n=2 while n<=30: print n,math.sqrt(n) Las instrucciones se repiten indefinidamente (“loop”) error: no se incrementa variable n Corolario. El programador debe preocuparse de incluir instrucciones que influyan en la condición, de modo que eventualmente sea falsa. Problema. Escribir un programa que calcule el promedio de una cantidad indeterminada de números reales siguiendo el diálogo: número?4.5 cuenta=1 promedio=4.5 número?5.5 cuenta=2 promedio=5.0 . . . número?0 Nota. El número 0 se usa como indicador de fin de datos Programa: #acumulador(sumatoria) y contador de números suma=0.0 #real por si se ingresan sólo enteros n=0 #obtener primer número numero=input("número?") #repetir hasta fin de datos while numero!=0 : #procesar numero suma=suma+numero n=n+1 print "cuenta=",n,“promedio=”,suma/n #obtener siguiente número numero=input("número?") Ejecución del programa 1º suma=0 suma: 0 2º n=0 n: 0 3º numero=input(“…”); numero: 4.5 4º while numero!=0: True 5º suma=suma+numero suma: 4.5 6º n=n+1 n: 1 7º print …,n,…,suma/n cuenta=1 promedio=4.5 8º numero=input(“…”) numero: 5.5 Ejecución del programa 9º while numero!=0: True 10º suma=suma+numero suma: 10.0 11º n=n+1 n: 2 12º print …,n,…,suma/n cuenta=2 promedio=5.0 13º numero=input(“…”) numero: 0 14º while numero!=0: False 15º fin Ejercicio. Escribir la función y el programa siguiente #factorial(x): entrega 1*2*…*x #ejs: factorial(3)=1*2*3=6, factorial(0)=1 def factorial(x):#x>=0 … #programa: muestra factorial de c/nº de una lista … Diálogo (ejemplo) nº?4 4!=24 nº?0 0!=1 … nº?-1 (nº negativo indica fin de los datos) Solución 1 : x! = 1 * 2 * ... * (x-1) * x def factorial(x): producto=1 i=1 while i<=x: producto=producto*i i=i+1 return producto (0!=1) Solución 2 : x! = x * (x-1) * … * 1 def factorial(x): producto=1 while x>0: producto=producto*x x=x-1 return producto Nota. x termina con el valor 0 argumento en la llamada no se modifica ejemplo: factorial(n) no modifica n (0!=1) Solución 3(recursiva): x! = x * (x-1)! def factorial(x): if x==0: return 1 else: return x * factorial(x-1) Notas más simple 4 líneas sin iteración (while) sólo uso de parámetro sin variables adicionales (0!=1) #programa: muestra factorial de c/nº de una lista n=input(“nº?”) while n>=0: print n,”!=”,factorial(n) n=input(“nº?”) Solución 2. usando patrón while True:..break #programa: muestra factorial de c/nº de una lista while True: n=input(“nº?”) if n<0: break print n,”!=”,factorial(n) Explicaciones while True: condición siempre verdadera instrucciones se ejecutan siempre (“loop”) if n<0: break si condición se cumple, salir del ciclo (“loop”) break “salta” a instrucción siguiente a while (la que está después de la última instrucción debajo y subordinada a while)