Ir ao conteúdo
  • Cadastre-se
MatheusINF

C Transformar octal em decimal

Recommended Posts

#include <stdio.h>
int main(){
int octal,i,decimal,n;

printf("Digite  o valor em octal: ");
scanf("%i",&octal);

n=0;

for(i=0; i<n; i++){
    decimal=octal*n;
}

printf("O valor em decimal eh: %i",decimal);
}

Bom galera eu preciso fazer um exercicio que transforma octal em decimal, eu até consigo quando tem apenas 1 digito o octal porém e quando ele possui mais de um? Como eu faço o algoritmo ler o numero todo algarismo por algarismo?  *(depois preciso elevar cada algarismo por n+1 mas isso sei fazer)*, o problema é que precisa ser feito da direita pra esquerda, alguém pode ajudar ae :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você digitar um número octal o scanf já vai fazer a conversão, por padrão números octais são identificados colocando um 0 a esquerda do número. Ou seja:

 

020octal  =  10decimal

 

Teste esse código digitando o número 020:

#include <stdio.h>

int main()
{
    int n;
    
    printf("Digite um número: ");
    scanf("%i", &n);
    printf("Octal: %o\nDecimal: %d", n, n);

    return 0;
}

O especificador %i no scanf aceita qualquer formato válido de número inteiro, seja decimal, octal ( 0ddd ), hexadecimal (0xddd).

 

O especificador %o no printf imprime o número na base octal, e %d imprime na base decimal.

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, MatheusINF disse:

LOL cara é muito fácil e eu me matando pra fazer de outro modo

Ás vezes esse é o objetivo do problema que tem por meta não a solução e sim o procedimento, o que estou querendo dizer é que a intenção é avaliar dada a necessidade e sentido, cabendo realmente implementar do conceito até a resolução. "Reinventar a roda" como dizem. Ainda existe pelo menos mais um outro modo a conhecer; essa é também uma outra questão, mas não deveria, pois possivelmente traria / traz um pouquinho mais de benefício porque envolve outros fatores, enfim ...

 

 

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick Eu fiz ele assim porém quando resultado do decimal ou do próprio octal é 8 ou 9 ele entra em loop infinito, mesmo eu colocando um if(n==8 || n==9); break; , porém estou tentando com outros comandos de repetição.

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, MatheusINF disse:

@isrnick Eu fiz ele assim porém quando resultado do decimal ou do próprio octal é 8 ou 9 ele entra em loop infinito, mesmo eu colocando um if(n==8 || n==9); break; , porém estou tentando com outros comandos de repetição.

 

Não entendi o que você quis dizer, mas na base octal não existe 8 ou 9, pois cada dígito só vai de 0 a 7, e os números decimais 8 e 9 na base octal viram 10 e 11 respectivamente.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick É que tipo no exercicio pede pra transformar octal em decimal, porém como fazer pra caso a pessoa digite 8, não executar nada?, pois no caso não é só um número pra transformar é uma sequencia N de elementos :/

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, MatheusINF disse:

@isrnick É que tipo no exercicio pede pra transformar octal em decimal, porém como fazer pra caso a pessoa digite 8, não executar nada?, pois no caso não é só um número pra transformar é uma sequencia N de elementos :/

 

Ainda não entendi... Não tem 8 em octal, então se o usuário digitar 8 deveria ser entendido como um erro de entrada, se quiser tratar a possibilidade do usuário digitar algo inválido terá que fazer algo para detectar a entrada inválida e lidar com o erro...

 

Posta o código que você está tendo problemas, e que números está testando, talvez assim fique mais claro o que você está dizendo. (Se está entrando em loop após ler dados com o scanf imagino que seja apenas uma questão de limpar o lixo que ficar no buffer de entrada padrão.)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

adicionado 13 minutos depois

@isrnick Aê mnw até consegui com apenas um número porém se coloco esse algoritmo em algum ciclo de repetição e digito 8 ou 9 ele buga tmb :/

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int n,decimal;

    printf("------------------------------------\n");
    printf("         OCTAIS PARA DECIMAIS\n");
    printf("------------------------------------\n");


    printf("\n\nDigite um numero: ");
    scanf("%o", &n);
    printf("Octal: %o",n);

    decimal=n;

    printf("\nDecimal: %d\n\n",decimal);


    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, MatheusINF disse:

e digito 8 ou 9 ele buga tmb :/

Como falei 8 e 9 não são octais válidos.

 

4 horas atrás, MatheusINF disse:

Aê mnw até consegui com apenas um número porém se coloco esse algoritmo em algum ciclo de repetição

 

Tenta colocar esse em um ciclo de repetição:

 

#include <stdio.h>
#include <stdlib.h>

void limpa_stdin(){
    int c;
    while( (c=getchar()) != '\n' && c != EOF );
}

int main()
{
    int n,decimal;

    printf("------------------------------------\n");
    printf("         OCTAIS PARA DECIMAIS\n");
    printf("------------------------------------\n");


    printf("\n\nDigite um numero: ");
    scanf("%o", &n);
    limpa_stdin();
    printf("Octal: %o",n);

    decimal=n;

    printf("\nDecimal: %d\n\n",decimal);


    return 0;
}

Só adicionei uma chamada a uma função para limpar o stdin após o scanf.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×