PROGRAMACION EN C, TIRO PARABOLICO

En esta categoría podéis incluir todo lo que no cabe en el resto de foros de fitipaldis.com, nuestras idas de pelota y las vuestras, etc.
AGOBIADO

PROGRAMACION EN C, TIRO PARABOLICO

Post by AGOBIADO »

hola, tengo un problema con este programa, estoy intentando hacer un tiro parabolico con 3 casos y no me sale, me dijeron que era asi pero no tengo ni idea, si alguien pudiera ayudarme dejo aqui mi trabajo realizado hasta ahora:

#include <stdio.h>
#include <math.h>
#define PI 3.1416
main()
{
/*definimos todas las variables que vamos a necesitar*/
int contador =0; /*iniciamos la variable contador a 0 que llevara el recuento de intentos */
int x, menu;

/*todas estas variables las introducir  el usuario*/
float vo, vox, voy;
float gravedad;
float q, qgrados; /*q sera el angulo de tiro, es decir el angulo alfa*/
int xdiana;
float t; /*tiempo total en el que se desarrolla todo el tiro*/
do
{
printf(" \n JUEGO TIRA PIEDRAS \n1.- intro datos \n2.-calculo\n3.-finalizar\n Introduzca una opcion:_ ");scanf(" %d", &menu);

switch (menu)
{
case1:
printf ("introduzca la cte. de gravedad 9,8[m/s^2] : "); scanf (" %f", &gravedad);
printf ("introduzca a que distancia est  la diana [m] : "); scanf (" %d", &xdiana);
break;

case2:
printf ("\nIntroduzca el angulo alfa de lanzamiento [grados]: "); scanf (" %f", &qgrados);
q = (qgrados*PI)/180;
printf ("\nintroduzca la velocidad inicial [m/s] : "); scanf (" %F", &vo);
/*realizamos el lanzamiento*/
/*descomponemos vo en vox y voy*/

vox = (vo * (cos (q)));
voy = (vo * (sin (q)));

/*calculamos el tiempo de subida y lo multiplicamos por dos obteniendo asi el tiempo total del lanzamiento t*/
t= 2*(voy/gravedad);
/*calculamos el alcance*/
x= vox*t;

/*obtenemos la solucion*/
if (x==xdiana || x==(xdiana-1) || x==(xdiana+1))
{printf("FELICIDADES, lo has logrado en %d intentos", contador);contador=0;}

else if (x<xdiana-1)
{contador++;
printf("te has quedado corto por %d metros \n llevas %d fallos \n",xdiana-x, contador);}
else if (x>xdiana+1)
{contador++;
printf("te has pasado por %d metros \n llevas %d fallos \n ", x-xdiana, contador);}
else
contador=contador+1;}
getch();

}/*cerramos switch*/;/*como no elegimos salir, volvemos a imprimir menu y seguir jugando*/
break;

}while (menu!=3):
printf("ta luego rafa escribe su información");/*salimos del programa*/
getch();
}/*cerramos main*/






ayudarme si podeis. este mensaje podreis borrarlo mañana por la tarde, hora de mi examen , al que no me puedo presentar si no presento la practica, muchas gracias.
la_fitipaldi
fitipaldis.com #1
fitipaldis.com #1
Posts: 4626
Joined: 06 Jul 2004, 20:19
Location: donde quede alguna flor donde no haya policías

Post by la_fitipaldi »

Ni idea muchacho, yo el único tiro parabólico que conoci fue el de física.. :roll:
(aportación más que estúpida)
No es que esté lejos, es que estoy en una nube
¿Y si en vez de planear voláramos más alto?
Image
Eärendil..

Post by Eärendil.. »

Cuando tenga un ratin t lo miro ok? aunq no se muy bien de ke va eso del tiro parabolico pero vamos ke tienes ahi las formulitas asi ke si puedo te lo miro en breve ;)
Eärendil..

Post by Eärendil.. »

Otra cosita, tienes ke hacerlo todo en el main? es decir no haceis mas funciones ni nada??
agobiado

Post by agobiado »

Eso es lo que me ha dado una compañera de clase, yo no tengo ni idea de ese programa, el problema es que la compañera ya ha terminado los examenes i se ha ido a madrid y no encuentro a nadie a quien preguntarle.

