Ir ao conteúdo
  • Cadastre-se

C Bug após compilar código


Felipe_rp

Posts recomendados

Galera, estou começando a aprender programar, eu fui fazer um exercício da faculdade, ele compilou tudo certinho, mas percebi que quando coloco 5 elevado a 2, 3 ou 4 ele da o resultado correto - 1, por exemplo se coloco 5 elevado a 2, ele da o resultado 24, com outros valores que testei o resultado deu certinho. Pedi para dois amigos testarem o código e pra eles funcionou normal, alguem sabe como resolver isso?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL,"");

    int n, ex, resultado;
    printf("Digite um número\n");
    scanf("%d", &n);
    printf("Digite o expoente\n");
    scanf("%d", &ex);

    if (ex == 1) {
        resultado = n;
        printf("\n%d elevado à %d = %d\n", n,ex,n);
    }else if(ex == 0){
    resultado = 1;
    printf("\n O resultado de potenciação é 1\n");
    }else {
    resultado = pow(n,ex);
    printf("\n %d elevado à %d = %d\n", n,ex,resultado);
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@Felipe_rp Não entendi o porquê dessas estruturas condicionais.

pow(variável, expoente) já retorna 1 quando a variável for elevada a 0, e retorna a própria variável quando elevada a 1.

Fora isso, se o expoente for negativo, daí você tem um problema, porque as variáveis são do tipo inteiro, deveriam ser do tipo ponto flutuante.

32 minutos atrás, Felipe_rp disse:

por exemplo se coloco 5 elevado a 2, ele da o resultado 24

... 24?

image.png.8fb3a82af68009c859e657caf8d8c319.png

Link para o comentário
Compartilhar em outros sites

A função pow recebe parâmetros do tipo double e retorna um valor do tipo double, mas você está armazenando numa variável int, então ocorre uma conversão de double para int, e dependendo do valor retornado pela função um vai obter um valor diferente no int.

 

https://en.cppreference.com/w/c/numeric/math/pow

 

Por exemplo, digamos que o retorno foi algo próximo de 25 (pois existe uma margem de erro quando se calcula com números de ponto flutuate), como 24.9999995, a parte inteira desse número é 24 então se pegar só isso vai resultar em 24, mas se a conversão é feita arredondando para cima então obterá 25, então depende de como o compilador implementa essa conversão.

 

Então você tem 2 opções: Usar variáveis double ao invés de int, ou então fazer e usar sua própria função para calcular exponenciação de números inteiros.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...