Ir ao conteúdo

Posts recomendados

Postado

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;
}

 

Postado

@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

Postado

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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!