Yo solo he copiado :oops: , no se hacer nada mas
El húsar

Post by El húsar »

#include <stdio.h>
#include <math.h>
#include <conio.h>
#define PI 3.1416
main()
{
/*definimos todas las variables que vamos a necesitar*/
int contador =0; /*iniciamos la variable contador a 0 que llevara el recuento de intentos */
int x, menu;

/*todas estas variables las introducir el usuario*/
float vo, vox, voy;
float gravedad;
float q, qgrados; /*q sera el angulo de tiro, es decir el angulo alfa*/
int xdiana;
float t; /*tiempo total en el que se desarrolla todo el tiro*/

do
{
printf(" \n JUEGO TIRA PIEDRAS \n1.- intro datos \n2.-calculo\n3.-finalizar\n Introduzca una opcion:_ ");scanf(" %d", &menu);
switch (menu)
{
case 1:
printf ("introduzca la cte. de gravedad 9,8[m/s^2] : "); scanf (" %f", &gravedad);
printf ("introduzca a que distancia est la diana [m] : "); scanf (" %d", &xdiana);
break;
case 2:
printf ("\nIntroduzca el angulo alfa de lanzamiento [grados]: "); scanf (" %f", &qgrados);
q = (qgrados*PI)/180;
printf ("\nintroduzca la velocidad inicial [m/s] : "); scanf (" %F", &vo);
/*realizamos el lanzamiento*/
/*descomponemos vo en vox y voy*/
vox = (vo * (cos (q)));
voy = (vo * (sin (q)));
/*calculamos el tiempo de subida y lo multiplicamos por dos obteniendo asi el tiempo total del lanzamiento t*/
t= 2*(voy/gravedad);
/*calculamos el alcance*/
x= vox*t;
/*obtenemos la solucion*/
if (x==xdiana || x==(xdiana-1) || x==(xdiana+1)) {
printf("FELICIDADES, lo has logrado en %d intentos", contador);
contador=0;
}
else if (x<xdiana-1) {
contador++;
printf("te has quedado corto por %d metros \n llevas %d fallos \n",xdiana-x, contador);
}
else if (x>xdiana+1) {
contador++;
printf("te has pasado por %d metros \n llevas %d fallos \n ", x-xdiana, contador);
}
else {
contador=contador+1;
getch();
}
}/*cerramos switch*/;/*como no elegimos salir, volvemos a imprimir menu y seguir jugando*/

} while (menu!=3);

printf("ta luego rafa escribe su información");/*salimos del programa*/
}/*cerramos main*/

-------------
ahi lo tienes, me he entretenido un poco XD
Eärendil..

Post by Eärendil.. »

agobiado wrote:Eso es lo que me ha dado una compañera de clase, yo no tengo ni idea de ese programa, el problema es que la compañera ya ha terminado los examenes i se ha ido a madrid y no encuentro a nadie a quien preguntarle.

Yo solo he copiado :oops: , no se hacer nada mas
Mirandolo por encima y tal esta bastante mal, tiene varios errores, le faltan librerias para alguna de las funciones ke intenta usar, no se para ke muy bien, ese programa no va correctamente mas ke nada porke en primer lugar esta mal estructurado estoy viendo si puedo arreglartelo xo asi no vas a entenderlo, a ver si puedo acabarlo bien.. uyo es ke cambiaria muchas cosas xo vamos ke si te meto todo en el main como esta en unos minutillos intentare colgarte algo decente ;)
Eärendil..

Post by Eärendil.. »

#include <stdio.h>
#include <conio.h>
#include <math.h>
#define PI 3.1416

