PROGRAMACION EN C, TIRO PARABOLICO
PROGRAMACION EN C, TIRO PARABOLICO
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.
#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.
-
- fitipaldis.com #1
- Posts: 4626
- Joined: 06 Jul 2004, 20:19
- Location: donde quede alguna flor donde no haya policías
#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
#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
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 decenteagobiado 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 , no se hacer nada mas
#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
#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
lo explico un poco por encima xa ke te puedas enterar de algoEä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
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..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?
/*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
#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
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 esoahora menos agobiau wrote:muchisimas gracias Eärendil, te debo una, ¿que te parece si te invito a un vasito de gazpacho?
de verdad, te estoy muy agradecido, asi almenos me puedo presentar al examen, un saludo
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
lo del gazpacho no hace falta, don't worry y suerte!