Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: necro1991 en 2 Octubre 2010, 00:48 am



Título: Ejercicio Problema de Bala de Cañon. Resuelto.
Publicado por: necro1991 en 2 Octubre 2010, 00:48 am
Esto es un Ejercicio...
Se debe hacer en python, Java y C++  (Orientado a Objetos) Con Clase Projectile.

En el libro que ingrese en la parte de abajo tiene como hacerlo en python bueno de echo ya esta echo ai poco a poco y muy bien explicado el problema es que esta en ingles...

Citar
Si alguien esta interesado en postear el codigo en otro lenguaje aparte de C++, Python y Java... Adelante asi aprendemos de todo un poco; Favor de dar explicaciones de cada parte

Ahi que poner tambien las explicaciones para que sepamos como se va moviendo el programa, para que todos sepan que estamos haciendo bien y que estamos haciendo mal (Como Puedan).  Bueno Adelante Y Suerte.! :)

Para El Domingo Pongo mis Resultados! =] ("Por Exceso de Tarea Recibida, Lo tienen antes del Jueves")

Citar
Example Program: Cannonball
Before launching into a detailed discussion of how to write your own classes, let’s take a short detour to see
how useful new classes can be.

10.2.1 Especificacion del Programa

Supongamos que queremos escribir un programa que simula el vuelo de una bala de cañón (o cualquier otro proyectil, como una bala, el béisbol o lanzamiento de peso). Estamos particularmente interesados en saber hasta qué punto la bala viajará cuando se dispara a diferentes ángulos de lanzamiento y la velocidad inicial. La entrada al programa será el ángulo de lanzamiento (En grados), la velocidad inicial (en metros por segundo) y la altura inicial (en metros). La salida será la distancia que viaja el proyectil antes de golpear el suelo (en metros).

Si ignoramos los efectos de la resistencia al viento y se supone que la bala de cañón se mantiene cerca de la superficie terrestre (Es decir, no estamos tratando de ponerla en órbita), se trata de un problema clásico de la física relativamente simple. La aceleración de la gravedad cerca de la superficie de la Tierra es de unos 9,8 metros por segundo, por segundo. Esto significa que si un objeto se lanza hacia arriba a una velocidad de 20 metros por segundo, después de pasado un segundo, su velocidad de subida se ha desacelerado a 20-9.8 = 10.2 metros por segundo. Después de un segundo, la velocidad será sólo 0.4 metros por segundo, y poco después se empiezan a caer.

Para aquellos que saben un poco de cálculo, no es difícil obtener una fórmula que da la posición de nuestro bala de cañón en cualquier momento dado de su vuelo. En lugar de adoptar el enfoque de cálculo, sin embargo, nuestro programa utilizará la simulación para rastrear el momento bala de cañón por el momento. Usando un poco de trigonometría simple para empezar, junto con la relación evidente que la distancia de un objeto se desplaza en una determinada cantidad de tiempo es igual a veces su tasa de la cantidad de tiempo (d = rt), podemos resolver este problema algorítmico.

Pistas:
Recuerden el Valor de Pi es: 3.1416
Y De La Gravedad.

Extra:
Se tiene que Hacer "una clase projectile", Y un intervalo que nos diga cada cuanto tiempo quiere saber en que posicion se encuentra la bala cuando viaja.

Ejemplo:
(x,y) = (0,0)
El intervalo lo quiero de 0.5 segundos

(x,y) = (0,0)   0 segundos...
Se lanza...
(x,y) = (15,85) 0.5 segundos
(x,y) = (27,115) 1 segundo
...
(x,y) = (n,n)  n segundos hasta llegar al suelo...



La referencia de este programa lo encontre en el siguiente libro:

http://www.google.com.mx/url?sa=t&source=web&cd=2&ved=0CCAQFjAB&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.111.6062%26rep%3Drep1%26type%3Dpdf&rct=j&q=Python%20Programming%3A%20An%20Introduction%20to%20Computer%20Science%20pdf&ei=hGSmTPLAGMK88gbWy4n4AQ&usg=AFQjCNFyDFAoTuPioXb1mYk0Wel9_z9u_w&cad=rja (http://www.google.com.mx/url?sa=t&source=web&cd=2&ved=0CCAQFjAB&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.111.6062%26rep%3Drep1%26type%3Dpdf&rct=j&q=Python%20Programming%3A%20An%20Introduction%20to%20Computer%20Science%20pdf&ei=hGSmTPLAGMK88gbWy4n4AQ&usg=AFQjCNFyDFAoTuPioXb1mYk0Wel9_z9u_w&cad=rja)

