Caso4-Semana6-Angrybirds editado (1).docx

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014 CASO DE ESTUDIO: Aplicación del movimiento pa

Views 91 Downloads 2 File size 583KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

CASO DE ESTUDIO: Aplicación del movimiento parabólico - Angry Birds EC2: Solucionar casos matemáticos, estadísticos y financieros por medio de programas, teniendo en cuenta estructuras de datos básicas que permitan almacenar secuencias de valores. Semana

6

Saber ● ● ● ●

Conceptos básicos de programación. Variables y tipos de datos. Sintaxis y semántica básica. Entornos de programación.

Hacer ● ● ● ●

Analiza el caso 4 de estudio propuesto. Realiza la abstracción del caso. Diseña una posible solución. Resuelve el caso con estructuras de datos estáticas, procesos y entrega de datos resultado.

Ser ● ● ● ●

Proactivo al analizar el caso. Ordenado al realizar la abstracción del caso. Propositivo al diseñar la posible solución. Creativo al resolver el caso.

CE7: Utiliza las estructuras de datos estáticas con valores numéricos o alfanuméricos como elementos para la solución a problemas

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

1. ENUNCIADO Desarrolle un Algoritmo donde se calcule que permita encontrar cuál es la velocidad de lanzamiento necesaria para que un Angry Bird lanzado desde el piso con una inclinación de 45° sobrepase un objetivo dispuesto a 503 metros de distancia, tomando en cuenta que se rige mediante el cálculo del movimiento parabólico. Tenga en cuenta lo siguiente: ● El cálculo de lLa velocidad de lanzamiento no debe hacerse por calcularse mediante despeje de formulafórmula. ● El algoritmo debe estar diseñado de forma tal que el usuario pueda probar Usted debe probar con distintos valores de velocidad hasta: ● ○ Lograr Encontrar la velocidad de lanzamiento con la que se logra sobrepasar el objetivo de 503 metros ○ Lograr el objetivo después de un X número de intentos ○ o continuar probando distintos valores de velocidad hasta que ya no quiera seguir con las pruebas.

Formatted: Indent: Left: 0.28", No bullets or numbering

Contexto del caso Desde tiempos inmemoriales el ser humano usa la ciencia para dominar el entorno, sus amigos o enemigos, desde la carrera armamentista en la antigüedad hasta los juegos en nuestros teléfonos y tabletas de hoy, el cálculo rápido del movimiento parabólico es fundamental. Formatted: Indent: Left: 0", Right: 0"

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

Movimiento parabólico Es el realizado por un objeto cuya trayectoria describe una parábola. Se corresponde con la trayectoria ideal de un proyectil que se mueve en un medio que no ofrece resistencia al avance y que está sujeto a un campo gravitatorio uniforme. Tomado de Wikipedia

Para entender mejor el ejercicio se debe abstraer la solución, simplificando los datos que se extraen de la información inicial, señalando el plano ( x, y ) donde se realizará el movimiento.

Describiendo el sistema físico mediante el siguiente esquema:

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

Simplificando los datos se tiene un ángulo ( ), una distancia recorrida R necesaria para acertar el lanzamiento y se debe buscar la velocidad de lanzamiento necesaria. Para realizar el proceso es necesaria una ecuación que calcula la distancia máxima en el plano x alcanzada por el Angry Bird ( proyectil ) o como se ve en la gráfica R, por lo general la gravedad se define como 9.8 m/s2, quedando la ecuación así:

Se lee así: R es igual a la velocidad inicial del proyectil elevada al cuadrado, dividido dividida por la gravedad, el resultado se multiplica por el valor del seno de dos veces el ángulo de lanzamiento.

2. ESTRUCTURA DE DATOS En este punto entonces es necesario considerar qué información debe ser definida al iniciar el algoritmo y cuál debe ser introducida por el usuario. En la siguiente tabla se define el uso, el nombre de la variable y el valor inicial que debería tener cada una de estas variables: Explicación de la variable

Variable

Valor inicial

Distancia necesaria recorrida

distancia_objetivo

Distancia alcanzada por el proyectil

distancia_alcanzada

Constante de gravedad en la tierra

gravedad

9.8

Ángulo de lanzamiento

angulo

45

503 0

Formatted: Font color: Text 1, Superscript

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

Variable introducida por el usuario que servirá velocidad para guardar el valor de la velocidad necesaria de lanzamiento

0

Velocidad inicial a evaluar

velocidad_inicial

0

Velocidad final a evaluar

velocidad_final

0

