Dúvida EP2

Dúvida EP2

por Lucas Paiva -
Número de respostas: 8
Professor,

estou compilando aqui em casa o EP2, mas a linha
#define MAX_INT (unsigned)-1
não traz o maior inteiro sem o sinal. Está me devolvendo 0.
------------------
#define MAX_INT (unsigned)-1
srand(time(NULL));
phi=rand();
phi*=720./MAX_INT;
printf("%5.2f\n\n\n", phi);
------------------

Está imprimindo phi = 0.00 e, quando imprimo MAX_INT, imprime 0.00000.

O que há de errado?

Em resposta à Lucas Paiva

Re: Dúvida EP2

por Marco Dimas Gubitoso -
MAT_INT é um inteiro, o fato de você mostrar 0.00000 indica que você tentou imprimí-lo como float ou double. Se você não colocar o '.' no 720. (você colocou na mensagem) o resultado será zero mesmo.

No entanto, existe uma solução mais simples para o problema:

No começo do programa coloque

#include <limits.h>

Aí você pode usar a constante pré-definida "INT_MAX", que já tem o valor certo. Vou corrigir o programa que coloquei como exemplo.
Em resposta à Marco Dimas Gubitoso

Re: Dúvida EP2

por Gilmar Cintra da Silva -
Eu analisei o código e coloquei para rodar e vi que ele gera sim um número, mas está depois da terceira casa após a vírgula, por exemplo 0.004149, como você delimitou o numero da casas decimais o número não apareceu, tente mudar e colocar assim.

printf("%f", phi);

e seria bom colocar %lf ao invez de só %f, pois já tive problemas só colocando %f.

Espero ter ajuda.
Até logo =D.
Em resposta à Marco Dimas Gubitoso

Re: Dúvida EP2

por Lucas Paiva -
Olá professor.

Consegui solucionar o problema do sorteio, mas utilizei outro método, porque esse do INT_MAX não está fncionando aqui em casa. Pode ser devido às configurações do CodeBlocks ou até do meu computador.

Agora, quero expor outra situação. Eu chamo a função para identificar os satelites visíveis da posição phi e ela me retorna os tais satélites. O problema é que ela retorna satélites que estão longe uns dos outros. Por exemplo:
Digito 6000 para r (raio do planeta);
Digito 35000 para h (altura da órbita);
Utilizei um printf temporário para saber quais satélites foram guardados no vetor v. E os satélites foram 2, 3, 7, 8, 11, 12.

Conferi e simulei diversas vezes para saber se havia um erro na lógica ou na digitação da fórmula, mas não há. Imagino que o problema seja a própria fórmula cos(alphai-phi)*h>=r. Pode ser que o primeiro membro da inequação seja maior que r não apenas acima da linha horizontal, mas em outros pontos da circunferência.

Em resposta à Lucas Paiva

Re: Dúvida EP2

por Lucas Paiva -
Tudo bem, professor. Já corrigi o que estava errado.
E a fórmula está correta.
Em resposta à Lucas Paiva

Re: Dúvida EP2

por Roberto Bomgiovani Cazzari -

Estou extremamente confuso com a parte que envolve vetores e cálculo de distâncias.

Me salvem.

Abraços.

Roberto

Em resposta à Roberto Bomgiovani Cazzari

Re: Dúvida EP2

por Gilmar Cintra da Silva -
Para eu só faltou a comparação das distâncias, mas te dou uma dica:

x = sqrt(r*r + h*h - 2*r*h*cos(angulo));//Formula da lei dos cosenos.

Essa formula, já em C, calcula a distancia entre o objeto e o satélite.

Espero ter ajudado........

Até Log =D