Nombre:Python Programming: An Introduction to Computer Science
Autor: John M. Zelle, Ph.D.
Pagina en el Libro: 156 "capitulo 10"
Pagina en el PDF: 164




//Gracias a todos los que estan dando sugerencias las estoy tomando en cuenta ya que como saben soy nuevo  :D


Título: ¡Mis Resultados!
Publicado por: necro1991 en 2 Octubre 2010, 07:36 am
Mis Resultados:

Python 2.7:
Citar
from math import pi, cos, sin

class Projectile:
   def __init__(self, angle, velocity, height):
      self.xpos = 0.0
      self.ypos = height
      a=pi*angle
      theta = a / 180.0
      self.xvel = velocity * cos(theta)
      self.yvel = velocity * sin(theta)

   def update(self, time):
      self.xpos = self.xpos + time * self.xvel
      yvel1 = self.yvel - 9.8 * time
      self.ypos = self.ypos + time * (self.yvel + yvel1) / 2.0
      self.yvel = yvel1

   def getY(self):
      return self.ypos

   def getX(self):
      return self.xpos

def getInputs():
   print 'Dame el angulo en Grados'
   a = input()
   print 'Dame el valor inicial de la velocidad m/s'
   v = input()
   print 'Dame la altura inicial en metros'
   h = input()
   print 'Introduce el intervalo del calculo'
   t = input()
   return a,v,h,t

def main():
   angle,vel,h0,time = getInputs()
   cball = Projectile(angle, vel, h0)
   while cball.getY() >= 0:
      cball.update(time)
      print 'X:', cball.getX()
      print 'Y:', cball.getY()
   print ' '
   print   'Distancia Viajada:', cball.getX(), 'metros'

  
if __name__ == "__main__":
    main()
raw_input()

Java:
Citar
package clasess;
import java.io.*;
import java.math.*;
import java.io.IOException;
public class Main {
///Menu Principal:
    public static void main(String[] args) throws IOException{
//Valores Determinados En caso de que no ingresen valores

        projectile a = new projectile();
        a.setxpos(0);
        a.setypos(0);
        a.setxvel(0);
        a.setyvel(0);
        a.captura();
        a.imprime();
      //////////////////////////////////
}}
/////////////////////CLASES DE CADA OBJETO////////////////////
 class projectile {
    private double xpos;
    private double ypos;
    private double xvel;
    private double yvel;
//Posiciones
    public double getxpos () {  return xpos; };
    public void setxpos (double i_xpos) { xpos=i_xpos; }
    public double getypos () {  return ypos; };
    public void setypos (double i_ypos) { ypos=i_ypos; }
//Velcoidades
    public double getxvel () {  return xvel; };
    public void setxvel (double i_xvel) { xvel=i_xvel; }
    public double getyvel () {  return yvel; };
    public void setyvel (double i_yvel) { yvel=i_yvel; }
    public void captura() throws IOException
    {
    BufferedReader lee = new BufferedReader(new InputStreamReader(System.in));
    int a,v,h,t;double pi=3.1416,aa,tetha;double bb,r,yvel1,r1,r2,r3,r4,r5;
    System.out.println("Dame el angulo en grados");
    a = Integer.parseInt(lee.readLine());
    System.out.println("Dame el valor inicial de la velocidad m/s");
    v= Integer.parseInt(lee.readLine());
    System.out.println("Dame la altura inicial en metros");
    h= Integer.parseInt(lee.readLine());
    System.out.println("Dame el intervalo de calculacion");
    t= Integer.parseInt(lee.readLine());
    //Calculando velocidades en x & en y
    aa=pi*a;
    tetha=aa/180;
    xvel=v*Math.sin(tetha);
    yvel=v*Math.cos(tetha);

    //Iniciando el Ciclo
    //Posicion de Xpos & Ypos
    while(ypos>=0){
    //Trabajando con la X
    bb=t*xvel;
    r = xpos +bb;
    xpos=r;
    //Trabajando con la Y
    r1=9.8*t;
    yvel1 = yvel - r1;
    //Posicion de Y
    r2=yvel+yvel1;
    r3=r2/2.0;
    r4=t*r3;
    r5 = ypos + r4;
    ypos=r5;
    yvel = yvel1;
    System.out.println(" ");
    System.out.println("X: "+xpos+" ");
    System.out.println("Y: "+ypos +" ");
    }

        }
    public void imprime(){
    //System.out.println("X: "+xvel+" ");
    System.out.println("Distancia recorrida es:"+xpos+"");
    }
   }