Como deseamos encontrar la velocidad ideal del lanzamiento, más adelante en el ejercicio se explica cómo se inicializan estas variables y que opciones tenemos.

3. REQUERIMIENTOS FUNCIONALES RF1. El Algoritmo debe calcular e imprimir la distancia máxima que alcanza el Angry Bird al ser lanzado con una cierta velocidad inicial. RF2. El programa algoritmo debe solicitar al usuario al menos 5 veces las velocidades valores de velocidad de lanzamiento para realizar los cálculos.

4. REQUERIMIENTOS INSTRUCCIONALES A. ANÁLISIS Este tipo de algoritmos básicamente realizan operaciones matemáticas simples, la ecuación que se debe transformar en un algoritmo y describe el movimiento es:

En la anterior ecuación es necesario el reemplazo de los valores por las variables previamente definidas. B. DISEÑO Se puede implementar el algoritmo de diversas maneras, una de ellas -práctica y funcional-, es despejar la velocidad inicial del lanzamiento para calcular el valor exacto

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

o mayor necesario para sobrepasar el objetivo, pero este no es nuestro caso. Para este ejercicio, se van a pedir valores sucesivos de velocidad, cada valor de velocidad va a ser probado en la fórmula, y se va a calcular un valor de distancia, distancia que va a ser comparada con el valor objetivo, y con base en esto se va a emitir un juicio que indicará si no se alcanzó, o se sobrepasó el objetivo. De está manera el cálculo de la velocidad de lanzamiento se realiza mediante la solicitud al usuario de la velocidad inicial, se realiza la operación y se compara en cada oportunidad, para esto el usuario debe escribir una velocidad diferente muchas veces hasta cumplir el objetivo del ejercicio.

Otra manera de realizarlo es pidiendo que el usuario escriba un rango de velocidades y el algoritmo las evalúe una a una, sin interacción alguna y en caso de que la velocidad o velocidades requeridas sean parte de ese rango se imprimen los resultados correspondientes.

C. IMPLEMENTACIÓN Las variables es son lo primero que se debe definir para desarrollar un un algoritmo debe definir: distancia_objetivo = 503 distancia_alcanzada = 0 gravedad = 9.8 angulo = 45 velocidad_inicial = 0 velocidad_final = 0 velocidad = 0

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

Usando las variables previamente definidas podemos describir la ecuación como un algoritmo de la siguiente forma: distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) * sin (2*angulo) En este punto reemplazamos la ecuación con sus respectivas variables, el detalle faltante es como calcular el SENO de un ángulo, para esto se deben usar funciones trigonométricas por lo tanto es necesario decirle a python que debe importarlas y así, trabajar con ellas. En la cabecera, al inicio del algoritmo y código fuente se debe adicionar: import math Con esto disponemos de una gran cantidad de funciones predefinidas, por el momento nos interesa profundizar sobre dos de ellas: ❏ math.sin() : calcula el seno de un ángulo, estos valores deben estar en radianes. ❏ math.radians(ángulo): es una función usada para convertir los ángulos de grados a radianes, necesarios para el cálculo de las funciones trigonométricas. ❏ math.pi : es una constante que contiene el valor del número pi, por ejemplo 45° es igual a pi/4

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

La fórmula convertida quedaría así: distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) * math.sin( 2 * math.radians(angulo) ) )

Con estas funciones se facilita el cálculo de la ecuación usada para encontrar la distancia X máxima recorrida. Ahora, si se integra todo en un algoritmo completo, podemos describirlo de dos maneras, la primera de ellas es indicarle al usuario escribir una a una las velocidades a probar:

# -*- coding: utf-8 -*import math distancia_objetivo = 503 distancia_alcanzada = 0 gravedad = 9.8 angulo = 45 velocidad = 0 velocidad_inicial = 0 velocidad_final = 0 continuar = "s"

while(continuar=="s"): velocidad = float(raw_input("Por favor indica una velocidad para probar:")) distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) * math.sin( 2 * math.radians(angulo) ) print "la distancia alcanzada fue de: ",distancia_alcanzada if distancia_alcanzada >= distancia_objetivo: print "Se sobrepasó el objetivo, con una velocidad de ",velocidad else: print "NO se sobrepasó el objetivo"

continuar = raw_input("Desea continuar? s/n:") print "Hasta la próxima!"

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

En La segunda forma, se define un rango de velocidades:

# -*- coding: utf-8 -*import math

distancia_objetivo = 503 distancia_alcanzada = 0 gravedad = 9.8 angulo = 45 velocidad = 0 velocidad_inicial = 0 velocidad_final = 0 continuar = "s"