main(){
int menu,xdiana,contador=0;
float x,vo, vox, voy,gravedad,q, qgrados,t;

do{
printf("\nJUEGO TIRA PIEDRAS"
"\n1.- intro datos"
"\n2.-calculo"
"\n3.-finalizar"
"\n Introduzca una opcion:_ ");
fflush(stdin);
scanf(" %d",&menu);

switch (menu){
case 1: printf ("introduzca la cte. de gravedad 9,8[m/s^2] : ");
fflush(stdin);
scanf (" %f", &gravedad);
printf ("introduzca a que distancia est la diana [m] : ");
fflush(stdin);
scanf (" %d", &xdiana);
break;

case 2: printf ("\nIntroduzca el angulo alfa de lanzamiento [grados]: ");
fflush(stdin);
scanf (" %f", &qgrados);
q = (qgrados*PI)/180;
printf ("\nintroduzca la velocidad inicial [m/s] : ");
fflush(stdin);
scanf (" %F", &vo);

vox = (vo * (cos (q)));
voy = (vo * (sin (q)));
t= 2*(voy/gravedad);
x= vox*t;

if (x==xdiana || x==(xdiana-1) || x==(xdiana+1)){
printf("FELICIDADES, lo has logrado en %d intentos", contador);
contador=0;
}
else if (x<xdiana-1){
contador++;
printf("te has quedado corto por %d metros \n llevas %d fallos \n",xdiana-x, contador);
}
else if (x>xdiana+1){
contador++;
printf("te has pasado por %d metros \n llevas %d fallos \n ", x-xdiana, contador);
}
else{
contador=contador+1;
}
getch();
break;
default: break;
}/*cierre switch*/



}while (menu!=3);
printf("ta luego rafa escribe su información");/*salimos del programa*/
getch();
}

Una cosa, no comprobais ke pasais por la opcion 2 despues de meter algo en la uno ni nada? weno ese furrula al menos e imagino ke el del husar tb ;) ke no lo habia visto jeje
Eärendil..

Post by Eärendil.. »

Eärendil.. wrote: /*librerias para poder usar funciones*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

/*defines constantes*/
#define PI 3.1416


main(){
/*defines e inicializas variables (he puesto las de cada tipo juntas para ahorrar lineas, esto da lo mismo..)*/
int menu,xdiana,contador=0;
float x,vo, vox, voy,gravedad,q, qgrados,t;

do{
/*Esto es un menu, sin mas*/
printf("\nJUEGO TIRA PIEDRAS"
"\n1.- intro datos"
"\n2.-calculo"
"\n3.-finalizar"
"\n Introduzca una opcion:_ ");
/*limpias el buffer*/
fflush(stdin);
/*recoges la opcion ke introduzcas por teclado*/
scanf(" %d",&menu);

/*casos posibles para la variable menu*/
switch (menu){
case 1: printf ("introduzca la cte. de gravedad 9,8[m/s^2] : ");
fflush(stdin);
scanf (" %f", &gravedad);
printf ("introduzca a que distancia est la diana [m] : ");
fflush(stdin);
scanf (" %d", &xdiana);
break;

case 2: printf ("\nIntroduzca el angulo alfa de lanzamiento [grados]: ");
fflush(stdin);
scanf (" %f", &qgrados);
q = (qgrados*PI)/180;
printf ("\nintroduzca la velocidad inicial [m/s] : ");
fflush(stdin);
scanf (" %F", &vo);

vox = (vo * (cos (q)));
voy = (vo * (sin (q)));
t= 2*(voy/gravedad);
x= vox*t;

if (x==xdiana || x==(xdiana-1) || x==(xdiana+1)){
printf("FELICIDADES, lo has logrado en %d intentos", contador);
contador=0;
}
else if (x<xdiana-1){
contador++;
printf("te has quedado corto por %d metros \n llevas %d fallos \n",xdiana-x, contador);
}
else if (x>xdiana+1){
contador++;
printf("te has pasado por %d metros \n llevas %d fallos \n ", x-xdiana, contador);
}
else{
contador=contador+1;
}
getch();
break;
default: break;
}/*cierre switch*/



}while (menu!=3);
printf("ta luego rafa escribe su información");/*salimos del programa*/
getch();
}

Una cosa, no comprobais ke pasais por la opcion 2 despues de meter algo en la uno ni nada? weno ese furrula al menos e imagino ke el del husar tb ;) ke no lo habia visto jeje
lo explico un poco por encima xa ke te puedas enterar de algo ;)
agobiado

Post by agobiado »

gracias earendil, pero una cosa, al compilar ahora me pone que me hepasado por 0 metros :? y con solo un intento me pone que he fallado 1768549034 veces....me parece una locura ¿no?
Guest

