Beruflich Dokumente
Kultur Dokumente
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 informacin debe ser definida al
iniciar el algoritmo y cul debe ser introducida por el usuario.
En la siguiente tabla se define el uso, el nombre de la variable y el valor inicial que
debera tener cada una de estas variables:
Explicacin de la variable Variable Valor inicial
Distancia necesaria recorrida distancia_objetivo 503
Distancia alcanzada por el proyectil distancia_alcanzada 0
Constante de gravedad en la tierra gravedad 9.8
ngulo de lanzamiento angulo 45
Formatted: Font color: Text 1, Superscript
Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014
Variable introducida por el usuario que servir
para guardar el valor de la velocidad necesaria de
lanzamiento
velocidad 0
Velocidad inicial a evaluar velocidad_inicial 0
Velocidad final a evaluar velocidad_final 0
Como deseamos encontrar la velocidad ideal del lanzamiento, ms adelante en el
ejercicio se explica cmo se inicializan estas variables y que opciones tenemos.
3. REQUERIMIENTOS FUNCIONALES
RF1. El Algoritmo debe calcular e imprimir la distancia mxima 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 clculos.
4. REQUERIMIENTOS INSTRUCCIONALES
A. ANLISIS
Este tipo de algoritmos bsicamente realizan operaciones matemticas simples, la
ecuacin que se debe transformar en un algoritmo y describe el movimiento es:
En la anterior ecuacin es necesario el reemplazo de los valores por las variables
previamente definidas.
B. DISEO
Se puede implementar el algoritmo de diversas maneras, una de ellas -prctica y
funcional-, es despejar la velocidad inicial del lanzamiento para calcular el valor exacto
Facultad de Ingeniera
Programa de Ingeniera 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 frmula, 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 clculo de la velocidad de lanzamiento se realiza mediante la
solicitud 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
hasta cumplir el objetivo del ejercicio.
Otra manera de realizarlo es pidiendo que el usuario escriba un rango de velocidades y
el algoritmo las evale una a una, sin interaccin alguna y en caso de que la velocidad
o velocidades requeridas sean parte de ese rango se imprimen los resultados
correspondientes.
C. IMPLEMENTACIN
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 Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014
Usando las variables previamente definidas podemos describir la ecuacin como un
algoritmo de la siguiente forma:
distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) * sin (2*angulo)
En este punto reemplazamos la ecuacin con sus respectivas variables, el detalle
faltante 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, 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 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
La frmula convertida quedara as:
distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) * math.sin( 2 * math.radians(angulo) ) )
Con estas funciones se facilita el clculo de la ecuacin usada para encontrar la
distancia X mxima 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 prxima!"
Facultad de Ingeniera
Programa de Ingeniera 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 Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014
continuar = raw_input("Desea continuar? s/n:")
print "Hasta la prxima!"
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 Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014
Hasta la prxima!
En este ejercicio es necesario lanzar el Angry Bird a ms de 80 m/s para sobrepasar el
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 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 Ingeniera
Programa de Ingeniera 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 prxima!
Desde que velocidad de tiro inicial se sobrepasa el objetivo planteado?
Facultad de Ingeniera
Programa de Ingeniera de Sistemas
Algoritmos
2014
5. ENTREGABLES
a. Cdigo fuente (AngryBirds-T000000.py)
b. El cdigo fuente debe estar documentado.
c. Impresin del pantallazo con los datos de salida.