El siguiente ejercicio propuesto por uno de nuestro seguidores al blog www.aprendoencasa.com que nos propone unos ejercicios o prácticas en la que se ha de calcular utilizando formulas correspondientes al tiro parabólico , se ha de solicitar la posición en X e Y  del blanco al cual se quiere disparar, ha continuación se ha de pedir la velocidad inicial de la bala de cañón y por ultimo se le permite al usuario especificar hasta cinco ángulos de disparo.

Una vez solicitado un Angulo se ha de comprobar si se ha hecho blanco en el mismo, en caso de no ser así volver a solicitar el Angulo como máximo cinco veces.

El calculo se realiza teniendo en cuenta la distancia al blanco en mas o menos 1 metro de distancia, para considerar que se ha acertado.

Se ha de tener en cuenta que para este programa se utilizan variables con una gran precisión decimal, y de hecho si no se teclean las variables que se solicitan con todos los decimales necesarios el programa no dirá que has acertado en el blanco, se deja a libre elección del usuario el redondear los datos de entrada y de salida para obtener un resultado mas claro aunque mas impreciso.



La solución de los ejercicios que se plantean es la siguiente:

/*
Un usuario de este nuestro/vuestro blog www.aprendoencasa.com nos ha
propuesto un ejercicio o práctica en la se ha de calcular utilizando
formulas correspondientes al tiro parabólico , se ha de solicitar la posición
en X e Y  del blanco al cual se quiere disparar, ha continuación se ha de
pedir la velocidad inicial de la bala de cañón y por ultimo se le permite
al usuario especificar hasta cinco ángulos de disparo, una vez solicitado
un Angulo se ha de comprobar si se ha hecho blanco en el mismo, en caso de
no ser así volver a solicitar el Angulo como máximo cinco veces.
Se ha de tener en cuenta que para este programa se utilizan variables
con una gran precisión decimal, y de hecho si no se teclean las variables
que se solicitan con todos los decimales necesarios el programa no dirá que
has acertado en el blanco, se deja a libre elección del usuario el
redondear los datos de entrada y de salida para obtener un resultado mas
claro aunque mas impreciso.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.1415926535897932384626433832795
int main(int argc, char *argv[])
{
    double Pos_X_Blanco;
    double Pos_Y_Blanco;
    double Velocidad;
    double Pos_X_Canyon;
    double Pos_Y_Canyon;
    double Angulo;
    double Radianes;
    int intentos;
    int acierto=0;
    double DistanciaY;
    double Gravedad=9.8;
    float RedondeoDistanciaY;
    float RedondeoPosY;
    // Definir variables de inicialización
    Pos_X_Canyon = 0.0;
    Pos_Y_Canyon = 0.0;
    printf("\nPosicion X del blanco.....: ");
    scanf(" %lf",&Pos_X_Blanco);
    printf("Posicion Y del blanco.....: ");
    scanf(" %lf",&Pos_Y_Blanco);
    printf("Velocidad Inicial.........: ");
    scanf(" %lf",&Velocidad);
    // realizar la petición de los intentos
    intentos=0;
    while(intentos<5 && acierto==0)
    {
       printf("Angulo......: ");
       scanf(" %lf",&Angulo);
       Radianes=(Angulo/180.0)*PI;
      // Calculo de la distancia Y
      //DistanciaY=(Velocidad*(sin(Radianes))*Tiempo)-((1/2)*Gravedad*(Tiempo*Tiempo));
      DistanciaY = tan(Radianes)*Pos_X_Blanco-((Gravedad*(Pos_X_Blanco*Pos_X_Blanco))/(2*(Velocidad*Velocidad)*cos(Radianes)*cos(Radianes)));
       // Si la distancia en Y coincide con la pos Y dada
       RedondeoDistanciaY=DistanciaY;
       RedondeoPosY=Pos_Y_Blanco;
       if ( RedondeoPosY+1>= RedondeoDistanciaY && RedondeoPosY-1<=RedondeoDistanciaY ) {
          printf("Has Acertado\n");
          acierto=1;
       }
       intentos++;
    }
  system("PAUSE");
  return 0;
}
/*
  Gracias por visitar www.aprendoencasa.com, recomiéndanos a tus amigos.
  de esta forma todos creceremos juntos en nuestro aprendizaje de este
  mundo fantástico de la informática.
*/

El resultado que muestra el ejercicio y práctica ha de ser similar al siguiente.

Gracias por vuestra visita y un saludo universal!!!