Post by Guest »

agobiado wrote:gracias earendil, pero una cosa, al compilar ahora me pone que me hepasado por 0 metros :? y con solo un intento me pone que he fallado 1768549034 veces....me parece una locura ¿no?
oks vo ya revisarlo, si eso esta mal jeje es ke los calculos ke haces ni los he mirado xq no se cm va la practica en si.. a ver..
Eärendil..

Post by Eärendil.. »

/*librerias para poder usar funciones*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

/*defines constantes*/
#define PI 3.1416


main(){
/*defines e inicializas variables (he puesto las de cada tipo juntas para ahorrar lineas, esto da lo mismo..)*/
int menu,xdiana,contador=0;
float x,vo, vox, voy,gravedad,q, qgrados,t;

do{
/*Esto es un menu, sin mas*/
printf("\nJUEGO TIRA PIEDRAS"
"\n1.- intro datos"
"\n2.-calculo"
"\n3.-finalizar"
"\n Introduzca una opcion:_ ");
/*limpias el buffer*/
fflush(stdin);
/*recoges la opcion ke introduzcas por teclado*/
scanf(" %d",&menu);

/*casos posibles para la variable menu*/
switch (menu){
case 1: printf ("introduzca la cte. de gravedad 9,8[m/s^2] : ");
fflush(stdin);
scanf (" %f", &gravedad);
printf ("introduzca a que distancia est la diana [m] : ");
fflush(stdin);
scanf (" %d", &xdiana);
break;

case 2: printf ("\nIntroduzca el angulo alfa de lanzamiento [grados]: ");
fflush(stdin);
scanf (" %f", &qgrados);
q = (qgrados*PI)/180;
printf ("\nintroduzca la velocidad inicial [m/s] : ");
fflush(stdin);
scanf (" %f", &vo);

vox = (vo * (cos (q)));
voy = (vo * (sin (q)));
t= 2*(voy/gravedad);
x= vox*t;

if (x==xdiana || x==(xdiana-1) || x==(xdiana+1)){
printf("FELICIDADES, lo has logrado en %d intentos", contador);
contador=0;
}
else if (x<xdiana-1){
contador++;
printf("te has quedado corto por %f metros \n llevas %d fallos \n",xdiana-x, contador);
}
else if (x>xdiana+1){
contador++;
printf("te has pasado por %f metros \n llevas %d fallos \n ", x-xdiana, contador);
}
else{
contador=contador+1;
}
getch();
break;
default: break;
}/*cierre switch*/



}while (menu!=3);
printf("ta luego rafa escribe su información");/*salimos del programa*/
getch();

return 0;
}


--> ahora esta bien siempre ke ejecutes primero el 1 y logo el dos ke es lo ke tiene sentido, yo creo ke deberias comprobar ke pasas primero por el punto 1 xo weno, la practica si es asi.. en fin.. ahora ya va pruebala y pregunta si keres jeje
ahora menos agobiau

Post by ahora menos agobiau »

muchisimas gracias Eärendil, te debo una, ¿que te parece si te invito a un vasito de gazpacho? :wink:

de verdad, te estoy muy agradecido, asi almenos me puedo presentar al examen, un saludo
Eärendil..

Post by Eärendil.. »

ahora menos agobiau wrote:muchisimas gracias Eärendil, te debo una, ¿que te parece si te invito a un vasito de gazpacho? :wink:

de verdad, te estoy muy agradecido, asi almenos me puedo presentar al examen, un saludo
jajaj de nada, de hecho yo cambiaria muchas cosas de la practica xo weno, desde la base ke tenias asi es como deberia kedar mas o menos siguiendo eso ;)

tu examen es de programacion no? hay algo ke no entiendo, solo tienes ke presentar la practica? puff es ke si no tienes ni idea y solo la presentas weno te la kitas y a otra cosa xo si te mandan programar como lo haras? es solo curiosidad de verdad :oops:

lo del gazpacho no hace falta, don't worry y suerte!
Guest

Post by Guest »

Buff yo he estado dando esto de la programacion c este año, y es odioso, mas te valdria tener algo de idea... pq yo programas como esos que poneis, na de na, y eso que lo entiendo algo.
Post Reply