Sie sind auf Seite 1von 11

Facultad de Ingeniera

Programa de Ingeniera de Sistemas


Algoritmos
2014

CASODEESTUDIO:Aplicacindel
movimientoparablicoAngryBirds

EC2:Solucionar casos matemticos, estadsticosyfinancieros pormediodeprogramas,


teniendo en cuenta estructuras de datos bsicasque permitan almacenar secuencias de
valores.

Semana

Saber

Conceptos
bsicosde
programacin.
Variablesy
tiposdedatos.
Sintaxisy
semntica
bsica.
Entornosde
programacin.

Hacer

Analizaelcaso4de
estudiopropuesto.
Realizalaabstraccin
delcaso.
Diseaunaposible
solucin.
Resuelveelcasocon
estructurasdedatos
estticas,procesosy
entregadedatos
resultado.

Ser

Proactivoalanalizarel
caso.
Ordenadoalrealizarla
abstraccindelcaso.
Propositivoaldisear
laposiblesolucin.
Creativoalresolverel
caso.

CE7: Utiliza las estructuras de datos estticas con valores numricos o alfanumricos
comoelementosparalasolucinaproblemas

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

1.ENUNCIADO
DesarrolleunAlgoritmo dondesecalculelavelocidaddelanzamientonecesariaparaque
un Angry Bird lanzado desde el piso con una inclinacin de 45 sobrepase un objetivo
dispuesto a 503 metros dedistancia, tomandoen cuenta que se rigemedianteelclculo
delmovimientoparablico.Tengaencuentalosiguiente:
Elclculodelavelocidadnodebehacersepordespejedeformula.
Usteddebeprobarcondistintosvaloresdevelocidadhasta:
Lograrsobrepasarelobjetivode503metros
LograrelobjetivodespusdeunXnmerodeintentos
ocontinuarprobando distintos valoresde velocidad hasta queyanoquiera
seguirconlaspruebas.

Contextodelcaso
Desde tiempos inmemoriales el ser humanousala ciencia para dominarel entorno, sus
amigoso enemigos, desdela carrera armamentista enla antigedadhastalosjuegosen
nuestros telfonos y tabletas de hoy, el clculo rpido del movimiento parablico es
fundamental.

Movimientoparablico
Es el realizado por un objetocuya trayectoriadescribeunaparbola.Secorresponde
con la trayectoria ideal de un proyectil que se mueve en un medio que no ofrece
resistenciaalavanceyqueestsujetoauncampogravitatoriouniforme.
TomadodeWikipedia

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

Paraentender mejor el ejercicio se debeabstraerlasolucin,simplificandolosdatosque


se extraen de la informacin inicial, sealando el plano ( x, y ) donde se realizar el
movimiento.

Describiendoelsistemafsicomedianteelsiguienteesquema:

Simplificando losdatossetiene un ngulo ( ), unadistanciarecorridaRnecesariapara


acertarellanzamientoysedebebuscarlavelocidaddelanzamientonecesaria.
Pararealizar elprocesoesnecesariaunaecuacinquecalculaladistanciamximaenel
plano x alcanzada por el Angry Bird ( proyectil ) o como se ve en la grfica R, por lo
generallagravedadsedefinecomo9.8m/s,quedandolaecuacinas:

R=

v02
g sin2

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

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

2.ESTRUCTURADEDATOS
En este punto entonces es necesario considerar qu informacin debe ser definida al
iniciarelalgoritmoyculdebeserintroducidaporelusuario.

Enla siguientetablasedefineeluso,elnombredelavariableyelvalorinicialquedebera
tenercadaunadeestasvariables:
Explicacin 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

Variable introducida por el usuario que servir velocidad


para guardar el valor de la velocidad necesaria
de lanzamiento

Velocidad inicial a evaluar

velocidad_inicial

Velocidad final a evaluar

velocidad_final

Como deseamos encontrar la velocidad ideal del lanzamiento, ms adelante en el


ejercicioseexplicacmoseinicializanestasvariablesyqueopcionestenemos.

3.REQUERIMIENTOSFUNCIONALES

RF1.ElAlgoritmo debe calcular e imprimir ladistanciamximaquealcanzaelAngryBird


alserlanzado.
RF2. El programa debe solicitar al usuario al menos 5 veces las velocidades de
lanzamientopararealizarlosclculos.

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