while(continuar=="s"): velocidad_inicial = int(raw_input("Por favor indica una velocidad inicial para probar:")) velocidad_final = int(raw_input("Por favor indica una velocidad final de la prueba:")) for velocidad_temporal in range(velocidad_inicial,velocidad_final): distancia_alcanzada = ( ( velocidad_temporal * velocidad_temporal ) / gravedad ) * math.sin( 2 * math.radians(angulo) ) print "la distancia alcanzada fue de: ",distancia_alcanzada if distancia_alcanzada >= distancia_objetivo: print "Se sobrepasó el objetivo ", velocidad_temporal else: print "NO se sobrepasó el objetivo",velocidad_temporal

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

continuar = raw_input("Desea continuar? s/n:") print "Hasta la próxima!"

D. PRUEBAS El programa deberá entregar como resultado el valor de la velocidad de lanzamiento necesaria para golpear el objeto a la distancia deseada. Si probamos sucesivamente con varios valores de velocidad por velocidad , escribiendo 50, 70 y 80 como valores posibles de velocidad:

Por favor indica una velocidad para probar:60 la distancia alcanzada fue de: 367.346938776 NO se sobrepasó el objetivo

Desea continuar? s/n:s

Por favor indica una velocidad para probar:70 la distancia alcanzada fue de: 500.0 NO se sobrepasó el objetivo

Desea continuar? s/n:s

Por favor indica una velocidad para probar:80 la distancia alcanzada fue de: 653.06122449 Se sobrepasó el objetivo, con una velocidad de 80.0

Desea continuar? s/n:n

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

Hasta la próxima!

En este ejercicio es necesario lanzar el Angry Bird a más de 80 m/s para sobrepasar el objetivo, se tiene la sensación de es tedioso incluir valor por valor ¿no?, ahora intentaremos entregándole al algoritmo un rango para evaluar las velocidades, por ejemplo, velocidad inicial de 60 y velocidad final de 80, el algoritmo probará 60, 61, 62, etc.

Por favor indica una velocidad inicial para probar:60

Por favor indica una velocidad final de la prueba:80 la distancia alcanzada fue de: 367.346938776 NO se sobrepasó el objetivo la distancia alcanzada fue de: 379.693877551 NO se sobrepasó el objetivo la distancia alcanzada fue de: 392.244897959 NO se sobrepasó el objetivo la distancia alcanzada fue de: 405.0 NO se sobrepasó el objetivo la distancia alcanzada fue de: 417.959183673 NO se sobrepasó el objetivo la distancia alcanzada fue de: 431.12244898 NO se sobrepasó el objetivo la distancia alcanzada fue de: 444.489795918 NO se sobrepasó el objetivo la distancia alcanzada fue de: 458.06122449 NO se sobrepasó el objetivo

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

la distancia alcanzada fue de: 471.836734694 NO se sobrepasó el objetivo la distancia alcanzada fue de: 485.816326531 NO se sobrepasó el objetivo la distancia alcanzada fue de: 500.0 NO se sobrepasó el objetivo la distancia alcanzada fue de: 514.387755102 Se sobrepasó el objetivo, con una velocidad de 71 la distancia alcanzada fue de: 528.979591837 Se sobrepasó el objetivo, con una velocidad de 72 la distancia alcanzada fue de: 543.775510204 Se sobrepasó el objetivo, con una velocidad de 73 la distancia alcanzada fue de: 558.775510204 Se sobrepasó el objetivo, con una velocidad de 74 la distancia alcanzada fue de: 573.979591837 Se sobrepasó el objetivo, con una velocidad de 75 la distancia alcanzada fue de: 589.387755102 Se sobrepasó el objetivo, con una velocidad de 76 la distancia alcanzada fue de: 605.0 Se sobrepasó el objetivo, con una velocidad de 77 la distancia alcanzada fue de: 620.816326531 Se sobrepasó el objetivo, con una velocidad de 78 la distancia alcanzada fue de: 636.836734694 Se sobrepasó el objetivo, con una velocidad de 79

Desea continuar? s/n:n Hasta la próxima!

¿Desde que velocidad de tiro inicial se sobrepasa el objetivo planteado?

Facultad de Ingeniería Programa de Ingeniería de Sistemas Algoritmos 2014

5. ENTREGABLES a. Código fuente (AngryBirds-T000000.py) b. El código fuente debe estar documentado. c. Impresión del pantallazo con los datos de salida.