Jump to content

Erro no programa


Recommended Posts

Posted

boa noite, deram-me o seguinte enunciado para eu fazer o programa em c, em seguida eu coloco o meu código.

o problema, é que ele não está a funcionar corretamente e não consigo descobrir o porque

agradecia a vossa ajuda

"Pretende-se construir um programa em C que implemente um jogo do tipo tiro ao alvo. O objetivo é acertar num barco que se encontra a uma distância dist de um precipício. Para o efeito existe um canhão, situado a uma altura h, que dispara uma bala com uma velocidade inicial v0 e uma inclinação a. Nestas condições sabe-se que a distância horizontal, d, percorrida pela bala é dada por:

d = (v0x/g) . (v0y + sqrt(v0y2 + 2 g h))

sendo g = 9,81 a aceleração da gravidade e v0x = v0.cos(a) e v0y = v0.sin(a) as componentes horizontais e verticais da velocidade inicial, respectivamente. O utilizador disporá de um conjunto de tentativas para acertar no alvo, devendo definir, em cada tentativa, o ângulo do canhão. Considera-se que a bala atingiu o alvo se |d – dist| ≤ tolerância. Outros dados do problema:

  • dist: a ser inicializada aleatoriamente no intervalo [10..20]
  • constantes: h = 20, v0 = 10, tolerância = 0.4, número máximo de tentativas = 10
  • ângulo do canhão: a pedir ao utilizador

O programa deve indicar em cada iteração o local onde a bala caiu, bem como se a mesma ultrapassou ou não chegou ao alvo.

No final, devem ser indicadas quantas tentativas foram necessárias para acertar ou, caso contrário, deve ser dito que o utilizador não foi capaz de acertar."

#include
#include
#include

int main()
{
 int h=20,dist,v=10,tol=0.4,tent=10,i=1,alpha;
 float g=9.81,vx,vy,jogada;
 srand(time(NULL));
 dist = rand() % 11+10;

 do{
   printf("\nInsira o angulo(radianos):");
   scanf("%d",α);

   vx=v*cos(alpha);
   vy=v*sin(alpha);
   jogada=(vx/g)*(vy+(pow(pow(vy,2)+2*g*h,0.5)));
   if(jogada>=dist-0.4 && jogada<=dist+0.4)
     printf("Acertou no alvo!\nForam precisas %d tentativas",i);

   else if(jogada>=dist+0.4)
     printf("A bala passou o alvo\nCaiu a uma distancia de %d metros",jogada);

   else if(jogada<=dist-0.4)
     printf("A bala caiu antes do alvo\nCaiu a uma distancia de %d metros",jogada);
   i=i+1;


 }while(i<=10 || (jogada>=(dist-0.4) && jogada<=dist+(0.4)));
}
Posted

estas são as mensagens do compilador quando compilei o teu código :

src/hhh_main.c:1:10: error: #include expects "FILENAME" or <FILENAME>
src/hhh_main.c:2:10: error: #include expects "FILENAME" or <FILENAME>
src/hhh_main.c:3:10: error: #include expects "FILENAME" or <FILENAME>
src/hhh_main.c: In function ‘main’:
src/hhh_main.c:9:1: warning: implicit declaration of function ‘srand’ [-Wimplicit-function-declaration]
src/hhh_main.c:9:1: warning: implicit declaration of function ‘time’ [-Wimplicit-function-declaration]
src/hhh_main.c:9:12: error: ‘NULL’ undeclared (first use in this function)
src/hhh_main.c:9:12: note: each undeclared identifier is reported only once for each function it appears in
src/hhh_main.c:10:1: warning: implicit declaration of function ‘rand’ [-Wimplicit-function-declaration]
src/hhh_main.c:13:1: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
src/hhh_main.c:13:1: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
src/hhh_main.c:14:1: warning: implicit declaration of function ‘scanf’ [-Wimplicit-function-declaration]
src/hhh_main.c:14:1: warning: incompatible implicit declaration of built-in function ‘scanf’ [enabled by default]
src/hhh_main.c:16:1: warning: implicit declaration of function ‘cos’ [-Wimplicit-function-declaration]
src/hhh_main.c:16:6: warning: incompatible implicit declaration of built-in function ‘cos’ [enabled by default]
src/hhh_main.c:17:1: warning: implicit declaration of function ‘sin’ [-Wimplicit-function-declaration]
src/hhh_main.c:17:6: warning: incompatible implicit declaration of built-in function ‘sin’ [enabled by default]
src/hhh_main.c:18:1: warning: implicit declaration of function ‘pow’ [-Wimplicit-function-declaration]
src/hhh_main.c:18:20: warning: incompatible implicit declaration of built-in function ‘pow’ [enabled by default]
src/hhh_main.c:23:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat]
src/hhh_main.c:26:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat]
src/hhh_main.c:7:28: warning: unused variable ‘tent’ [-Wunused-variable]
src/hhh_main.c:7:20: warning: unused variable ‘tol’ [-Wunused-variable]
src/hhh_main.c:31:1: warning: control reaches end of non-void function [-Wreturn-type]

se achas que isso é aceitável, acho que estar a ir pelo caminho erraado ...

IRC : sim, é algo que ainda existe >> #p@p
Posted

#include
#include
#include

int main()
{
 int h=20,dist,v=10,tol=0.4,tent=10,i=1,alpha;
 float g=9.81,vx,vy,jogada;
 srand(time(NULL));
 dist = rand() % 11+10;

 do{
printf("\nInsira o angulo(radianos):");
scanf("%d",&alpha);

vx=v*cos(alpha);
vy=v*sin(alpha);
jogada=(vx/g)*(vy+(pow(pow(vy,2)+2*g*h,0.5)));
if(jogada>=dist-0.4 && jogada<=dist+0.4)
  printf("Acertou no alvo!\nForam precisas %d tentativas",i);

else if(jogada>=dist+0.4)
  printf("A bala passou o alvo\nCaiu a uma distancia de %d metros",jogada);

else if(jogada<=dist-0.4)
  printf("A bala caiu antes do alvo\nCaiu a uma distancia de %d metros",jogada);
i=i+1;


 }while(i<=10 || (jogada>=(dist-0.4) && jogada<=dist+(0.4)));
}

Olha para os tipos das variáveis que estás a usar.

A distância é suposto ser um inteiro? (Até podia ser, mas não me parece grande opção.)

A velocidade é suposto ser um inteiro? (Até podia ser, mas não me parece grande opção.)

0.4 é um inteiro? 🙂

O ângulo é suposto ser um inteiro? (Tendo em conta que estás a pedir um ângulo em radianos, é muito má opção.)

Aquilo que te sugiro é mudares todas as variáveis referentes a medidas de grandezas físicas para double (neste caso não há razão para usares float em vez de double).

Diria que apenas o i e o tent é que é suposto serem inteiros.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.