{AYUDA}PROGRAMA EN C++

Iniciado por Jason cm, 27 Abril 2016, 18:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

Jason cm

Hola ;D tengo una pequeña complicacion en mi codigo que estoy haciendo es una tarea que me han dejado
Es un problema que nos dejaron de un cañon que dispara un proyectial que tiene como Vo=105, el cañon esta en una torre Yo=15m. el cañon tiene un angulo que se pone como veran es de 20°,40°,60° y 80°.
1.- calcule cuales son las distancias a recorrer   //o=angulo; xf=distancia final
    o=20°                       xf=
    o=40°                       xf=
    o=60°                       xf=
    o=80°                       xf=

2.- calcule la distancia maxima que alcanza
3.- con que angulo puede alcanzar la distancia maxima
use la formula que es:  //g=gravedad   g=9.8m/s^2

             -g                       
y= --------------------- x^2 +   tan(o)x +Yo     //que vendriese ser como un binomio
     2(Vo^2)*cos(o)^2                                   //de segundo grado

para hallar xf vendriese ser utizando la siguiente formula:

declare que la primera parte sea Ax^2 + Bx + C. //la parte de la ecuaion de 2° es haci como es que nesecito los valores solo uno de ellos
                     -g
Ax^2=-----------------------x^2
           2(Vo^2)*cos(o)^2
Bx= tan(o)x
C= Yo

       - B - sqrt(B^2*4*A*C)
xf=---------------------------------
             2*A
EL CODIGO QUE HICE ES EL SIGUIENTE MI ERROR ESTA EN W ME DA 0 Y NO SE EL PORQUE NO LLEGO VER EL ERROR:

//LES AGRADECERIA QUE ME AYUDARAN PORFAVOR. GRACIAS TENGAN UN BUEN DIA  ;D

Código (cpp) [Seleccionar]
#include <iostream>
#include <cmath>
using namespace std;
int  disc(float a, float b, float c)
{
float z;
z=b*b-4*a*c;
return z;
}
int main()
{
int o1=20, o2=40, o3=60, o4=80;
float pi=3.1416, vo=105, g=9.8, yo=15;
float h, co, t, d, e, f;

h=(o2*pi)/180;
co=cos(h);
t=tan(h);
d=-g/((vo*vo)*(co*co));
e=t;
  f=yo;

cout<<"d es lo que se utilizara para operar en ax ="<<d<<endl;
cout<<"e es lo que se utilizara para operar en bx ="<<e<<endl;
cout<<"f es lo que se utilizara para operar en c ="<<f<<endl;

float a=d, b=e, c=f;
float w;
double z1,z2,d2;

w=disc(a,b,c);

d2=(double)w;

z1=(0-b)/(2.0*a);

z2=sqrt(0-d2)/(2.0*a);

cout<<"la destancia en 40ø ="<<z1+z2<<endl;
cout<<"la destancia en 40ø ="<<z1-z2<<endl;
cout<<"w = "<<w<<endl; //esta es la parte que me di cuenta
       //que me salia 0 y no me deve de salir 0
}


MOD EDIT: Agregada etiqueta GeSHi

MAFUS

Mira si las fórmulas son correctas. Obtengo valores extraños y, al menos la fórmula de la ecuación de 2º grado que has dado en el enunciado está mal.

Jason cm

si te refieres a que solo puse - en donde es +- es por que en el programa que estoy haciendo solo necesito ese resultado no el otro por eso es que trabajo con esa parte nomas
parece que en return z; hacia que me arroje 0 pero ahora me salen uno números que no me deberían de salir

MAFUS

#3
Estoy oxidado en matemáticas.

Tengo los siguientes resultados:
d(20º) = 1837.556662
d(40º) = 4492.157928
d(60º) = 5087.585718
d(80º) = 2250.260680

¿Tienes los resultados de la ecuación para compararlos?

Jason cm

no me sale con el símbolo e  en pocas palabras sigo sin resolver el código pero como el resultado que tienes me  debería de salirme como lo has echo me lo puedes hacer ver mi error

MAFUS

#5
Replanteé la fórmula en base a la física básica de instituto. Hace tanto que no toco todo esto que no puedo asegurar que esté bien, por eso te pedía los resultados, si los tenías.

Partiendo de la formula de la aceleración: a = (vf - vo) / (tf - to)
y de la fórmula del espacio recorrido por una velocidad constante: e = v * t

donde
a : aceleración en m/s^2
v : velocidad en m/s
t : tiempo en s

Siendo:
vx : velocidad horizontal
vy : velocidad vertical
vo : velocidad inical
A : ángulo de disparo
ym : altura del cañón respeto al suelo
g : aceleración de la gravedad = 9.8m/s^2

vx = vo * cos(A)
vy = vo * sin(A)

1. ALTURA MÁXIMA
g = (vf - vo) / (tf - to) = -vo / tf

La aceleración es negativa puesto que va frenando. Consideramos pues -g
-g = -vo / tf
tf = -vo / -g = vo / g   =>   t1 = vy / g

e = v * t    =>    h = vy * t1      ( h es la altura máxima que adquiere el proyectil respecto al cañón )
h = vy * (vy / g) = vy^2 / g

ht = ym + h    (ht es la altura máxima con respecto al suelo)

2. TIEMPO DE CAÍDA
g = (vf - vo) / (tf - to)
v = e / t

g = (ht / tp) - 0 / 1 - 0 = ht / tp    ( tp es el tiempo desde la máxima altura hasta que toca suelo )
tp = ht / g

3. ESPACIO HORIZONTAL RECORRIDO
t = t1 + tp    ( t es el tiempo de vuelo del proyectil: el tiempo de subida más el tiempo de bajada )
e = vx * t

4. SUSTITUYENDO
e = vx * t
e = vx * (t1 + tp)
e = vx * (vy/g + ht/g) = vx * [(vy + ht) / g] = vx * (vy + ht) / g
e = vx * (vy + ym + h) / g
e = vx * (vy + ym + vy^2 / g) / g

De esta forma el programa resulta en lo siguiente:

#include <stdio.h>
#include <math.h>

#define M_PI 3.14159265359
#define DEG2RAD(X) (X)*M_PI/180

int main() {
   const double g = 9.8;
   const double Vo = 105;
   const double Ym = 15;
   double Vx;
   double Vy;
   double angulo;
   double angulof;
   double d;
   
   for(angulo = 20; angulo <= 80; angulo += 20) {
       angulof = DEG2RAD(angulo);
       Vx = Vo * cos(angulof);
       Vy = Vo * sin(angulof);
       d = Vx * (Vy + Ym + Vy*Vy/g) / g;
       printf("d(%02.0fº) = %f\n", angulo, d);
   }
   return 0;
}