Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, pessoal,
a questão é a seguinte, eu uso Eclipse Kepler em plataforma Xubuntu, e estava tentando criar um código que calculasse
g(x,y) = x/y^(1/y)
(dá sempre 2 vírgula alguma coisa). Então, o Eclipse não reclama do código, mas diz que tem um erro no projeto...
Já olhei nos logs do compilador, parece que ele quer acabar com a minha graça.
Fiz uma main() e a função g(x,y) separada sendo chamada na função main. Ficou assim:
int main(void){
g(3,10); // especificação para uso
int g(int x,int max){
int y = 0;
double g = 0;
for(y = 0; y <= max; y++){
g = x/(y^(1/y));
printf("%e\n",g);
}
return(g);
}
Alguém pode me ajudar fazendo favor?
Agradecido
Lucas Ribeiro
Então,
a IDE mostra a mensagem: "Errors exist in a required project. Continue launch?"
Se eu clico em "sim", nada acontece. Entretanto, não aparece nenhum daqueles sinais de erro na sintaxe do código.
Nem aparece aqueles sinais de aviso no ícone do projeto, na lista de projetos do eclipse, dizendo que tem um erro nas configurações do projeto. Não sei onde procurar esse erro.
E o log do compilador mostra o comando usado pelo sistema é esse:
01:51:24 ** Incremental Build of configuration Debug for project Projeto **
make all
Building file: ../src/index.c
Invoking: Cross GCC Compiler
gcc -I/usr/include -I/usr/include/c++/4.8.1 -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP
-MF"src/index.d" -MT"src/index.d" -o "src/index.o" "../src/index.c"
Finished building: ../src/index.c
Building target: libProjeto
Invoking: Cross GCC Linker
gcc -shared -o "libProjeto" ./src/index.o
Finished building target: libProjeto
01:51:25 Build Finished (took 110ms)
Como eu adicionaria essa opção -lm no projeto? Não sei se você(s) já se focou(aram) em entender o eclipse, mas na lista onde aparecem as opções não tem botão para adicionar.
Valeu
>
g = x/(y^(1/y));
Só p/ constar: vc tem noção de que ^ é um operador bitwise (XOR) e não um operador de potenciação,certo?
Dá pra disponibilizar o projeto completo num Github p/ baixar?
É verdade!! Usa em portugol tbm!
Ixi! Será que a função pow() funciona com fração no segundo parâmetro?
Sabe como calcular raiz de qualquer índice? E variável no denominador dá certo?
Até posso colocar no github, mas esse é o único código do projeto, porque também estou fazendo atividades da faculdade e armazeno as respostas na forma de funções. Peraí, que já já eu tô pondo no github...
*Acabei de executar "gcc index.c -o index -lm" no terminal e ele respondeu "Exceção de ponto flutuante (imagem do núcleo gravada)"...
Valeu!
Nossa, passou desapercebido por mim também. Não me toquei no bitwise.
Bem, pode usar a função pow() para isso, sim. Ela permite retorno em float.
g = x / pow(y, 1 / y);
Sobre resolver raízes diretamente, usando função, em índices diferentes de 2 e/ou 3, desconheço.
sqrt() -> Raíz quadrada
cbrt() -> Raíz cúbica
Att.
Gente, matemática, expoentes fracionais... x2/3 == raiz cúbica de x2.
Se eu precisar calcular a raiz sétima de um determinado número, é só usar pow(x, 1/7)
Ok, to sabendo... Mas porque a mensagem de erro 'no projeto', mesmo com o código certo?
Eu pus "gcc index.c -o index -lm" e o gcc falou: Exceção de ponto flutuante (imagem do núcleo gravada).
Quanto ao github, eu tenho de conhecer melhor, abri uma conta há um tempo mas acabei por nem usar...
Valeu por lembrar
Em breve eu posto, valeu
Está dando core dumped porque você está dividindo por zero (y):
for(y = 0; y <= max; y++){
g = x/(y^(1/y));
}Pessoal, mudança de planos, acho que vou excluir o projeto e criar outro, devo ter bagunçado com o mecanismo do projeto no eclipse.
Eu poderia postar o código no gists do github, tipo o pastebin fedora.
Valeu, posto os resultados
>
Está dando core dumped porque você está dividindo por zero (y)
É verdade. Caraca! Já sei, é síndrome do w3c, quando volta a mexer com C de novo parece a primeira vez
#include <math.h>
#define drrt(base, exp) pow(base, (float) 1 / exp) / drrt() -> Direct Root /
valor = drrt(x, y);
Função macro para calcular qualquer raiz. Resolvido! :)
Ixi! Foi isso não...
Eu inicializei y = 1, e o do for também: mesma mensagem, no terminal e no eclipse.
int y = 1;
for(y = 1; y <= max; y++);
?? Mudança de plano, de novo...Fui testar seu código na prática e acabei achando o erro.
Você não está fechando a função "main()", então o compilador acaba achando que existe uma função dentro de outra (sim, isso é permitido) e também sem finalizador de função "}".
Segue o código:
float g(int x,int max)
{
int y = 0;
double g = 0;
for(y = 1; y <= max; y++)
{
g = x / pow( y,(float) 1 / y );
printf("%0.4e\n",g);
}
return(g);
}
int main(void)
{
g(3,10); // especificação para uso
return 0;
}
PS: A função "g()" precisa ser declara inteira ou apenas o escopo, antes de ser chamada pela função dependente (no caso, "main()"). O compilador faz a leitura de maneira sequencial, para referenciar as chamadas de funções, portanto, se ele encontrar a chamada sem que tenha encontrada a função da mesma antes, pode ocorrer erros (depende do compilador).
Att.
ScreenBlack,
é bom ler um pouco o que já sabemos, que às vezes a gente deixa escapar alguma coisa... Lembra do circunflexo? kkk. Mas eu gostaria de te mostrar o código na íntegra, pois a falta da chave "}" foi vacilo meu só aqui no fórum mesmo.
Dá uma olhada na url: https://gist.github.com/lucasseribeiro/3cf230329f56e98788d7
O código do github está com variável diferente na função "g()".
Antes tinha a variável "g" e agora virou "fg", porém, não foi trocada em todos os lugares:
float g(int x,int max);
float g(int x,int max)
{
int y = 1;
float fg = 0;
for(y = 1; y <= max; y++)
{
fg = (float) x / pow(y, (float) 1 / y);
printf("%e\n",fg);
}
return fg;
}
Também troquei todos os tipos "double" por "float", para poder manter a máscara "%f" na função "printf()".
Depois disso, a compilação finalizou sem avisos e o programa rodou corretamente:
3.000000e+000
2.121320e+000
2.080084e+000
2.121320e+000
2.174339e+000
2.225509e+000
2.271920e+000
2.313316e+000
2.350143e+000
2.382985e+000
Process returned 0 (0x0) execution time : 0.497 s
Press any key to continue.
Engraçado, eu testei no terminal e funcionou. Já o eclipse fica fazendo frescura e num trabalha!
Valeu cara!
Não entendi direito sobre o que você se refere.
A IDE mostra que mensagem?
Logs do compilador, o que mostra?
PS: Está compilando com a flag "-lm" para math.h?
Att.