Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucasseribeiro

A IDE diz que o código está certo, mas que o projeto contém erro(s)...

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está dando core dumped porque você está dividindo por zero (y):

 for(y = 0; y <= max; y++){
        g = x/(y^(1/y));
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

#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! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.