4.REQUERIMIENTOSINSTRUCCIONALES
A. ANLISIS
Este tipo de algoritmos bsicamente realizan operaciones matemticas simples, la
ecuacinquesedebetransformarenunalgoritmoydescribeelmovimientoes:

R=

v02
g sin2

En la anterior ecuacin es necesario el reemplazo de los valores por las variables


previamentedefinidas.

B. DISEO
Se puede implementar el algoritmo de diversas maneras, una de ellas prctica y
funcional, es despejar lavelocidad inicial del lanzamientoparacalcular el valor exacto o
mayor necesario para sobrepasar el objetivo, pero este no es nuestro caso. Para este
ejercicio, se vanapedir valoressucesivos develocidad,cadavalordevelocidadvaaser
probado en la frmula, y se va a calcular un valor de distancia, distancia que va a ser
comparada conel valorobjetivo,yconbaseenestosevaaemitirunjuicioqueindicarsi
nosealcanz,osesobrepaselobjetivo.
De estmanera el clculo de la velocidad delanzamientoserealizamediantelasolicitud
al usuario de la velocidad inicial, se realiza la operacin y se compara en cada
oportunidad, para esto el usuario debe escribir una velocidad diferente muchas veces
hastacumplirelobjetivodelejercicio.

Otra manera de realizarlo espidiendoqueelusuarioescribaunrangodevelocidadesyel


algoritmo las evale una a una, sin interaccin alguna y en caso de que la velocidad o

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

velocidades requeridas sean parte de ese rango se imprimen los resultados


correspondientes.

C. IMPLEMENTACIN
Lasvariablesesloprimeroqueunalgoritmodebedefinir:
distancia_objetivo = 503
distancia_alcanzada = 0
gravedad = 9.8
angulo = 45
velocidad_inicial = 0
velocidad_final = 0
velocidad = 0

Usando las variables previamente definidas podemos describir la ecuacin como un


algoritmodelasiguienteforma:
distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) * sin (2*angulo)
Enestepuntoreemplazamosla ecuacin con susrespectivasvariables,eldetallefaltante
es como calcular el SENO de un ngulo, para esto se deben usar funciones
trigonomtricas por lo tanto es necesario decirle a python que debe importarlas y as,
trabajar con ellas. En la cabecera, al inicio del algoritmo y cdigo fuente se debe
adicionar:
import math
Con esto disponemos de una gran cantidad de funciones predefinidas, porel momento
nosinteresaprofundizarsobredosdeellas:
math.sin() : calcula el seno de un ngulo, estos valores deben estar en radianes.
math.radians(ngulo): es una funcin usada para convertir los ngulos de grados a
radianes, necesarios para el clculo de las funciones trigonomtricas.
math.pi : es una constante que contiene el valor del nmero pi, por ejemplo 45 es igual
a pi/4

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

Lafrmulaconvertidaquedaraas:
distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) * math.sin( 2 * math.radians(angulo) ) )

Con estasfunciones se facilita elclculodelaecuacinusadapara encontrarladistancia


Xmximarecorrida.

Ahora, siseintegra todoenunalgoritmocompleto,podemosdescribirlodedosmaneras,


laprimeradeellasesindicarlealusuarioescribirunaaunalasvelocidadesaprobar:

# -*- 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 prxima!"

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

Lasegundaforma,sedefineunrangodevelocidades:

# -*- 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

continuar = raw_input("Desea continuar? s/n:")


print "Hasta la prxima!"

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

D. PRUEBAS
El programa deber entregar como resultado el valor de la velocidad de lanzamiento
necesariaparagolpearelobjetoaladistanciadeseada.
Si probamos velocidad por velocidad, escribiendo 50, 70 y 80como valores posiblesde
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


Hasta la prxima!

En este ejercicio es necesariolanzar elAngryBird a ms de 80m/sparasobrepasarel


objetivo, se tiene la sensacin de es tedioso incluir valor por valor no?, ahora
intentaremos entregndole al algoritmo un rango para evaluar las velocidades, por
ejemplo, velocidad inicial de 60 y velocidad finalde 80,el algoritmo probar 60, 61,62,
etc.

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

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
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

Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014

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 prxima!

Desdequevelocidaddetiroinicialsesobrepasaelobjetivoplanteado?

5.ENTREGABLES
a. Cdigo fuente (AngryBirds-T000000.py)
b. El cdigo fuente debe estar documentado.
c. Impresin del pantallazo con los datos de salida.

Das könnte Ihnen auch gefallen