Download Respuesta
Document related concepts
no text concepts found
Transcript
Concepto de Repetición ...continuación Recordatorio while condición: acción_1 acción_2 acción_3 . . . Recordatorio While acción_1 acción_2 acción_3 . . condición = false condición = true Ejercicio 1 ● Realice la función que calcula la siguiente operación: – XY Respuesta def XelevadoY(x, y): r = 1 while y > 0: r = x * r y = y – 1 return r Ejercicio 2 ● Realice una función que dice si un número es primo o no. Ejercicio 2 ● Un número primo es aquel que sólamente es divisible por la unidad(1) y él mismo. Ejercicio 2 ● ¿Cómo sabemos si un número a es divisible por un número b – – a % b = 0 → a es divisible por b a % b ≠0 → a no es divisible por b ● Ej: – – – 4%2 = 0 5%3 = 2 100%4 = 0 Respuesta def Primo(x): c = 2 while c < x: if x % c == 0: return False c = c + 1 return True Ejercicio 2(extensión) ● Calcule e imprima todos los número primos del 1 al 100 Respuesta def NumeroPrimos(): c = 1 while c <= 100: if Primo(c): print c c = c + 1 Ejercicio 3 ● Calcule el número е Ejercicio 3 1 1 1 1 1 e=1 ... ∞! 1! 2! 3! 4! Respuesta def e(): e = 1.0 c = 1 while c <= ∞: e = e + 1.0 / factorial(c) c = c + 1 return e Respuesta def e(n): e = 1.0 c = 1 while c <= n: e = e + 1.0 / factorial(c) c = c + 1 return e Ejercicio 3(extensión) ● Calcule еx Ejercicio 3(extensión) 1 2 3 4 ∞ x x x x x e=1 ... ∞! 1! 2! 3! 4! Respuesta def ex(x, n): e = 1.0 c = 1 while c <= n: e = e + XelevadoY(x, c) / factorial(c) c = c + 1 return e Ejercicio 4 ● Realice una función que diga si un número es un número perfecto o no. Ejercicio 4 ● Un número perfecto es un número, donde todos sus divisores sumados excepto él mismo, dan el número. – Ej: ● ● ● 6: 1+2+3 = 6 28: 1+2+4+7+14 = 28 496: 1+2+4+8+16+31+62+124+248 Respuesta def NumeroPerfecto(n): c = 1 s = 0 while c < n: if n % c == 0: s = s + c c = c + 1 if s == n: return True else: return False Ejercicio 5(Mundo) ● ● Realice el programa que rodea el mundo infinítamente. La posición de la ardilla es aleatoria pero siempre estará pegada al mundo. Ejercicio 5(Mundo) Respuesta def MirarSinPared(): while hasWallInFront(): TURNLEFT() Respuesta def VueltaMundo(): while True: MirarSinPared() MOVE() TURNRIGHT() Ejercicio 5(extensión) ● ● Rodee sólo 1 vez el mundo La ardilla posee 1 grano en el estómago Respuesta def UnaVueltaMundo(): while not hasFood(): if getMouth() > 0: putFood() MirarSinPared() MOVE() TURNRIGHT() Ejercicio 5(extensión) ● Rodee el mundo en sentido contrario Respuesta def MirarSinPared(): while hasWallInFront(): TURNRIGHT() Respuesta def VueltaMundo(): while True: MirarSinPared() MOVE() TURNLEFT() Ejercicio 6(Mundo) ● La ardilla tiene una hectárea de cultivo, coséchela de la siguiente manera: – – – Si no hay semilla, plante una. Si hay una semilla, riégela para que se transforme en una planta. Si hay una planta, recójala. Ejercicio 6(Mundo) ● Especificaciones: – – – ● ● 0 semillas = No hay semilla 1 semilla = Semilla 2 semillas = Planta Las dimensiones de la hectarea son desconocidas Usted empieza siempre en la esquina inferior izquierda Ejercicio 6(Mundo) ● Vuelva a la posición inicial después de cosechar la hectárea. Ejercicio 6(Mundo) Estado Inicial Ejercicio 6(Mundo) Estado Final Respuesta def ContarSemillas(): c1 = 0 # Cuento cuantas hay while hasFood(): eat() c1 = c1 + 1 c2 = 0 # Devuelvo las semillas contadas while c2 != c1: putFood() c2 = c2 + 1 return c1 Respuesta def Cosechar(): s = ContarSemillas() if s == 0: # Planto una semilla putFood() if s == 1: # Riego la semilla putFood() if s == 2: # Recojo la planta eat() eat() Respuesta def CultivarLinea(): while not hasWallInFront(): Cosechar() MOVE() Cosechar() # La última casilla queda faltando por cosechar Respuesta def PosicionInicial(): # Vuelta 180º TURNLEFT() TURNLEFT() # Avance hasta el final while not hasWallInFront(): MOVE() # Vuelta 90º TURNRIGHT() # Avance hasta el final while not hasWallInFront(): MOVE() # Vuelta 180º TURNLEFT() TURNLEFT() def CosecharHectarea(): Izquierda = True # Indica hacia donde esta la siguiente línea Final = False # Indica su estoy en el final de la hectarea while not Final: CultivarLinea() # Gira a la siguiente línea if Izquierda: TURNLEFT() else: TURNRIGHT() # Si hay pared es porque estoy al final if hasWallInFront(): Final = True # Si no, me muevo a la siguiente línea y cambio el sentido de la siguiente línea else: MOVE() if Izquierda: TURNLEFT() Izquierda = False else: TURNRIGHT() Izquierda = True # Vuelvo a la posición inicial PosicionInicial() Ejercicio 7(Mundo) ● ● ● Sume 2 números de extensión desconocida representados por semillas Cada fila representa un número Imprima el resultado bajo la sentencia print Ejercicio 7(Mundo) Estado Inicial + 43502 8763 Ejercicio 7(Mundo) 52265 Estado Final Respuesta def ContarDigito(): c1 = 0 # Cuento el dígito while hasFood(): eat() c1 = c1 + 1 c2 = 0 # Devuelvo la comida while c2 != c1: putFood() c2 = c2 + 1 return c1 Respuesta def HallarNumero(): c = 0 # Unidades, decenas, centenas, etc. n = 0 # Acumulado del número # Cuento todos los dígitos y los transformo while not hasWallInFront(): n = n + ContarDigito() * 10**c c = c + 1 # Aumento la potencia de 10 MOVE() return n Respuesta def Sumar(): MOVE() n1 = HallarNumero() # Hallo el primer número # Bajo la ardilla a la siguiente línea TURNLEFT() MOVE() TURNLEFT() # Devuelvo la ardilla while not hasWallInFront(): MOVE() # Volteo y pongo la ardilla en posición para leer el número TURNLEFT() TURNLEFT() MOVE() n2 = HallarNumero() # Hallo el segundo número s = n1 + n2 # Los sumo print s # Imprimo la suma Ejercicio 7(extensión) ● Escriba la suma en la última línea de igual manera a como se escribieron los números a sumar Ejercicio 7(extensión) Estado Final Respuesta def EscribirNumero(n): while n > 0: putFood() n = n 1 Respuesta def Sumar2Digitos(r): n1 = ContarDigito() #Primer Digito TURNLEFT() MOVE() n2 = ContarDigito() # Segundo Digito MOVE() s = n1 + n2 + r # Sumelos más el residuo EscribirNumero(s % 10) # Unidades return s / 10 # Decenas se acumulan Respuesta def Sumar2(): r = 0 # Sume todos las columnas while not hasWallInFront(): MOVE() # Siguiente columna r = Sumar2Digitos(r) # Guardo el residuo para la siguiente columna # Me devuelvo TURNLEFT() TURNLEFT() MOVE() MOVE() TURNLEFT() # Retorno a la posición inicial TURNLEFT() TURNLEFT() while not hasWallInFront(): MOVE() Ejercicio 8(Mundo) ● ● La ardilla guarda su comida para el futuro en huecos Realice el algoritmo que llena los huecos y el algortimo que recoge toda la comida Ejercicio 8(Mundo) Estado Incial Ejercicio 8(Mundo) Estado Final Respuesta def TrabajarHueco(poner): c = 0 # Profundidad del hueco while not hasWallInFront(): MOVE() if poner == True: # Tengo que llenarlo putFood() else: # Tengo que vaciarlo eat() c = c + 1 TURNLEFT() TURNLEFT() while c != 0: # Salgo del Hueco MOVE() c = c 1 Respuesta def LlenarHuecos(): # Tanteo toda la tierra por huecos while not hasWallInFront(): MOVE() TURNRIGHT() if not hasWallInFront(): # Encontré un hueco! TrabajarHueco(True) # Lo trabajo(lleno) TURNRIGHT() else: # No es un hueco, sigo TURNLEFT() Ejercicio 8(Mundo) Estado Incial Ejercicio 8(Mundo) Estado Final Respuesta def VaciarHuecos(): # Tanteo toda la tierra por huecos while not hasWallInFront(): MOVE() TURNRIGHT() if not hasWallInFront(): # Encontré un hueco! TrabajarHueco(False) # Lo trabajo(vace) TURNRIGHT() else: # No es un hueco, sigo TURNLEFT()