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?
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.
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.
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.
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.
Professor, também havia chegado a um problema similar ao mencionado pelo Lucas e Gilmar. Ainda estou um tanto quanto confuso com essa sua observação.
Abraços,
Roberto
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.
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.
Tudo bem, professor. Já corrigi o que estava errado.
E a fórmula está correta.
E a fórmula está correta.
Estou extremamente confuso com a parte que envolve vetores e cálculo de distâncias.
Me salvem.
Abraços.
Roberto
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
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
Valeu Gilmar, mas essa parte eu fiz.
Meu problema está mais relacionado com o manejo com vetores.
Abraços,
Roberto