C++:
Citar
Sorry.! Vi que nadie participo... Si quieren adelante participen Ingresando el codigo en C++, El tema lo dejo abierto para ver quien lo quiera poner

Nota:
Citar
Lo Pueden hacer en otro lenguaje bien... Para aprender

Con un Gracias Por participar me conformo xD jajaja :D


Título: Re: The Cannonball problem (Problema de Bala de Cañon). (Python, Java & C++)
Publicado por: [L]ord [R]NA en 2 Octubre 2010, 07:56 am
Creo que seria mejor si concretamente pones el ejercicio y dejas que cada quien busque la teoria. El post se te esta haciendo muy largo y muchos se van y no comentan cuando ven posts asi de largos. Es solo una sugerencia.

Saludos, LordRNA


Título: RE: problema de Bala de Cañon. (Java & C++) Python Semi-Resuelto
Publicado por: necro1991 en 2 Octubre 2010, 16:01 pm
Creo que seria mejor si concretamente pones el ejercicio y dejas que cada quien busque la teoria. El post se te esta haciendo muy largo y muchos se van y no comentan cuando ven posts asi de largos. Es solo una sugerencia.

Saludos, LordRNA

Ok Gracias.! :) ahurita lo cambio. pero primero quiero terminar el de clase por que el objetivo es ese jejeje =]


Título: Re: Ejercicio Problema de Bala de Cañon. Resuelto.
Publicado por: ¡Micronet! en 16 Octubre 2010, 00:05 am
Casualidad... una amiga me paso ese problema jajaja
no te enojes amigo.

No todos te van a responder siempre...

Código:
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;


class CannonBall
{
private:
    float  xVel, yVel, gv , x, y,tetha;  

public:
//xVel
    float getxVel() const; //accessor
    void setxVel(float velocity, float tetha); //mutator
//yVel
    float getyVel() const; //accessor
    void setyVel(float velocity, float tetha); //mutator
//GV
    float getgv() const; //accessor
    void setgv(float time); //mutator
//X
    float getX() const; //accessor
    void setX(float time); //mutator
//Y
    float getY() const; //accessor
    void setY(float time); //mutator
//Print
    void CannonBall::Imprimir();
};

//XVEL
float CannonBall::getxVel() const {return xVel;}; //accessor
void CannonBall::setxVel(float velocity, float tetha) { xVel=velocity*cos(tetha); }; //mutator
//YVEL
float CannonBall::getyVel() const {return yVel;}; //accessor
void CannonBall::setyVel(float velocity, float tetha) { yVel=velocity*sin(tetha); }; //mutator
//GV
float CannonBall::getgv() const {return gv;}; //accessor
void CannonBall::setgv(float time){ gv=yVel-(time*9.8); }; //mutator
//X
float CannonBall::getX() const {return x;}; //accessor
void CannonBall::setX(float time){ x=x+(time*xVel); }; //mutator
//Y
float CannonBall::getY() const {return y;}; //accessor
void CannonBall::setY(float time){ y=y+time*(yVel-gv)/2; yVel=gv;}; //mutator
//PRINT
void CannonBall::Imprimir()
{
cout<<" "<<x;
cout<<" "<<y<<endl;
}

int main ()
{
    CannonBall bullet;
    float height, interval, angle, velocity; //estos valores los pongo aqui porque no los voy aux modificar en los metodos de la clase
    float tetha, time=0, aux=0, max=0;
    
    cout<<"Angulo:"<<endl;
    cin>>angle;
    cout<<"Velocidad:"<<endl;
    cin>>velocity;
    cout<<"Altura:"<<endl;
    cin>>height;
    cout<<"Intervalo:"<<endl;
    cin>>interval;

    tetha=(angle*3.14)/180;
    bullet.setxVel(velocity, tetha);
    bullet.setyVel(velocity, tetha);

    cout<<"t, x, y"<<endl;

    do
    {
        bullet.setX(time);
        bullet.setgv(time);
        bullet.setY(time);
            if (bullet.getY()>=0)
            {
            bullet.Imprimir();
            cout<<time<<" ";
            }
            if (max<bullet.getY())
            {
             max=bullet.getY();
            }
        time+=interval;
        aux=bullet.getY();
    }while (aux<=0);
    cout<<"La altura maxima es: "<<max<<endl;
    cout<<"Tiempo antes de tocar el suelo: "<<time<<endl;;

    getch();
    return 0;
}


Derecho de Autor: Cruz! :) ^^